<?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>33985</bug_id>
          
          <creation_ts>2010-01-21 19:28:45 -0800</creation_ts>
          <short_desc>The Chromium WebKit API needs to expose storage event related data</short_desc>
          <delta_ts>2010-01-22 12:35:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183449</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-01-21 19:28:45 -0800</bug_when>
    <thetext>The Chromium WebKit API needs to expose storage event related data.  Without it, there&apos;s no way for the embedder to know a storage event should be fired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183621</commentid>
    <comment_count>1</comment_count>
      <attachid>47196</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-22 06:19:57 -0800</bug_when>
    <thetext>Created attachment 47196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183622</commentid>
    <comment_count>2</comment_count>
      <attachid>47196</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-22 06:21:30 -0800</bug_when>
    <thetext>Comment on attachment 47196
Patch

Uploaded patch to wrong bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183703</commentid>
    <comment_count>3</comment_count>
      <attachid>47213</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-01-22 11:04:04 -0800</bug_when>
    <thetext>Created attachment 47213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183712</commentid>
    <comment_count>4</comment_count>
      <attachid>47213</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-01-22 11:14:32 -0800</bug_when>
    <thetext>Comment on attachment 47213
Patch

&gt; Index: WebKit/chromium/public/WebStorageArea.h
...
&gt; +    virtual void setItem(const WebString&amp; key, const WebString&amp; newValue, const WebURL&amp; url, bool&amp; quotaException) // Deprecated.
&gt; +    {
&gt; +        WebString oldValue;
&gt; +        setItem(key, newValue, url, quotaException, trash);

s/trash/oldValue/ ?


&gt; +    virtual void clear(const WebURL&amp; url) // Deprecated.
&gt; +    {
&gt; +        WebString somethingCleared;
&gt; +        clear(url, somethingCleared);

WebString -&gt; bool


Please add a FIXME note about cleaning this up once the Chromium side is adapted.



&gt; Index: WebKit/chromium/src/StorageAreaProxy.cpp
...
&gt; +    if (static_cast&lt;String&gt;(oldValue) != value)

nit: I usually just write String(oldValue) in cases like this.  It results in
the same code.


Otherwise, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183716</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-01-22 11:19:32 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 47213 [details])
&gt; &gt; Index: WebKit/chromium/public/WebStorageArea.h
&gt; ...
&gt; &gt; +    virtual void setItem(const WebString&amp; key, const WebString&amp; newValue, const WebURL&amp; url, bool&amp; quotaException) // Deprecated.
&gt; &gt; +    {
&gt; &gt; +        WebString oldValue;
&gt; &gt; +        setItem(key, newValue, url, quotaException, trash);
&gt; 
&gt; s/trash/oldValue/ ?
&gt; 
&gt; 
&gt; &gt; +    virtual void clear(const WebURL&amp; url) // Deprecated.
&gt; &gt; +    {
&gt; &gt; +        WebString somethingCleared;
&gt; &gt; +        clear(url, somethingCleared);
&gt; 
&gt; WebString -&gt; bool

Oops...note to self: webkit-patch takes a snapshot when you first start running it...so don&apos;t start it until after you&apos;ve saved the file.  :-)

&gt; 
&gt; Please add a FIXME note about cleaning this up once the Chromium side is
&gt; adapted.
&gt; 
&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/src/StorageAreaProxy.cpp
&gt; ...
&gt; &gt; +    if (static_cast&lt;String&gt;(oldValue) != value)
&gt; 
&gt; nit: I usually just write String(oldValue) in cases like this.  It results in
&gt; the same code.

Done.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183723</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-22 11:35:33 -0800</bug_when>
    <thetext>Attachment 47213 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/206016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183725</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-22 11:39:23 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; +    if (static_cast&lt;String&gt;(oldValue) != value)
&gt; 
&gt; nit: I usually just write String(oldValue) in cases like this.  It results in the same code.

I recommend a local variable instead. Because the String(x) syntax is too powerful. It can do anything a C-style cast can do and more. Assignment to a local variable only works when the conversion can be done without any typecasting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183743</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-01-22 12:17:55 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; &gt; +    if (static_cast&lt;String&gt;(oldValue) != value)
&gt; &gt; 
&gt; &gt; nit: I usually just write String(oldValue) in cases like this.  It results in the same code.
&gt; 
&gt; I recommend a local variable instead. Because the String(x) syntax is too
&gt; powerful. It can do anything a C-style cast can do and more. Assignment to a
&gt; local variable only works when the conversion can be done without any
&gt; typecasting.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183753</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-01-22 12:35:44 -0800</bug_when>
    <thetext>Committed r53710: &lt;http://trac.webkit.org/changeset/53710&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47196</attachid>
            <date>2010-01-22 06:19:57 -0800</date>
            <delta_ts>2010-01-22 06:21:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33985-20100122141953.patch</filename>
            <type>text/plain</type>
            <size>57393</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDEtMjIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIEpTQy1zcGVjaWZpYyBjbGFzc2VzIGZyb20gYnJpZGdlL2puaS9KTklCcmlkZ2UgdG8g
YnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMzk1OAorCisgICAgICAgIFRoaXMgYWxsb3dzIGJyaWRnZS9q
bmkvSk5JQnJpZGdlIHRvIGJlIHVzZWQgd2l0aCBib3RoIEpTQyBhbmQgVjguCisgICAgICAgIEEg
bGF0ZXIgY2hhbmdlIHdpbGwgYWRkIHRoZSBWOCBlcXVpdmFsZW50IG9mIHRoZXNlIEpTQy1zcGVj
aWZpYyBjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3Jpbmcgb25seS4K
KworICAgICAgICAqIEFuZHJvaWQuanNjYmluZGluZ3MubWs6IE1vZGlmaWVkLiBBZGRlZCBKTklC
cmlkZ2VKU0MuY3BwCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IE1vZGlmaWVkLiBBZGRlZCBK
TklCcmlkZ2VKU0MuaAorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogTW9kaWZpZWQuIEFkZGVkIEpOSUJyaWRnZUpTQy5bY3BwfGhdCisgICAgICAgICogYnJpZGdl
L2puaS9KTklCcmlkZ2UuY3BwOiBNb2RpZmllZC4gTW92ZWQgSmF2YUZpZWxkIGFuZCBKYXZhQXJy
YXkgdG8gSk5JQnJpZGdlSlNDLmNwcAorICAgICAgICAoYXBwZW5kQ2xhc3NOYW1lKTogTW9kZmll
ZC4gR3VhcmQgY2FsbHMgdG8gSlNMb2NrCisgICAgICAgIChKYXZhTWV0aG9kOjpzaWduYXR1cmUp
OiBNb2RmaWVkLiBHdWFyZCBjYWxscyB0byBKU0xvY2sKKyAgICAgICAgKiBicmlkZ2Uvam5pL0pO
SUJyaWRnZS5oOiBNb2RpZmllZC4gTW92ZWQgSmF2YUZpZWxkIGFuZCBKYXZhQXJyYXkgdG8gSk5J
QnJpZGdlSlNDLmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcC4KKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaDogQ29waWVkIGZyb20gV2ViQ29yZS9icmlkZ2Uv
am5pL0pOSUJyaWRnZS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2
YXRlLmNwcDogTW9kaWZpZWQuIEluY2x1ZGUgSk5JQnJpZGdlSlNDLmgKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaDogTW9kaWZpZWQuIEluY2x1ZGUgSk5JQnJpZGdlSlND
LmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOiBNb2RpZmll
ZC4gSW5jbHVkZSBKTklCcmlkZ2VKU0MuaAorCiAyMDEwLTAxLTIyICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFF0ICJidWls
ZCIgZml4LgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24gNTM3MDApCisrKyBX
ZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsx
ODYsNyBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAogCWJyaWRnZS9jL2NfdXRpbGl0eS5jcHAgXAog
CWJyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcCBcCiAJYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcCBc
CisJYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcCBcCiAJYnJpZGdlL2puaS9qc2MvSk5J
VXRpbGl0eVByaXZhdGUuY3BwIFwKIAlicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwIFwK
IAlicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNTM3MDApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01
MTgsNiArNTE4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkv
Sk5JQnJpZGdlLmggXAogCVdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmggXAogCVdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QuaCBcCisJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
TklCcmlkZ2VKU0MuaCBcCiAJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaCBc
CiAJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaCBcCiAJV2ViQ29yZS9i
cmlkZ2UvanNjL0JyaWRnZUpTQy5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDYgKzExMzAsOCBA
QAogCQk1OUM3N0YyQjEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlDNzdGMjkx
MDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OUU1NjBBNzExMDUzMzY2MDBB
QTEyNTggLyogSmF2YUNsYXNzSlNDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUU1NjBBNjExMDUzMzY2MDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmgg
Ki87IH07CiAJCTU5RTU2MEE5MTEwNTMzNkYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFNTYwQTgxMTA1
MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgKi87IH07CisJCTU5RTg0MjY2MTEwOUU1
QTIwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTg0MjY1MTEwOUU1QTIwMDAzMDVBRCAvKiBKTklCcmlkZ2VK
U0MuaCAqLzsgfTsKKwkJNTlFODQyNjgxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUU4NDI2
NzExMDlFNUFFMDAwMzA1QUQgLyogSk5JQnJpZGdlSlNDLmNwcCAqLzsgfTsKIAkJNTlFRTEyMkMx
MTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAv
KiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi87IH07CiAJCTU5RUUxMjJFMTEwNjA4MEYwMDg4NTEx
NiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTlFRTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2
YXRlLmggKi87IH07CiAJCTU5RUUxMjMwMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJG
MTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCAqLzsgfTsKQEAgLTY1MDksNiArNjUx
MSw4IEBACiAJCTU5Qzc3RjI5MTA1NDVCM0IwMDUwNjEwNCAvKiBHZW9sb2NhdGlvblNlcnZpY2VN
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlb2xvY2F0aW9uU2Vydmlj
ZU1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1OUU1NjBBNjExMDUzMzY2MDBBQTEyNTggLyogSmF2YUNsYXNz
SlNDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFDbGFzc0pTQy5oOyBw
YXRoID0ganNjL0phdmFDbGFzc0pTQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
OUU1NjBBODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFDbGFzc0pTQy5jcHA7IHBhdGggPSBqc2MvSmF2
YUNsYXNzSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTlFODQyNjUxMTA5
RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKTklCcmlkZ2VKU0MuaDsgcGF0aCA9IGpzYy9KTklCcmlkZ2VKU0MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTlFODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJy
aWRnZUpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklCcmlk
Z2VKU0MuY3BwOyBwYXRoID0ganNjL0pOSUJyaWRnZUpTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklVdGlsaXR5UHJp
dmF0ZS5jcHA7IHBhdGggPSBqc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0eVBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5JVXRpbGl0eVByaXZh
dGUuaDsgcGF0aCA9IGpzYy9KTklVdGlsaXR5UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1OUVFMTIyRjExMDYwODFGMDA4ODUxMTYgLyogSk5JVXRpbGl0eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKTklVdGlsaXR5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTE3LDYgKzExMTIxLDggQEAKIAkJNTk5RDFFMkYx
MEM5N0Q0QzAwRTBFRjEyIC8qIGpzYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTlFODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5j
cHAgKi8sCisJCQkJNTlFODQyNjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICov
LAogCQkJCTU5RUUxMjJEMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oICov
LAogCQkJCTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAg
Ki8sCiAJCQkJNTlCQzM5M0UxMTA1NEExMzAwRkQ4NURCIC8qIEphdmFTdHJpbmdKU0MuaCAqLywK
QEAgLTE4NDU1LDYgKzE4NDYxLDcgQEAKIAkJCQk1OUI1OTc3NTExMDg2NTc5MDA3MTU5RTggLyog
QnJpZGdlSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0M0RjZFQjExMDhGOUE1MDA5OUQwREIg
LyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyRkNBQzQx
MTA5MjdDRTAwQ0M0ODIxIC8qIEpTU1ZHQ29udGV4dENhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1OUU4NDI2NjExMDlFNUEyMDAwMzA1QUQgLyogSk5JQnJpZGdlSlNDLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIwNjI5LDYgKzIwNjM2LDcgQEAKIAkJCQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcg
LyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTU5QjU5NzczMTEwODY1NkIwMDcxNTlF
OCAvKiBCcmlkZ2VKU0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNDNEY2RUExMTA4RjlBNTAw
OTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTlFODQyNjgxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCShyZXZpc2lvbiA1MzcwMCkKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCAr
MzAsOCBAQAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKICNpbmNsdWRlICJDU3RyaW5n
LmgiCi0jaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRl
LmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgotI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXku
aCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5o
IgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgorCiAKICNpZmRlZiBOREVCVUcKICNkZWZpbmUgSlNfTE9HKGZvcm1hdEFuZEFyZ3MuLi4pICgo
dm9pZCkwKQpAQCAtNTksMjA2ICs1Myw2IEBAIEphdmFQYXJhbWV0ZXI6OkphdmFQYXJhbWV0ZXIo
Sk5JRW52KiBlbnYKICAgICBtX0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZShtX3R5cGUu
VVRGOFN0cmluZygpKTsKIH0KIAotSmF2YUZpZWxkOjpKYXZhRmllbGQoSk5JRW52KiBlbnYsIGpv
YmplY3QgYUZpZWxkKQotewotICAgIC8vIEdldCBmaWVsZCB0eXBlCi0gICAgam9iamVjdCBmaWVs
ZFR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUiLCAiKClMamF2
YS9sYW5nL0NsYXNzOyIpOwotICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0
PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIo
KUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKLSAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgZmll
bGRUeXBlTmFtZSk7Ci0gICAgbV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBl
LlVURjhTdHJpbmcoKSk7Ci0KLSAgICAvLyBHZXQgZmllbGQgbmFtZQotICAgIGpzdHJpbmcgZmll
bGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmll
bGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOwotICAgIG1fbmFtZSA9IEph
dmFTdHJpbmcoZW52LCBmaWVsZE5hbWUpOwotCi0gICAgbV9maWVsZCA9IG5ldyBKT2JqZWN0V3Jh
cHBlcihhRmllbGQpOwotfQotCi1KU1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0Fy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0KQotewotICAgIGlmICh0eXBlWzBdICE9
ICdbJykKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gbmV3IChl
eGVjKSBSdW50aW1lQXJyYXkoZXhlYywgbmV3IEphdmFBcnJheShhbk9iamVjdCwgdHlwZSwgcm9v
dE9iamVjdCkpOwotfQotCi1qdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3Rh
bmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Ci17
Ci0gICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAg
am9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52
KiBlbnYgPSBnZXRKTklFbnYoKTsKLSAgICBqdmFsdWUgcmVzdWx0OwotCi0gICAgYnplcm8oJnJl
c3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENs
YXNzKGZpZWxkSkluc3RhbmNlKTsKLSAgICBpZiAoY2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBt
aWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkg
ewotICAgICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2Jq
ZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVI
YW5kbGUoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMV07Ci0KLSAgICAgICAgICAgICAgICBhcmdz
WzBdLmwgPSBqaW5zdGFuY2U7Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMs
IHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVy
blR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9T
dHJpbmcoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLUpTVmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpKSBjb25zdAotewotICAgIGNvbnN0IEphdmFJ
bnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UqPihpKTsK
LQotICAgIEpTVmFsdWUganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotCi0gICAgc3dpdGNoICht
X0pOSVR5cGUpIHsKLSAgICBjYXNlIGFycmF5X3R5cGU6Ci0gICAgY2FzZSBvYmplY3RfdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFsdWVGcm9t
SW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylMamF2
YS9sYW5nL09iamVjdDsiLCBvYmplY3RfdHlwZSk7Ci0gICAgICAgICAgICBqb2JqZWN0IGFuT2Jq
ZWN0ID0gcmVzdWx0Lmw7Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5
cGUoKTsKLSAgICAgICAgICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQotICAgICAgICAgICAg
ICAgIGpzcmVzdWx0ID0gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5P
YmplY3QsIGFycmF5VHlwZSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChhbk9iamVjdCkKLSAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5j
ZTo6Y3JlYXRlKGFuT2JqZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGlt
ZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYm9v
bGVhbl90eXBlOgotICAgICAgICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJv
bUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KVoiLCBib29sZWFuX3R5cGUpLnopOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYnl0
ZV90eXBlOgotICAgIGNhc2UgY2hhcl90eXBlOgotICAgIGNhc2Ugc2hvcnRfdHlwZToKLQotICAg
IGNhc2UgaW50X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGppbnQgdmFsdWU7Ci0gICAg
ICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7Ci0g
ICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQgPSBqc051
bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGxvbmdfdHlwZToKLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAg
Y2FzZSBkb3VibGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsK
LSAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4
ZWMsIGluc3RhbmNlLCAiZ2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJs
ZV90eXBlKTsKLSAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBKU19MT0coImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1lKCkpLlVURjhT
dHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKLQotICAg
IHJldHVybiBqc3Jlc3VsdDsKLX0KLQotdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwg
anZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25z
dAotewotICAgIGpvYmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwot
ICAgIGpvYmplY3QgZmllbGRKSW5zdGFuY2UgPSBtX2ZpZWxkLT5tX2luc3RhbmNlOwotICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0KLSAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmpl
Y3RDbGFzcyhmaWVsZEpJbnN0YW5jZSk7Ci0gICAgaWYgKGNscykgewotICAgICAgICBqbWV0aG9k
SUQgbWlkID0gZW52LT5HZXRNZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7Ci0gICAgICAgIGlmICht
aWQpIHsKLSAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9v
dE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uOwotICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJdOwotICAgICAgICAgICAgICAgIGp2
YWx1ZSByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7Ci0g
ICAgICAgICAgICAgICAgYXJnc1sxXSA9IGphdmFWYWx1ZTsKLSAgICAgICAgICAgICAgICBkaXNw
YXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3Rh
bmNlLCBmYWxzZSwgdm9pZF90eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVz
Y3JpcHRpb24pOwotICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBKYXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBj
b25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3Rh
bmNlKj4oaSk7Ci0gICAganZhbHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4
ZWMsIGFWYWx1ZSwgbV9KTklUeXBlLCB0eXBlKCkpOwotCi0gICAgSlNfTE9HKCJzZXR0aW5nIHZh
bHVlICVzIHRvICVzXG4iLCBVU3RyaW5nKG5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGFW
YWx1ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKLQotICAgIHN3aXRjaCAobV9KTklUeXBlKSB7
Ci0gICAgY2FzZSBhcnJheV90eXBlOgotICAgIGNhc2Ugb2JqZWN0X3R5cGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBq
YXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylW
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGJvb2xlYW5fdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywg
aW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1op
ViIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBieXRlX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRlIiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5j
ZSwgamF2YVZhbHVlLCAic2V0Q2hhciIsICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIHNob3J0X3R5cGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBq
YXZhVmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZh
bHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5nL09iamVjdDtJKVYiKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAi
c2V0TG9uZyIsICIoTGphdmEvbGFuZy9PYmplY3Q7SilWIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRp
c3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRG
bG9hdCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIGRvdWJsZV90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91
YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDtEKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIEphdmFNZXRob2Q6
OkphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKIHsKICAgICAvLyBHZXQg
cmV0dXJuIHR5cGUKQEAgLTMwOSw3ICsxMDMsOSBAQCBKYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgp
CiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0aW9uIEFQ
SS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBjaGFyKiBjbGFzc05hbWUpCiB7CisjaWYgVVNFKEpTQykKICAgICBBU1NFUlQoSlNMb2Nr
Ojpsb2NrQ291bnQoKSA+IDApOworI2VuZGlmCiAKICAgICBjaGFyKiBjID0gc3RyZHVwKGNsYXNz
TmFtZSk7CiAKQEAgLTMyOCw3ICsxMjQsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUo
U3RyaW5nQnVpbGRlCiBjb25zdCBjaGFyKiBKYXZhTWV0aG9kOjpzaWduYXR1cmUoKSBjb25zdAog
ewogICAgIGlmICghbV9zaWduYXR1cmUpIHsKKyNpZiBVU0UoSlNDKQogICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworI2VuZGlmCiAKICAgICAgICAgU3RyaW5nQnVp
bGRlciBzaWduYXR1cmVCdWlsZGVyOwogICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgi
KCIpOwpAQCAtMzc3LDIwMCArMTc1LDQgQEAgam1ldGhvZElEIEphdmFNZXRob2Q6Om1ldGhvZElE
KGpvYmplY3QgbwogICAgIHJldHVybiBtX21ldGhvZElEOwogfQogCi0KLUphdmFBcnJheTo6SmF2
YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iamVjdCkKLSAgICA6IEFycmF5KHJvb3RPYmplY3QpCi17Ci0gICAgbV9hcnJh
eSA9IG5ldyBKT2JqZWN0V3JhcHBlcihhcnJheSk7Ci0gICAgLy8gSmF2YSBhcnJheSBhcmUgZml4
ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgotICAgIEpOSUVudiogZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgbV9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHN0YXRpY19jYXN0
PGphcnJheT4obV9hcnJheS0+bV9pbnN0YW5jZSkpOwotICAgIG1fdHlwZSA9IHN0cmR1cCh0eXBl
KTsKLSAgICBtX3Jvb3RPYmplY3QgPSByb290T2JqZWN0OwotfQotCi1KYXZhQXJyYXk6On5KYXZh
QXJyYXkoKQotewotICAgIGZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV90eXBlKSk7Ci19Ci0KLVJv
b3RPYmplY3QqIEphdmFBcnJheTo6cm9vdE9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cm9vdE9iamVjdCAmJiBtX3Jvb3RPYmplY3QtPmlzVmFsaWQoKSA/IG1fcm9vdE9iamVjdC5nZXQo
KSA6IDA7Ci19Ci0KLXZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBjb25zdAotewotICAgIEpOSUVudiogZW52
ID0gZ2V0Sk5JRW52KCk7Ci0gICAgY2hhciogamF2YUNsYXNzTmFtZSA9IDA7Ci0KLSAgICBKTklU
eXBlIGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0pOwotICAg
IGlmIChtX3R5cGVbMV0gPT0gJ0wnKSB7Ci0gICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBhcnJh
eSB3aWxsIGJlIHNvbWV0aGluZyBsaWtlOgotICAgICAgICAvLyAiW0xqYXZhLmxhbmcuc3RyaW5n
OyIuICBUaGlzIGlzIGd1YXJhbnRlZWQsIHNvIG5vIG5lZWQKLSAgICAgICAgLy8gZm9yIGV4dHJh
IHNhbml0eSBjaGVja3MuCi0gICAgICAgIGphdmFDbGFzc05hbWUgPSBzdHJkdXAoJm1fdHlwZVsy
XSk7Ci0gICAgICAgIGphdmFDbGFzc05hbWVbc3RyY2hyKGphdmFDbGFzc05hbWUsICc7JyktamF2
YUNsYXNzTmFtZV0gPSAwOwotICAgIH0KLSAgICBqdmFsdWUgYUpWYWx1ZSA9IGNvbnZlcnRWYWx1
ZVRvSlZhbHVlKGV4ZWMsIGFWYWx1ZSwgYXJyYXlUeXBlLCBqYXZhQ2xhc3NOYW1lKTsKLQotICAg
IHN3aXRjaCAoYXJyYXlUeXBlKSB7Ci0gICAgY2FzZSBvYmplY3RfdHlwZToKLSAgICAgICAgewot
ICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVj
dEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCBhSlZhbHVlLmwpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYm9vbGVhbl90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqYm9vbGVhbkFy
cmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS56KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGJ5dGVfdHlwZToKLSAgICAgICAgewotICAgICAg
ICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amJ5dGVBcnJheT4oamF2
YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgY2FzZSBjaGFyX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVu
di0+U2V0Q2hhckFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgp
KSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgIGNhc2Ugc2hvcnRfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRT
aG9ydEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSksIGlu
ZGV4LCAxLCAmYUpWYWx1ZS5zKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYtPlNldEludEFycmF5
UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFK
VmFsdWUuaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25n
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0TG9uZ0FycmF5UmVnaW9uKHN0
YXRpY19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmop
OwotICAgICAgICB9Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqZmxvYXRBcnJheT4oamF2
YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgY2FzZSBkb3VibGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAg
ZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqZG91YmxlQXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoamF2
YUNsYXNzTmFtZSkKLSAgICAgICAgZnJlZShjb25zdF9jYXN0PGNoYXIqPihqYXZhQ2xhc3NOYW1l
KSk7Ci19Ci0KLQotSlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwot
ICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKG1fdHlwZVsx
XSk7Ci0gICAgc3dpdGNoIChhcnJheVR5cGUpIHsKLSAgICBjYXNlIG9iamVjdF90eXBlOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSBzdGF0aWNfY2Fz
dDxqb2JqZWN0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpvYmplY3QgYW5PYmpl
Y3Q7Ci0gICAgICAgICAgICBhbk9iamVjdCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG9i
amVjdEFycmF5LCBpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIE5vIG9iamVjdD8KLSAgICAgICAg
ICAgIGlmICghYW5PYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0g
ICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXk/Ci0gICAgICAgICAgICBpZiAobV90eXBlWzFdID09
ICdbJykKLSAgICAgICAgICAgICAgICByZXR1cm4gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRv
QXJyYXkoZXhlYywgYW5PYmplY3QsIG1fdHlwZSArIDEsIHJvb3RPYmplY3QoKSk7Ci0gICAgICAg
ICAgICAvLyBvciBhcnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KLSAgICAgICAgICAgIHJldHVy
biBKYXZhSW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBib29sZWFuX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFycmF5ID0gc3RhdGlj
X2Nhc3Q8amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamJvb2xlYW4g
YUJvb2xlYW47Ci0gICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJlZ2lvbihib29sZWFu
QXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihhQm9vbGVhbik7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYnl0ZV90eXBlOgotICAgICAgICB7
Ci0gICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJy
YXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpieXRlIGFCeXRlOwotICAgICAgICAgICAg
ZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhQnl0ZSk7Ci0gICAgICAgIH0KLQotICAg
IGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqY2hhckFycmF5IGNoYXJB
cnJheSA9IHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAg
IGpjaGFyIGFDaGFyOwotICAgICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlSZWdpb24oY2hhckFy
cmF5LCBpbmRleCwgMSwgJmFDaGFyKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVj
LCBhQ2hhcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBzaG9y
dF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFycmF5ID0g
c3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpzaG9y
dCBhU2hvcnQ7Ci0gICAgICAgICAgICBlbnYtPkdldFNob3J0QXJyYXlSZWdpb24oc2hvcnRBcnJh
eSwgaW5kZXgsIDEsICZhU2hvcnQpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGFTaG9ydCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgaW50X3R5cGU6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2
YUFycmF5KCkpOwotICAgICAgICAgICAgamludCBhbkludDsKLSAgICAgICAgICAgIGVudi0+R2V0
SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwotICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFuSW50KTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25n
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3Rh
dGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamxvbmcgYUxv
bmc7Ci0gICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4
LCAxLCAmYUxvbmcpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFMb25nKTsK
LSAgICAgICAgfQotCi0gICAgY2FzZSBmbG9hdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBqZmxvYXRBcnJheSBmbG9hdEFycmF5ID0gc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFB
cnJheSgpKTsKLSAgICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7Ci0gICAgICAgICAgICBlbnYtPkdl
dEZsb2F0QXJyYXlSZWdpb24oZmxvYXRBcnJheSwgaW5kZXgsIDEsICZhRmxvYXQpOwotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFGbG9hdCk7Ci0gICAgICAgIH0KLQotICAgIGNh
c2UgZG91YmxlX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3Vi
bGVBcnJheSA9IHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAg
ICAgICAgamRvdWJsZSBhRG91YmxlOwotICAgICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJl
Z2lvbihkb3VibGVBcnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKLSAgICAgICAgICAgIHJldHVy
biBqc051bWJlcihleGVjLCBhRG91YmxlKTsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotdW5zaWdu
ZWQgaW50IEphdmFBcnJheTo6Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sZW5n
dGg7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQpJbmRleDogV2ViQ29y
ZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9KTklCcmlkZ2UuaAkocmV2aXNpb24gNTM3MDApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5J
QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQogCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkphdmFJ
bnN0YW5jZUpTQy5oIgogCiAjaWYgVVNFKEpTQykKICNpbmNsdWRlICJKYXZhU3RyaW5nSlNDLmgi
CkBAIC04NCwzMCArODMsNiBAQCBwcml2YXRlOgogICAgIEpOSVR5cGUgbV9KTklUeXBlOwogfTsK
IAotCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQgewotcHVibGljOgotICAgIEphdmFG
aWVsZChKTklFbnYqLCBqb2JqZWN0IGFGaWVsZCk7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFs
dWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNl
KiwgSlNWYWx1ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlLlVURjhTdHJpbmcoKTsgfQotCi0gICAgSk5JVHlwZSBnZXRKTklUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBq
dmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZykgY29uc3Q7Ci0gICAganZh
bHVlIGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSmF2YUluc3Rh
bmNlKiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5
cGUpIGNvbnN0OwotCi0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0gICAgSmF2YVN0cmluZyBtX3R5
cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVR5cGU7Ci0gICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBt
X2ZpZWxkOwotfTsKLQotCiBjbGFzcyBKYXZhTWV0aG9kIDogcHVibGljIE1ldGhvZCB7CiBwdWJs
aWM6CiAgICAgSmF2YU1ldGhvZChKTklFbnYqLCBqb2JqZWN0IGFNZXRob2QpOwpAQCAtMTM2LDI3
ICsxMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1N0YXRpYzsKIH07CiAKLWNsYXNzIEph
dmFBcnJheSA6IHB1YmxpYyBBcnJheSB7Ci1wdWJsaWM6Ci0gICAgSmF2YUFycmF5KGpvYmplY3Qg
YXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwotICAgIHZp
cnR1YWwgfkphdmFBcnJheSgpOwotCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50
IGluZGV4LCBKU1ZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldExlbmd0aCgpIGNvbnN0OwotCi0gICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5LT5tX2luc3RhbmNlOyB9Ci0KLSAgICBzdGF0aWMgSlNWYWx1ZSBjb252
ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiwgam9iamVjdCwgY29uc3QgY2hhciogdHlwZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEpPYmplY3RX
cmFwcGVyPiBtX2FycmF5OwotICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsKLSAgICBjb25zdCBj
aGFyKiBtX3R5cGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAJKHJl
dmlzaW9uIDUzNjk3KQkoZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmNwcDo1MzY5
NykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKworI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0
eS5oIgorI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVp
bGRlci5oIgorI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJydW50aW1lX29i
amVjdC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCisjaWZkZWYgTkRFQlVHCisjZGVm
aW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKKyNlbHNlCisjZGVmaW5lIEpT
X0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIC0t
ICVzOiAgIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCisgICAgZnByaW50
ZihzdGRlcnIsIGZvcm1hdEFuZEFyZ3MpOyBcCit9CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKKworSmF2YVBhcmFtZXRlcjo6SmF2YVBhcmFtZXRlcihKTklFbnYqIGVudiwganN0
cmluZyB0eXBlKQoreworICAgIG1fdHlwZSA9IEphdmFTdHJpbmcoZW52LCB0eXBlKTsKKyAgICBt
X0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZShtX3R5cGUuVVRGOFN0cmluZygpKTsKK30K
KworSmF2YUZpZWxkOjpKYXZhRmllbGQoSk5JRW52KiBlbnYsIGpvYmplY3QgYUZpZWxkKQorewor
ICAgIC8vIEdldCBmaWVsZCB0eXBlCisgICAgam9iamVjdCBmaWVsZFR5cGUgPSBjYWxsSk5JTWV0
aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldFR5cGUiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwor
ICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklN
ZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5n
OyIpKTsKKyAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgZmllbGRUeXBlTmFtZSk7CisgICAg
bV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBlLlVURjhTdHJpbmcoKSk7CisK
KyAgICAvLyBHZXQgZmllbGQgbmFtZQorICAgIGpzdHJpbmcgZmllbGROYW1lID0gc3RhdGljX2Nh
c3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigp
TGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIG1fbmFtZSA9IEphdmFTdHJpbmcoZW52LCBmaWVs
ZE5hbWUpOworCisgICAgbV9maWVsZCA9IG5ldyBKT2JqZWN0V3JhcHBlcihhRmllbGQpOworfQor
CitKU1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSogZXhl
Yywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqZWN0KQoreworICAgIGlmICh0eXBlWzBdICE9ICdbJykKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXko
ZXhlYywgbmV3IEphdmFBcnJheShhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOworfQorCitq
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3Qg
Y2hhciogc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0Cit7CisgICAgam9iamVjdCBqaW5z
dGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0
YW5jZSA9IG1fZmllbGQtPm1faW5zdGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYo
KTsKKyAgICBqdmFsdWUgcmVzdWx0OworCisgICAgYnplcm8oJnJlc3VsdCwgc2l6ZW9mKGp2YWx1
ZSkpOworICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNl
KTsKKyAgICBpZiAoY2xzKSB7CisgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhv
ZElEKGNscywgbmFtZSwgc2lnKTsKKyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAg
ICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAg
anZhbHVlIGFyZ3NbMV07CisKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7
CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2
ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywg
cmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbkRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pT
VmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEluc3RhbmNlKiBpKSBjb25zdAoreworICAgIGNvbnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFuY2UqPihpKTsKKworICAgIEpTVmFsdWUganNy
ZXN1bHQgPSBqc1VuZGVmaW5lZCgpOworCisgICAgc3dpdGNoIChtX0pOSVR5cGUpIHsKKyAgICBj
YXNlIGFycmF5X3R5cGU6CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAganZhbHVlIHJlc3VsdCA9IGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoZXhlYywgaW5z
dGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLCBv
YmplY3RfdHlwZSk7CisgICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0ID0gcmVzdWx0Lmw7CisK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAgICAgICAg
IGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQorICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwg
aW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChhbk9iamVjdCkK
KyAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0
LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAg
ICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29sZWFuX3R5
cGUpLnopOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgIGNhc2Ug
Y2hhcl90eXBlOgorICAgIGNhc2Ugc2hvcnRfdHlwZToKKworICAgIGNhc2UgaW50X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGppbnQgdmFsdWU7CisgICAgICAgICAgICBqdmFsdWUgcmVz
dWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEludCIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICB2YWx1ZSA9
IHJlc3VsdC5pOworICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCBzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGxvbmdfdHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlwZToK
KyAgICAgICAgeworICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKKyAgICAgICAgICAgIGp2YWx1
ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0
RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKKyAgICAgICAg
ICAgIHZhbHVlID0gcmVzdWx0Lmk7CisgICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKGV4
ZWMsIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBKU19MT0coImdl
dHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1lKCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBq
c3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKworICAgIHJldHVybiBqc3Jlc3VsdDsK
K30KKwordm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdAoreworICAgIGpvYmplY3Qg
amluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOworICAgIGpvYmplY3QgZmllbGRK
SW5zdGFuY2UgPSBtX2ZpZWxkLT5tX2luc3RhbmNlOworICAgIEpOSUVudiogZW52ID0gZ2V0Sk5J
RW52KCk7CisKKyAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RDbGFzcyhmaWVsZEpJbnN0
YW5jZSk7CisgICAgaWYgKGNscykgeworICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRN
ZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7CisgICAgICAgIGlmIChtaWQpIHsKKyAgICAgICAgICAg
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOworICAgICAg
ICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOworICAgICAgICAgICAg
ICAgIGp2YWx1ZSBhcmdzWzJdOworICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAgICAgICAgICAgICAgYXJn
c1sxXSA9IGphdmFWYWx1ZTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywg
cm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgdm9pZF90
eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBK
YXZhRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3Rh
bmNlKiBpLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK3sKKyAgICBjb25zdCBKYXZhSW5zdGFuY2Uq
IGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlKj4oaSk7CisgICAganZh
bHVlIGphdmFWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGFWYWx1ZSwgbV9KTklU
eXBlLCB0eXBlKCkpOworCisgICAgSlNfTE9HKCJzZXR0aW5nIHZhbHVlICVzIHRvICVzXG4iLCBV
U3RyaW5nKG5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGFWYWx1ZS50b1N0cmluZyhleGVj
KS5hc2NpaSgpKTsKKworICAgIHN3aXRjaCAobV9KTklUeXBlKSB7CisgICAgY2FzZSBhcnJheV90
eXBlOgorICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAi
KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1
ZSwgInNldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUs
ICJzZXRCeXRlIiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBk
aXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0
Q2hhciIsICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9y
dCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNl
dFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihM
amF2YS9sYW5nL09iamVjdDtJKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgbG9uZ190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEv
bGFuZy9PYmplY3Q7SilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGZsb2F0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0lu
c3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFu
Zy9PYmplY3Q7RilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRv
dWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5n
L09iamVjdDtEKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0phdmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52
KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKK3sKKyAgICAvLyBHZXQgcmV0dXJuIHR5cGUKKyAgICBq
b2JqZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRS
ZXR1cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKKyAgICBqc3RyaW5nIHJldHVyblR5
cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1
cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICBtX3JldHVy
blR5cGUgPSBKYXZhU3RyaW5nKGVudiwgcmV0dXJuVHlwZU5hbWUpOworICAgIG1fSk5JUmV0dXJu
VHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1fcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwor
ICAgIGVudi0+RGVsZXRlTG9jYWxSZWYocmV0dXJuVHlwZSk7CisgICAgZW52LT5EZWxldGVMb2Nh
bFJlZihyZXR1cm5UeXBlTmFtZSk7CisKKyAgICAvLyBHZXQgbWV0aG9kIG5hbWUKKyAgICBqc3Ry
aW5nIG1ldGhvZE5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmpl
Y3Q+KGFNZXRob2QsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIG1f
bmFtZSA9IEphdmFTdHJpbmcoZW52LCBtZXRob2ROYW1lKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2Fs
UmVmKG1ldGhvZE5hbWUpOworCisgICAgLy8gR2V0IHBhcmFtZXRlcnMKKyAgICBqYXJyYXkganBh
cmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxqYXJyYXk+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1l
dGhvZCwgImdldFBhcmFtZXRlclR5cGVzIiwgIigpW0xqYXZhL2xhbmcvQ2xhc3M7IikpOworICAg
IG1fbnVtUGFyYW1ldGVycyA9IGVudi0+R2V0QXJyYXlMZW5ndGgoanBhcmFtZXRlcnMpOworICAg
IG1fcGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVyW21fbnVtUGFyYW1ldGVyc107CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1ldGVyczsgaSsrKSB7CisgICAgICAgIGpv
YmplY3QgYVBhcmFtZXRlciA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0
PGpvYmplY3RBcnJheT4oanBhcmFtZXRlcnMpLCBpKTsKKyAgICAgICAganN0cmluZyBwYXJhbWV0
ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFy
YW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICAgICAgbV9w
YXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOworICAgICAg
ICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQYXJhbWV0ZXIpOworICAgICAgICBlbnYtPkRlbGV0ZUxv
Y2FsUmVmKHBhcmFtZXRlck5hbWUpOworICAgIH0KKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGpw
YXJhbWV0ZXJzKTsKKworICAgIC8vIENyZWF0ZWQgbGF6aWx5LgorICAgIG1fc2lnbmF0dXJlID0g
MDsKKyAgICBtX21ldGhvZElEID0gMDsKKworICAgIGpjbGFzcyBtb2RpZmllckNsYXNzID0gZW52
LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyIik7CisgICAgaW50IG1vZGlm
aWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1ldGhvZCwgImdldE1vZGlmaWVycyIsICIoKUki
KTsKKyAgICBtX2lzU3RhdGljID0gc3RhdGljX2Nhc3Q8Ym9vbD4oY2FsbEpOSVN0YXRpY01ldGhv
ZDxqYm9vbGVhbj4obW9kaWZpZXJDbGFzcywgImlzU3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMp
KTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1vZGlmaWVyQ2xhc3MpOworfQorCitKYXZhTWV0
aG9kOjp+SmF2YU1ldGhvZCgpCit7CisgICAgaWYgKG1fc2lnbmF0dXJlKQorICAgICAgICBmcmVl
KG1fc2lnbmF0dXJlKTsKKyAgICBkZWxldGVbXSBtX3BhcmFtZXRlcnM7Cit9OworCisvLyBKTkkg
bWV0aG9kIHNpZ25hdHVyZXMgdXNlICcvJyBiZXR3ZWVuIGNvbXBvbmVudHMgb2YgYSBjbGFzcyBu
YW1lLCBidXQKKy8vIHdlIGdldCAnLicgYmV0d2VlbiBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxl
Y3Rpb24gQVBJLgorc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkKK3sKKyAgICBBU1NFUlQoSlNMb2NrOjpsb2Nr
Q291bnQoKSA+IDApOworCisgICAgY2hhciogYyA9IHN0cmR1cChjbGFzc05hbWUpOworCisgICAg
Y2hhciogcmVzdWx0ID0gYzsKKyAgICB3aGlsZSAoKmMpIHsKKyAgICAgICAgaWYgKCpjID09ICcu
JykKKyAgICAgICAgICAgICpjID0gJy8nOworICAgICAgICBjKys7CisgICAgfQorCisgICAgYnVp
bGRlci5hcHBlbmQocmVzdWx0KTsKKworICAgIGZyZWUocmVzdWx0KTsKK30KKworY29uc3QgY2hh
ciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2lnbmF0dXJl
KSB7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWlsZGVyOworICAgICAgICBzaWduYXR1cmVCdWls
ZGVyLmFwcGVuZCgiKCIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1l
dGVyczsgaSsrKSB7CisgICAgICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gcGFy
YW1ldGVyQXQoaSk7CisgICAgICAgICAgICBKTklUeXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRK
TklUeXBlKCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBhcnJheV90eXBlKQorICAgICAgICAg
ICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBl
KCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRl
ci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUodHlwZSkpOworICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IG9iamVjdF90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiOyIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZCgiKSIpOworCisgICAgICAgIGNvbnN0IGNoYXIqIHJldHVyblR5cGUgPSBtX3JldHVy
blR5cGUuVVRGOFN0cmluZygpOworICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09IGFycmF5
X3R5cGUpCisgICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0
dXJuVHlwZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5h
cHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUobV9KTklSZXR1cm5UeXBlKSk7CisgICAg
ICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVyblR5cGUpOworICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgc2lnbmF0dXJlU3RyaW5nID0gc2lnbmF0dXJl
QnVpbGRlci50b1N0cmluZygpOworICAgICAgICBtX3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1
cmVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc2lnbmF0dXJl
OworfQorCitKTklUeXBlIEphdmFNZXRob2Q6OkpOSVJldHVyblR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX0pOSVJldHVyblR5cGU7Cit9CisKK2ptZXRob2RJRCBKYXZhTWV0aG9kOjptZXRo
b2RJRChqb2JqZWN0IG9iaikgY29uc3QKK3sKKyAgICBpZiAoIW1fbWV0aG9kSUQpCisgICAgICAg
IG1fbWV0aG9kSUQgPSBnZXRNZXRob2RJRChvYmosIG1fbmFtZS5VVEY4U3RyaW5nKCksIHNpZ25h
dHVyZSgpKTsKKyAgICByZXR1cm4gbV9tZXRob2RJRDsKK30KKworCitKYXZhQXJyYXk6OkphdmFB
cnJheShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QpCisgICAgOiBBcnJheShyb290T2JqZWN0KQoreworICAgIG1fYXJyYXkg
PSBuZXcgSk9iamVjdFdyYXBwZXIoYXJyYXkpOworICAgIC8vIEphdmEgYXJyYXkgYXJlIGZpeGVk
IGxlbmd0aCwgc28gd2UgY2FuIGNhY2hlIGxlbmd0aC4KKyAgICBKTklFbnYqIGVudiA9IGdldEpO
SUVudigpOworICAgIG1fbGVuZ3RoID0gZW52LT5HZXRBcnJheUxlbmd0aChzdGF0aWNfY2FzdDxq
YXJyYXk+KG1fYXJyYXktPm1faW5zdGFuY2UpKTsKKyAgICBtX3R5cGUgPSBzdHJkdXAodHlwZSk7
CisgICAgbV9yb290T2JqZWN0ID0gcm9vdE9iamVjdDsKK30KKworSmF2YUFycmF5Ojp+SmF2YUFy
cmF5KCkKK3sKKyAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOworfQorCitSb290
T2JqZWN0KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jv
b3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkg
OiAwOworfQorCit2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOworICAgIGNoYXIqIGphdmFDbGFzc05hbWUgPSAwOworCisgICAgSk5JVHlw
ZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKKyAgICBp
ZiAobV90eXBlWzFdID09ICdMJykgeworICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkg
d2lsbCBiZSBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsi
LiAgVGhpcyBpcyBndWFyYW50ZWVkLCBzbyBubyBuZWVkCisgICAgICAgIC8vIGZvciBleHRyYSBz
YW5pdHkgY2hlY2tzLgorICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVwKCZtX3R5cGVbMl0p
OworICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihqYXZhQ2xhc3NOYW1lLCAnOycpLWphdmFD
bGFzc05hbWVdID0gMDsKKyAgICB9CisgICAganZhbHVlIGFKVmFsdWUgPSBjb252ZXJ0VmFsdWVU
b0pWYWx1ZShleGVjLCBhVmFsdWUsIGFycmF5VHlwZSwgamF2YUNsYXNzTmFtZSk7CisKKyAgICBz
d2l0Y2ggKGFycmF5VHlwZSkgeworICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0PGpvYmplY3RB
cnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgYUpWYWx1ZS5sKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAg
ICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amJvb2xlYW5BcnJh
eT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUueik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYt
PlNldENoYXJBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqY2hhckFycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0U2hv
cnRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqc2hvcnRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRl
eCwgMSwgJmFKVmFsdWUucyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
Y2FzZSBpbnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJl
Z2lvbihzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZh
bHVlLmkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgbG9uZ190
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbihzdGF0
aWNfY2FzdDxqbG9uZ0FycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5qKTsK
KyAgICAgICAgfQorCisgICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVu
di0+U2V0RG91YmxlQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amRvdWJsZUFycmF5PihqYXZhQXJy
YXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGphdmFD
bGFzc05hbWUpCisgICAgICAgIGZyZWUoY29uc3RfY2FzdDxjaGFyKj4oamF2YUNsYXNzTmFtZSkp
OworfQorCisKK0pTVmFsdWUgSmF2YUFycmF5Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAg
ICBKTklUeXBlIGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0p
OworICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAg
ICAgeworICAgICAgICAgICAgam9iamVjdEFycmF5IG9iamVjdEFycmF5ID0gc3RhdGljX2Nhc3Q8
am9iamVjdEFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0
OworICAgICAgICAgICAgYW5PYmplY3QgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChvYmpl
Y3RBcnJheSwgaW5kZXgpOworCisgICAgICAgICAgICAvLyBObyBvYmplY3Q/CisgICAgICAgICAg
ICBpZiAoIWFuT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAg
ICAgICAgICAgLy8gTmVzdGVkIGFycmF5PworICAgICAgICAgICAgaWYgKG1fdHlwZVsxXSA9PSAn
WycpCisgICAgICAgICAgICAgICAgcmV0dXJuIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0Fy
cmF5KGV4ZWMsIGFuT2JqZWN0LCBtX3R5cGUgKyAxLCByb290T2JqZWN0KCkpOworICAgICAgICAg
ICAgLy8gb3IgYXJyYXkgb2Ygb3RoZXIgb2JqZWN0IHR5cGU/CisgICAgICAgICAgICByZXR1cm4g
SmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIHJvb3RPYmplY3QoKSktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7CisgICAgICAgIH0KKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAg
ICAgICB7CisgICAgICAgICAgICBqYm9vbGVhbkFycmF5IGJvb2xlYW5BcnJheSA9IHN0YXRpY19j
YXN0PGpib29sZWFuQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpib29sZWFuIGFC
b29sZWFuOworICAgICAgICAgICAgZW52LT5HZXRCb29sZWFuQXJyYXlSZWdpb24oYm9vbGVhbkFy
cmF5LCBpbmRleCwgMSwgJmFCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
YUJvb2xlYW4pOworICAgICAgICB9CisKKyAgICBjYXNlIGJ5dGVfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSBzdGF0aWNfY2FzdDxqYnl0ZUFycmF5
PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqYnl0ZSBhQnl0ZTsKKyAgICAgICAgICAgIGVu
di0+R2V0Qnl0ZUFycmF5UmVnaW9uKGJ5dGVBcnJheSwgaW5kZXgsIDEsICZhQnl0ZSk7CisgICAg
ICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgYUJ5dGUpOworICAgICAgICB9CisKKyAgICBj
YXNlIGNoYXJfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamNoYXJBcnJheSBjaGFyQXJy
YXkgPSBzdGF0aWNfY2FzdDxqY2hhckFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBq
Y2hhciBhQ2hhcjsKKyAgICAgICAgICAgIGVudi0+R2V0Q2hhckFycmF5UmVnaW9uKGNoYXJBcnJh
eSwgaW5kZXgsIDEsICZhQ2hhcik7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
YUNoYXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2Ugc2hvcnRf
dHlwZToKKyAgICAgICAgeworICAgICAgICAgICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IHN0
YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSk7CisgICAgICAgICAgICBqc2hvcnQg
YVNob3J0OworICAgICAgICAgICAgZW52LT5HZXRTaG9ydEFycmF5UmVnaW9uKHNob3J0QXJyYXks
IGluZGV4LCAxLCAmYVNob3J0KTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBh
U2hvcnQpOworICAgICAgICB9CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBqaW50QXJyYXkgaW50QXJyYXkgPSBzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFB
cnJheSgpKTsKKyAgICAgICAgICAgIGppbnQgYW5JbnQ7CisgICAgICAgICAgICBlbnYtPkdldElu
dEFycmF5UmVnaW9uKGludEFycmF5LCBpbmRleCwgMSwgJmFuSW50KTsKKyAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBhbkludCk7CisgICAgICAgIH0KKworICAgIGNhc2UgbG9uZ190
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqbG9uZ0FycmF5IGxvbmdBcnJheSA9IHN0YXRp
Y19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpsb25nIGFMb25n
OworICAgICAgICAgICAgZW52LT5HZXRMb25nQXJyYXlSZWdpb24obG9uZ0FycmF5LCBpbmRleCwg
MSwgJmFMb25nKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhTG9uZyk7Cisg
ICAgICAgIH0KKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAg
amZsb2F0QXJyYXkgZmxvYXRBcnJheSA9IHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJy
YXkoKSk7CisgICAgICAgICAgICBqZmxvYXQgYUZsb2F0OworICAgICAgICAgICAgZW52LT5HZXRG
bG9hdEFycmF5UmVnaW9uKGZsb2F0QXJyYXksIGluZGV4LCAxLCAmYUZsb2F0KTsKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBhRmxvYXQpOworICAgICAgICB9CisKKyAgICBjYXNl
IGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqZG91YmxlQXJyYXkgZG91Ymxl
QXJyYXkgPSBzdGF0aWNfY2FzdDxqZG91YmxlQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAg
ICAgIGpkb3VibGUgYURvdWJsZTsKKyAgICAgICAgICAgIGVudi0+R2V0RG91YmxlQXJyYXlSZWdp
b24oZG91YmxlQXJyYXksIGluZGV4LCAxLCAmYURvdWJsZSk7CisgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgYURvdWJsZSk7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK3Vuc2lnbmVk
IGludCBKYXZhQXJyYXk6OmdldExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGVuZ3Ro
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAJKHJldmlzaW9uIDUzNjk3KQorKysgV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
OSArMjUsMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSk5JQnJp
ZGdlLmgiCisjaW5jbHVkZSAiSk5JQnJpZGdlSlNDLmgiCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFf
QlJJREdFKQogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIK
ICNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgotI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIu
aCIKICNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3Qu
aCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAogI2lmZGVmIE5ERUJVRwogI2RlZmluZSBK
U19MT0coZm9ybWF0QW5kQXJncy4uLikgKCh2b2lkKTApCkBAIC01MCwxNSArNDUsOCBAQAogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogCi1KYXZhUGFyYW1ldGVyOjpKYXZhUGFyYW1ldGVyKEpO
SUVudiogZW52LCBqc3RyaW5nIHR5cGUpCi17Ci0gICAgbV90eXBlID0gSmF2YVN0cmluZyhlbnYs
IHR5cGUpOwotICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4
U3RyaW5nKCkpOwotfQotCiBKYXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYqIGVudiwgam9iamVj
dCBhRmllbGQpCiB7CiAgICAgLy8gR2V0IGZpZWxkIHR5cGUKQEAgLTI1OSwxMjUgKzI0Nyw2IEBA
IHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1MKICAgICB9CiB9CiAKLUph
dmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3QgYU1ldGhvZCkKLXsKLSAg
ICAvLyBHZXQgcmV0dXJuIHR5cGUKLSAgICBqb2JqZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0
aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFz
czsiKTsKLSAgICBqc3RyaW5nIHJldHVyblR5cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKLSAgICBtX3JldHVyblR5cGUgPSBKYXZhU3RyaW5nKGVudiwgcmV0dXJu
VHlwZU5hbWUpOwotICAgIG1fSk5JUmV0dXJuVHlwZSA9IEpOSVR5cGVGcm9tQ2xhc3NOYW1lKG1f
cmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYocmV0dXJu
VHlwZSk7Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZihyZXR1cm5UeXBlTmFtZSk7Ci0KLSAgICAv
LyBHZXQgbWV0aG9kIG5hbWUKLSAgICBqc3RyaW5nIG1ldGhvZE5hbWUgPSBzdGF0aWNfY2FzdDxq
c3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXROYW1lIiwgIigpTGph
dmEvbGFuZy9TdHJpbmc7IikpOwotICAgIG1fbmFtZSA9IEphdmFTdHJpbmcoZW52LCBtZXRob2RO
YW1lKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1ldGhvZE5hbWUpOwotCi0gICAgLy8gR2V0
IHBhcmFtZXRlcnMKLSAgICBqYXJyYXkganBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxqYXJyYXk+
KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFBhcmFtZXRlclR5cGVzIiwgIigp
W0xqYXZhL2xhbmcvQ2xhc3M7IikpOwotICAgIG1fbnVtUGFyYW1ldGVycyA9IGVudi0+R2V0QXJy
YXlMZW5ndGgoanBhcmFtZXRlcnMpOwotICAgIG1fcGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1l
dGVyW21fbnVtUGFyYW1ldGVyc107Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtUGFy
YW1ldGVyczsgaSsrKSB7Ci0gICAgICAgIGpvYmplY3QgYVBhcmFtZXRlciA9IGVudi0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oanBhcmFtZXRlcnMpLCBp
KTsKLSAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKLSAgICAgICAgbV9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihl
bnYsIHBhcmFtZXRlck5hbWUpOwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQYXJhbWV0
ZXIpOwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBhcmFtZXRlck5hbWUpOwotICAgIH0K
LSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGpwYXJhbWV0ZXJzKTsKLQotICAgIC8vIENyZWF0ZWQg
bGF6aWx5LgotICAgIG1fc2lnbmF0dXJlID0gMDsKLSAgICBtX21ldGhvZElEID0gMDsKLQotICAg
IGpjbGFzcyBtb2RpZmllckNsYXNzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0
L01vZGlmaWVyIik7Ci0gICAgaW50IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1l
dGhvZCwgImdldE1vZGlmaWVycyIsICIoKUkiKTsKLSAgICBtX2lzU3RhdGljID0gc3RhdGljX2Nh
c3Q8Ym9vbD4oY2FsbEpOSVN0YXRpY01ldGhvZDxqYm9vbGVhbj4obW9kaWZpZXJDbGFzcywgImlz
U3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMpKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1v
ZGlmaWVyQ2xhc3MpOwotfQotCi1KYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgpCi17Ci0gICAgaWYg
KG1fc2lnbmF0dXJlKQotICAgICAgICBmcmVlKG1fc2lnbmF0dXJlKTsKLSAgICBkZWxldGVbXSBt
X3BhcmFtZXRlcnM7Ci19OwotCi0vLyBKTkkgbWV0aG9kIHNpZ25hdHVyZXMgdXNlICcvJyBiZXR3
ZWVuIGNvbXBvbmVudHMgb2YgYSBjbGFzcyBuYW1lLCBidXQKLS8vIHdlIGdldCAnLicgYmV0d2Vl
biBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxlY3Rpb24gQVBJLgotc3RhdGljIHZvaWQgYXBwZW5k
Q2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSkK
LXsKLSAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOwotCi0gICAgY2hhciogYyA9
IHN0cmR1cChjbGFzc05hbWUpOwotCi0gICAgY2hhciogcmVzdWx0ID0gYzsKLSAgICB3aGlsZSAo
KmMpIHsKLSAgICAgICAgaWYgKCpjID09ICcuJykKLSAgICAgICAgICAgICpjID0gJy8nOwotICAg
ICAgICBjKys7Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQocmVzdWx0KTsKLQotICAgIGZy
ZWUocmVzdWx0KTsKLX0KLQotY29uc3QgY2hhciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fc2lnbmF0dXJlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KLSAgICAgICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWls
ZGVyOwotICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKCIpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgICAgICBKYXZh
UGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gcGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgICAgICBKTklU
eXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRKTklUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlw
ZSA9PSBhcnJheV90eXBlKQotICAgICAgICAgICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1
cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2
ZVR5cGUodHlwZSkpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG9iamVjdF90eXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBh
UGFyYW1ldGVyLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZCgiOyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgiKSIpOwotCi0gICAgICAgIGNvbnN0
IGNoYXIqIHJldHVyblR5cGUgPSBtX3JldHVyblR5cGUuVVRGOFN0cmluZygpOwotICAgICAgICBp
ZiAobV9KTklSZXR1cm5UeXBlID09IGFycmF5X3R5cGUpCi0gICAgICAgICAgICBhcHBlbmRDbGFz
c05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0dXJuVHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5
cGUobV9KTklSZXR1cm5UeXBlKSk7Ci0gICAgICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBlID09
IG9iamVjdF90eXBlKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVy
ZUJ1aWxkZXIsIHJldHVyblR5cGUpOwotICAgICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIu
YXBwZW5kKCI7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcg
c2lnbmF0dXJlU3RyaW5nID0gc2lnbmF0dXJlQnVpbGRlci50b1N0cmluZygpOwotICAgICAgICBt
X3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1cmVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fc2lnbmF0dXJlOwotfQotCi1KTklUeXBlIEphdmFNZXRob2Q6OkpO
SVJldHVyblR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX0pOSVJldHVyblR5cGU7Ci19Ci0K
LWptZXRob2RJRCBKYXZhTWV0aG9kOjptZXRob2RJRChqb2JqZWN0IG9iaikgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbWV0aG9kSUQpCi0gICAgICAgIG1fbWV0aG9kSUQgPSBnZXRNZXRob2RJRChvYmos
IG1fbmFtZS5VVEY4U3RyaW5nKCksIHNpZ25hdHVyZSgpKTsKLSAgICByZXR1cm4gbV9tZXRob2RJ
RDsKLX0KLQotCiBKYXZhQXJyYXk6OkphdmFBcnJheShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFy
KiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCiAgICAgOiBBcnJheShy
b290T2JqZWN0KQogewpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCShy
ZXZpc2lvbiA1MzY5NykJKGZyb20gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oOjUzNjk3
KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSk5JQnJpZGdlX2gKKyNkZWZpbmUgSk5JQnJpZGdlX2gKKworI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSmF2YUlu
c3RhbmNlSlNDLmgiCisKKyNpZiBVU0UoSlNDKQorI2luY2x1ZGUgIkphdmFTdHJpbmdKU0MuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKwordHlw
ZWRlZiBjb25zdCBjaGFyKiBSdW50aW1lVHlwZTsKKworY2xhc3MgSmF2YVN0cmluZyB7CitwdWJs
aWM6CisgICAgSmF2YVN0cmluZygpCisgICAgeworICAgICAgICBtX2ltcGwuaW5pdCgpOworICAg
IH0KKworICAgIEphdmFTdHJpbmcoSk5JRW52KiBlLCBqc3RyaW5nIHMpCisgICAgeworICAgICAg
ICBtX2ltcGwuaW5pdChlLCBzKTsKKyAgICB9CisKKyAgICBKYXZhU3RyaW5nKGpzdHJpbmcgcykK
KyAgICB7CisgICAgICAgIG1faW1wbC5pbml0KGdldEpOSUVudigpLCBzKTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBVVEY4U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLlVURjhTdHJp
bmcoKTsgfQorICAgIGNvbnN0IGpjaGFyKiB1Y2hhcnMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwu
dWNoYXJzKCk7IH0KKyAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmxlbmd0
aCgpOyB9CisjaWYgVVNFKEpTQykKKyAgICBvcGVyYXRvciBVU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsLnVTdHJpbmcoKTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSmF2YVN0cmlu
Z0ltcGwgbV9pbXBsOworfTsKKworY2xhc3MgSmF2YVBhcmFtZXRlciB7CitwdWJsaWM6CisgICAg
SmF2YVBhcmFtZXRlcigpIDogbV9KTklUeXBlKGludmFsaWRfdHlwZSkgeyB9CisgICAgSmF2YVBh
cmFtZXRlcihKTklFbnYqLCBqc3RyaW5nIHR5cGUpOworICAgIHZpcnR1YWwgfkphdmFQYXJhbWV0
ZXIoKSB7IH0KKworICAgIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUu
VVRGOFN0cmluZygpOyB9CisgICAgSk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9KTklUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgSmF2YVN0cmluZyBtX3R5cGU7CisgICAgSk5J
VHlwZSBtX0pOSVR5cGU7Cit9OworCisKK2NsYXNzIEphdmFGaWVsZCA6IHB1YmxpYyBGaWVsZCB7
CitwdWJsaWM6CisgICAgSmF2YUZpZWxkKEpOSUVudiosIGpvYmplY3QgYUZpZWxkKTsKKworICAg
IHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0
YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0
YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdDsKKworICAgIGNvbnN0IEphdmFT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2aXJ0dWFsIFJ1bnRp
bWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUuVVRGOFN0cmluZygpOyB9CisKKyAg
ICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBtX0pOSVR5cGU7IH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNv
bnN0IEphdmFJbnN0YW5jZSosIGp2YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
c2lnKSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBz
aWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3Q7CisKKyAgICBKYXZhU3RyaW5nIG1fbmFtZTsK
KyAgICBKYXZhU3RyaW5nIG1fdHlwZTsKKyAgICBKTklUeXBlIG1fSk5JVHlwZTsKKyAgICBSZWZQ
dHI8Sk9iamVjdFdyYXBwZXI+IG1fZmllbGQ7Cit9OworCisKK2NsYXNzIEphdmFNZXRob2QgOiBw
dWJsaWMgTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBKYXZhTWV0aG9kKEpOSUVudiosIGpvYmplY3Qg
YU1ldGhvZCk7CisgICAgfkphdmFNZXRob2QoKTsKKworICAgIGNvbnN0IEphdmFTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBSdW50aW1lVHlwZSByZXR1cm5UeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXR1cm5UeXBlLlVURjhTdHJpbmcoKTsgfQorICAgIEphdmFQ
YXJhbWV0ZXIqIHBhcmFtZXRlckF0KGludCBpKSBjb25zdCB7IHJldHVybiAmbV9wYXJhbWV0ZXJz
W2ldOyB9CisgICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFt
ZXRlcnM7IH0KKworICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSgpIGNvbnN0OworICAgIEpOSVR5
cGUgSk5JUmV0dXJuVHlwZSgpIGNvbnN0OworCisgICAgam1ldGhvZElEIG1ldGhvZElEKGpvYmpl
Y3Qgb2JqKSBjb25zdDsKKworICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX2lz
U3RhdGljOyB9CisKK3ByaXZhdGU6CisgICAgSmF2YVBhcmFtZXRlciogbV9wYXJhbWV0ZXJzOwor
ICAgIGludCBtX251bVBhcmFtZXRlcnM7CisgICAgSmF2YVN0cmluZyBtX25hbWU7CisgICAgbXV0
YWJsZSBjaGFyKiBtX3NpZ25hdHVyZTsKKyAgICBKYXZhU3RyaW5nIG1fcmV0dXJuVHlwZTsKKyAg
ICBKTklUeXBlIG1fSk5JUmV0dXJuVHlwZTsKKyAgICBtdXRhYmxlIGptZXRob2RJRCBtX21ldGhv
ZElEOworICAgIGJvb2wgbV9pc1N0YXRpYzsKK307CisKK2NsYXNzIEphdmFBcnJheSA6IHB1Ymxp
YyBBcnJheSB7CitwdWJsaWM6CisgICAgSmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNo
YXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHZpcnR1YWwgfkphdmFBcnJh
eSgpOworCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgp
IGNvbnN0OworCisgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
LT5tX2luc3RhbmNlOyB9CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJy
YXkoRXhlY1N0YXRlKiwgam9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290
T2JqZWN0Pik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBtX2FycmF5
OworICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBtX3R5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBKTklCcmlkZ2VfaApJ
bmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCShyZXZpc2lvbiA1MzY5NykK
KysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDY3ICsyNCwxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEpOSUJy
aWRnZV9oCi0jZGVmaW5lIEpOSUJyaWRnZV9oCisjaWZuZGVmIEpOSUJyaWRnZUpTQ19oCisjZGVm
aW5lIEpOSUJyaWRnZUpTQ19oCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5j
bHVkZSAiSk5JVXRpbGl0eS5oIgotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgotCi0jaWYg
VVNFKEpTQykKLSNpbmNsdWRlICJKYXZhU3RyaW5nSlNDLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJC
cmlkZ2UuaCIKKyNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKyNpbmNsdWRlIDxKYXZhVk0vam5pLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgQmluZGluZ3MgewogCi10eXBlZGVmIGNv
bnN0IGNoYXIqIFJ1bnRpbWVUeXBlOwotCi1jbGFzcyBKYXZhU3RyaW5nIHsKLXB1YmxpYzoKLSAg
ICBKYXZhU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIG1faW1wbC5pbml0KCk7Ci0gICAgfQotCi0g
ICAgSmF2YVN0cmluZyhKTklFbnYqIGUsIGpzdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIG1faW1w
bC5pbml0KGUsIHMpOwotICAgIH0KLQotICAgIEphdmFTdHJpbmcoanN0cmluZyBzKQotICAgIHsK
LSAgICAgICAgbV9pbXBsLmluaXQoZ2V0Sk5JRW52KCksIHMpOwotICAgIH0KLQotICAgIGNvbnN0
IGNoYXIqIFVURjhTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuVVRGOFN0cmluZygpOyB9
Ci0gICAgY29uc3QgamNoYXIqIHVjaGFycygpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC51Y2hhcnMo
KTsgfQotICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwubGVuZ3RoKCk7IH0K
LSNpZiBVU0UoSlNDKQotICAgIG9wZXJhdG9yIFVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwudVN0cmluZygpOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBKYXZhU3RyaW5nSW1wbCBt
X2ltcGw7Ci19OwotCi1jbGFzcyBKYXZhUGFyYW1ldGVyIHsKLXB1YmxpYzoKLSAgICBKYXZhUGFy
YW1ldGVyKCkgOiBtX0pOSVR5cGUoaW52YWxpZF90eXBlKSB7IH0KLSAgICBKYXZhUGFyYW1ldGVy
KEpOSUVudiosIGpzdHJpbmcgdHlwZSk7Ci0gICAgdmlydHVhbCB+SmF2YVBhcmFtZXRlcigpIHsg
fQotCi0gICAgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZS5VVEY4U3Ry
aW5nKCk7IH0KLSAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBtX0pOSVR5
cGU7IH0KLQotcHJpdmF0ZToKLSAgICBKYXZhU3RyaW5nIG1fdHlwZTsKLSAgICBKTklUeXBlIG1f
Sk5JVHlwZTsKLX07Ci0KLQogY2xhc3MgSmF2YUZpZWxkIDogcHVibGljIEZpZWxkIHsKIHB1Ymxp
YzoKICAgICBKYXZhRmllbGQoSk5JRW52Kiwgam9iamVjdCBhRmllbGQpOwpAQCAtMTA3LDM1ICs1
OSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBtX2ZpZWxkOwogfTsK
IAotCi1jbGFzcyBKYXZhTWV0aG9kIDogcHVibGljIE1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgSmF2
YU1ldGhvZChKTklFbnYqLCBqb2JqZWN0IGFNZXRob2QpOwotICAgIH5KYXZhTWV0aG9kKCk7Ci0K
LSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0g
ICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVHlwZS5V
VEY4U3RyaW5nKCk7IH0KLSAgICBKYXZhUGFyYW1ldGVyKiBwYXJhbWV0ZXJBdChpbnQgaSkgY29u
c3QgeyByZXR1cm4gJm1fcGFyYW1ldGVyc1tpXTsgfQotICAgIGludCBudW1QYXJhbWV0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Ci0KLSAgICBjb25zdCBjaGFyKiBzaWdu
YXR1cmUoKSBjb25zdDsKLSAgICBKTklUeXBlIEpOSVJldHVyblR5cGUoKSBjb25zdDsKLQotICAg
IGptZXRob2RJRCBtZXRob2RJRChqb2JqZWN0IG9iaikgY29uc3Q7Ci0KLSAgICBib29sIGlzU3Rh
dGljKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0YXRpYzsgfQotCi1wcml2YXRlOgotICAgIEphdmFQ
YXJhbWV0ZXIqIG1fcGFyYW1ldGVyczsKLSAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwotICAgIEph
dmFTdHJpbmcgbV9uYW1lOwotICAgIG11dGFibGUgY2hhciogbV9zaWduYXR1cmU7Ci0gICAgSmF2
YVN0cmluZyBtX3JldHVyblR5cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVJldHVyblR5cGU7Ci0gICAg
bXV0YWJsZSBqbWV0aG9kSUQgbV9tZXRob2RJRDsKLSAgICBib29sIG1faXNTdGF0aWM7Ci19Owot
CiBjbGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgewogcHVibGljOgogICAgIEphdmFBcnJh
eShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3Bw
CShyZXZpc2lvbiA1MzcwMCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVBy
aXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSAiSk5JQnJpZGdlLmgiCisjaW5jbHVkZSAiSk5J
QnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfb2JqZWN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmgJKHJldmlzaW9uIDUzNzAwKQorKysgV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIAotI2luY2x1ZGUgIkpOSUJyaWRn
ZS5oIgorI2luY2x1ZGUgIkpOSUJyaWRnZUpTQy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUlu
c3RhbmNlSlNDLmNwcAkocmV2aXNpb24gNTM3MDApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNpbmNsdWRlICJKTklCcmlkZ2UuaCIKKyNp
bmNsdWRlICJKTklCcmlkZ2VKU0MuaCIKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVk
ZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhQ2xhc3NKU0MuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47213</attachid>
            <date>2010-01-22 11:04:04 -0800</date>
            <delta_ts>2010-01-22 11:14:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33985-20100122110403.patch</filename>
            <type>text/plain</type>
            <size>22001</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzY2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDEtMjEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIENocm9taXVtIFdlYktpdCBBUEkgbmVlZHMgdG8gZXhwb3NlIHN0b3JhZ2UgZXZlbnQgcmVs
YXRlZCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMzk4NQorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG5vdCB2aXNpYmxlIHRvIGxheW91dFRl
c3RzL3dlYiBwYWdlcy4KKworICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYUltcGw6OnNldEl0ZW0pOiByZXR1cm4gdGhlIG9sZCB2YWx1ZQorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKTogcmV0dXJuIHRoZSBvbGQgdmFsdWUK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIpOiByZXR1cm4gd2hldGhl
ciB0aGVyZSB3YXMgYW55dGhpbmcgdG8gY2xlYXIKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VB
cmVhSW1wbC5oOgorCiAyMDEwLTAxLTIxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWEuaAkocmV2aXNpb24gNTM2NjYpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKICAgICAgICAg
dmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNv
dXJjZUZyYW1lKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNl
RnJhbWUpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgc2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgPSAwOworICAgICAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29s
IGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0ID0gMDsKICAgICB9OwogCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkocmV2aXNpb24gNTM2NjYpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3
IEBAIFN0cmluZyBTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0oY29uc3QgU3QKICAgICByZXR1cm4g
bV9zdG9yYWdlTWFwLT5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpz
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYywgRnJhbWUqIGZyYW1lKQorU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgQVNTRVJU
KCF2YWx1ZS5pc051bGwoKSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUlt
cGw6OnNldEl0ZW0oY29uc3QgU3RyaQogCiAgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQo
ZnJhbWUpKSB7CiAgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICBTdHJpbmcgb2xkVmFs
dWU7CkBAIC0xNDcsMjQgKzE0NywyNSBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShj
b25zdCBTdHJpCiAKICAgICBpZiAocXVvdGFFeGNlcHRpb24pIHsKICAgICAgICAgZWMgPSBRVU9U
QV9FWENFRURFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG9sZFZhbHVl
OwogICAgIH0KIAogICAgIGlmIChvbGRWYWx1ZSA9PSB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gb2xkVmFsdWU7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAg
ICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgdmFsdWUp
OwogICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGtleSwgb2xkVmFsdWUsIHZh
bHVlLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFtZSk7CisgICAg
cmV0dXJuIG9sZFZhbHVlOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShj
b25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQorU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6
cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIAogICAg
IGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7CiAgICAgUmVmUHRy
PFN0b3JhZ2VNYXA+IG5ld01hcCA9IG1fc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZh
bHVlKTsKQEAgLTE3MiwyMyArMTczLDI0IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJ
dGVtKGNvbnN0IFMKICAgICAgICAgbV9zdG9yYWdlTWFwID0gbmV3TWFwLnJlbGVhc2UoKTsKIAog
ICAgIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gb2xkVmFsdWU7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAgICAgICAgIG1fc3Rv
cmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOwogICAgIFN0
b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBt
X3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFtZSk7CisgICAgcmV0dXJu
IG9sZFZhbHVlOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1l
KQorYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKICAg
ICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmcmFtZSkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIHF1
b3RhID0gbV9zdG9yYWdlTWFwLT5xdW90YSgpOwogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VN
YXA6OmNyZWF0ZShxdW90YSk7CkBAIC0xOTYsNiArMTk4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUlt
cGw6OmNsZWFyKEZyYW1lKiBmcmFtZQogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykKICAgICAg
ICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKICAgICBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBtX3N0b3Jh
Z2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFtZSk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkg
Y29uc3QKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgJKHJldmlzaW9uIDUzNjY2KQor
KysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw5ICs0OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIHNvdXJj
ZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFt
ZSogc291cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBzZXRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUq
IHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlSXRlbShjb25zdCBT
dHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNs
ZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhj
b25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAKICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YUltcGw+IGNvcHkoKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTM2NjcpCisrKyBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIw
MTAtMDEtMjEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIENocm9taXVtIFdlYktp
dCBBUEkgbmVlZHMgdG8gZXhwb3NlIHN0b3JhZ2UgZXZlbnQgcmVsYXRlZCBkYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzk4NQorCisgICAgICAg
IHNldEl0ZW0gYW5kIHJlbW92ZUl0ZW0gb24gV2ViU3RvcmFnZUFyZWEgbmVlZCB0byBleHBvc2Ug
d2hhdCB0aGUgcHJldmlvdXMKKyAgICAgICAgdmFsdWUgd2FzIGZvciB0aGUga2V5IGJlaW5nIG1v
ZGlmaWVkLiAgQ2xlYXIgbmVlZHMgdG8gcmV0dXJuIHdoZXRoZXIgaXQKKyAgICAgICAgYWN0dWFs
bHkgY2xlYXJlZCBhbnl0aGluZy4KKworICAgICAgICAqIHB1YmxpYy9XZWJTdG9yYWdlQXJlYS5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6c2V0SXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZUFyZWFQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdlQXJlYVByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OnNldEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYVByb3h5OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJl
YVByb3h5OjpzdG9yYWdlRXZlbnQpOgorICAgICAgICAqIHNyYy9TdG9yYWdlQXJlYVByb3h5Lmg6
CisgICAgICAgICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5OjpTdG9yYWdlTmFtZXNwYWNlUHJv
eHkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU5hbWVzcGFjZVByb3h5Ojpjb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6c3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIHNyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViU3Rv
cmFnZUFyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZUFyZWFJbXBsOjpz
ZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3RvcmFnZUFyZWFJbXBsOjpjbGVhcik6CisgICAgICAg
ICogc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5oOgorCiAyMDEwLTAxLTIxICBFcmljIFVocmhhbmUg
IDxlcmljdUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92
LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTdG9yYWdlQXJlYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3RvcmFnZUFyZWEuaAkocmV2aXNpb24g
NTM2NjYpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlN0b3JhZ2VBcmVhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQAogI2RlZmluZSBXZWJTdG9yYWdlQXJlYV9oCiAK
ICNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKIAogLy8gSW4g
V2ViQ29yZSwgdGhlcmUncyBvbmUgZGlzdGluY3QgU3RvcmFnZUFyZWEgcGVyIG9yaWdpbiBwZXIg
U3RvcmFnZU5hbWVzcGFjZS4gVGhpcwpAQCAtNjAsMTQgKzYwLDM4IEBAIHB1YmxpYzoKICAgICAv
LyBTZXQgdGhlIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzcGVjaWZpYyBrZXkuIFF1b3Rh
RXhjZXB0aW9uIGlzIHNldCBpZiB3ZSd2ZQogICAgIC8vIHRoZSBTdG9yYWdlQXJlYSB3b3VsZCBo
YXZlIGV4Y2VlZGVkIGl0cyBxdW90YS4gVGhlIHZhbHVlIGlzIE5PVCBzZXQgd2hlbiB0aGVyZSdz
CiAgICAgLy8gYW4gZXhjZXB0aW9uLiAgdXJsIGlzIHRoZSB1cmwgdGhhdCBzaG91bGQgYmUgdXNl
ZCBpZiBhIHN0b3JhZ2UgZXZlbnQgZmlyZXMuCi0gICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29u
c3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYg
dXJsLCBib29sJiBxdW90YUV4Y2VwdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVt
KGNvbnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBX
ZWJVUkwmIHVybCwgYm9vbCYgcXVvdGFFeGNlcHRpb24pIC8vIERlcHJlY2F0ZWQuCisgICAgewor
ICAgICAgICBXZWJTdHJpbmcgb2xkVmFsdWU7CisgICAgICAgIHNldEl0ZW0oa2V5LCBuZXdWYWx1
ZSwgdXJsLCBxdW90YUV4Y2VwdGlvbiwgdHJhc2gpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3QgV2ViU3RyaW5nJiBuZXdWYWx1ZSwg
Y29uc3QgV2ViVVJMJiB1cmwsIGJvb2wmIHF1b3RhRXhjZXB0aW9uLCBXZWJTdHJpbmcmIG9sZFZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0SXRlbShrZXksIG5ld1ZhbHVlLCB1cmwsIHF1b3RhRXhj
ZXB0aW9uKTsKKyAgICB9CiAKICAgICAvLyBSZW1vdmUgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0
aCBhIHBhcnRpY3VsYXIga2V5LiAgdXJsIGlzIHRoZSB1cmwgdGhhdCBzaG91bGQgYmUgdXNlZAog
ICAgIC8vIGlmIGEgc3RvcmFnZSBldmVudCBmaXJlcy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3QgV2ViVVJM
JiB1cmwpIC8vIERlcHJlY2F0ZWQuCisgICAgeworICAgICAgICBXZWJTdHJpbmcgb2xkVmFsdWU7
CisgICAgICAgIHJlbW92ZUl0ZW0oa2V5LCB1cmwsIG9sZFZhbHVlKTsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlVSTCYg
dXJsLCBXZWJTdHJpbmcmIG9sZFZhbHVlKQorICAgIHsKKyAgICAgICAgcmVtb3ZlSXRlbShrZXks
IHVybCk7CisgICAgfQogCiAgICAgLy8gQ2xlYXIgYWxsIGtleS92YWx1ZSBwYWlycy4gIHVybCBp
cyB0aGUgdXJsIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYgYSBzdG9yYWdlIGV2ZW50IGZpcmVzLgot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhcihjb25zdCBXZWJVUkwmIHVybCkgLy8gRGVwcmVjYXRlZC4KKyAgICB7Cisg
ICAgICAgIFdlYlN0cmluZyBzb21ldGhpbmdDbGVhcmVkOworICAgICAgICBjbGVhcih1cmwsIHNv
bWV0aGluZ0NsZWFyZWQpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgV2Vi
VVJMJiB1cmwsIGJvb2wmIHNvbWV0aGluZ0NsZWFyZWQpCisgICAgeworICAgICAgICBjbGVhcih1
cmwpOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCShyZXZpc2lvbiA1MzY2NikKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDggQXBwbGUgSW5jLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMSArMjksMTYgQEAKIAogI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKIAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
SW1wbC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgogCiAjaW5jbHVkZSAiV2ViU3RvcmFn
ZUFyZWEuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKQEAgLTQwLDggKzQ2LDkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdlQXJlYVByb3h5KFdl
YktpdDo6V2ViU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhKQorU3RvcmFnZUFyZWFQcm94eTo6U3Rv
cmFnZUFyZWFQcm94eShXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUpCiAgICAgOiBtX3N0b3JhZ2VBcmVhKHN0b3JhZ2VBcmVhKQorICAg
ICwgbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKIHsKIH0KIApAQCAtNjQsMjEgKzcxLDMzIEBA
IFN0cmluZyBTdG9yYWdlQXJlYVByb3h5OjpnZXRJdGVtKGNvbnN0IFMKICAgICByZXR1cm4gbV9z
dG9yYWdlQXJlYS0+Z2V0SXRlbShrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhUHJveHk6OnNl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBGcmFtZSogZnJhbWUpCitTdHJpbmcgU3RvcmFnZUFyZWFQcm94eTo6c2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7Ci0gICAg
bV9zdG9yYWdlQXJlYS0+c2V0SXRlbShrZXksIHZhbHVlLCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCksIHF1b3RhRXhjZXB0aW9uKTsKKyAgICBXZWJLaXQ6OldlYlN0cmluZyBvbGRWYWx1ZTsKKyAg
ICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpLT51
cmwoKSwgcXVvdGFFeGNlcHRpb24sIG9sZFZhbHVlKTsKICAgICBlYyA9IHF1b3RhRXhjZXB0aW9u
ID8gUVVPVEFfRVhDRUVERURfRVJSIDogMDsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8U3RyaW5nPihv
bGRWYWx1ZSkgIT0gdmFsdWUpCisgICAgICAgIHN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCB2
YWx1ZSwgbV9zdG9yYWdlVHlwZSwgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCks
IGZyYW1lKTsKKyAgICByZXR1cm4gb2xkVmFsdWU7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFQcm94
eTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQorU3RyaW5nIFN0
b3JhZ2VBcmVhUHJveHk6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBtX3N0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpKTsKKyAgICBXZWJLaXQ6OldlYlN0cmluZyBvbGRWYWx1ZTsKKyAgICBtX3N0b3Jh
Z2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBvbGRWYWx1
ZSk7CisgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgc3RvcmFnZUV2ZW50KGtl
eSwgb2xkVmFsdWUsIFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUpOworICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KIAotdm9p
ZCBTdG9yYWdlQXJlYVByb3h5OjpjbGVhcihGcmFtZSogZnJhbWUpCitib29sIFN0b3JhZ2VBcmVh
UHJveHk6OmNsZWFyKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihm
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworICAgIGJvb2wgY2xlYXJlZFNvbWV0aGluZzsKKyAg
ICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCksIGNsZWFyZWRT
b21ldGhpbmcpOworICAgIGlmIChjbGVhcmVkU29tZXRoaW5nKQorICAgICAgICBzdG9yYWdlRXZl
bnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgbV9zdG9yYWdlVHlwZSwgZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lKTsKKyAgICByZXR1cm4gY2xlYXJlZFNv
bWV0aGluZzsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYVByb3h5Ojpjb250YWlucyhjb25zdCBTdHJp
bmcmIGtleSkgY29uc3QKQEAgLTg2LDYgKzEwNSw0MSBAQCBib29sIFN0b3JhZ2VBcmVhUHJveHk6
OmNvbnRhaW5zKGNvbnN0IFN0CiAgICAgcmV0dXJuICFnZXRJdGVtKGtleSkuaXNOdWxsKCk7CiB9
CiAKKy8vIENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVy
LmNwcCBvdXQgb2YgbmVjZXNzaXR5LiAgSXQncyBwcm9iYWJseSBiZXN0IHRvIGtlZXAgaXQgY3Vy
cmVudC4KK3ZvaWQgU3RvcmFnZUFyZWFQcm94eTo6c3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBGcmFt
ZSogc291cmNlRnJhbWUpCit7CisgICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGNv
cHkgYWxsIHJlbGV2YW50IGZyYW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3Igc2luY2Ug
c2VuZGluZyB0aGUgZXZlbnQgdG8gb25lIGZyYW1lIG1pZ2h0IG11dGF0ZSB0aGUgZnJhbWUgdHJl
ZQorICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBtdXRhdGUgdGhlIHBh
Z2UgZ3JvdXAgaXRzZWxmLgorICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOworICAg
IGlmIChzdG9yYWdlVHlwZSA9PSBTZXNzaW9uU3RvcmFnZSkgeworICAgICAgICAvLyBTZW5kIGV2
ZW50cyBvbmx5IHRvIG91ciBwYWdlLgorICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2Ut
Pm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQo
KSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LT5lcXVhbChzZWN1cml0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChm
cmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJh
bWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNw
YXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPnNlc3Npb25TdG9yYWdlKCkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgorICAgICAgICBj
b25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7CisgICAg
ICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAg
ICAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
KCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQorICAgICAgICAgICAgICAgICAgICBm
cmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFs
dWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgZnJhbWVzW2ldLT5kb21XaW5kb3co
KS0+bG9jYWxTdG9yYWdlKCkpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvU3RvcmFnZUFyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
U3RvcmFnZUFyZWFQcm94eS5oCShyZXZpc2lvbiA1MzY2NikKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvU3RvcmFnZUFyZWFQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMiArMzQsMjggQEAg
bmFtZXNwYWNlIFdlYktpdCB7IGNsYXNzIFdlYlN0b3JhZ2VBcmVhOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEZyYW1lOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKIGNsYXNzIFN0
b3JhZ2VBcmVhUHJveHkgOiBwdWJsaWMgU3RvcmFnZUFyZWEgewogcHVibGljOgotICAgIFN0b3Jh
Z2VBcmVhUHJveHkoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEpOworICAgIFN0
b3JhZ2VBcmVhUHJveHkoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYSosIFN0b3JhZ2VUeXBlKTsKICAg
ICB2aXJ0dWFsIH5TdG9yYWdlQXJlYVByb3h5KCk7CiAKICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0
b3JhZ2UgQVBJCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5n
IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYywgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShj
b25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVJdGVtKGNvbnN0
IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgIHZpcnR1YWwgYm9vbCBjbGVh
cihGcmFtZSogc291cmNlRnJhbWUpOwogICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdm9pZCBzdG9yYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIEZyYW1lKiBzb3VyY2VGcmFtZSk7
CisKICAgICBPd25QdHI8V2ViS2l0OjpXZWJTdG9yYWdlQXJlYT4gbV9zdG9yYWdlQXJlYTsKKyAg
ICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNw
cAkocmV2aXNpb24gNTM2NjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3Bh
Y2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE4ICs0NCwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFj
ZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVv
dGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2Vi
S2l0Ojp3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgsIHF1
b3RhKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZVByb3h5KFdl
YktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShwYXRoLCBx
dW90YSksIExvY2FsU3RvcmFnZSkpOwogfQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IFN0b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFBhZ2UqIHBhZ2UpCiB7
CiAgICAgV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgp
KTsKICAgICBXZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBjaHJvbWVDbGll
bnRJbXBsLT53ZWJWaWV3KCktPmNsaWVudCgpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZU5hbWVzcGFjZVByb3h5KHdlYlZpZXdDbGllbnQtPmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VQcm94
eSh3ZWJWaWV3Q2xpZW50LT5jcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpLCBTZXNzaW9u
U3RvcmFnZSkpOwogfQogCi1TdG9yYWdlTmFtZXNwYWNlUHJveHk6OlN0b3JhZ2VOYW1lc3BhY2VQ
cm94eShXZWJLaXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2UqIHN0b3JhZ2VOYW1lc3BhY2UpCitTdG9y
YWdlTmFtZXNwYWNlUHJveHk6OlN0b3JhZ2VOYW1lc3BhY2VQcm94eShXZWJLaXQ6OldlYlN0b3Jh
Z2VOYW1lc3BhY2UqIHN0b3JhZ2VOYW1lc3BhY2UsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ICAgIDogbV9zdG9yYWdlTmFtZXNwYWNlKHN0b3JhZ2VOYW1lc3BhY2UpCisgICAgLCBtX3N0b3Jh
Z2VUeXBlKHN0b3JhZ2VUeXBlKQogewogfQogCkBAIC02NSwxMiArNjYsMTIgQEAgU3RvcmFnZU5h
bWVzcGFjZVByb3h5Ojp+U3RvcmFnZU5hbWVzcGFjZQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1l
c3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y29weSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJveHkobV9zdG9yYWdlTmFtZXNwYWNlLT5jb3B5KCkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VOYW1lc3BhY2VQcm94eShtX3N0b3Jh
Z2VOYW1lc3BhY2UtPmNvcHkoKSwgbV9zdG9yYWdlVHlwZSkpOwogfQogCiBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBTdG9yYWdlTmFtZXNwYWNlUHJveHk6OnN0b3JhZ2VBcmVhKFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VBcmVhUHJveHkobV9zdG9yYWdlTmFtZXNwYWNlLT5jcmVhdGVTdG9yYWdlQXJlYShvcmlnaW4t
PnRvU3RyaW5nKCkpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYVByb3h5
KG1fc3RvcmFnZU5hbWVzcGFjZS0+Y3JlYXRlU3RvcmFnZUFyZWEob3JpZ2luLT50b1N0cmluZygp
KSwgbV9zdG9yYWdlVHlwZSkpOwogfQogCiB2b2lkIFN0b3JhZ2VOYW1lc3BhY2VQcm94eTo6Y2xv
c2UoKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5o
CShyZXZpc2lvbiA1MzY2NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFj
ZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKIAorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsgY2xhc3MgV2ViU3RvcmFnZU5hbWVz
cGFjZTsgfQpAQCAtMzYsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0
b3JhZ2VOYW1lc3BhY2VQcm94eSA6IHB1YmxpYyBTdG9yYWdlTmFtZXNwYWNlIHsKIHB1YmxpYzoK
LSAgICBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlKiBz
dG9yYWdlTmFtZXNwYWNlKTsKKyAgICBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2ViS2l0OjpXZWJT
dG9yYWdlTmFtZXNwYWNlKiwgU3RvcmFnZVR5cGUpOwogICAgIHZpcnR1YWwgflN0b3JhZ2VOYW1l
c3BhY2VQcm94eSgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4pOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTdG9yYWdlTmFtZXNwYWNlPiBjb3B5KCk7CkBAIC00NSw2ICs0Niw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBPd25QdHI8V2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlPiBtX3N0b3Jh
Z2VOYW1lc3BhY2U7CisgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFnZUFy
ZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VB
cmVhSW1wbC5jcHAJKHJldmlzaW9uIDUzNjY2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
dG9yYWdlQXJlYUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsMTIgQEAgV2Vi
U3RyaW5nIFdlYlN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjbwogICAgIHJldHVybiBtX3N0b3Jh
Z2VBcmVhLT5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpzZXRJ
dGVtKGNvbnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlLCBjb25zdCBX
ZWJVUkwmIHVybCwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCit2b2lkIFdlYlN0b3JhZ2VBcmVhSW1w
bDo6c2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtleSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSwg
Y29uc3QgV2ViVVJMJiB1cmwsIGJvb2wmIHF1b3RhRXhjZXB0aW9uLCBXZWJTdHJpbmcmIG9sZFZh
bHVlKQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKIAogICAgIFNjb3BlZFN0b3JhZ2VF
dmVudFVSTCBzY29wZSh1cmwpOwotICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2YWx1
ZSwgZXhjZXB0aW9uQ29kZSwgMCk7CisgICAgb2xkVmFsdWUgPSBtX3N0b3JhZ2VBcmVhLT5zZXRJ
dGVtKGtleSwgdmFsdWUsIGV4Y2VwdGlvbkNvZGUsIDApOwogCiAgICAgaWYgKGV4Y2VwdGlvbkNv
ZGUpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gV2ViQ29yZTo6UVVPVEFfRVhD
RUVERURfRVJSKTsKQEAgLTgwLDE2ICs4MCwxNiBAQCB2b2lkIFdlYlN0b3JhZ2VBcmVhSW1wbDo6
c2V0SXRlbShjb25zdCBXCiAgICAgICAgIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiB9CiAKLXZv
aWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFdlYlN0cmluZyYga2V5LCBj
b25zdCBXZWJVUkwmIHVybCkKK3ZvaWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNv
bnN0IFdlYlN0cmluZyYga2V5LCBjb25zdCBXZWJVUkwmIHVybCwgV2ViU3RyaW5nJiBvbGRWYWx1
ZSkKIHsKICAgICBTY29wZWRTdG9yYWdlRXZlbnRVUkwgc2NvcGUodXJsKTsKLSAgICBtX3N0b3Jh
Z2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgMCk7CisgICAgb2xkVmFsdWUgPSBtX3N0b3JhZ2VBcmVh
LT5yZW1vdmVJdGVtKGtleSwgMCk7CiB9CiAKLXZvaWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpjbGVh
cihjb25zdCBXZWJVUkwmIHVybCkKK3ZvaWQgV2ViU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihjb25z
dCBXZWJVUkwmIHVybCwgYm9vbCYgc29tZXRoaW5nQ2xlYXJlZCkKIHsKICAgICBTY29wZWRTdG9y
YWdlRXZlbnRVUkwgc2NvcGUodXJsKTsKLSAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcigwKTsKKyAg
ICBzb21ldGhpbmdDbGVhcmVkID0gbV9zdG9yYWdlQXJlYS0+Y2xlYXIoMCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTdG9yYWdlQXJl
YUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlN0b3JhZ2VBcmVh
SW1wbC5oCShyZXZpc2lvbiA1MzY2NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3RvcmFn
ZUFyZWFJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkgKzQ1LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCk7CiAgICAgdmlydHVhbCBXZWJTdHJpbmcga2V5KHVu
c2lnbmVkIGluZGV4KTsKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRJdGVtKGNvbnN0IFdlYlN0
cmluZyYga2V5KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBXZWJTdHJpbmcmIGtl
eSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wmIHF1b3Rh
RXhjZXB0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBXZWJTdHJpbmcm
IGtleSwgY29uc3QgV2ViVVJMJiB1cmwpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBX
ZWJVUkwmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgV2ViU3RyaW5nJiBr
ZXksIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sJiBxdW90
YUV4Y2VwdGlvbiwgV2ViU3RyaW5nJiBvbGRWYWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUl0ZW0oY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlVSTCYgdXJsLCBXZWJTdHJpbmcm
IG9sZFZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgV2ViVVJMJiB1cmwsIGJv
b2wmIHNvbWV0aGluZ0NsZWFyZWQpOwogCiAgICAgLy8gRm9yIHN0b3JhZ2UgZXZlbnRzIGluIHNp
bmdsZS1wcm9jZXNzIG1vZGUgYW5kIHRlc3Qgc2hlbGwuCiAgICAgc3RhdGljIGNvbnN0IFdlYlVS
TCogY3VycmVudFN0b3JhZ2VFdmVudFVSTCgpIHsgcmV0dXJuIHN0b3JhZ2VFdmVudFVSTDsgfQo=
</data>
<flag name="review"
          id="29621"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="29622"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>