<?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>43009</bug_id>
          
          <creation_ts>2010-07-26 15:18:29 -0700</creation_ts>
          <short_desc>Abstract out page allocation from executable allocators</short_desc>
          <delta_ts>2010-07-27 00:31:23 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>256274</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-26 15:18:29 -0700</bug_when>
    <thetext>It would be great to have a single platform abstraction for block allocation, rather than copy/paste code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256278</commentid>
    <comment_count>1</comment_count>
      <attachid>62619</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-26 15:23:36 -0700</bug_when>
    <thetext>Created attachment 62619
The patch

No perf impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256280</commentid>
    <comment_count>2</comment_count>
      <attachid>62619</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-26 15:25:01 -0700</bug_when>
    <thetext>Comment on attachment 62619
The patch

Ooop! not fixed allocation @ address yet!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256355</commentid>
    <comment_count>3</comment_count>
      <attachid>62632</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-26 17:42:30 -0700</bug_when>
    <thetext>Created attachment 62632
Tha&apos;s better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256356</commentid>
    <comment_count>4</comment_count>
      <attachid>62632</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-26 17:50:35 -0700</bug_when>
    <thetext>Comment on attachment 62632
Tha&apos;s better!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256423</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-07-27 00:31:23 -0700</bug_when>
    <thetext>Fixed in r64105-64108</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62619</attachid>
            <date>2010-07-26 15:23:36 -0700</date>
            <delta_ts>2010-07-26 17:42:30 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>pagealloc.3.patch</filename>
            <type>text/plain</type>
            <size>43714</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MDgwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDctMjYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0MzAwOSAtIEFic3RyYWN0IG91dCBwYWdl
IGFsbG9jYXRpb24gZnJvbSBleGVjdXRhYmxlIGFsbG9jYXRvcnMKKworICAgICAgICBJdCB3b3Vs
ZCBiZSBncmVhdCB0byBoYXZlIGEgc2luZ2xlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBibG9j
ayBhbGxvY2F0aW9uLCByYXRoZXIgdGhhbiBjb3B5L3Bhc3RlIGNvZGUuCisKKyAgICAgICAgSW4g
dGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uIEkndmUgbWFkZSBTeW1iaWFuIGZhbGwgYmFjayB0
byB1c2UgbWFsbG9jL2ZyZWUgZm9yIG5vbi1leGVjdXRhYmxlIG1lbW9yeS4KKyAgICAgICAgSSB0
aGluayB0aGlzIHdpbGwgbWF0Y2ggY3VycmVudCBiZWhhdmlvdXIgZm9yIHRoZSBuZXh0IGNsaWVu
dCB3ZSB3aWxsIHdhbnQgdG8gcG9ydCBhY3Jvc3MgKFJlZ2lzdGVyRmlsZSAmCisgICAgICAgIENv
bGxlY3RvcikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQ
YWdlU2l6ZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyk6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKToKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCk6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQ
b29sKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OnBvb2xBbGxvY2F0ZSk6CisgICAg
ICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChK
U0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKEpTQzo6Rml4ZWRW
TVBvb2xBbGxvY2F0b3I6OnJldXNlKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0
b3I6OkZpeGVkVk1Qb29sQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxv
Y2F0b3I6OmFsbG9jKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OmZyZWUp
OgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEFsbG9jYXRvcjo6aXNWYWxpZCk6CisgICAgICAg
IChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjppc1dpdGhpblZNUG9vbCk6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFi
bGVQb29sOjpzeXN0ZW1SZWxlYXNlKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
clBvc2l4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvclN5
bWJpYW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3c2NyaXB0OgorICAgICAgICAqIHd0Zi9QYWdlQWxs
b2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByb3RlY3Rpb24pOgorICAgICAgICAo
V1RGOjpQYWdlQWxsb2NhdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRp
b246OmRlY29tbWl0KToKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdG9yOjpyZXNlcnZlKToKKyAgICAgICAgKFdURjo6UGFn
ZUFsbG9jYXRvcjo6ZGVhbGxvY2F0ZSk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0b3I6OnBh
Z2VzaXplKToKKyAgICAgICAgKiB3dGYvUGFnZUFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6UGFnZUFsbG9jYXRpb246OlBhZ2VBbGxvY2F0aW9uKToKKyAgICAgICAgKFdURjo6UGFn
ZUFsbG9jYXRpb246OmJhc2UpOgorICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6c2l6ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjpjaHVuayk6CisgICAgICAgIChXVEY6OlBh
Z2VBbGxvY2F0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdG9yOjop
OgorCiAyMDA5LTEwLTMwICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0CShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNCBA
QAogTElTVChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yUG9zaXguY3BwCiAgICAgcnVudGltZS9NYXJrU3RhY2tQb3NpeC5jcHAKICkKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDYzNTk3KQorKysgSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNiwxMiArNTI2LDEwIEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogaWYgVEFSR0VUX1dJTjMyCiBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3Bw
IFwKLQlKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAgXAogCUph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcAogZWxzZQogamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAgXAotCUphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
UG9zaXguY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcAog
ZW5kaWYKIApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2MzU5
NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw4ICsxMTAsNiBAQAogICAgICAgICAgICAgJ2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCcsCiAgICAgICAgICAgICAnaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAnaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAnLAotICAgICAgICAg
ICAgJ2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwJywKLSAgICAgICAgICAgICdqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAnLAogICAgICAgICAgICAgJ2ppdC9KSVQuY3BwJywK
ICAgICAgICAgICAgICdqaXQvSklULmgnLAogICAgICAgICAgICAgJ2ppdC9KSVRBcml0aG1ldGlj
LmNwcCcsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA2MzU5NykK
KysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
OTQsOSArOTQsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAgXAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAgXAogICAgIGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKLSAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
clBvc2l4LmNwcCBcCi0gICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JTeW1iaWFuLmNwcCBcCi0g
ICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwIFwKICAgICBqaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGljLmNwcCBcCiAgICAgaml0L0pJVEFy
aXRobWV0aWMzMl82NC5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvd3NjcmlwdAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93c2NyaXB0CShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFT
Y3JpcHRDb3JlL3dzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAganNjb3Jl
X2V4Y2x1ZGVzLmV4dGVuZChnZXRfZXhjbHVkZXMoanNjbwogCiBpZiBidWlsZGluZ19vbl93aW4z
MjoKICAgICBqc2NvcmVfZXhjbHVkZXMgKz0gWydFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3Bw
JywgJ01hcmtTdGFja1Bvc2l4LmNwcCcsICdUaHJlYWRpbmdQdGhyZWFkcy5jcHAnXQotICAgIHNv
dXJjZXMgKz0gWydqaXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAnLCAncnVudGltZS9NYXJr
U3RhY2tXaW4uY3BwJ10KKyAgICBzb3VyY2VzICs9IFsncnVudGltZS9NYXJrU3RhY2tXaW4uY3Bw
J10KIGVsc2U6CiAgICAganNjb3JlX2V4Y2x1ZGVzLmFwcGVuZCgnSlNTdHJpbmdSZWZCU1RSLmNw
cCcpCiAgICAganNjb3JlX2V4Y2x1ZGVzLmV4dGVuZChnZXRfZXhjbHVkZXMoanNjb3JlX2Rpciwg
WycqV2luLmNwcCddKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvagkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQxLDEwICsxNjQxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JX
aW4uY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caml0XEpJVC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgs
OCBAQAogCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUx
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovOyB9OwogCQk4NjAx
NjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUyMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovOyB9OwogCQk4NjI2QkVDRjEx
OTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3Ry
aW5nU3RhdGljcy5jcHAgKi87IH07CisJCTg2MjdFNUVCMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdl
QWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2MjdFNUU5MTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdG9yLmNwcCAqLzsgfTsK
KwkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjdFNUVBMTFGMTI4MTkwMEEz
MTNCNSAvKiBQYWdlQWxsb2NhdG9yLmggKi87IH07CiAJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FB
NCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RBMDAy
OTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07CiAJCTg2NTY1NzQzMTE1QkUzREEwMDI5MUY0MCAv
KiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjU2NTc0MTExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMTIsNyArMzE0LDYgQEAKIAkJQTc2
QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUg
LyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgfTsKIAkJQTc2RUU2NTkwRkFFNTlENTAwM0YwNjlBIC8q
IE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc2RUU2NTgwRkFFNTlENTAwM0YwNjlBIC8qIE5hdGl2ZUZ1bmN0aW9u
V3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE3Nzk1NTkwMTAxQTc0RDUwMDExNEU1NSAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk1NThGMTAxQTc0RDUwMDExNEU1
NSAvKiBNYXJrU3RhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlBNzgyRjFBNTBFRUM5RkEyMDAzNjI3M0YgLyogRXhlY3V0YWJsZUFsbG9jYXRv
clBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3Bw
ICovOyB9OwogCQlBNzgzQTBEMTExQTM2RENBMDA1NjNEMjAgLyogSlNPYmplY3RXaXRoR2xvYmFs
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzgzQTBEMDExQTM2RENBMDA1NjNEMjAgLyogSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4M0EyQUIx
MUE1QkU4NDAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzgzQTJBQTExQTVCRTg0MDA1
NjNEMjAgLyogSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0LmNwcCAqLzsgfTsKIAkJQTc4NEEyNjEx
MUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWls
ZGVyLmggKi87IH07CkBAIC03NjcsNiArNzY4LDggQEAKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0
NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJG
QUIgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBTdHJpbmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2MjdFNUU5MTFGMTI4MTkwMEEzMTNCNSAvKiBQ
YWdlQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
Z2VBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjI3RTVFQTEx
RjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYWdlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTY1NzQwMTE1QkUzREEwMDI5MUY0MCAvKiBD
U3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTdHJpbmcu
Y3BwOyBwYXRoID0gdGV4dC9DU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODY1NjU3NDExMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ1N0cmluZy5oOyBwYXRoID0gdGV4dC9DU3RyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTIsNyArODE1LDYgQEAKIAkJODZEM0IyQzIxMDE1
NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2RDNCM0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NkRCNjQ1RjBGOTU0RTkxMDBEN0Q5MjEgLyogRXhlY3V0
YWJsZUFsbG9jYXRvcldpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFeGVjdXRhYmxlQWxsb2NhdG9yV2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZN
UG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE0LDcgKzkxNiw2IEBACiAJCUE3NkM1MTc0MTE4Mjc0
OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzZFRTY1ODBGQUU1OUQ1MDAzRjA2OUEgLyogTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5NTU4RjEwMUE3NEQ1MDAxMTRFNTUgLyogTWFy
a1N0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgyRjFBNDBFRUM5RkEyMDAzNjI3M0YgLyog
RXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3ODNBMEQwMTFBMzZEQ0EwMDU2M0QyMCAvKiBKU09iamVjdFdpdGhHbG9i
YWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODNBMkFBMTFB
NUJFODQwMDU2M0QyMCAvKiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5MUVGMjYwRjExRTA3OTAwQUUxRjY4IC8q
IEpTQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQnl0ZUFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUzLDggKzEyNTQsNiBAQAog
CQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAq
LywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
ICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwICovLAotCQkJCUE3ODJGMUE0MEVFQzlGQTIwMDM2MjczRiAvKiBFeGVj
dXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwICovLAotCQkJCTg2REI2NDVGMEY5NTRFOTEwMEQ3RDky
MSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yV2luLmNwcCAqLywKIAkJCQkxNDI5RDkyRDBFRDIyRDcw
MDBCODk2MTkgLyogSklULmNwcCAqLywKIAkJCQkxNDI5RDkyRTBFRDIyRDcwMDBCODk2MTkgLyog
SklULmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMu
Y3BwICovLApAQCAtMTQ0Niw2ICsxNDQ1LDggQEAKIAkJCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlF
RjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovLAogCQkJCTkzMDNGNTY3MDk5MTE4RkEwMEFENzFC
OCAvKiBPd25QdHIuaCAqLywKIAkJCQk0NDBCN0FFRDBGQUY3RkNCMDA3MzMyM0UgLyogT3duUHRy
Q29tbW9uLmggKi8sCisJCQkJODYyN0U1RTkxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0
b3IuY3BwICovLAorCQkJCTg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdG9y
LmggKi8sCiAJCQkJNDRERDQ4NTIwRkFFQTg1MDAwRDZCNEVCIC8qIFBhc3NPd25QdHIuaCAqLywK
IAkJCQk2NTgwRjc5NTA5NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCTY1
RDZEODdFMDlCNUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9ybS5oICovLApAQCAtMjE4Nyw2ICsyMTg4
LDcgQEAKIAkJCQk4NjhCRkExODExN0NGMTk5MDBCOTA4QjEgLyogV1RGU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkQwOEQ1NDExNzkzNjEzMDA2RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBh
Z2VBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQ5Niw3ICsyNDk4LDYgQEAKIAkJCQk4
NkNBMDMyRTEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODJGMUE1MEVF
QzlGQTIwMDM2MjczRiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRGOEJBM0UxMDdFQzg4NjAwOTg5MkRDIC8qIEZhc3RNYWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8q
IEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYyNyw2ICsyNjI4LDcg
QEAKIAkJCQlFMUVGNzlBQTBDRTk3QkE2MDA4OEQ1MDAgLyogVVRGOC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NjhCRkExNzExN0NGMTk5MDBCOTA4QjEgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RDA4RDUzMTE3OTM2MTMwMDZFNUVEMCAvKiBXVEZUaHJlYWREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTg2MjdFNUVCMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDQ4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNp
emUgPSAwOwogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwordm9p
ZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCit7CisjaWYgQ1BVKEFS
TVY1X09SX0xPV0VSKQorICAgIC8vIFRoZSBtb3ZpbmcgbWVtb3J5IG1vZGVsIChhcyB1c2VkIGlu
IEFSTXY1IGFuZCBlYXJsaWVyIHBsYXRmb3JtcykKKyAgICAvLyBvbiBTeW1iaWFuIE9TIGxpbWl0
cyB0aGUgbnVtYmVyIG9mIGNodW5rcyBmb3IgZWFjaCBwcm9jZXNzIHRvIDE2LiAKKyAgICAvLyBU
byBtaXRpZ2F0ZSB0aGlzIGxpbWl0YXRpb24gaW5jcmVhc2UgdGhlIHBhZ2VzaXplIHRvIGFsbG9j
YXRlCisgICAgLy8gZmV3ZXIsIGxhcmdlciBjaHVua3MuIFNldCB0aGUgcGFnZSBzaXplIHRvIDI1
NiBLYiB0byBjb21wZW5zYXRlCisgICAgLy8gZm9yIG1vdmluZyBtZW1vcnkgbW9kZWwgbGltaXRh
dGlvbgorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gMjU2ICogMTAyNDsKKyNl
bHNlCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBQYWdlQWxsb2NhdG9yOjpw
YWdlc2l6ZSgpOworI2VuZGlmCit9CisKK0V4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIEV4ZWN1
dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBQYWdlQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZSwgUGFnZUFsbG9jYXRv
cjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAg
aWYgKCFhbGxvY2F0aW9uKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBhbGxvY2F0aW9u
OworfQorCit2b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKGNvbnN0IEV4ZWN1dGFi
bGVQb29sOjpBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIFBhZ2VBbGxvY2F0b3I6OmRl
YWxsb2NhdGUoYWxsb2NhdGlvbik7Cit9CisKK2Jvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCisKKyNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTWU1C
SUFOKQorI2Vycm9yICJBU1NFTUJMRVJfV1hfRVhDTFVTSVZFIG5vdCB5ZXQgc3Vwb3J0ZWQgb24g
dGhpcyBwbGF0Zm9ybS4iCisjZW5kaWYKKwogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpyZXBy
b3RlY3RSZWdpb24odm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBQcm90ZWN0aW9uU2V0aW5nIHNl
dHRpbmcpCiB7CiAgICAgaWYgKCFwYWdlU2l6ZSkKQEAgLTUyLDkgKzkzLDExIEBAIHZvaWQgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6cmVwcm90ZWN0UmVnaW8KIAogICAgIG1wcm90ZWN0KHBhZ2VTdGFy
dCwgc2l6ZSwgKHNldHRpbmcgPT0gV3JpdGFibGUpID8gUFJPVEVDVElPTl9GTEFHU19SVyA6IFBS
T1RFQ1RJT05fRkxBR1NfUlgpOwogfQorCiAjZW5kaWYKIAogI2lmIENQVShBUk1fVFJBRElUSU9O
QUwpICYmIE9TKExJTlVYKSAmJiBDT01QSUxFUihSVkNUKQorCiBfX2FzbSB2b2lkIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUpCiB7CiAgICAg
QVJNCkBAIC02Nyw2ICsxMTAsNyBAQCBfX2FzbSB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNh
Y2hlRmx1CiAgICAgcG9wIHtyN30KICAgICBieCBscgogfQorCiAjZW5kaWYKIAogfQpJbmRleDog
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA2MzU5NykK
KysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gZm9yIHB0cmRpZmZf
dAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9QYWdlQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpA
QCAtNTgsOSArNTksOSBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSB2b2lkIENh
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAjZGVmaW5lIFBST1RFQ1RJT05f
RkxBR1NfUlcgKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCiAjZGVmaW5lIFBST1RFQ1RJT05fRkxB
R1NfUlggKFBST1RfUkVBRCB8IFBST1RfRVhFQykKLSNkZWZpbmUgSU5JVElBTF9QUk9URUNUSU9O
X0ZMQUdTIFBST1RFQ1RJT05fRkxBR1NfUlgKKyNkZWZpbmUgRVhFQ1VUQUJMRV9QT09MX1dSSVRB
QkxFIGZhbHNlCiAjZWxzZQotI2RlZmluZSBJTklUSUFMX1BST1RFQ1RJT05fRkxBR1MgKFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMpCisjZGVmaW5lIEVYRUNVVEFCTEVfUE9PTF9X
UklUQUJMRSB0cnVlCiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NSwxMyArODYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY3V0YWJsZVBvb2wgOiBwdWJsaWMgUmVmQ291
bnRlZDxFeGVjdXRhYmxlUG9vbD4gewogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQWxsb2NhdGlvbiB7
Ci0gICAgICAgIGNoYXIqIHBhZ2VzOwotICAgICAgICBzaXplX3Qgc2l6ZTsKLSNpZiBPUyhTWU1C
SUFOKQotICAgICAgICBSQ2h1bmsqIGNodW5rOwotI2VuZGlmCi0gICAgfTsKKyAgICB0eXBlZGVm
IFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247CiAgICAgdHlwZWRlZiBWZWN0b3I8QWxsb2NhdGlv
biwgMj4gQWxsb2NhdGlvbkxpc3Q7CiAKIHB1YmxpYzoKQEAgLTI5Niw3ICsyOTEsNyBAQCBpbmxp
bmUgRXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQb29sKHNpCiAgICAgc2l6ZV90IGFsbG9jU2l6
ZSA9IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBKSVRfQUxMT0NBVE9SX1BBR0VfU0laRSk7CiAg
ICAgQWxsb2NhdGlvbiBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwogICAgIG1fcG9vbHMu
YXBwZW5kKG1lbSk7Ci0gICAgbV9mcmVlUHRyID0gbWVtLnBhZ2VzOworICAgIG1fZnJlZVB0ciA9
IHN0YXRpY19jYXN0PGNoYXIqPihtZW0uYmFzZSgpKTsKICAgICBpZiAoIW1fZnJlZVB0cikKICAg
ICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFsbG9jYXRlCiAgICAgbV9lbmQgPSBtX2ZyZWVQ
dHIgKyBhbGxvY1NpemU7CkBAIC0zMDcsMTggKzMwMiwxOCBAQCBpbmxpbmUgdm9pZCogRXhlY3V0
YWJsZVBvb2w6OnBvb2xBbGxvY2F0CiAgICAgc2l6ZV90IGFsbG9jU2l6ZSA9IHJvdW5kVXBBbGxv
Y2F0aW9uU2l6ZShuLCBKSVRfQUxMT0NBVE9SX1BBR0VfU0laRSk7CiAgICAgCiAgICAgQWxsb2Nh
dGlvbiByZXN1bHQgPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghcmVzdWx0LnBh
Z2VzKQorICAgIGlmICghcmVzdWx0LmJhc2UoKSkKICAgICAgICAgQ1JBU0goKTsgLy8gRmFpbGVk
IHRvIGFsbG9jYXRlCiAgICAgCiAgICAgQVNTRVJUKG1fZW5kID49IG1fZnJlZVB0cik7CiAgICAg
aWYgKChhbGxvY1NpemUgLSBuKSA+IHN0YXRpY19jYXN0PHNpemVfdD4obV9lbmQgLSBtX2ZyZWVQ
dHIpKSB7CiAgICAgICAgIC8vIFJlcGxhY2UgYWxsb2NhdGlvbiBwb29sCi0gICAgICAgIG1fZnJl
ZVB0ciA9IHJlc3VsdC5wYWdlcyArIG47Ci0gICAgICAgIG1fZW5kID0gcmVzdWx0LnBhZ2VzICsg
YWxsb2NTaXplOworICAgICAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0
LmJhc2UoKSkgKyBuOworICAgICAgICBtX2VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihyZXN1bHQu
YmFzZSgpKSArIGFsbG9jU2l6ZTsKICAgICB9CiAKICAgICBtX3Bvb2xzLmFwcGVuZChyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQucGFnZXM7CisgICAgcmV0dXJuIHJlc3VsdC5iYXNlKCk7CiB9
CiAKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsMjkgKzEyNCwxNiBAQCBjbGFzcyBGaXhlZFZNUG9vbEFsbG9jYXRvcgogICAgIC8vIFRo
ZSBmcmVlIGxpc3QgaXMgc3RvcmVkIGluIGEgc29ydGVkIHRyZWUuCiAgICAgdHlwZWRlZiBBVkxU
cmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yRnJlZUxpc3QsIDQwPiBTaXplU29ydGVkRnJlZVRyZWU7
CiAKLSAgICAvLyBVc2UgbWFkdmlzZSBhcyBhcHJvcHJpYXRlIHRvIHByZXZlbnQgZnJlZWQgcGFn
ZXMgZnJvbSBiZWluZyBzcGlsbGVkLAotICAgIC8vIGFuZCB0byBhdHRlbXB0IHRvIGVuc3VyZSB0
aGF0IHVzZWQgbWVtb3J5IGlzIHJlcG9ydGVkIGNvcnJlY3RseS4KLSNpZiBIQVZFKE1BRFZfRlJF
RV9SRVVTRSkKICAgICB2b2lkIHJlbGVhc2Uodm9pZCogcG9zaXRpb24sIHNpemVfdCBzaXplKQog
ICAgIHsKLSAgICAgICAgd2hpbGUgKG1hZHZpc2UocG9zaXRpb24sIHNpemUsIE1BRFZfRlJFRV9S
RVVTQUJMRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KKyAgICAgICAgbV9hbGxvY2F0
aW9uLmRlY29tbWl0KHBvc2l0aW9uLCBzaXplKTsKICAgICB9CiAKICAgICB2b2lkIHJldXNlKHZv
aWQqIHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIHdoaWxlIChtYWR2aXNl
KHBvc2l0aW9uLCBzaXplLCBNQURWX0ZSRUVfUkVVU0UpID09IC0xICYmIGVycm5vID09IEVBR0FJ
TikgeyB9CisgICAgICAgIGJvb2wgb2theSA9IG1fYWxsb2NhdGlvbi5jb21taXQocG9zaXRpb24s
IHNpemUsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQob2theSwgb2theSk7CiAgICAgfQotI2VsaWYgSEFWRShNQURWX0RPTlRORUVEKQotICAg
IHZvaWQgcmVsZWFzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAg
ICB3aGlsZSAobWFkdmlzZShwb3NpdGlvbiwgc2l6ZSwgTUFEVl9ET05UTkVFRCkgPT0gLTEgJiYg
ZXJybm8gPT0gRUFHQUlOKSB7IH0KLSAgICB9Ci0KLSAgICB2b2lkIHJldXNlKHZvaWQqLCBzaXpl
X3QpIHt9Ci0jZWxzZQotICAgIHZvaWQgcmVsZWFzZSh2b2lkKiwgc2l6ZV90KSB7fQotICAgIHZv
aWQgcmV1c2Uodm9pZCosIHNpemVfdCkge30KLSNlbmRpZgogCiAgICAgLy8gQWxsIGFkZGl0aW9u
IHRvIHRoZSBmcmVlIGxpc3Qgc2hvdWxkIGdvIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0
aGFuCiAgICAgLy8gY2FsbGluZyBpbnNlcnQgZGlyZWN0bHksIHRvIGF2b2lkIG11bHRpcGxlIGVu
dHJpZXMgYmVnaW5nIGFkZGVkIHdpdGggdGhlCkBAIC0yODgsNyArMjc1LDYgQEAgcHVibGljOgog
ICAgIEZpeGVkVk1Qb29sQWxsb2NhdG9yKHNpemVfdCBjb21tb25TaXplLCBzaXplX3QgdG90YWxI
ZWFwU2l6ZSkKICAgICAgICAgOiBtX2NvbW1vblNpemUoY29tbW9uU2l6ZSkKICAgICAgICAgLCBt
X2NvdW50RnJlZWRTaW5jZUxhc3RDb2FsZXNjZSgwKQotICAgICAgICAsIG1fdG90YWxIZWFwU2l6
ZSh0b3RhbEhlYXBTaXplKQogICAgIHsKICAgICAgICAgLy8gQ29vayB1cCBhbiBhZGRyZXNzIHRv
IGFsbG9jYXRlIGF0LCB1c2luZyB0aGUgZm9sbG93aW5nIHJlY2lwZToKICAgICAgICAgLy8gICAx
NyBiaXRzIG9mIHplcm8sIHN0YXkgaW4gdXNlcnNwYWNlIGtpZHMuCkBAIC0zMDUsMTcgKzI5MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJhbmRvbUxvY2F0aW9uICs9ICgxIDw8IDI0KTsKICAgICAg
ICAgcmFuZG9tTG9jYXRpb24gPDw9IDIxOwogI2VuZGlmCi0gICAgICAgIG1fYmFzZSA9IG1tYXAo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmFuZG9tTG9jYXRpb24pLCBtX3RvdGFsSGVhcFNpemUs
IElOSVRJQUxfUFJPVEVDVElPTl9GTEFHUywgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgVk1fVEFH
X0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9SX01FTU9SWSwgMCk7CisvLyBGVUNLCisvLyAgICAgICAg
bV9hbGxvY2F0aW9uID0gbW1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihyYW5kb21Mb2NhdGlv
biksIHRvdGFsSGVhcFNpemUsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgTUFQX1BSSVZBVEUg
fCBNQVBfQU5PTiwgVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NBVE9SX01FTU9SWSwgMCk7Cisg
ICAgICAgIG1fYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0b3I6OnJlc2VydmUodG90YWxIZWFwU2l6
ZSwgUGFnZUFsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CiAKLSAgICAgICAgaWYgKG1fYmFzZSkgewotICAgICAgICAgICAgLy8gRm9yIHNp
bXBsaWNpdHksIHdlIGtlZXAgYWxsIG1lbW9yeSBpbiBtX2ZyZWVMaXN0IGluIGEgJ3JlbGVhc2Vk
JyBzdGF0ZS4KLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gc2ltcGx5IHJl
dXNlIGFsbCBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nLCB3aXRob3V0Ci0gICAgICAgICAgICAvLyB3
b3JyeWluZyBhYm91dCBpdCdzIHByZXZpb3VzIHN0YXRlLCBhbmQgYWxzbyBtYWtlcyBjb2FsZXNj
aW5nIG1fZnJlZUxpc3QKLSAgICAgICAgICAgIC8vIHNpbXBsZXIgc2luY2Ugd2UgbmVlZCBub3Qg
d29ycnkgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvYWxlc2NpbmcgcmVsZWFzZWQKLSAgICAg
ICAgICAgIC8vIGNodW5rcyB3aXRoIG5vbi1yZWxlYXNlZCBvbmVzLgotICAgICAgICAgICAgcmVs
ZWFzZShtX2Jhc2UsIG1fdG90YWxIZWFwU2l6ZSk7Ci0gICAgICAgICAgICBtX2ZyZWVMaXN0Lmlu
c2VydChuZXcgRnJlZUxpc3RFbnRyeShtX2Jhc2UsIG1fdG90YWxIZWFwU2l6ZSkpOwotICAgICAg
ICB9CisgICAgICAgIGlmICghIW1fYWxsb2NhdGlvbikKKyAgICAgICAgICAgIG1fZnJlZUxpc3Qu
aW5zZXJ0KG5ldyBGcmVlTGlzdEVudHJ5KG1fYWxsb2NhdGlvbi5iYXNlKCksIG1fYWxsb2NhdGlv
bi5zaXplKCkpKTsKICNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBDUkFTSCgpOwpAQCAtMzI1LDEwICszMDYsMTAgQEAgcHVibGljOgogICAgIHZvaWQq
IGFsbG9jKHNpemVfdCBzaXplKQogICAgIHsKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCi0gICAg
ICAgIGlmICghbV9iYXNlKQorICAgICAgICBpZiAoIW1fYWxsb2NhdGlvbikKICAgICAgICAgICAg
IHJldHVybiAwOwogI2Vsc2UKLSAgICAgICAgQVNTRVJUKG1fYmFzZSk7CisgICAgICAgIEFTU0VS
VCghIW1fYWxsb2NhdGlvbik7CiAjZW5kaWYKICAgICAgICAgdm9pZCogcmVzdWx0OwogCkBAIC0z
OTIsNyArMzczLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmcmVlKHZvaWQqIHBvaW50ZXIsIHNp
emVfdCBzaXplKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYmFzZSk7CisgICAgICAgIEFTU0VS
VCghIW1fYWxsb2NhdGlvbik7CiAgICAgICAgIC8vIENhbGwgcmVsZWFzZSB0byByZXBvcnQgdG8g
dGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB0aGlzCiAgICAgICAgIC8vIG1lbW9yeSBpcyBubyBs
b25nZXIgaW4gdXNlLCBhbmQgbmVlZCBub3QgYmUgcGFnZWQgb3V0LgogICAgICAgICBBU1NFUlQo
aXNXaXRoaW5WTVBvb2wocG9pbnRlciwgc2l6ZSkpOwpAQCAtNDE1LDE0ICszOTYsMTQgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gISFtX2Jhc2U7IH0KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fYWxs
b2NhdGlvbjsgfQogCiBwcml2YXRlOgogCiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaXNXaXRo
aW5WTVBvb2wodm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICByZXR1
cm4gcG9pbnRlciA+PSBtX2Jhc2UgJiYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBvaW50ZXIp
ICsgc2l6ZSA8PSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2Jhc2UpICsgbV90b3RhbEhlYXBT
aXplKTsKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIgPj0gbV9hbGxvY2F0aW9uLmJhc2UoKSAmJiAo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocG9pbnRlcikgKyBzaXplIDw9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG1fYWxsb2NhdGlvbi5iYXNlKCkpICsgbV9hbGxvY2F0aW9uLnNpemUoKSk7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTQzNiw4ICs0MTcsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMg
aXMgdXNlZCBmb3IgaG91c2VrZWVwaW5nLCB0byB0cmlnZ2VyIGRlZnJhZ21lbnRhdGlvbiBvZiB0
aGUgZnJlZWQgbGlzdHMuCiAgICAgc2l6ZV90IG1fY291bnRGcmVlZFNpbmNlTGFzdENvYWxlc2Nl
OwogCi0gICAgdm9pZCogbV9iYXNlOwotICAgIHNpemVfdCBtX3RvdGFsSGVhcFNpemU7CisgICAg
UGFnZUFsbG9jYXRpb24gbV9hbGxvY2F0aW9uOwogfTsKIAogdm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCkBAIC00NTksMTggKzQzOSwxNSBAQCBib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zCiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlv
biBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUpCiB7CiAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICAKICAgICBBU1NFUlQoYWxsb2Nh
dG9yKTsKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyA9IHtyZWludGVycHJl
dF9jYXN0PGNoYXIqPihhbGxvY2F0b3ItPmFsbG9jKHNpemUpKSwgc2l6ZX07Ci0gICAgcmV0dXJu
IGFsbG9jOworICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbihhbGxvY2F0b3It
PmFsbG9jKHNpemUpLCBzaXplKTsKIH0KIAogdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVs
ZWFzZShjb25zdCBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgCiB7CiAg
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLQogICAgIEFTU0VSVChh
bGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uLnBhZ2VzLCBhbGxvY2F0
aW9uLnNpemUpOworICAgIGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uLmJhc2UoKSwgYWxsb2Nh
dGlvbi5zaXplKCkpOwogfQogCiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvclBvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3Iu
aCIKLQotI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpICYmICFPUyhXSU5E
T1dTKSAmJiAhT1MoU1lNQklBTikKLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8
dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
dm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCi17Ci0gICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgpOwotfQotCi1FeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IG4p
Ci17Ci0gICAgdm9pZCogYWxsb2NhdGlvbiA9IG1tYXAoTlVMTCwgbiwgSU5JVElBTF9QUk9URUNU
SU9OX0ZMQUdTLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBWTV9UQUdfRk9SX0VYRUNVVEFCTEVB
TExPQ0FUT1JfTUVNT1JZLCAwKTsKLSAgICBpZiAoYWxsb2NhdGlvbiA9PSBNQVBfRkFJTEVEKQot
ICAgICAgICBDUkFTSCgpOwotICAgIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jID0g
eyByZWludGVycHJldF9jYXN0PGNoYXIqPihhbGxvY2F0aW9uKSwgbiB9OwotICAgIHJldHVybiBh
bGxvYzsKLX0KLQotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShjb25zdCBFeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2MpCi17IAotICAgIGludCByZXN1bHQgPSBtdW5t
YXAoYWxsb2MucGFnZXMsIGFsbG9jLnNpemUpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAh
cmVzdWx0KTsKLX0KLQotYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JTeW1iaWFuLmNwcAkocmV2aXNpb24g
NjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvclN5bWJpYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCAKLSAqICBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgotCi0jaWYgRU5BQkxFKEVYRUNV
VEFCTEVfQUxMT0NBVE9SX0RFTUFORCkgJiYgT1MoU1lNQklBTikKLQotI2luY2x1ZGUgPGUzMmhh
bC5oPgotI2luY2x1ZGUgPGUzMnN0ZC5oPgotCi0vLyBTZXQgdGhlIHBhZ2Ugc2l6ZSB0byAyNTYg
S2IgdG8gY29tcGVuc2F0ZSBmb3IgbW92aW5nIG1lbW9yeSBtb2RlbCBsaW1pdGF0aW9uCi1jb25z
dCBzaXplX3QgTU9WSU5HX01FTV9QQUdFX1NJWkUgPSAyNTYgKiAxMDI0OyAKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLXZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW50aWFsaXplUGFnZVNpemUoKQot
ewotI2lmIENQVShBUk1WNV9PUl9MT1dFUikKLSAgICAvLyBUaGUgbW92aW5nIG1lbW9yeSBtb2Rl
bCAoYXMgdXNlZCBpbiBBUk12NSBhbmQgZWFybGllciBwbGF0Zm9ybXMpCi0gICAgLy8gb24gU3lt
YmlhbiBPUyBsaW1pdHMgdGhlIG51bWJlciBvZiBjaHVua3MgZm9yIGVhY2ggcHJvY2VzcyB0byAx
Ni4gCi0gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBsaW1pdGF0aW9uIGluY3JlYXNlIHRoZSBwYWdl
c2l6ZSB0byAKLSAgICAvLyBhbGxvY2F0ZSBsZXNzIG9mIGxhcmdlciBjaHVua3MuCi0gICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBNT1ZJTkdfTUVNX1BBR0VfU0laRTsKLSNlbHNl
Ci0gICAgVEludCBwYWdlX3NpemU7Ci0gICAgVXNlckhhbDo6UGFnZVNpemVJbkJ5dGVzKHBhZ2Vf
c2l6ZSk7Ci0gICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBwYWdlX3NpemU7Ci0j
ZW5kaWYKLX0KLQotRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5
c3RlbUFsbG9jKHNpemVfdCBuKQotewotICAgIFJDaHVuayogY29kZUNodW5rID0gbmV3IFJDaHVu
aygpOwotCi0gICAgVEludCBlcnJvckNvZGUgPSBjb2RlQ2h1bmstPkNyZWF0ZUxvY2FsQ29kZShu
LCBuKTsKLQotICAgIGNoYXIqIGFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihj
b2RlQ2h1bmstPkJhc2UoKSk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAgICAgICBDUkFTSCgp
OwotICAgIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jID0geyBhbGxvY2F0aW9uLCBu
LCBjb2RlQ2h1bmsgfTsKLSAgICByZXR1cm4gYWxsb2M7Ci19Ci0KLXZvaWQgRXhlY3V0YWJsZVBv
b2w6OnN5c3RlbVJlbGVhc2UoY29uc3QgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24mIGFsbG9j
KQoteyAKLSAgICBhbGxvYy5jaHVuay0+Q2xvc2UoKTsKLSAgICBkZWxldGUgYWxsb2MuY2h1bms7
Ci19Ci0KLSNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKLSNlcnJvciAiQVNTRU1C
TEVSX1dYX0VYQ0xVU0lWRSBub3QgeWV0IHN1cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgotI2Vu
ZGlmCi0KLX0KLQotI2VuZGlmIC8vIEhBVkUoQVNTRU1CTEVSKQpJbmRleDogSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yV2luLmNwcAkocmV2aXNpb24gNjM1OTcpCisr
KyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdG9yLmgiCi0KLSNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKSAm
JiBPUyhXSU5ET1dTKQotCi0jaW5jbHVkZSAid2luZG93cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCi17Ci0gICAg
U1lTVEVNX0lORk8gc3lzdGVtX2luZm87Ci0gICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8p
OwotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gc3lzdGVtX2luZm8uZHdQYWdl
U2l6ZTsKLX0KLQotRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5
c3RlbUFsbG9jKHNpemVfdCBuKQotewotICAgIHZvaWQqIGFsbG9jYXRpb24gPSBWaXJ0dWFsQWxs
b2MoMCwgbiwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRF
KTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIENSQVNIKCk7Ci0gICAgRXhlY3V0YWJs
ZVBvb2w6OkFsbG9jYXRpb24gYWxsb2MgPSB7cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWxsb2Nh
dGlvbiksIG59OwotICAgIHJldHVybiBhbGxvYzsKLX0KLQotdm9pZCBFeGVjdXRhYmxlUG9vbDo6
c3lzdGVtUmVsZWFzZShjb25zdCBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2MpCi17
IAotICAgIFZpcnR1YWxGcmVlKGFsbG9jLnBhZ2VzLCAwLCBNRU1fUkVMRUFTRSk7IAotfQotCi1i
b29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi0jZXJyb3IgIkFT
U0VNQkxFUl9XWF9FWENMVVNJVkUgbm90IHlldCBzdXBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIK
LSNlbmRpZgotCi19Ci0KLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9QYWdlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvUGFnZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvUGFnZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiVW51c2VkUGFyYW0uaCIKKworI2lmIEhBVkUoRVJSTk9fSCkKKyNpbmNsdWRl
IDxlcnJuby5oPgorI2VuZGlmCisKKyNpZiBIQVZFKE1NQVApCisjaW5jbHVkZSA8c3lzL21tYW4u
aD4KKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjZW5k
aWYKKworI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSA8ZTMyaGFsLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdURiB7CisKKyNpZiBIQVZFKE1NQVApCisKK3N0YXRpYyBpbnQgcHJvdGVjdGlvbihi
b29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgaW50IHByb3QgPSBQUk9UX1JF
QUQ7CisgICAgaWYgKHdyaXRhYmxlKQorICAgICAgICBwcm90IHw9IFBST1RfV1JJVEU7CisgICAg
aWYgKGV4ZWN1dGFibGUpCisgICAgICAgIHByb3QgfD0gUFJPVF9FWEVDOworICAgIHJldHVybiBw
cm90OworfQorCisjaWYgSEFWRShNQURWX0ZSRUVfUkVVU0UpCitib29sIFBhZ2VBbGxvY2F0aW9u
Ojpjb21taXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxlLCBib29sIGV4
ZWN1dGFibGUpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHdyaXRhYmxlKTsKKyAgICBVTlVT
RURfUEFSQU0oZXhlY3V0YWJsZSk7CisgICAgd2hpbGUgKG1hZHZpc2Uoc3RhcnQsIHNpemUsIE1B
RFZfRlJFRV9SRVVTRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21taXQodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplKSBjb25zdAoreworICAgIHdoaWxlIChtYWR2aXNlKHN0YXJ0LCBzaXplLCBNQURW
X0ZSRUVfUkVVU0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Cit9CisjZWxpZiBI
QVZFKE1BRFZfRE9OVE5FRUQpCitib29sIFBhZ2VBbGxvY2F0aW9uOjpjb21taXQodm9pZCogc3Rh
cnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpIGNvbnN0Cit7
CisgICAgVU5VU0VEX1BBUkFNKHdyaXRhYmxlKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlY3V0YWJs
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZUFsbG9jYXRpb246OmRlY29tbWl0
KHZvaWQqLCBzaXplX3QpIGNvbnN0Cit7CisgICAgd2hpbGUgKG1hZHZpc2Uoc3RhcnQsIHNpemUs
IE1BRFZfRE9OVE5FRUQpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Cit9CisjZWxzZQor
Ym9vbCBQYWdlQWxsb2NhdGlvbjo6Y29tbWl0KHZvaWQqLCBzaXplX3QsIGJvb2wgd3JpdGFibGUs
IGJvb2wgZXhlY3V0YWJsZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0od3JpdGFibGUpOwor
ICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3QKK3sKK30KKyNl
bmRpZgorCitQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICB2
b2lkKiBiYXNlID0gbW1hcChOVUxMLCBzaXplLCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRh
YmxlKSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgdXNhZ2UsIDApOworICAgIGlmIChiYXNlID09
IE1BUF9GQUlMRUQpCisgICAgICAgIGJhc2UgPSAwOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihiYXNlLCBzaXplKTsKK30KKworUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRvcjo6cmVzZXJ2
ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKK3sKKyAgICB2b2lkKiBiYXNlID0gbW1hcChOVUxMLCBzaXplLCBwcm90ZWN0aW9uKHdyaXRh
YmxlLCBleGVjdXRhYmxlKSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgdXNhZ2UsIDApOworICAg
IGlmIChiYXNlID09IE1BUF9GQUlMRUQpCisgICAgICAgIGJhc2UgPSAwOworICAgIFBhZ2VBbGxv
Y2F0aW9uIHJlc3VsdChiYXNlLCBzaXplKTsKKyAgICBpZiAoISFyZXN1bHQpCisgICAgICAgIHJl
c3VsdC5kZWNvbW1pdChiYXNlLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFBhZ2VBbGxvY2F0b3I6OmRlYWxsb2NhdGUoY29uc3QgUGFnZUFsbG9jYXRpb24mIGFsbG9jYXRp
b24pCit7CisgICAgaW50IHJlc3VsdCA9IG11bm1hcChhbGxvY2F0aW9uLmJhc2UoKSwgYWxsb2Nh
dGlvbi5zaXplKCkpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKK30KKwor
c2l6ZV90IFBhZ2VBbGxvY2F0b3I6OnBhZ2VzaXplKCkKK3sKKyAgICBzdGF0aWMgc2l6ZV90IHNp
emUgPSAwOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgc2l6ZSA9IGdldHBhZ2VzaXplKCk7Cisg
ICAgcmV0dXJuIHNpemU7Cit9CisKKyNlbGlmIEhBVkUoVklSVFVBTEFMTE9DKQorCitzdGF0aWMg
RFdPUkQgcHJvdGVjdGlvbihib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAg
aWYgKGV4ZWN1dGFibGUpCisgICAgICAgIHJldHVybiB3cml0YWJsZSA/UEFHRV9FWEVDVVRFX1JF
QURXUklURSA6IFBBR0VfRVhFQ1VURV9SRUFEOworICAgIHJldHVybiB3cml0YWJsZSA/UEFHRV9S
RUFEV1JJVEUgOiBQQUdFX1JFQURPTkxZOworfQorCitib29sIFBhZ2VBbGxvY2F0aW9uOjpjb21t
aXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFi
bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZpcnR1YWxBbGxvYyhzdGFydCwgc2l6ZSwgTUVNX0NP
TU1JVCwgcHJvdGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkpID09IHN0YXJ0OworfQorCit2
b2lkIFBhZ2VBbGxvY2F0aW9uOjpkZWNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpIGNv
bnN0Cit7CisgICAgVmlydHVhbEZyZWUoc3RhcnQsIHNpemUsIE1FTV9ERUNPTU1JVCk7Cit9CisK
K1BhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBVc2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHJldHVybiBQYWdlQWxs
b2NhdGlvbihWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBw
cm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSksIHNpemUpOworfQorCitQYWdlQWxsb2Nh
dGlvbiBQYWdlQWxsb2NhdG9yOjpyZXNlcnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9v
bCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkUsIHByb3RlY3Rpb24od3JpdGFibGUs
IGV4ZWN1dGFibGUpKSwgc2l6ZSk7Cit9CisKK3ZvaWQgUGFnZUFsbG9jYXRvcjo6ZGVhbGxvY2F0
ZShjb25zdCBQYWdlQWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK3sKKyAgICBWaXJ0dWFsRnJlZShh
bGxvY2F0aW9uLmJhc2UoKSwgMCwgTUVNX1JFTEVBU0UpOyAKK30KKworc2l6ZV90IFBhZ2VBbGxv
Y2F0b3I6OnBhZ2VzaXplKCkKK3sKKyAgICBzdGF0aWMgc2l6ZV90IHNpemUgPSAwOworICAgIGlm
ICghc2l6ZSkgeworICAgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgICAgR2V0
U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOworICAgICAgICBzaXplID0gc3lzdGVtX2luZm8uZHdQ
YWdlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIHNpemU7Cit9CisKKyNlbGlmIE9TKFNZTUJJQU4p
CisKK2Jvb2wgUGFnZUFsbG9jYXRpb246OmNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUs
IGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkgY29uc3QKK3sKKyAgICBpZiAoY2h1bmso
KSkgeworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYmFz
ZSgpKSAtIHN0YXRpY19jYXN0PGludHB0cl90PihzdGFydCk7CisgICAgICAgIGNodW5rKCktPkNv
bW1pdChvZmZzZXQsIHNpemUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQ
YWdlQWxsb2NhdGlvbjo6ZGVjb21taXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKSBjb25zdAor
eworICAgIGlmIChjaHVuaygpKSB7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHN0YXRpY19j
YXN0PGludHB0cl90PihiYXNlKCkpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXJ0KTsKKyAg
ICAgICAgY2h1bmsoKS0+RGVjb21taXQob2Zmc2V0LCBzaXplKTsKKyAgICB9Cit9CisKK1BhZ2VB
bGxvY2F0aW9uIFBhZ2VBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIGlmICghZXhlY3V0YWJs
ZSkKKyAgICAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGZhc3RNYWxsb2Moc2l6ZSksIHNpemUs
IDApOworICAgIFJDaHVuayogcmNodW5rID0gbmV3IFJDaHVuaygpOworICAgIFRJbnQgZXJyb3JD
b2RlID0gcmNodW5rLT5DcmVhdGVMb2NhbENvZGUoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIFBh
Z2VBbGxvY2F0aW9uKHJjaHVuay0+QmFzZSgpLCBzaXplLCByY2h1bmspOworfQorCitQYWdlQWxs
b2NhdGlvbiBQYWdlQWxsb2NhdG9yOjpyZXNlcnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwg
Ym9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIGlmICghZXhlY3V0YWJsZSkK
KyAgICAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGZhc3RNYWxsb2Moc2l6ZSksIHNpemUsIDAp
OworICAgIFJDaHVuayogcmNodW5rID0gbmV3IFJDaHVuaygpOworICAgIFRJbnQgZXJyb3JDb2Rl
ID0gcmNodW5rLT5DcmVhdGVMb2NhbENvZGUoMCwgc2l6ZSk7CisgICAgcmV0dXJuIFBhZ2VBbGxv
Y2F0aW9uKHJjaHVuaywgcmNodW5rLT5CYXNlKCksIHNpemUpOworfQorCit2b2lkIFBhZ2VBbGxv
Y2F0b3I6OmRlYWxsb2NhdGUoY29uc3QgUGFnZUFsbG9jYXRpb24mIGFsbG9jYXRpb24pCit7Cisg
ICAgaWYgKGFsbG9jYXRpb24uY2h1bmsoKSkKKyAgICAgICAgYWxsb2NhdGlvbi5jaHVuaygpLT5D
bG9zZSgpOworICAgIGVsc2UKKyAgICAgICAgZmFzdEZyZWUoYWxsb2NhdGlvbi0+YmFzZSgpKTsK
KyAgICBkZWxldGUgYWxsb2NhdGlvbi5jaHVuaygpOworfQorCitzaXplX3QgUGFnZUFsbG9jYXRv
cjo6cGFnZXNpemUoKQoreworICAgIHN0YXRpYyBUSW50IHBhZ2Vfc2l6ZSA9IDA7CisgICAgaWYg
KCFwYWdlX3NpemUpCisgICAgICAgIFVzZXJIYWw6OlBhZ2VTaXplSW5CeXRlcyhwYWdlX3NpemUp
OworICAgIHJldHVybiBwYWdlX3NpemU7Cit9CisKKyNlbmRpZgorCit9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS93dGYvUGFnZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi9QYWdlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYv
UGFnZUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhZ2VBbGxvY2F0
b3JfaAorI2RlZmluZSBQYWdlQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4K
KworI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSA8ZTMyc3RkLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFBhZ2VBbGxvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBQYWdlQWxs
b2NhdGlvbigpCisgICAgICAgIDogbV9iYXNlKDApCisgICAgICAgICwgbV9zaXplKDApCisjaWYg
T1MoU1lNQklBTikKKyAgICAgICAgLCBtX2NodW5rKDApCisjZW5kaWYKKyAgICB7CisgICAgfQor
CisjaWYgT1MoU1lNQklBTikKKyAgICBQYWdlQWxsb2NhdGlvbih2b2lkKiBiYXNlLCBzaXplX3Qg
c2l6ZSwgUkNodW5rKiBjaHVuaykKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICAgICAgLCBtX2NodW5rKGNodW5rKQorICAgIHsKKyAgICB9CisjZWxz
ZQorICAgIFBhZ2VBbGxvY2F0aW9uKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplKQorICAgICAgICA6
IG1fYmFzZShiYXNlKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIHsKKyAgICB9CisjZW5k
aWYKKworICAgIHZvaWQqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorI2lmIE9TKFNZTUJJQU4pCisgICAg
UkNodW5rKiBjaHVuaygpIGNvbnN0IHsgcmV0dXJuIG1fY2h1bms7IH0KKyNlbmRpZgorCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9iYXNlOyB9CisKKyAgICBib29sIGNv
bW1pdCh2b2lkKiwgc2l6ZV90LCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxl
ID0gZmFsc2UpIGNvbnN0OworICAgIHZvaWQgZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgdm9pZCogbV9iYXNlOworICAgIHNpemVfdCBtX3NpemU7CisjaWYg
T1MoU1lNQklBTikKKyAgICBSQ2h1bmsqIG1fY2h1bms7CisjZW5kaWYKK307CisKK2NsYXNzIFBh
Z2VBbGxvY2F0b3IgeworcHVibGljOgorICAgIGVudW0gVXNhZ2UgeworICAgICAgICBVbmtub3du
VXNhZ2UgPSAtMSwKKyAgICAgICAgRmFzdE1hbGxvY1BhZ2VzID0gVk1fVEFHX0ZPUl9UQ01BTExP
Q19NRU1PUlksCisgICAgICAgIEpTR0NIZWFwUGFnZXMgPSBWTV9UQUdfRk9SX0NPTExFQ1RPUl9N
RU1PUlksCisgICAgICAgIEpTVk1TdGFja1BhZ2VzID0gVk1fVEFHX0ZPUl9SRUdJU1RFUkZJTEVf
TUVNT1JZLAorICAgICAgICBKU0pJVENvZGVQYWdlcyA9IFZNX1RBR19GT1JfRVhFQ1VUQUJMRUFM
TE9DQVRPUl9NRU1PUlksCisgICAgfTsKKworICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiBhbGxv
Y2F0ZShzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwg
Ym9vbCBleGVjdXRhYmxlID0gZmFsc2UpOworICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiByZXNl
cnZlKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBi
b29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisjaWYgSEFWRShNTUFQKQorICAgIHN0YXRpYyBQYWdl
QWxsb2NhdGlvbiBhbGxvY2F0ZSh2b2lkKiBhZGRyZXNzLCBib29sIGZpeGVkLCBzaXplX3QsIFVz
YWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxl
ID0gZmFsc2UpOworICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiByZXNlcnZlKHZvaWQqIGFkZHJl
c3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFi
bGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisjZW5kaWYKKyAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uJik7CisgICAgc3RhdGljIHNpemVf
dCBwYWdlc2l6ZSgpOworfTsKKworfQorCit1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOwordXNp
bmcgV1RGOjpQYWdlQWxsb2NhdG9yOworCisjZW5kaWYgLy8gUGFnZUFsbG9jYXRvcl9oCg==
</data>
<flag name="review"
          id="50852"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62632</attachid>
            <date>2010-07-26 17:42:30 -0700</date>
            <delta_ts>2010-07-26 17:50:35 -0700</delta_ts>
            <desc>Tha&apos;s better!</desc>
            <filename>pagealloc.4.patch</filename>
            <type>text/plain</type>
            <size>46817</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MDgwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTAtMDctMjYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0MzAwOSAtIEFic3RyYWN0IG91dCBwYWdl
IGFsbG9jYXRpb24gZnJvbSBleGVjdXRhYmxlIGFsbG9jYXRvcnMKKworICAgICAgICBJdCB3b3Vs
ZCBiZSBncmVhdCB0byBoYXZlIGEgc2luZ2xlIHBsYXRmb3JtIGFic3RyYWN0aW9uIGZvciBibG9j
ayBhbGxvY2F0aW9uLCByYXRoZXIgdGhhbiBjb3B5L3Bhc3RlIGNvZGUuCisKKyAgICAgICAgSW4g
dGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uIEkndmUgbWFkZSBTeW1iaWFuIGZhbGwgYmFjayB0
byB1c2UgbWFsbG9jL2ZyZWUgZm9yIG5vbi1leGVjdXRhYmxlIG1lbW9yeS4KKyAgICAgICAgSSB0
aGluayB0aGlzIHdpbGwgbWF0Y2ggY3VycmVudCBiZWhhdmlvdXIgZm9yIHRoZSBuZXh0IGNsaWVu
dCB3ZSB3aWxsIHdhbnQgdG8gcG9ydCBhY3Jvc3MgKFJlZ2lzdGVyRmlsZSAmCisgICAgICAgIENv
bGxlY3RvcikuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQ
YWdlU2l6ZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyk6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKToKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCk6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQ
b29sKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OnBvb2xBbGxvY2F0ZSk6CisgICAg
ICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChK
U0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKEpTQzo6Rml4ZWRW
TVBvb2xBbGxvY2F0b3I6OnJldXNlKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0
b3I6OkZpeGVkVk1Qb29sQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxv
Y2F0b3I6OmFsbG9jKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OmZyZWUp
OgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEFsbG9jYXRvcjo6aXNWYWxpZCk6CisgICAgICAg
IChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjppc1dpdGhpblZNUG9vbCk6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFi
bGVQb29sOjpzeXN0ZW1SZWxlYXNlKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
clBvc2l4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvclN5
bWJpYW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3c2NyaXB0OgorICAgICAgICAqIHd0Zi9QYWdlQWxs
b2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByb3RlY3Rpb24pOgorICAgICAgICAo
V1RGOjpQYWdlQWxsb2NhdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRp
b246OmRlY29tbWl0KToKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdG9yOjpyZXNlcnZlKToKKyAgICAgICAgKFdURjo6UGFn
ZUFsbG9jYXRvcjo6ZGVhbGxvY2F0ZSk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0b3I6OnBh
Z2VzaXplKToKKyAgICAgICAgKiB3dGYvUGFnZUFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6UGFnZUFsbG9jYXRpb246OlBhZ2VBbGxvY2F0aW9uKToKKyAgICAgICAgKFdURjo6UGFn
ZUFsbG9jYXRpb246OmJhc2UpOgorICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6c2l6ZSk6
CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjpjaHVuayk6CisgICAgICAgIChXVEY6OlBh
Z2VBbGxvY2F0aW9uOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdG9yOjop
OgorCiAyMDA5LTEwLTMwICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0CShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHNFZmwudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNCBA
QAogTElTVChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yUG9zaXguY3BwCiAgICAgcnVudGltZS9NYXJrU3RhY2tQb3NpeC5jcHAKICkKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDYzNTk3KQorKysgSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNiwxMiArNTI2LDEwIEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogaWYgVEFSR0VUX1dJTjMyCiBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3Bw
IFwKLQlKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAgXAogCUph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrV2luLmNwcAogZWxzZQogamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAgXAotCUphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
UG9zaXguY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFja1Bvc2l4LmNwcAog
ZW5kaWYKIApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2MzU5
NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw4ICsxMTAsNiBAQAogICAgICAgICAgICAgJ2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcCcsCiAgICAgICAgICAgICAnaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCcsCiAgICAgICAg
ICAgICAnaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAnLAotICAgICAgICAg
ICAgJ2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwJywKLSAgICAgICAgICAgICdqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAnLAogICAgICAgICAgICAgJ2ppdC9KSVQuY3BwJywK
ICAgICAgICAgICAgICdqaXQvSklULmgnLAogICAgICAgICAgICAgJ2ppdC9KSVRBcml0aG1ldGlj
LmNwcCcsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA2MzU5NykK
KysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
OTQsOSArOTQsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAgXAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAgXAogICAgIGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKLSAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
clBvc2l4LmNwcCBcCi0gICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JTeW1iaWFuLmNwcCBcCi0g
ICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwIFwKICAgICBqaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGljLmNwcCBcCiAgICAgaml0L0pJVEFy
aXRobWV0aWMzMl82NC5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvd3NjcmlwdAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93c2NyaXB0CShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFT
Y3JpcHRDb3JlL3dzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAganNjb3Jl
X2V4Y2x1ZGVzLmV4dGVuZChnZXRfZXhjbHVkZXMoanNjbwogCiBpZiBidWlsZGluZ19vbl93aW4z
MjoKICAgICBqc2NvcmVfZXhjbHVkZXMgKz0gWydFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3Bw
JywgJ01hcmtTdGFja1Bvc2l4LmNwcCcsICdUaHJlYWRpbmdQdGhyZWFkcy5jcHAnXQotICAgIHNv
dXJjZXMgKz0gWydqaXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAnLCAncnVudGltZS9NYXJr
U3RhY2tXaW4uY3BwJ10KKyAgICBzb3VyY2VzICs9IFsncnVudGltZS9NYXJrU3RhY2tXaW4uY3Bw
J10KIGVsc2U6CiAgICAganNjb3JlX2V4Y2x1ZGVzLmFwcGVuZCgnSlNTdHJpbmdSZWZCU1RSLmNw
cCcpCiAgICAganNjb3JlX2V4Y2x1ZGVzLmV4dGVuZChnZXRfZXhjbHVkZXMoanNjb3JlX2Rpciwg
WycqV2luLmNwcCddKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvagkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQxLDEwICsxNjQxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JX
aW4uY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caml0XEpJVC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA2MzU5NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgs
OCBAQAogCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUx
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovOyB9OwogCQk4NjAx
NjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUyMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovOyB9OwogCQk4NjI2QkVDRjEx
OTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3Ry
aW5nU3RhdGljcy5jcHAgKi87IH07CisJCTg2MjdFNUVCMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdl
QWxsb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjI3RTVFOTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uY3BwICovOyB9
OworCQk4NjI3RTVFQzExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjdFNUVBMTFGMTI4MTkw
MEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovOyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3
MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODY1NjU3NDIxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1NjU3NDAxMTVCRTNE
QTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwICovOyB9OwogCQk4NjU2NTc0MzExNUJFM0RBMDAyOTFG
NDAgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY1NjU3NDExMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzEyLDcgKzMxNCw2IEBACiAJ
CUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1
QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi87IH07CiAJCUE3NkVFNjU5MEZBRTU5RDUwMDNGMDY5
QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkVFNjU4MEZBRTU5RDUwMDNGMDY5QSAvKiBOYXRpdmVGdW5j
dGlvbldyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzc5NTU5MDEwMUE3NEQ1MDAxMTRFNTUgLyogTWFya1N0YWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5NTU4RjEwMUE3NEQ1MDAx
MTRFNTUgLyogTWFya1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQTc4MkYxQTUwRUVDOUZBMjAwMzYyNzNGIC8qIEV4ZWN1dGFibGVBbGxv
Y2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzgyRjFBNDBFRUM5RkEyMDAzNjI3M0YgLyogRXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4
LmNwcCAqLzsgfTsKIAkJQTc4M0EwRDExMUEzNkRDQTAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEds
b2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc4M0EwRDAxMUEzNkRDQTAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODNB
MkFCMTFBNUJFODQwMDU2M0QyMCAvKiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4M0EyQUExMUE1QkU4
NDAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5jcHAgKi87IH07CiAJCUE3ODRB
MjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNU
QnVpbGRlci5oICovOyB9OwpAQCAtNzY3LDYgKzc2OCw4IEBACiAJCTg2MDE2MUUxMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAw
NzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU3RyaW5nU3RhdGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjI3RTVFOTExRjEyODE5MDBBMzEzQjUg
LyogUGFnZUFsbG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZUFsbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjI3
RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFnZUFsbG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODYzQjIzREYwRkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1NjU3NDAxMTVCRTNEQTAwMjkx
RjQwIC8qIENTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
Q1N0cmluZy5jcHA7IHBhdGggPSB0ZXh0L0NTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjU2NTc0MTExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU3RyaW5nLmg7IHBhdGggPSB0ZXh0L0NTdHJpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxMiw3ICs4MTUsNiBAQAogCQk4NkQz
QjJDMjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODZEM0IzQzExMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0J1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRjaEJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2REI2NDVGMEY5NTRFOTEwMEQ3RDkyMSAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yV2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ckZpeGVkVk1Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTQsNyArOTE2LDYgQEAKIAkJQTc2QzUx
NzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NkVFNjU4MEZBRTU5RDUwMDNGMDY5QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlRnVuY3Rpb25XcmFwcGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Nzk1NThGMTAxQTc0RDUwMDExNEU1
NSAvKiBNYXJrU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0
YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODJGMUE0MEVFQzlGQTIwMDM2
MjczRiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4M0EwRDAxMUEzNkRDQTAwNTYzRDIwIC8qIEpTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09i
amVjdFdpdGhHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4
M0EyQUExMUE1QkU4NDAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09iamVjdFdpdGhHbG9iYWxPYmpl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzkxRUYyNjBGMTFFMDc5MDBB
RTFGNjggLyogSlNCeXRlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMsOCArMTI1
NCw2IEBACiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmggKi8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8sCi0JCQkJQTc4MkYxQTQwRUVDOUZBMjAwMzYyNzNG
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JQb3NpeC5jcHAgKi8sCi0JCQkJODZEQjY0NUYwRjk1NEU5
MTAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwICovLAogCQkJCTE0MjlEOTJE
MEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwICovLAogCQkJCTE0MjlEOTJFMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuaCAqLywKIAkJCQk4NkE5MEVDRjBFRTdENTFGMDBBQjM1MEQgLyogSklUQXJp
dGhtZXRpYy5jcHAgKi8sCkBAIC0xNDQ2LDYgKzE0NDUsOCBAQAogCQkJCTBCREZGQUQxMEZDNjE2
RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi8sCiAJCQkJOTMwM0Y1NjcwOTkxMThG
QTAwQUQ3MUI4IC8qIE93blB0ci5oICovLAogCQkJCTQ0MEI3QUVEMEZBRjdGQ0IwMDczMzIzRSAv
KiBPd25QdHJDb21tb24uaCAqLywKKwkJCQk4NjI3RTVFOTExRjEyODE5MDBBMzEzQjUgLyogUGFn
ZUFsbG9jYXRpb24uY3BwICovLAorCQkJCTg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdl
QWxsb2NhdGlvbi5oICovLAogCQkJCTQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3du
UHRyLmggKi8sCiAJCQkJNjU4MEY3OTUwOTQwNzA1NjAwODJDMjE5IC8qIFBhc3NSZWZQdHIuaCAq
LywKIAkJCQk2NUQ2RDg3RTA5QjVBMzJFMDAwMkU0RDcgLyogUGxhdGZvcm0uaCAqLywKQEAgLTIx
ODcsNiArMjE4OCw3IEBACiAJCQkJODY4QkZBMTgxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEMDhENTQxMTc5MzYxMzAwNkU1RUQwIC8qIFdURlRo
cmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2MEVEMTJCNEUwMDFENjQ5RiAv
KiBYODZBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2MjdFNUVDMTFGMTI4MTkwMEEz
MTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNDk2LDcgKzI0OTgs
NiBAQAogCQkJCTg2Q0EwMzJFMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTc4MkYxQTUwRUVDOUZBMjAwMzYyNzNGIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEY4QkEzRTEwN0VDODg2MDA5ODkyREMgLyogRmFzdE1hbGxv
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQzEwN0VDMzc2
MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjI3
LDYgKzI2MjgsNyBAQAogCQkJCUUxRUY3OUFBMENFOTdCQTYwMDg4RDUwMCAvKiBVVEY4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2OEJGQTE3MTE3Q0YxOTkwMEI5MDhCMSAvKiBXVEZTdHJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZEMDhENTMxMTc5MzYxMzAwNkU1RUQwIC8qIFdURlRo
cmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODYyN0U1RUIxMUYxMjgxOTAwQTMxM0I1
IC8qIFBhZ2VBbGxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzaXplX3QgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6cGFnZVNpemUgPSAwOwogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RF
TUFORCkKKwordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCit7
CisjaWYgQ1BVKEFSTVY1X09SX0xPV0VSKQorICAgIC8vIFRoZSBtb3ZpbmcgbWVtb3J5IG1vZGVs
IChhcyB1c2VkIGluIEFSTXY1IGFuZCBlYXJsaWVyIHBsYXRmb3JtcykKKyAgICAvLyBvbiBTeW1i
aWFuIE9TIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGNodW5rcyBmb3IgZWFjaCBwcm9jZXNzIHRvIDE2
LiAKKyAgICAvLyBUbyBtaXRpZ2F0ZSB0aGlzIGxpbWl0YXRpb24gaW5jcmVhc2UgdGhlIHBhZ2Vz
aXplIHRvIGFsbG9jYXRlCisgICAgLy8gZmV3ZXIsIGxhcmdlciBjaHVua3MuIFNldCB0aGUgcGFn
ZSBzaXplIHRvIDI1NiBLYiB0byBjb21wZW5zYXRlCisgICAgLy8gZm9yIG1vdmluZyBtZW1vcnkg
bW9kZWwgbGltaXRhdGlvbgorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gMjU2
ICogMTAyNDsKKyNlbHNlCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBQYWdl
QWxsb2NhdGlvbjo6cGFnZXNpemUoKTsKKyNlbmRpZgorfQorCitFeGVjdXRhYmxlUG9vbDo6QWxs
b2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAg
UGFnZUFsbG9jYXRpb24gYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZShzaXpl
LCBQYWdlQWxsb2NhdGlvbjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CisgICAgaWYgKCFhbGxvY2F0aW9uKQorICAgICAgICBDUkFTSCgpOworICAgIHJl
dHVybiBhbGxvY2F0aW9uOworfQorCit2b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNl
KGNvbnN0IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQoreworICAgIGFs
bG9jYXRpb24uZGVhbGxvY2F0ZSgpOworfQorCitib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6Omlz
VmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCisjZW5kaWYKKwogI2lmIEVO
QUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQorCisjaWYgT1MoV0lORE9XUykgfHwgT1MoU1lN
QklBTikKKyNlcnJvciAiQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSBub3QgeWV0IHN1cG9ydGVkIG9u
IHRoaXMgcGxhdGZvcm0uIgorI2VuZGlmCisKIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cmVw
cm90ZWN0UmVnaW9uKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSwgUHJvdGVjdGlvblNldGluZyBz
ZXR0aW5nKQogewogICAgIGlmICghcGFnZVNpemUpCkBAIC01Miw5ICs5MywxMSBAQCB2b2lkIEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnJlcHJvdGVjdFJlZ2lvCiAKICAgICBtcHJvdGVjdChwYWdlU3Rh
cnQsIHNpemUsIChzZXR0aW5nID09IFdyaXRhYmxlKSA/IFBST1RFQ1RJT05fRkxBR1NfUlcgOiBQ
Uk9URUNUSU9OX0ZMQUdTX1JYKTsKIH0KKwogI2VuZGlmCiAKICNpZiBDUFUoQVJNX1RSQURJVElP
TkFMKSAmJiBPUyhMSU5VWCkgJiYgQ09NUElMRVIoUlZDVCkKKwogX19hc20gdm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQogewogICAg
IEFSTQpAQCAtNjcsNiArMTEwLDcgQEAgX19hc20gdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
YWNoZUZsdQogICAgIHBvcCB7cjd9CiAgICAgYnggbHIKIH0KKwogI2VuZGlmCiAKIH0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gNjM1OTcp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZm
X3QKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CkBAIC01OCw5ICs1OSw5IEBAIGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxpbXBvcnQpIHZvaWQg
Q2EKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICNkZWZpbmUgUFJPVEVDVElP
Tl9GTEFHU19SVyAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkKICNkZWZpbmUgUFJPVEVDVElPTl9G
TEFHU19SWCAoUFJPVF9SRUFEIHwgUFJPVF9FWEVDKQotI2RlZmluZSBJTklUSUFMX1BST1RFQ1RJ
T05fRkxBR1MgUFJPVEVDVElPTl9GTEFHU19SWAorI2RlZmluZSBFWEVDVVRBQkxFX1BPT0xfV1JJ
VEFCTEUgZmFsc2UKICNlbHNlCi0jZGVmaW5lIElOSVRJQUxfUFJPVEVDVElPTl9GTEFHUyAoUFJP
VF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQykKKyNkZWZpbmUgRVhFQ1VUQUJMRV9QT09M
X1dSSVRBQkxFIHRydWUKICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTg1LDEzICs4Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZD
b3VudGVkPEV4ZWN1dGFibGVQb29sPiB7CiBwcml2YXRlOgotICAgIHN0cnVjdCBBbGxvY2F0aW9u
IHsKLSAgICAgICAgY2hhciogcGFnZXM7Ci0gICAgICAgIHNpemVfdCBzaXplOwotI2lmIE9TKFNZ
TUJJQU4pCi0gICAgICAgIFJDaHVuayogY2h1bms7Ci0jZW5kaWYKLSAgICB9OworICAgIHR5cGVk
ZWYgUGFnZUFsbG9jYXRpb24gQWxsb2NhdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxBbGxvY2F0
aW9uLCAyPiBBbGxvY2F0aW9uTGlzdDsKIAogcHVibGljOgpAQCAtMjk2LDcgKzI5MSw3IEBAIGlu
bGluZSBFeGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2woc2kKICAgICBzaXplX3QgYWxsb2NT
aXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4sIEpJVF9BTExPQ0FUT1JfUEFHRV9TSVpFKTsK
ICAgICBBbGxvY2F0aW9uIG1lbSA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7CiAgICAgbV9wb29s
cy5hcHBlbmQobWVtKTsKLSAgICBtX2ZyZWVQdHIgPSBtZW0ucGFnZXM7CisgICAgbV9mcmVlUHRy
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1lbS5iYXNlKCkpOwogICAgIGlmICghbV9mcmVlUHRyKQog
ICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKICAgICBtX2VuZCA9IG1fZnJl
ZVB0ciArIGFsbG9jU2l6ZTsKQEAgLTMwNywxOCArMzAyLDE4IEBAIGlubGluZSB2b2lkKiBFeGVj
dXRhYmxlUG9vbDo6cG9vbEFsbG9jYXQKICAgICBzaXplX3QgYWxsb2NTaXplID0gcm91bmRVcEFs
bG9jYXRpb25TaXplKG4sIEpJVF9BTExPQ0FUT1JfUEFHRV9TSVpFKTsKICAgICAKICAgICBBbGxv
Y2F0aW9uIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFyZXN1bHQu
cGFnZXMpCisgICAgaWYgKCFyZXN1bHQuYmFzZSgpKQogICAgICAgICBDUkFTSCgpOyAvLyBGYWls
ZWQgdG8gYWxsb2NhdGUKICAgICAKICAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKICAg
ICBpZiAoKGFsbG9jU2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJl
ZVB0cikpIHsKICAgICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9m
cmVlUHRyID0gcmVzdWx0LnBhZ2VzICsgbjsKLSAgICAgICAgbV9lbmQgPSByZXN1bHQucGFnZXMg
KyBhbGxvY1NpemU7CisgICAgICAgIG1fZnJlZVB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihyZXN1
bHQuYmFzZSgpKSArIG47CisgICAgICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3Vs
dC5iYXNlKCkpICsgYWxsb2NTaXplOwogICAgIH0KIAogICAgIG1fcG9vbHMuYXBwZW5kKHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5wYWdlczsKKyAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsK
IH0KIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDYzNTk3KQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCwzMCArMTI0LDE3IEBAIGNsYXNzIEZpeGVkVk1Qb29sQWxsb2NhdG9yCiAgICAgLy8g
VGhlIGZyZWUgbGlzdCBpcyBzdG9yZWQgaW4gYSBzb3J0ZWQgdHJlZS4KICAgICB0eXBlZGVmIEFW
TFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JGcmVlTGlzdCwgNDA+IFNpemVTb3J0ZWRGcmVlVHJl
ZTsKIAotICAgIC8vIFVzZSBtYWR2aXNlIGFzIGFwcm9wcmlhdGUgdG8gcHJldmVudCBmcmVlZCBw
YWdlcyBmcm9tIGJlaW5nIHNwaWxsZWQsCi0gICAgLy8gYW5kIHRvIGF0dGVtcHQgdG8gZW5zdXJl
IHRoYXQgdXNlZCBtZW1vcnkgaXMgcmVwb3J0ZWQgY29ycmVjdGx5LgotI2lmIEhBVkUoTUFEVl9G
UkVFX1JFVVNFKQogICAgIHZvaWQgcmVsZWFzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNpemUp
CiAgICAgewotICAgICAgICB3aGlsZSAobWFkdmlzZShwb3NpdGlvbiwgc2l6ZSwgTUFEVl9GUkVF
X1JFVVNBQkxFKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQorICAgICAgICBtX2FsbG9j
YXRpb24uZGVjb21taXQocG9zaXRpb24sIHNpemUpOwogICAgIH0KIAogICAgIHZvaWQgcmV1c2Uo
dm9pZCogcG9zaXRpb24sIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgd2hpbGUgKG1hZHZp
c2UocG9zaXRpb24sIHNpemUsIE1BRFZfRlJFRV9SRVVTRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFH
QUlOKSB7IH0KLSAgICB9Ci0jZWxpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCi0gICAgdm9pZCByZWxl
YXNlKHZvaWQqIHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHdoaWxlICht
YWR2aXNlKHBvc2l0aW9uLCBzaXplLCBNQURWX0RPTlRORUVEKSA9PSAtMSAmJiBlcnJubyA9PSBF
QUdBSU4pIHsgfQorICAgICAgICBib29sIG9rYXkgPSBtX2FsbG9jYXRpb24uY29tbWl0KHBvc2l0
aW9uLCBzaXplLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKG9rYXksIG9rYXkpOwogICAgIH0KIAotICAgIHZvaWQgcmV1c2Uodm9pZCosIHNp
emVfdCkge30KLSNlbHNlCi0gICAgdm9pZCByZWxlYXNlKHZvaWQqLCBzaXplX3QpIHt9Ci0gICAg
dm9pZCByZXVzZSh2b2lkKiwgc2l6ZV90KSB7fQotI2VuZGlmCi0KICAgICAvLyBBbGwgYWRkaXRp
b24gdG8gdGhlIGZyZWUgbGlzdCBzaG91bGQgZ28gdGhyb3VnaCB0aGlzIG1ldGhvZCwgcmF0aGVy
IHRoYW4KICAgICAvLyBjYWxsaW5nIGluc2VydCBkaXJlY3RseSwgdG8gYXZvaWQgbXVsdGlwbGUg
ZW50cmllcyBiZWdpbmcgYWRkZWQgd2l0aCB0aGUKICAgICAvLyBzYW1lIGtleS4gIEFsbCBub2Rl
cyBiZWluZyBhZGRlZCBzaG91bGQgYmUgc2luZ2xldG9ucywgdGhleSBzaG91bGQgbm90CkBAIC0y
ODgsNyArMjc1LDYgQEAgcHVibGljOgogICAgIEZpeGVkVk1Qb29sQWxsb2NhdG9yKHNpemVfdCBj
b21tb25TaXplLCBzaXplX3QgdG90YWxIZWFwU2l6ZSkKICAgICAgICAgOiBtX2NvbW1vblNpemUo
Y29tbW9uU2l6ZSkKICAgICAgICAgLCBtX2NvdW50RnJlZWRTaW5jZUxhc3RDb2FsZXNjZSgwKQot
ICAgICAgICAsIG1fdG90YWxIZWFwU2l6ZSh0b3RhbEhlYXBTaXplKQogICAgIHsKICAgICAgICAg
Ly8gQ29vayB1cCBhbiBhZGRyZXNzIHRvIGFsbG9jYXRlIGF0LCB1c2luZyB0aGUgZm9sbG93aW5n
IHJlY2lwZToKICAgICAgICAgLy8gICAxNyBiaXRzIG9mIHplcm8sIHN0YXkgaW4gdXNlcnNwYWNl
IGtpZHMuCkBAIC0yOTksMzYgKzI4NSw2NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGZvciBub3cg
aW5zdGVhZCBvZiAyXjI2IGJpdHMgb2YgQVNMUiBsZXRzIHN0aWNrIHdpdGggMjUgYml0cyBvZiBy
YW5kb21pemF0aW9uIHBsdXMKICAgICAgICAgLy8gMl4yNCwgd2hpY2ggc2hvdWxkIHB1dCB1cCBz
b21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB1c2VzcGFjZSAoaW4gdGhlIGFkZHJlc3MgcmFuZ2UK
ICAgICAgICAgLy8gMHgyMDAwMDAwMDAwMDAgLi4gMHg1ZmZmZmZmZmZmZmYpLgotICAgICAgICBp
bnRwdHJfdCByYW5kb21Mb2NhdGlvbiA9IDA7CiAjaWYgVk1fUE9PTF9BU0xSCisgICAgICAgIGlu
dHB0cl90IHJhbmRvbUxvY2F0aW9uID0gMDsKICAgICAgICAgcmFuZG9tTG9jYXRpb24gPSBhcmM0
cmFuZG9tKCkgJiAoKDEgPDwgMjUpIC0gMSk7CiAgICAgICAgIHJhbmRvbUxvY2F0aW9uICs9ICgx
IDw8IDI0KTsKICAgICAgICAgcmFuZG9tTG9jYXRpb24gPDw9IDIxOworICAgICAgICBtX2FsbG9j
YXRpb24gPSBQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZUF0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJhbmRvbUxvY2F0aW9uKSwgZmFsc2UsIHRvdGFsSGVhcFNpemUsIFBhZ2VBbGxvY2F0aW9uOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyNlbHNlCisg
ICAgICAgIG1fYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uOjpyZXNlcnZlKHRvdGFsSGVhcFNp
emUsIFBhZ2VBbGxvY2F0aW9uOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRB
QkxFLCB0cnVlKTsKICNlbmRpZgotICAgICAgICBtX2Jhc2UgPSBtbWFwKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJhbmRvbUxvY2F0aW9uKSwgbV90b3RhbEhlYXBTaXplLCBJTklUSUFMX1BST1RF
Q1RJT05fRkxBR1MsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIFZNX1RBR19GT1JfRVhFQ1VUQUJM
RUFMTE9DQVRPUl9NRU1PUlksIDApOwogCi0gICAgICAgIGlmIChtX2Jhc2UpIHsKLSAgICAgICAg
ICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSBrZWVwIGFsbCBtZW1vcnkgaW4gbV9mcmVlTGlzdCBp
biBhICdyZWxlYXNlZCcgc3RhdGUuCi0gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Ug
Y2FuIHNpbXBseSByZXVzZSBhbGwgbWVtb3J5IHdoZW4gYWxsb2NhdGluZywgd2l0aG91dAotICAg
ICAgICAgICAgLy8gd29ycnlpbmcgYWJvdXQgaXQncyBwcmV2aW91cyBzdGF0ZSwgYW5kIGFsc28g
bWFrZXMgY29hbGVzY2luZyBtX2ZyZWVMaXN0Ci0gICAgICAgICAgICAvLyBzaW1wbGVyIHNpbmNl
IHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBjb2FsZXNjaW5nIHJl
bGVhc2VkCi0gICAgICAgICAgICAvLyBjaHVua3Mgd2l0aCBub24tcmVsZWFzZWQgb25lcy4KLSAg
ICAgICAgICAgIHJlbGVhc2UobV9iYXNlLCBtX3RvdGFsSGVhcFNpemUpOwotICAgICAgICAgICAg
bV9mcmVlTGlzdC5pbnNlcnQobmV3IEZyZWVMaXN0RW50cnkobV9iYXNlLCBtX3RvdGFsSGVhcFNp
emUpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoISFtX2FsbG9jYXRpb24pCisgICAgICAgICAg
ICBtX2ZyZWVMaXN0Lmluc2VydChuZXcgRnJlZUxpc3RFbnRyeShtX2FsbG9jYXRpb24uYmFzZSgp
LCBtX2FsbG9jYXRpb24uc2l6ZSgpKSk7CiAjaWYgIUVOQUJMRShJTlRFUlBSRVRFUikKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQq
IGFsbG9jKHNpemVfdCBzaXplKQorICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jKHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGFsbG9jSW50ZXJuYWwoc2l6
ZSksIHNpemUsIG1fYWxsb2NhdGlvbik7CisgICAgfQorCisgICAgdm9pZCBmcmVlKFBhZ2VBbGxv
Y2F0aW9uIGFsbG9jYXRpb24pCisgICAgeworICAgICAgICB2b2lkKiBwb2ludGVyID0gYWxsb2Nh
dGlvbi5iYXNlKCk7CisgICAgICAgIHNpemVfdCBzaXplID0gYWxsb2NhdGlvbi5zaXplKCk7CisK
KyAgICAgICAgQVNTRVJUKCEhbV9hbGxvY2F0aW9uKTsKKyAgICAgICAgLy8gQ2FsbCByZWxlYXNl
IHRvIHJlcG9ydCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHRoaXMKKyAgICAgICAgLy8g
bWVtb3J5IGlzIG5vIGxvbmdlciBpbiB1c2UsIGFuZCBuZWVkIG5vdCBiZSBwYWdlZCBvdXQuCisg
ICAgICAgIEFTU0VSVChpc1dpdGhpblZNUG9vbChwb2ludGVyLCBzaXplKSk7CisgICAgICAgIHJl
bGVhc2UocG9pbnRlciwgc2l6ZSk7CisKKyAgICAgICAgLy8gQ29tbW9uLXNpemVkIGFsbG9jYXRp
b25zIGFyZSBzdG9yZWQgaW4gdGhlIG1fY29tbW9uU2l6ZWRBbGxvY2F0aW9ucworICAgICAgICAv
LyB2ZWN0b3I7IGFsbCBvdGhlciBmcmVlZCBjaHVua3MgYXJlIGFkZGVkIHRvIG1fZnJlZUxpc3Qu
CisgICAgICAgIGlmIChzaXplID09IG1fY29tbW9uU2l6ZSkKKyAgICAgICAgICAgIG1fY29tbW9u
U2l6ZWRBbGxvY2F0aW9ucy5hcHBlbmQocG9pbnRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZFRvRnJlZUxpc3QobmV3IEZyZWVMaXN0RW50cnkocG9pbnRlciwgc2l6ZSkpOworCisg
ICAgICAgIC8vIERvIHNvbWUgaG91c2VrZWVwaW5nLiAgRXZlcnkgdGltZSB3ZSByZWFjaCBhIHBv
aW50IHRoYXQKKyAgICAgICAgLy8gMTZNQiBvZiBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gZnJlZWQs
IHN3ZWVwIG1fZnJlZUxpc3QKKyAgICAgICAgLy8gY29hbGVzY2luZyBhbnkgbmVpZ2hib3Jpbmcg
ZnJhZ21lbnRzLgorICAgICAgICBtX2NvdW50RnJlZWRTaW5jZUxhc3RDb2FsZXNjZSArPSBzaXpl
OworICAgICAgICBpZiAobV9jb3VudEZyZWVkU2luY2VMYXN0Q29hbGVzY2UgPj0gQ09BTEVTQ0Vf
TElNSVQpIHsKKyAgICAgICAgICAgIG1fY291bnRGcmVlZFNpbmNlTGFzdENvYWxlc2NlID0gMDsK
KyAgICAgICAgICAgIGNvYWxlc2NlRnJlZVNwYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fYWxsb2NhdGlvbjsgfQorCitwcml2
YXRlOgorICAgIHZvaWQqIGFsbG9jSW50ZXJuYWwoc2l6ZV90IHNpemUpCiAgICAgewogI2lmIEVO
QUJMRShJTlRFUlBSRVRFUikKLSAgICAgICAgaWYgKCFtX2Jhc2UpCisgICAgICAgIGlmICghbV9h
bGxvY2F0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAjZWxzZQotICAgICAgICBBU1NFUlQo
bV9iYXNlKTsKKyAgICAgICAgQVNTRVJUKCEhbV9hbGxvY2F0aW9uKTsKICNlbmRpZgogICAgICAg
ICB2b2lkKiByZXN1bHQ7CiAKQEAgLTM5MCwzOSArNDA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIGZyZWUodm9pZCogcG9pbnRlciwgc2l6
ZV90IHNpemUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9iYXNlKTsKLSAgICAgICAgLy8gQ2Fs
bCByZWxlYXNlIHRvIHJlcG9ydCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHRoaXMKLSAg
ICAgICAgLy8gbWVtb3J5IGlzIG5vIGxvbmdlciBpbiB1c2UsIGFuZCBuZWVkIG5vdCBiZSBwYWdl
ZCBvdXQuCi0gICAgICAgIEFTU0VSVChpc1dpdGhpblZNUG9vbChwb2ludGVyLCBzaXplKSk7Ci0g
ICAgICAgIHJlbGVhc2UocG9pbnRlciwgc2l6ZSk7Ci0KLSAgICAgICAgLy8gQ29tbW9uLXNpemVk
IGFsbG9jYXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIG1fY29tbW9uU2l6ZWRBbGxvY2F0aW9ucwot
ICAgICAgICAvLyB2ZWN0b3I7IGFsbCBvdGhlciBmcmVlZCBjaHVua3MgYXJlIGFkZGVkIHRvIG1f
ZnJlZUxpc3QuCi0gICAgICAgIGlmIChzaXplID09IG1fY29tbW9uU2l6ZSkKLSAgICAgICAgICAg
IG1fY29tbW9uU2l6ZWRBbGxvY2F0aW9ucy5hcHBlbmQocG9pbnRlcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZFRvRnJlZUxpc3QobmV3IEZyZWVMaXN0RW50cnkocG9pbnRlciwgc2l6
ZSkpOwotCi0gICAgICAgIC8vIERvIHNvbWUgaG91c2VrZWVwaW5nLiAgRXZlcnkgdGltZSB3ZSBy
ZWFjaCBhIHBvaW50IHRoYXQKLSAgICAgICAgLy8gMTZNQiBvZiBhbGxvY2F0aW9ucyBoYXZlIGJl
ZW4gZnJlZWQsIHN3ZWVwIG1fZnJlZUxpc3QKLSAgICAgICAgLy8gY29hbGVzY2luZyBhbnkgbmVp
Z2hib3JpbmcgZnJhZ21lbnRzLgotICAgICAgICBtX2NvdW50RnJlZWRTaW5jZUxhc3RDb2FsZXNj
ZSArPSBzaXplOwotICAgICAgICBpZiAobV9jb3VudEZyZWVkU2luY2VMYXN0Q29hbGVzY2UgPj0g
Q09BTEVTQ0VfTElNSVQpIHsKLSAgICAgICAgICAgIG1fY291bnRGcmVlZFNpbmNlTGFzdENvYWxl
c2NlID0gMDsKLSAgICAgICAgICAgIGNvYWxlc2NlRnJlZVNwYWNlKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1fYmFzZTsgfQotCi1w
cml2YXRlOgotCiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaXNXaXRoaW5WTVBvb2wodm9pZCog
cG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gcG9pbnRlciA+PSBt
X2Jhc2UgJiYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsgc2l6ZSA8PSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX2Jhc2UpICsgbV90b3RhbEhlYXBTaXplKTsKKyAgICAgICAg
cmV0dXJuIHBvaW50ZXIgPj0gbV9hbGxvY2F0aW9uLmJhc2UoKSAmJiAocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocG9pbnRlcikgKyBzaXplIDw9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYWxs
b2NhdGlvbi5iYXNlKCkpICsgbV9hbGxvY2F0aW9uLnNpemUoKSk7CiAgICAgfQogI2VuZGlmCiAK
QEAgLTQzNiw4ICs0MjQsNyBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgaG91
c2VrZWVwaW5nLCB0byB0cmlnZ2VyIGRlZnJhZ21lbnRhdGlvbiBvZiB0aGUgZnJlZWQgbGlzdHMu
CiAgICAgc2l6ZV90IG1fY291bnRGcmVlZFNpbmNlTGFzdENvYWxlc2NlOwogCi0gICAgdm9pZCog
bV9iYXNlOwotICAgIHNpemVfdCBtX3RvdGFsSGVhcFNpemU7CisgICAgUGFnZUFsbG9jYXRpb24g
bV9hbGxvY2F0aW9uOwogfTsKIAogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQ
YWdlU2l6ZSgpCkBAIC00NTksMTggKzQ0NiwxNSBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmlzVmFsaWQoKSBjb25zCiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUpCiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja19o
b2xkZXIoJnNwaW5sb2NrKTsKLSAgICAKICAgICBBU1NFUlQoYWxsb2NhdG9yKTsKLSAgICBFeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyA9IHtyZWludGVycHJldF9jYXN0PGNoYXIqPihh
bGxvY2F0b3ItPmFsbG9jKHNpemUpKSwgc2l6ZX07Ci0gICAgcmV0dXJuIGFsbG9jOworICAgIHJl
dHVybiBhbGxvY2F0b3ItPmFsbG9jKHNpemUpOwogfQogCiB2b2lkIEV4ZWN1dGFibGVQb29sOjpz
eXN0ZW1SZWxlYXNlKGNvbnN0IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uJiBhbGxvY2F0aW9u
KSAKIHsKICAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotCiAgICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgYWxsb2NhdG9yLT5mcmVlKGFsbG9jYXRpb24ucGFnZXMs
IGFsbG9jYXRpb24uc2l6ZSk7CisgICAgYWxsb2NhdG9yLT5mcmVlKGFsbG9jYXRpb24pOwogfQog
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvclBvc2l4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvclBv
c2l4LmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvclBvc2l4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKLQotI2lmIEVOQUJMRShF
WEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoU1lNQklB
TikKLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZNVGFncy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCi17Ci0gICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
cGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgpOwotfQotCi1FeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlv
biBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IG4pCi17Ci0gICAgdm9pZCogYWxs
b2NhdGlvbiA9IG1tYXAoTlVMTCwgbiwgSU5JVElBTF9QUk9URUNUSU9OX0ZMQUdTLCBNQVBfUFJJ
VkFURSB8IE1BUF9BTk9OLCBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FUT1JfTUVNT1JZLCAw
KTsKLSAgICBpZiAoYWxsb2NhdGlvbiA9PSBNQVBfRkFJTEVEKQotICAgICAgICBDUkFTSCgpOwot
ICAgIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jID0geyByZWludGVycHJldF9jYXN0
PGNoYXIqPihhbGxvY2F0aW9uKSwgbiB9OwotICAgIHJldHVybiBhbGxvYzsKLX0KLQotdm9pZCBF
eGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShjb25zdCBFeGVjdXRhYmxlUG9vbDo6QWxsb2Nh
dGlvbiYgYWxsb2MpCi17IAotICAgIGludCByZXN1bHQgPSBtdW5tYXAoYWxsb2MucGFnZXMsIGFs
bG9jLnNpemUpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKLX0KLQotYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JTeW1iaWFuLmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvclN5bWJpYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCAKLSAqICBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIgotCi0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RF
TUFORCkgJiYgT1MoU1lNQklBTikKLQotI2luY2x1ZGUgPGUzMmhhbC5oPgotI2luY2x1ZGUgPGUz
MnN0ZC5oPgotCi0vLyBTZXQgdGhlIHBhZ2Ugc2l6ZSB0byAyNTYgS2IgdG8gY29tcGVuc2F0ZSBm
b3IgbW92aW5nIG1lbW9yeSBtb2RlbCBsaW1pdGF0aW9uCi1jb25zdCBzaXplX3QgTU9WSU5HX01F
TV9QQUdFX1NJWkUgPSAyNTYgKiAxMDI0OyAKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aW50aWFsaXplUGFnZVNpemUoKQotewotI2lmIENQVShBUk1WNV9P
Ul9MT1dFUikKLSAgICAvLyBUaGUgbW92aW5nIG1lbW9yeSBtb2RlbCAoYXMgdXNlZCBpbiBBUk12
NSBhbmQgZWFybGllciBwbGF0Zm9ybXMpCi0gICAgLy8gb24gU3ltYmlhbiBPUyBsaW1pdHMgdGhl
IG51bWJlciBvZiBjaHVua3MgZm9yIGVhY2ggcHJvY2VzcyB0byAxNi4gCi0gICAgLy8gVG8gbWl0
aWdhdGUgdGhpcyBsaW1pdGF0aW9uIGluY3JlYXNlIHRoZSBwYWdlc2l6ZSB0byAKLSAgICAvLyBh
bGxvY2F0ZSBsZXNzIG9mIGxhcmdlciBjaHVua3MuCi0gICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
cGFnZVNpemUgPSBNT1ZJTkdfTUVNX1BBR0VfU0laRTsKLSNlbHNlCi0gICAgVEludCBwYWdlX3Np
emU7Ci0gICAgVXNlckhhbDo6UGFnZVNpemVJbkJ5dGVzKHBhZ2Vfc2l6ZSk7Ci0gICAgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBwYWdlX3NpemU7Ci0jZW5kaWYKLX0KLQotRXhlY3V0
YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVfdCBu
KQotewotICAgIFJDaHVuayogY29kZUNodW5rID0gbmV3IFJDaHVuaygpOwotCi0gICAgVEludCBl
cnJvckNvZGUgPSBjb2RlQ2h1bmstPkNyZWF0ZUxvY2FsQ29kZShuLCBuKTsKLQotICAgIGNoYXIq
IGFsbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlQ2h1bmstPkJhc2UoKSk7
Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIEV4ZWN1dGFibGVQ
b29sOjpBbGxvY2F0aW9uIGFsbG9jID0geyBhbGxvY2F0aW9uLCBuLCBjb2RlQ2h1bmsgfTsKLSAg
ICByZXR1cm4gYWxsb2M7Ci19Ci0KLXZvaWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2Uo
Y29uc3QgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24mIGFsbG9jKQoteyAKLSAgICBhbGxvYy5j
aHVuay0+Q2xvc2UoKTsKLSAgICBkZWxldGUgYWxsb2MuY2h1bms7Ci19Ci0KLSNpZiBFTkFCTEUo
QVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKLSNlcnJvciAiQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSBu
b3QgeWV0IHN1cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgotI2VuZGlmCi0KLX0KLQotI2VuZGlm
IC8vIEhBVkUoQVNTRU1CTEVSKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yV2luLmNwcAkocmV2aXNpb24gNjM1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCi0KLSNp
ZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKSAmJiBPUyhXSU5ET1dTKQotCi0j
aW5jbHVkZSAid2luZG93cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBFeGVjdXRhYmxl
QWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCi17Ci0gICAgU1lTVEVNX0lORk8gc3lzdGVt
X2luZm87Ci0gICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOwotICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OnBhZ2VTaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKLX0KLQotRXhlY3V0
YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVfdCBu
KQotewotICAgIHZvaWQqIGFsbG9jYXRpb24gPSBWaXJ0dWFsQWxsb2MoMCwgbiwgTUVNX0NPTU1J
VCB8IE1FTV9SRVNFUlZFLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKTsKLSAgICBpZiAoIWFsbG9j
YXRpb24pCi0gICAgICAgIENSQVNIKCk7Ci0gICAgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24g
YWxsb2MgPSB7cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbiksIG59OwotICAgIHJl
dHVybiBhbGxvYzsKLX0KLQotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShjb25z
dCBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2MpCi17IAotICAgIFZpcnR1YWxGcmVl
KGFsbG9jLnBhZ2VzLCAwLCBNRU1fUkVMRUFTRSk7IAotfQotCi1ib29sIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5B
QkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi0jZXJyb3IgIkFTU0VNQkxFUl9XWF9FWENMVVNJ
VkUgbm90IHlldCBzdXBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKLSNlbmRpZgotCi19Ci0KLSNl
bmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxs
b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0
aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlv
bi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlQWxsb2NhdGlvbi5oIgorI2luY2x1ZGUgIlVu
dXNlZFBhcmFtLmgiCisKKyNpZiBIQVZFKEVSUk5PX0gpCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNl
bmRpZgorCisjaWYgSEFWRShNTUFQKQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjZW5kaWYKKwor
I2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAid2luZG93cy5oIgorI2VuZGlmCisKKyNpZiBPUyhT
WU1CSUFOKQorI2luY2x1ZGUgPGUzMmhhbC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgewor
CisjaWYgSEFWRShNTUFQKQorCisjaWYgSEFWRShNQURWX0ZSRUVfUkVVU0UpCitib29sIFBhZ2VB
bGxvY2F0aW9uOjpjb21taXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxl
LCBib29sIGV4ZWN1dGFibGUpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHdyaXRhYmxlKTsK
KyAgICBVTlVTRURfUEFSQU0oZXhlY3V0YWJsZSk7CisgICAgd2hpbGUgKG1hZHZpc2Uoc3RhcnQs
IHNpemUsIE1BRFZfRlJFRV9SRVVTRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21taXQodm9pZCog
c3RhcnQsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIHdoaWxlIChtYWR2aXNlKHN0YXJ0LCBz
aXplLCBNQURWX0ZSRUVfUkVVU0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Cit9
CisjZWxpZiBIQVZFKE1BRFZfRE9OVE5FRUQpCitib29sIFBhZ2VBbGxvY2F0aW9uOjpjb21taXQo
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUp
IGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHdyaXRhYmxlKTsKKyAgICBVTlVTRURfUEFSQU0o
ZXhlY3V0YWJsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGFnZUFsbG9jYXRpb246
OmRlY29tbWl0KHZvaWQqLCBzaXplX3QpIGNvbnN0Cit7CisgICAgd2hpbGUgKG1hZHZpc2Uoc3Rh
cnQsIHNpemUsIE1BRFZfRE9OVE5FRUQpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Cit9
CisjZWxzZQorYm9vbCBQYWdlQWxsb2NhdGlvbjo6Y29tbWl0KHZvaWQqLCBzaXplX3QsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0od3Jp
dGFibGUpOworICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3QK
K3sKK30KKyNlbmRpZgorCitQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUo
c2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUp
Cit7CisgICAgcmV0dXJuIGFsbG9jYXRlQXQoMCwgZmFsc2UsIHNpemUsIHVzYWdlLCB3cml0YWJs
ZSwgZXhlY3V0YWJsZSk7Cit9CisKK1BhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpyZXNl
cnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRh
YmxlKQoreworICAgIHJldHVybiByZXNlcnZlQXQoMCwgZmFsc2UsIHNpemUsIHVzYWdlLCB3cml0
YWJsZSwgZXhlY3V0YWJsZSk7Cit9CisKK1BhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjph
bGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCBzaXplLCBVc2FnZSB1
c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIGludCBmbGFncyA9
IE1BUF9QUklWQVRFIHwgTUFQX0FOT047CisgICAgaWYgKGZpeGVkKQorICAgICAgICBmbGFncyB8
PSBNQVBfRklYRUQ7CisKKyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBpZiAo
d3JpdGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBpZiAoZXhl
Y3V0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICB2b2lkKiBi
YXNlID0gbW1hcChhZGRyZXNzLCBzaXplLCBwcm90ZWN0aW9uLCBmbGFncywgdXNhZ2UsIDApOwor
ICAgIGlmIChiYXNlID09IE1BUF9GQUlMRUQpCisgICAgICAgIGJhc2UgPSAwOworCisgICAgcmV0
dXJuIFBhZ2VBbGxvY2F0aW9uKGJhc2UsIHNpemUpOworfQorCitQYWdlQWxsb2NhdGlvbiBQYWdl
QWxsb2NhdGlvbjo6cmVzZXJ2ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCBz
aXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAg
IFBhZ2VBbGxvY2F0aW9uIHJlc3VsdCA9IGFsbG9jYXRlQXQoYWRkcmVzcywgZml4ZWQsIHNpemUs
IHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgaWYgKCEhcmVzdWx0KQorICAgICAg
ICByZXN1bHQuZGVjb21taXQocmVzdWx0LmJhc2UoKSwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVhbGxvY2F0ZSgpCit7CisgICAgaW50IHJl
c3VsdCA9IG11bm1hcChtX2Jhc2UsIG1fc2l6ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
ICFyZXN1bHQpOworfQorCitzaXplX3QgUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkKK3sKKyAg
ICBzdGF0aWMgc2l6ZV90IHNpemUgPSAwOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgc2l6ZSA9
IGdldHBhZ2VzaXplKCk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKKyNlbGlmIEhBVkUoVklSVFVB
TEFMTE9DKQorCitzdGF0aWMgRFdPUkQgcHJvdGVjdGlvbihib29sIHdyaXRhYmxlLCBib29sIGV4
ZWN1dGFibGUpCit7CisgICAgaWYgKGV4ZWN1dGFibGUpCisgICAgICAgIHJldHVybiB3cml0YWJs
ZSA/UEFHRV9FWEVDVVRFX1JFQURXUklURSA6IFBBR0VfRVhFQ1VURV9SRUFEOworICAgIHJldHVy
biB3cml0YWJsZSA/UEFHRV9SRUFEV1JJVEUgOiBQQUdFX1JFQURPTkxZOworfQorCitib29sIFBh
Z2VBbGxvY2F0aW9uOjpjb21taXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRh
YmxlLCBib29sIGV4ZWN1dGFibGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZpcnR1YWxBbGxvYyhz
dGFydCwgc2l6ZSwgTUVNX0NPTU1JVCwgcHJvdGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkp
ID09IHN0YXJ0OworfQorCit2b2lkIFBhZ2VBbGxvY2F0aW9uOjpkZWNvbW1pdCh2b2lkKiBzdGFy
dCwgc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgVmlydHVhbEZyZWUoc3RhcnQsIHNpemUsIE1F
TV9ERUNPTU1JVCk7Cit9CisKK1BhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0
ZShzaXplX3Qgc2l6ZSwgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sK
KyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9DT01N
SVQgfCBNRU1fUkVTRVJWRSwgcHJvdGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkpLCBzaXpl
KTsKK30KKworUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OnJlc2VydmUoc2l6ZV90IHNp
emUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAg
cmV0dXJuIFBhZ2VBbGxvY2F0aW9uKFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRSwg
cHJvdGVjdGlvbih3cml0YWJsZSwgZXhlY3V0YWJsZSkpLCBzaXplKTsKK30KKwordm9pZCBQYWdl
QWxsb2NhdGlvbjo6ZGVhbGxvY2F0ZSgpCit7CisgICAgVmlydHVhbEZyZWUobV9iYXNlLCAwLCBN
RU1fUkVMRUFTRSk7IAorfQorCitzaXplX3QgUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkKK3sK
KyAgICBzdGF0aWMgc2l6ZV90IHNpemUgPSAwOworICAgIGlmICghc2l6ZSkgeworICAgICAgICBT
WVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2lu
Zm8pOworICAgICAgICBzaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICB9CisgICAg
cmV0dXJuIHNpemU7Cit9CisKKyNlbGlmIE9TKFNZTUJJQU4pCisKK2Jvb2wgUGFnZUFsbG9jYXRp
b246OmNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSkgY29uc3QKK3sKKyAgICBpZiAobV9jaHVuaykgeworICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYmFzZSgpKSAtIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzdGFydCk7CisgICAgICAgIG1fY2h1bmstPkNvbW1pdChvZmZzZXQsIHNpemUpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21t
aXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKSBjb25zdAoreworICAgIGlmIChtX2NodW5rKSB7
CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHN0YXRpY19jYXN0PGludHB0cl90PihiYXNlKCkp
IC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAgICAgbV9jaHVuay0+RGVjb21t
aXQob2Zmc2V0LCBzaXplKTsKKyAgICB9Cit9CisKK1BhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0
aW9uOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSkKK3sKKyAgICBpZiAoIWV4ZWN1dGFibGUpCisgICAgICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihmYXN0TWFsbG9jKHNpemUpLCBzaXplLCAwKTsKKyAgICBSQ2h1bmsqIHJj
aHVuayA9IG5ldyBSQ2h1bmsoKTsKKyAgICBUSW50IGVycm9yQ29kZSA9IHJjaHVuay0+Q3JlYXRl
TG9jYWxDb2RlKHNpemUsIHNpemUpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihyY2h1bmst
PkJhc2UoKSwgc2l6ZSwgcmNodW5rKTsKK30KKworUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRp
b246OnJlc2VydmUoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUpCit7CisgICAgaWYgKCFleGVjdXRhYmxlKQorICAgICAgICByZXR1cm4gUGFn
ZUFsbG9jYXRpb24oZmFzdE1hbGxvYyhzaXplKSwgc2l6ZSwgMCk7CisgICAgUkNodW5rKiByY2h1
bmsgPSBuZXcgUkNodW5rKCk7CisgICAgVEludCBlcnJvckNvZGUgPSByY2h1bmstPkNyZWF0ZUxv
Y2FsQ29kZSgwLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmNodW5rLCByY2h1
bmstPkJhc2UoKSwgc2l6ZSk7Cit9CisKK3ZvaWQgUGFnZUFsbG9jYXRpb246OmRlYWxsb2NhdGUo
KQoreworICAgIGlmIChtX2NodW5rKSB7CisgICAgICAgIG1fY2h1bmstPkNsb3NlKCk7CisgICAg
ICAgIGRlbGV0ZSBtX2NodW5rOworICAgIH0gZWxzZQorICAgICAgICBmYXN0RnJlZShtX2Jhc2Up
OworfQorCitzaXplX3QgUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkKK3sKKyAgICBzdGF0aWMg
VEludCBwYWdlX3NpemUgPSAwOworICAgIGlmICghcGFnZV9zaXplKQorICAgICAgICBVc2VySGFs
OjpQYWdlU2l6ZUluQnl0ZXMocGFnZV9zaXplKTsKKyAgICByZXR1cm4gcGFnZV9zaXplOworfQor
CisjZW5kaWYKKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJKHJldmlz
aW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQYWdlQWxsb2NhdGlvbl9oCisjZGVmaW5lIFBhZ2VBbGxvY2F0
aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KKworI2lmIE9TKFNZTUJJQU4pCisjaW5j
bHVkZSA8ZTMyc3RkLmg+CisjZW5kaWYKKworI2lmIEhBVkUoTU1BUCkKKyNkZWZpbmUgUEFHRV9B
TExPQ0FUSU9OX0FMTE9DQVRFX0FUIDEKKyNlbHNlCisjZGVmaW5lIFBBR0VfQUxMT0NBVElPTl9B
TExPQ0FURV9BVCAwCisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBhZ2VBbGxv
Y2F0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIFVzYWdlIHsKKyAgICAgICAgVW5rbm93blVzYWdl
ID0gLTEsCisgICAgICAgIEZhc3RNYWxsb2NQYWdlcyA9IFZNX1RBR19GT1JfVENNQUxMT0NfTUVN
T1JZLAorICAgICAgICBKU0dDSGVhcFBhZ2VzID0gVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZ
LAorICAgICAgICBKU1ZNU3RhY2tQYWdlcyA9IFZNX1RBR19GT1JfUkVHSVNURVJGSUxFX01FTU9S
WSwKKyAgICAgICAgSlNKSVRDb2RlUGFnZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExPQ0FU
T1JfTUVNT1JZLAorICAgIH07CisKKyAgICBQYWdlQWxsb2NhdGlvbigpCisgICAgICAgIDogbV9i
YXNlKDApCisgICAgICAgICwgbV9zaXplKDApCisjaWYgT1MoU1lNQklBTikKKyAgICAgICAgLCBt
X2NodW5rKDApCisjZW5kaWYKKyAgICB7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgUGFnZUFs
bG9jYXRpb24gb2JqZWN0IHJlcHJlc2VudGluZyBhIHN1Yi1yZWdpb24gb2YgYW4gZXhpc3Rpbmcg
YWxsb2NhdGlvbjsKKyAgICAvLyBkZWFsbG9jYXRlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24g
YW4gb2JqZWN0IHJlcHJlc250aW5nIGEgc3VicmVnaW9uLCBvbmx5IG9uIHRoZQorICAgIC8vIGlu
aXRpYWwgYWxsb2NhdGlvbi4KKyAgICBQYWdlQWxsb2NhdGlvbih2b2lkKiBiYXNlLCBzaXplX3Qg
c2l6ZSwgY29uc3QgUGFnZUFsbG9jYXRpb24mIHBhcmVudCkKKyAgICAgICAgOiBtX2Jhc2UoYmFz
ZSkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNpZiBPUyhTWU1CSUFOKQorICAgICAgICAsIG1f
Y2h1bmsocGFyZW50LmNodW5rKQorI2VuZGlmCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZSA+
PSBwYXJlbnQubV9iYXNlKTsKKyAgICAgICAgQVNTRVJUKHNpemUgPD0gcGFyZW50Lm1fc2l6ZSk7
CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZSkgKyBzaXplIDw9IHN0YXRp
Y19jYXN0PGNoYXIqPihwYXJlbnQubV9iYXNlKSArIHBhcmVudC5tX3NpemUpOworICAgIH0KKwor
ICAgIHZvaWQqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9iYXNlOyB9CisKKyAgICBib29sIGNvbW1pdCh2b2lkKiwgc2l6ZV90LCBi
b29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpIGNvbnN0OworICAg
IHZvaWQgZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3Q7CisgICAgdm9pZCBkZWFsbG9jYXRl
KCk7CisKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGUoc2l6ZV90LCBVc2FnZSA9
IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZh
bHNlKTsKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZShzaXplX3QsIFVzYWdlID0g
VW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFs
c2UpOworI2lmIFBBR0VfQUxMT0NBVElPTl9BTExPQ0FURV9BVAorICAgIHN0YXRpYyBQYWdlQWxs
b2NhdGlvbiBhbGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNh
Z2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUg
PSBmYWxzZSk7CisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBdCh2b2lkKiBhZGRy
ZXNzLCBib29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRh
YmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOworI2VuZGlmCisgICAgc3RhdGlj
IHNpemVfdCBwYWdlc2l6ZSgpOworCitwcml2YXRlOgorI2lmIE9TKFNZTUJJQU4pCisgICAgUGFn
ZUFsbG9jYXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIFJDaHVuayogY2h1bmspCisgICAg
ICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9j
aHVuayhjaHVuaykKKyAgICB7CisgICAgfQorI2Vsc2UKKyAgICBQYWdlQWxsb2NhdGlvbih2b2lk
KiBiYXNlLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBtX2Jhc2UoYmFzZSkKKyAgICAgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICB7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2Jhc2U7Cisg
ICAgc2l6ZV90IG1fc2l6ZTsKKyNpZiBPUyhTWU1CSUFOKQorICAgIFJDaHVuayogbV9jaHVuazsK
KyNlbmRpZgorfTsKKworfQorCit1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOworCisjZW5kaWYg
Ly8gUGFnZUFsbG9jYXRpb25faAo=
</data>
<flag name="review"
          id="50869"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>