<?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>125726</bug_id>
          
          <creation_ts>2013-12-13 20:32:04 -0800</creation_ts>
          <short_desc>[WK2] Rename WebString to API::String</short_desc>
          <delta_ts>2013-12-14 17:06:37 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959754</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-13 20:32:04 -0800</bug_when>
    <thetext>[WK2] Rename WebString to API::String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959755</commentid>
    <comment_count>1</comment_count>
      <attachid>219227</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-13 20:34:06 -0800</bug_when>
    <thetext>Created attachment 219227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959813</commentid>
    <comment_count>2</comment_count>
      <attachid>219227</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-12-14 02:52:51 -0800</bug_when>
    <thetext>Comment on attachment 219227
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=219227&amp;action=review

&gt; Source/WebKit2/Shared/APIString.h:53
&gt; -        return adoptRef(new WebString(string));
&gt; +        return adoptRef(new String(String(jsStringRef-&gt;string())));

This looks weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959844</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-14 10:01:47 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 219227 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219227&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/APIString.h:53
&gt; &gt; -        return adoptRef(new WebString(string));
&gt; &gt; +        return adoptRef(new String(String(jsStringRef-&gt;string())));
&gt; 
&gt; This looks weird.

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959846</commentid>
    <comment_count>4</comment_count>
      <attachid>219253</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-14 10:32:08 -0800</bug_when>
    <thetext>Created attachment 219253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959875</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-14 17:06:37 -0800</bug_when>
    <thetext>Committed r160608: &lt;http://trac.webkit.org/changeset/160608&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219227</attachid>
            <date>2013-12-13 20:34:06 -0800</date>
            <delta_ts>2013-12-14 10:01:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125726-20131213203400.patch</filename>
            <type>text/plain</type>
            <size>72303</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDU4MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEzLTEyLTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dLMl0gUmVuYW1lIFdlYlN0cmluZyB0
byBBUEk6OlN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI1NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0Q29kZXIubW06CisgICAgICAg
ICogU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tOgorICAgICAgICAq
IFNoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKiBTaGFyZWQv
QVBJL2MvV0tTaGFyZWRBUElDYXN0Lmg6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5n
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvY2YvV0tTdHJpbmdDRi5tbToKKyAgICAgICAg
KiBTaGFyZWQvQVBJQXJyYXkuY3BwOgorICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFNoYXJlZC9BUElTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlN0cmluZy5oLgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XS05TU3RyaW5nLmg6Cisg
ICAgICAgICogU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcubW06CisgICAgICAgICogU2hhcmVkL0lt
bXV0YWJsZURpY3Rpb25hcnkuY3BwOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L1BsdWdpbkluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW06CisgICAgICAgICogU2hhcmVkL1VzZXJEYXRh
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViQXJjaGl2ZVJlc291cmNlLmg6CisgICAgICAgICogU2hhcmVkL1dlYk9wZW5QYW5l
bFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAqIFNoYXJlZC9XZWJSZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgICogU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogU2hhcmVkL1dl
YlN0cmluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NyZWRlbnRp
YWwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHA6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJTmF2aWdhdGlvbkRhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViQ3JlZGVudGlhbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVn
aW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvbnRleHQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94
eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHA6CisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW06CisKIDIwMTMtMTItMTMgIERh
biBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBEZW1vdGVkIEFjdGl2aXR5
QXNzZXJ0aW9uLmggdG8gYSBwcm9qZWN0IGhlYWRlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUElBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SUFycmF5LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KyNpbmNsdWRlICJBUElTdHJpbmcuaCIKIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQwLDEzICs0
MCwxMyBAQCBQYXNzUmVmUHRyPEFycmF5PiBBcnJheTo6Y3JlYXRlKFZlY3RvcjxSCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBcnJheShzdGQ6Om1vdmUoZWxlbWVudHMpKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8QXJyYXk+IEFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RyaW5ncykKK1Bhc3NSZWZQdHI8QXJyYXk+IEFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShj
b25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBzdHJpbmdzKQogewogICAgIFZlY3RvcjxSZWZQdHI8
T2JqZWN0Pj4gZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
dHJpbmdzLnNpemUoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IHN0cmluZ3Mp
Ci0gICAgICAgIGVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXZWJLaXQ6OldlYlN0cmluZzo6Y3Jl
YXRlKHN0cmluZykpOworICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJp
bmc6OmNyZWF0ZShzdHJpbmcpKTsKIAogICAgIHJldHVybiBjcmVhdGUoc3RkOjptb3ZlKGVsZW1l
bnRzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAkocmV2aXNpb24gMTYwNTcx
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cnJheT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk+IGNyZWF0ZShWZWN0
b3I8UmVmUHRyPE9iamVjdD4+IGVsZW1lbnRzKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5PiBjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFycmF5PiBjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8V1RGOjpT
dHJpbmc+Jik7CiAKICAgICB2aXJ0dWFsIH5BcnJheSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSVN0cmluZy5oCShyZXZpc2lvbiAxNjA1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJTdHJpbmcuaDoxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlN0cmluZ19oCisjZGVmaW5lIFdlYlN0cmluZ19oCisKKyNpbmNsdWRlICJBUElPYmplY3Qu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gV2ViU3RyaW5nIC0gQSBzdHJpbmcgdHlwZSBz
dWl0YWJsZSBmb3IgdmVuZGluZyB0byBhbiBBUEkuCisKK2NsYXNzIFdlYlN0cmluZyA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlN0cmluZz4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlTnVsbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZygpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHN0cmluZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKHN0cmluZykpOworICAg
IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlKEpTU3RyaW5nUmVm
IGpzU3RyaW5nUmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJp
bmcoU3RyaW5nKGpzU3RyaW5nUmVmLT5zdHJpbmcoKSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZUZyb21VVEY4U3RyaW5nKGNvbnN0IGNoYXIqIHN0
cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKFN0cmlu
Zzo6ZnJvbVVURjgoc3RyaW5nKSkpOworICAgIH0KKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KKyAgICBzaXplX3QgZ2V0Q2hhcmFj
dGVycyhVQ2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyTGVuZ3RoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
YnVmZmVyTGVuZ3RoID0gc3RkOjptaW4oYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fc3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fc3RyaW5nLmNo
YXJhY3RlcnMoKSwgYnVmZmVyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIHJldHVy
biBidWZmZXJMZW5ndGg7CisgICAgfQorCisgICAgc2l6ZV90IG1heGltdW1VVEY4Q1N0cmluZ1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKSAqIDMgKyAxOyB9CisgICAgc2l6
ZV90IGdldFVURjhDU3RyaW5nKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAg
eworICAgICAgICBpZiAoIWJ1ZmZlclNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgY2hhciogcCA9IGJ1ZmZlcjsKKyAgICAgICAgY29uc3QgVUNoYXIqIGQgPSBtX3N0cmluZy5j
aGFyYWN0ZXJzKCk7CisgICAgICAgIFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdCByZXN1
bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmZCwgZCArIG1fc3RyaW5nLmxl
bmd0aCgpLCAmcCwgcCArIGJ1ZmZlclNpemUgLSAxLCAvKiBzdHJpY3QgKi8gdHJ1ZSk7CisgICAg
ICAgICpwKysgPSAnXDAnOworICAgICAgICBpZiAocmVzdWx0ICE9IFdURjo6VW5pY29kZTo6Y29u
dmVyc2lvbk9LICYmIHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6OnRhcmdldEV4aGF1c3RlZCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcCAtIGJ1ZmZlcjsKKyAgICB9CisK
KyAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IG90
aGVyLT5tX3N0cmluZzsgfQorICAgIGJvb2wgZXF1YWxUb1VURjhTdHJpbmcoY29uc3QgY2hhciog
b3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFN0cmluZzo6ZnJvbVVURjgob3RoZXIpOyB9Cisg
ICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZ0lnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBvdGhlcikg
eyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9zdHJpbmcsIG90aGVyKTsgfQorCisgICAgY29u
c3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQorCisgICAgSlNT
dHJpbmdSZWYgY3JlYXRlSlNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNDOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRl
KG1fc3RyaW5nKS5sZWFrUmVmKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYlN0cmluZygp
CisgICAgICAgIDogbV9zdHJpbmcoKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9zdHJpbmcoIXN0cmluZy5pbXBsKCkgPyBT
dHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkgOiBzdHJpbmcpCisgICAgeworICAgIH0KKworICAg
IFN0cmluZyBtX3N0cmluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViU3RyaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElTdHJpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgV2ViU3RyaW5nX2gKLSNkZWZpbmUgV2ViU3RyaW5nX2gKKyNpZm5kZWYg
QVBJU3RyaW5nX2gKKyNkZWZpbmUgQVBJU3RyaW5nX2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KQEAgLTM0
LDMwICszNCwzMiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjguaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgQVBJ
IHsKIAotLy8gV2ViU3RyaW5nIC0gQSBzdHJpbmcgdHlwZSBzdWl0YWJsZSBmb3IgdmVuZGluZyB0
byBhbiBBUEkuCi0KLWNsYXNzIFdlYlN0cmluZyA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OlN0cmluZz4geworY2xhc3MgU3RyaW5nIEZJTkFMIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6U3RyaW5nPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGVOdWxsKCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmc+IGNyZWF0ZU51bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHJpbmcpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZz4g
Y3JlYXRlKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dHJpbmcoc3RyaW5nKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5n
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nPiBjcmVhdGUoSlNTdHJpbmdSZWYganNTdHJpbmdSZWYpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZyhzdHJpbmcpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHJpbmcoU3RyaW5nKGpzU3RyaW5nUmVmLT5zdHJpbmcoKSkpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZShKU1N0cmluZ1JlZiBqc1N0
cmluZ1JlZikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmc+IGNyZWF0ZUZyb21VVEY4U3Ry
aW5nKGNvbnN0IGNoYXIqIHN0cmluZykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViU3RyaW5nKFN0cmluZyhqc1N0cmluZ1JlZi0+c3RyaW5nKCkpKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGVGcm9tVVRG
OFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCisgICAgdmlydHVhbCB+U3RyaW5nKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nKSkpOwogICAgIH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmcuaXNOdWxsKCk7IH0KQEAgLTg3LDExICs4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBwIC0gYnVmZmVyOwogICAgIH0KIAotICAgIGJvb2wgZXF1YWwoV2ViU3RyaW5nKiBvdGhl
cikgeyByZXR1cm4gbV9zdHJpbmcgPT0gb3RoZXItPm1fc3RyaW5nOyB9Ci0gICAgYm9vbCBlcXVh
bFRvVVRGOFN0cmluZyhjb25zdCBjaGFyKiBvdGhlcikgeyByZXR1cm4gbV9zdHJpbmcgPT0gU3Ry
aW5nOjpmcm9tVVRGOChvdGhlcik7IH0KKyAgICBib29sIGVxdWFsKFN0cmluZyogb3RoZXIpIHsg
cmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQorICAgIGJvb2wgZXF1YWxUb1VU
RjhTdHJpbmcoY29uc3QgY2hhciogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChvdGhlcik7IH0KICAgICBib29sIGVxdWFsVG9VVEY4U3RyaW5nSWdub3Jp
bmdDYXNlKGNvbnN0IGNoYXIqIG90aGVyKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX3N0
cmluZywgb3RoZXIpOyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nOyB9CisgICAgY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nOyB9CiAKICAgICBKU1N0cmluZ1JlZiBjcmVhdGVKU1N0cmluZygpIGNv
bnN0CiAgICAgewpAQCAtMTAwLDE5ICsxMDIsMTkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBXZWJTdHJpbmcoKQorICAgIFN0cmluZygpCiAgICAgICAgIDogbV9zdHJpbmcoKQog
ICAgIHsKICAgICB9CiAKLSAgICBXZWJTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAg
ICAgIDogbV9zdHJpbmcoIXN0cmluZy5pbXBsKCkgPyBTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHko
KSkgOiBzdHJpbmcpCisgICAgU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCisgICAg
ICAgIDogbV9zdHJpbmcoIXN0cmluZy5pbXBsKCkgPyBXVEY6OlN0cmluZyhTdHJpbmdJbXBsOjpl
bXB0eSgpKSA6IHN0cmluZykKICAgICB7CiAgICAgfQogCi0gICAgU3RyaW5nIG1fc3RyaW5nOwor
ICAgIFdURjo6U3RyaW5nIG1fc3RyaW5nOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
LSNlbmRpZiAvLyBXZWJTdHJpbmdfaAorI2VuZGlmIC8vIEFQSVN0cmluZ19oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAx
NjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVEaWN0
aW9uYXJ5LmgiCiAKICNpbmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5o
IgorI2luY2x1ZGUgIkFQSVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTks
NyArNTksNyBAQCBQYXNzUmVmUHRyPEFQSTo6QXJyYXk+IEltbXV0YWJsZURpY3Rpb25hCiAgICAg
a2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbWFwLnNpemUoKSk7CiAKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IG1fbWFwLmtleXMoKSkKLSAgICAgICAga2V5cy51bmNoZWNrZWRBcHBl
bmQoV2ViU3RyaW5nOjpjcmVhdGUoa2V5KSk7CisgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5k
KEFQSTo6U3RyaW5nOjpjcmVhdGUoa2V5KSk7CiAKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3Jl
YXRlKHN0ZDo6bW92ZShrZXlzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNl
ckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyRGF0YS5j
cHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Vc2VyRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIkFQSUZyYW1l
SGFuZGxlLmgiCiAjaW5jbHVkZSAiQVBJR2VvbWV0cnkuaCIKICNpbmNsdWRlICJBUElOdW1iZXIu
aCIKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgogI2luY2x1ZGUgIk11dGFibGVEaWN0aW9uYXJ5
LmgiCiAjaW5jbHVkZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MTUzLDcgKzE1Myw3IEBAIHZvaWQgVXNlckRhdGE6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEUK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFQSTo6T2JqZWN0OjpUeXBlOjpTdHJpbmc6IHsK
LSAgICAgICAgYXV0byYgc3RyaW5nID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViU3RyaW5nJj4ob2Jq
ZWN0KTsKKyAgICAgICAgYXV0byYgc3RyaW5nID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVBJOjpTdHJp
bmcmPihvYmplY3QpOwogICAgICAgICBlbmNvZGVyIDw8IHN0cmluZy5zdHJpbmcoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjc0LDcgKzI3NCw3IEBAIGJvb2wgVXNlckRhdGE6OmRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudEQKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJlc3VsdCA9IFdlYlN0cmlu
Zzo6Y3JlYXRlKHN0cmluZyk7CisgICAgICAgIHJlc3VsdCA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
c3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSUdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiQVBJTnVtYmVyLmgiCisjaW5jbHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5j
bHVkZSAiRGF0YVJlZmVyZW5jZS5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIldlYlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYlVS
TFJlc3BvbnNlLmgiCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBUEk6Ok9iamVjdDo6VHlwZTo6U3Ry
aW5nOiB7Ci0gICAgICAgICAgICBXZWJTdHJpbmcqIHN0cmluZyA9IHN0YXRpY19jYXN0PFdlYlN0
cmluZyo+KG1fcm9vdCk7CisgICAgICAgICAgICBBUEk6OlN0cmluZyogc3RyaW5nID0gc3RhdGlj
X2Nhc3Q8QVBJOjpTdHJpbmcqPihtX3Jvb3QpOwogICAgICAgICAgICAgZW5jb2RlciA8PCBzdHJp
bmctPnN0cmluZygpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTMx
NCw3ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nOwogICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJpbmcpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFdlYlN0cmluZzo6Y3JlYXRlKHN0
cmluZyk7CisgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0
cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFQSTo6
T2JqZWN0OjpUeXBlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6IHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJBcmNoaXZlUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQXJjaGl2ZVJlc291cmNlLmgJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJBcmNoaXZlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNiBAQCBjbGFzcyBBcmNoaXZlUmVzb3VyY2U7CiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgV2ViRGF0YTsKLWNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKIAog
Y2xhc3MgV2ViQXJjaGl2ZVJlc291cmNlIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6V2ViQXJjaGl2ZVJlc291cmNlPiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAxNjA1NzEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJXZWJPcGVuUGFuZWxQYXJh
bWV0ZXJzLmgiCiAKICNpbmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5o
IgorI2luY2x1ZGUgIkFQSVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJSZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNs
dWRlICJXZWJSZW5kZXJMYXllci5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRl
ICJBUElTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5n
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTYwNTcx
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJXZWJSZW5kZXJPYmplY3QuaCIKIAog
I2luY2x1ZGUgIkFQSUFycmF5LmgiCisjaW5jbHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlckNsaWVudC5oPgpAQCAtNzYsNyArNzYsNyBAQCBXZWJSZW5kZXJPYmplY3Q6
OldlYlJlbmRlck9iamVjdChSZW5kZXJPCiAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCkpOwogCiAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBlbGVtZW50LT5jbGFzc05hbWVz
KCkuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVz
LmFwcGVuZChXZWJTdHJpbmc6OmNyZWF0ZShlbGVtZW50LT5jbGFzc05hbWVzKClbaV0pKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5hcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShl
bGVtZW50LT5jbGFzc05hbWVzKClbaV0pKTsKIAogICAgICAgICAgICAgICAgIG1fZWxlbWVudENs
YXNzTmFtZXMgPSBBUEk6OkFycmF5OjpjcmVhdGUoc3RkOjptb3ZlKGNsYXNzTmFtZXMpKTsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgJKHJldmlzaW9uIDE2
MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViU3RyaW5nX2gKLSNk
ZWZpbmUgV2ViU3RyaW5nX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi0vLyBXZWJTdHJpbmcgLSBBIHN0cmluZyB0eXBlIHN1aXRhYmxlIGZvciB2ZW5k
aW5nIHRvIGFuIEFQSS4KLQotY2xhc3MgV2ViU3RyaW5nIDogcHVibGljIEFQSTo6T2JqZWN0SW1w
bDxBUEk6Ok9iamVjdDo6VHlwZTo6U3RyaW5nPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGVOdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmcoc3RyaW5nKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGUoSlNTdHJpbmdSZWYganNTdHJpbmdSZWYpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZyhTdHJpbmcoanNTdHJp
bmdSZWYtPnN0cmluZygpKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0
cmluZz4gY3JlYXRlRnJvbVVURjhTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChzdHJp
bmcpKSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5pc051bGwoKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzRW1wdHkoKTsgfQotICAgIAotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5sZW5ndGgoKTsgfQotICAgIHNpemVfdCBnZXRDaGFyYWN0ZXJzKFVDaGFyKiBidWZm
ZXIsIHNpemVfdCBidWZmZXJMZW5ndGgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWJ1ZmZl
ckxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBidWZmZXJMZW5ndGggPSBz
dGQ6Om1pbihidWZmZXJMZW5ndGgsIHN0YXRpY19jYXN0PHNpemVfdD4obV9zdHJpbmcubGVuZ3Ro
KCkpKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9zdHJpbmcuY2hhcmFjdGVycygpLCBidWZm
ZXJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlckxlbmd0aDsK
LSAgICB9Ci0KLSAgICBzaXplX3QgbWF4aW11bVVURjhDU3RyaW5nU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLmxlbmd0aCgpICogMyArIDE7IH0KLSAgICBzaXplX3QgZ2V0VVRGOENTdHJp
bmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmICgh
YnVmZmVyU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjaGFyKiBwID0gYnVm
ZmVyOwotICAgICAgICBjb25zdCBVQ2hhciogZCA9IG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKLSAg
ICAgICAgV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IFdURjo6VW5pY29k
ZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgbV9zdHJpbmcubGVuZ3RoKCksICZwLCBwICsg
YnVmZmVyU2l6ZSAtIDEsIC8qIHN0cmljdCAqLyB0cnVlKTsKLSAgICAgICAgKnArKyA9ICdcMCc7
Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpjb252ZXJzaW9uT0sgJiYgcmVz
dWx0ICE9IFdURjo6VW5pY29kZTo6dGFyZ2V0RXhoYXVzdGVkKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiBwIC0gYnVmZmVyOwotICAgIH0KLQotICAgIGJvb2wgZXF1YWwo
V2ViU3RyaW5nKiBvdGhlcikgeyByZXR1cm4gbV9zdHJpbmcgPT0gb3RoZXItPm1fc3RyaW5nOyB9
Ci0gICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZyhjb25zdCBjaGFyKiBvdGhlcikgeyByZXR1cm4g
bV9zdHJpbmcgPT0gU3RyaW5nOjpmcm9tVVRGOChvdGhlcik7IH0KLSAgICBib29sIGVxdWFsVG9V
VEY4U3RyaW5nSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIG90aGVyKSB7IHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShtX3N0cmluZywgb3RoZXIpOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Ci0KLSAgICBKU1N0cmluZ1JlZiBjcmVhdGVK
U1N0cmluZygpIGNvbnN0Ci0gICAgewotICAgICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKLSAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUobV9zdHJpbmcpLmxlYWtS
ZWYoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViU3RyaW5nKCkKLSAgICAgICAgOiBtX3N0
cmluZygpCi0gICAgewotICAgIH0KLQotICAgIFdlYlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKLSAgICAgICAgOiBtX3N0cmluZyghc3RyaW5nLmltcGwoKSA/IFN0cmluZyhTdHJpbmdJbXBs
OjplbXB0eSgpKSA6IHN0cmluZykKLSAgICB7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1fc3RyaW5n
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJTdHJpbmdfaApJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1v
dGVPYmplY3RDb2Rlci5tbQkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMCArMzAsMTAgQEAKIAogI2ltcG9ydCAiQVBJQXJyYXkuaCIKICNpbXBvcnQgIkFQSU51bWJl
ci5oIgorI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJNdXRhYmxlRGljdGlvbmFyeS5o
IgogI2ltcG9ydCAiV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViRGF0YS5oIgotI2ltcG9ydCAiV2ViU3RyaW5nLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgdm9pZCBlbmNvZGVPYmplY3QoV0tSZW1v
dGVPYmplY3RFCiAgICAgaWYgKCFvYmplY3RDbGFzcykKICAgICAgICAgW05TRXhjZXB0aW9uIHJh
aXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIi1jbGFzc0ZvckNvZGVyIHJl
dHVybmVkIG5pbCBmb3IgJUAiLCBvYmplY3RdOwogCi0gICAgZW5jb2Rlci0+X2N1cnJlbnREaWN0
aW9uYXJ5LT5zZXQoY2xhc3NOYW1lS2V5LCBXZWJTdHJpbmc6OmNyZWF0ZShjbGFzc19nZXROYW1l
KG9iamVjdENsYXNzKSkpOworICAgIGVuY29kZXItPl9jdXJyZW50RGljdGlvbmFyeS0+c2V0KGNs
YXNzTmFtZUtleSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShjbGFzc19nZXROYW1lKG9iamVjdENsYXNz
KSkpOwogCiAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNJbnZvY2F0aW9uIGNsYXNz
XV0pIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBzcGVjaWFsIGNhc2UgTlNJbnZvY2F0aW9uIHNp
bmNlIHdlIGRvbid0IHdhbnQgdG8gZW5jb2RlIHRoZSB0YXJnZXQuCkBAIC00MzQsNyArNDM0LDcg
QEAgICAgIGNvbnN0IGF1dG8mIGFsbG93ZWRDbGFzc2VzID0gW2RlY29kZQogCiBzdGF0aWMgaWQg
ZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlcikKIHsKLSAgICBXZWJT
dHJpbmcqIGNsYXNzTmFtZVN0cmluZyA9IGRlY29kZXItPl9jdXJyZW50RGljdGlvbmFyeS0+Z2V0
PFdlYlN0cmluZz4oY2xhc3NOYW1lS2V5KTsKKyAgICBBUEk6OlN0cmluZyogY2xhc3NOYW1lU3Ry
aW5nID0gZGVjb2Rlci0+X2N1cnJlbnREaWN0aW9uYXJ5LT5nZXQ8QVBJOjpTdHJpbmc+KGNsYXNz
TmFtZUtleSk7CiAgICAgaWYgKCFjbGFzc05hbWVTdHJpbmcpCiAgICAgICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0OkAiQ2xh
c3MgbmFtZSBtaXNzaW5nIl07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29j
b2EvV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkubW0JKHJldmlzaW9uIDE2
MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RS
ZWdpc3RyeS5tbQkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCAtICh2b2lkKV9zZW5k
SW52b2NhdGlvbjooTlNJbnZvY2F0aW9uICopCiAgICAgW2VuY29kZXIgZW5jb2RlT2JqZWN0Omlu
dm9jYXRpb24gZm9yS2V5Omludm9jYXRpb25LZXldOwogCiAgICAgUmVmUHRyPE11dGFibGVEaWN0
aW9uYXJ5PiBib2R5ID0gTXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZSgpOwotICAgIGJvZHktPnNl
dChpbnRlcmZhY2VJZGVudGlmaWVyS2V5LCBXZWJTdHJpbmc6OmNyZWF0ZShpbnRlcmZhY2UuaWRl
bnRpZmllcikpOworICAgIGJvZHktPnNldChpbnRlcmZhY2VJZGVudGlmaWVyS2V5LCBBUEk6OlN0
cmluZzo6Y3JlYXRlKGludGVyZmFjZS5pZGVudGlmaWVyKSk7CiAgICAgYm9keS0+c2V0KGVuY29k
ZWRJbnZvY2F0aW9uS2V5LCBbZW5jb2RlciByb290T2JqZWN0RGljdGlvbmFyeV0pOwogCiAgICAg
W3NlbGYgX3NlbmRNZXNzYWdlV2l0aEJvZHk6Ym9keS5yZWxlYXNlKCldOwpAQCAtMTIzLDcgKzEy
Myw3IEBAIC0gKEJPT0wpX2hhbmRsZU1lc3NhZ2VXaXRoTmFtZTooV0tTdHJpbmcKIAogICAgIGNv
bnN0IEltbXV0YWJsZURpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSB0b0ltcGwoc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihib2R5KSk7CiAKLSAgICBXZWJTdHJpbmcqIGludGVyZmFjZUlkZW50
aWZpZXIgPSBkaWN0aW9uYXJ5LT5nZXQ8V2ViU3RyaW5nPihpbnRlcmZhY2VJZGVudGlmaWVyS2V5
KTsKKyAgICBBUEk6OlN0cmluZyogaW50ZXJmYWNlSWRlbnRpZmllciA9IGRpY3Rpb25hcnktPmdl
dDxBUEk6OlN0cmluZz4oaW50ZXJmYWNlSWRlbnRpZmllcktleSk7CiAgICAgaWYgKCFpbnRlcmZh
Y2VJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gTk87CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAJKHJldmlzaW9u
IDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV0tQbHVnaW5JbmZvcm1hdGlvbi5oIgogCisjaW5jbHVkZSAiQVBJ
U3RyaW5nLmgiCiAjaW5jbHVkZSAiUGx1Z2luSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXS1No
YXJlZEFQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZp
ZXJLZXkoKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBX
ZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uQnVuZGxl
SWRlbnRpZmllcktleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkg
PSBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllcktl
eSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVy
biAwOwpAQCAtNDUsNyArNDUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uQnVu
ZGxlSWRlCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgp
CiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0cmlu
Zyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9u
S2V5KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5KCkpLmxlYWtSZWYo
KTsKICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC01NSw3
ICs1NSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVWZXIKIFdLU3Ry
aW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKQogewogI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9
IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5
KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5n
OjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTY1
LDcgKzY1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNobwogV0tT
dHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKQogewogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6
Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uUGF0aEtleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGlj
IEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9u
UGF0aEtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAg
IHJldHVybiAwOwpAQCAtNzUsNyArNzUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0
aW9uUGF0aEtleSgpCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVL
ZXkoKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJT
dHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5h
bWVLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpT
dHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkpLmxlYWtSZWYo
KTsKICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC04NSw3
ICs4NSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25EaXNwbGF5TmEKIFdLU3Ry
aW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG9hZFBvbGljeUtleSgpCiB7CiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0g
V2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG9hZFBvbGljeUtleSgp
KS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6
Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXkoKSkubGVha1JlZigp
OwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTk1LDcg
Kzk1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRMbwogV0tTdHJp
bmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tu
b3duQXZhaWxhYmxlS2V5KCkKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1h
dGlvblVwZGF0ZVBhc3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxlS2V5KCkpLmxl
YWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVh
dGUocGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2
YWlsYWJsZUtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQog
ICAgIHJldHVybiAwOwpAQCAtMTA1LDcgKzEwNSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5m
b3JtYXRpb25VcGRhdGVQYXMKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25IYXNTYW5k
Ym94UHJvZmlsZUtleSgpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
c3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRp
b25IYXNTYW5kYm94UHJvZmlsZUtleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3Ry
aW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJv
eFByb2ZpbGVLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UK
ICAgICByZXR1cm4gMDsKQEAgLTExNSw3ICsxMTUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbklu
Zm9ybWF0aW9uSGFzU2FuZGJvCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uRnJhbWVV
UkxLZXkoKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBX
ZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uRnJhbWVV
UkxLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpT
dHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCkpLmxlYWtSZWYoKTsK
ICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xMjUsNyAr
MTI1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMSwogV0tTdHJp
bmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkKIHsKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6
OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpLmxlYWtSZWYoKTsKKyAgICBz
dGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAj
ZWxzZQogICAgIHJldHVybiAwOwpAQCAtMTM1LDcgKzEzNSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1
Z2luSW5mb3JtYXRpb25NSU1FVHlwZUsKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25Q
YWdlVVJMS2V5KCkKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0
aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBh
Z2VVUkxLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJ
OjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKSkubGVha1JlZigp
OwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTE0NSw3
ICsxNDUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtlCiBXS1N0
cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKQog
ewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcq
IGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRy
aWJ1dGVVUkxLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0g
QVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRl
VVJMS2V5KCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CkBAIC0xNTUsNyArMTU1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1h
dGlvblBsdWdpbnNwYQogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtl
eSgpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0
cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxL
ZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJp
bmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpKS5sZWFrUmVmKCk7CiAg
ICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtMTY1LDcgKzE2
NSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkwKIFdLU3RyaW5n
UmVmIFdLUGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1cmVkS2V5KCkKIHsKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBX
ZWJTdHJpbmc6OmNyZWF0ZShwbHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXko
KSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6
OmNyZWF0ZShwbHVnSW5JbmZvcm1hdGlvblJlcGxhY2VtZW50T2JzY3VyZWRLZXkoKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHJldmlz
aW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNh
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBXS1NoYXJlZEFQ
SUNhc3RfaAogCiAjaW5jbHVkZSAiQVBJTnVtYmVyLmgiCisjaW5jbHVkZSAiQVBJU3RyaW5nLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2FtZURvY3VtZW50TmF2aWdh
dGlvblR5cGUuaCIKICNpbmNsdWRlICJXS0Jhc2UuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNs
dWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAi
V2ViU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJX
ZWJVUkwuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVz
cG9uc2UuaCIKQEAgLTEwOCw3ICsxMDgsNyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tSZWN0UmVm
LCBBUEk6OlJlY3QpCiBXS19BRERfQVBJX01BUFBJTkcoV0tTZWN1cml0eU9yaWdpblJlZiwgV2Vi
U2VjdXJpdHlPcmlnaW4pCiBXS19BRERfQVBJX01BUFBJTkcoV0tTZXJpYWxpemVkU2NyaXB0VmFs
dWVSZWYsIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIFdLX0FERF9BUElfTUFQUElORyhXS1Np
emVSZWYsIEFQSTo6U2l6ZSkKLVdLX0FERF9BUElfTUFQUElORyhXS1N0cmluZ1JlZiwgV2ViU3Ry
aW5nKQorV0tfQUREX0FQSV9NQVBQSU5HKFdLU3RyaW5nUmVmLCBBUEk6OlN0cmluZykKIFdLX0FE
RF9BUElfTUFQUElORyhXS1R5cGVSZWYsIEFQSTo6T2JqZWN0KQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLVUludDY0UmVmLCBBUEk6OlVJbnQ2NCkKIFdLX0FERF9BUElfTUFQUElORyhXS1VSTFJlZiwg
V2ViVVJMKQpAQCAtMTI0LDYgKzEyNCwxMiBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tXZWJBcmNo
aXZlUmVzb3VyY2VSCiBXS19BRERfQVBJX01BUFBJTkcoV0tPYmpDVHlwZVdyYXBwZXJSZWYsIE9i
akNPYmplY3RHcmFwaCkKICNlbmRpZgogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHR5
cGVuYW1lIEltcGxUeXBlSW5mbzxUPjo6QVBJVHlwZSB0b0FQSShUIHQpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgSW1wbFR5cGVJbmZvPFQ+OjpBUElUeXBlPih0KTsK
K30KKwogdGVtcGxhdGU8dHlwZW5hbWUgSW1wbFR5cGUsIHR5cGVuYW1lIEFQSVR5cGUgPSB0eXBl
bmFtZSBJbXBsVHlwZUluZm88SW1wbFR5cGUqPjo6QVBJVHlwZT4KIGNsYXNzIFByb3h5aW5nUmVm
UHRyIHsKIHB1YmxpYzoKQEAgLTE1MiwyMyArMTU4LDE3IEBAIGlubGluZSB0eXBlbmFtZSBBUElU
eXBlSW5mbzxUPjo6SW1wbFR5cGUKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFt
ZSBBUElUeXBlSW5mbzxUPjo6SW1wbFR5cGU+KGNvbnN0X2Nhc3Q8Tm9uQ29uc3RWYWx1ZVR5cGUq
Pih0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdHlwZW5hbWUgSW1wbFR5
cGVJbmZvPFQ+OjpBUElUeXBlIHRvQVBJKFQgdCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx0eXBlbmFtZSBJbXBsVHlwZUluZm88VD46OkFQSVR5cGU+KHQpOwotfQotCiAvKiBTcGVj
aWFsIGNhc2VzLiAqLwogCi1pbmxpbmUgUHJveHlpbmdSZWZQdHI8V2ViU3RyaW5nPiB0b0FQSShT
dHJpbmdJbXBsKiBzdHJpbmcpCitpbmxpbmUgUHJveHlpbmdSZWZQdHI8QVBJOjpTdHJpbmc+IHRv
QVBJKFN0cmluZ0ltcGwqIHN0cmluZykKIHsKLSAgICByZXR1cm4gUHJveHlpbmdSZWZQdHI8V2Vi
U3RyaW5nPihXZWJTdHJpbmc6OmNyZWF0ZShzdHJpbmcpKTsKKyAgICByZXR1cm4gUHJveHlpbmdS
ZWZQdHI8QVBJOjpTdHJpbmc+KEFQSTo6U3RyaW5nOjpjcmVhdGUoc3RyaW5nKSk7CiB9CiAKIGlu
bGluZSBXS1N0cmluZ1JlZiB0b0NvcGllZEFQSShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAg
ICBSZWZQdHI8V2ViU3RyaW5nPiB3ZWJTdHJpbmcgPSBXZWJTdHJpbmc6OmNyZWF0ZShzdHJpbmcp
OwotICAgIHJldHVybiB0b0FQSSh3ZWJTdHJpbmcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CisgICAg
UmVmUHRyPEFQSTo6U3RyaW5nPiBhcGlTdHJpbmcgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmlu
Zyk7CisgICAgcmV0dXJuIHRvQVBJKGFwaVN0cmluZy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0K
IAogaW5saW5lIFByb3h5aW5nUmVmUHRyPFdlYlVSTD4gdG9VUkxSZWYoU3RyaW5nSW1wbCogc3Ry
aW5nKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCShyZXZp
c2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAogV0tUeXBlSUQgV0tTdHJpbmdHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShX
ZWJTdHJpbmc6OkFQSVR5cGUpOworICAgIHJldHVybiB0b0FQSShBUEk6OlN0cmluZzo6QVBJVHlw
ZSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZykKIHsKLSAgICBSZWZQdHI8V2ViU3RyaW5nPiB3ZWJTdHJpbmcgPSBXZWJT
dHJpbmc6OmNyZWF0ZUZyb21VVEY4U3RyaW5nKHN0cmluZyk7Ci0gICAgcmV0dXJuIHRvQVBJKHdl
YlN0cmluZy5yZWxlYXNlKCkubGVha1JlZigpKTsKKyAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IGFw
aVN0cmluZyA9IEFQSTo6U3RyaW5nOjpjcmVhdGVGcm9tVVRGOFN0cmluZyhzdHJpbmcpOworICAg
IHJldHVybiB0b0FQSShhcGlTdHJpbmcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIGJvb2wg
V0tTdHJpbmdJc0VtcHR5KFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKQEAgLTg1LDggKzg1LDggQEAg
Ym9vbCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nSWdub3JpbgogCiBXS1N0cmluZ1JlZiBX
S1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhKU1N0cmluZ1JlZiBqc1N0cmluZ1JlZikKIHsKLSAg
ICBSZWZQdHI8V2ViU3RyaW5nPiB3ZWJTdHJpbmcgPSBXZWJTdHJpbmc6OmNyZWF0ZShqc1N0cmlu
Z1JlZik7Ci0gICAgcmV0dXJuIHRvQVBJKHdlYlN0cmluZy5yZWxlYXNlKCkubGVha1JlZigpKTsK
KyAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IGFwaVN0cmluZyA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
anNTdHJpbmdSZWYpOworICAgIHJldHVybiB0b0FQSShhcGlTdHJpbmcucmVsZWFzZSgpLmxlYWtS
ZWYoKSk7CiB9CiAKIEpTU3RyaW5nUmVmIFdLU3RyaW5nQ29weUpTU3RyaW5nKFdLU3RyaW5nUmVm
IHN0cmluZ1JlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9jZi9XS1N0cmlu
Z0NGLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9jZi9XS1N0
cmluZ0NGLm1tCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvY2YvV0tTdHJpbmdDRi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBXS1N0
cmluZ1JlZiBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDCiAjaWYgV0tfQVBJX0VOQUJMRUQK
ICAgICAvLyBTaW5jZSBXS05TU3RyaW5nIGlzIGFuIGludGVybmFsIGNsYXNzIHdpdGggbm8gc3Vi
Y2xhc3Nlcywgd2UgY2FuIGRvIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLgogICAgIGlmIChvYmpl
Y3RfZ2V0Q2xhc3MoKE5TU3RyaW5nICopY2ZTdHJpbmcpID09IHdrTlNTdHJpbmdDbGFzcygpKSB7
Ci0gICAgICAgIHJldHVybiB0b0FQSShzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPigmWyhXS05TU3Ry
aW5nICopY2ZTdHJpbmcgcmV0YWluXS5fYXBpT2JqZWN0KSk7CisgICAgICAgIHJldHVybiB0b0FQ
SShzdGF0aWNfY2FzdDxBUEk6OlN0cmluZyo+KCZbKFdLTlNTdHJpbmcgKiljZlN0cmluZyByZXRh
aW5dLl9hcGlPYmplY3QpKTsKICAgICB9CiAjZW5kaWYKICAgICBTdHJpbmcgc3RyaW5nKGNmU3Ry
aW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TU3RyaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcuaAkocmV2
aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDExIEBACiAKICNpZiBXS19BUElfRU5BQkxF
RAogCisjaW1wb3J0ICJBUElTdHJpbmcuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCi0jaW1wb3J0
ICJXZWJTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1pbmxpbmUgTlNTdHJpbmcgKndy
YXBwZXIoV2ViU3RyaW5nJiBzdHJpbmcpIHsgQVNTRVJUKFtzdHJpbmcud3JhcHBlcigpIGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOyByZXR1cm4gKE5TU3RyaW5nICopc3RyaW5nLndy
YXBwZXIoKTsgfQoraW5saW5lIE5TU3RyaW5nICp3cmFwcGVyKEFQSTo6U3RyaW5nJiBzdHJpbmcp
IHsgQVNTRVJUKFtzdHJpbmcud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0pOyByZXR1cm4gKE5TU3RyaW5nICopc3RyaW5nLndyYXBwZXIoKTsgfQogfQogCiBAaW50ZXJm
YWNlIFdLTlNTdHJpbmcgOiBXS09iamVjdCA8TlNDb3B5aW5nPgpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcubW0JKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TU3RyaW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi0jaW1wb3J0ICJXZWJTdHJpbmcu
aCIKKyNpbXBvcnQgIkFQSVN0cmluZy5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogCiAtIChOU09iamVjdCAqKV93ZWJfY3JlYXRlVGFyZ2V0CiB7Ci0gICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPigmc2VsZi5fYXBpT2JqZWN0
KS0+c3RyaW5nKCk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxBUEk6
OlN0cmluZyo+KCZzZWxmLl9hcGlPYmplY3QpLT5zdHJpbmcoKTsKICAgICByZXR1cm4gKE5TU3Ry
aW5nICopQ0ZNYWtlQ29sbGVjdGFibGUoc3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkubGVha1JlZigp
KTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1
Z2luSW5mb3JtYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Q
bHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcAkocmV2aXNpb24gMTYwNTcxKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvUGx1Z2luSW5mb3JtYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTAgQEAKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKIAogI2luY2x1ZGUgIkFQSU51bWJlci5oIgorI2luY2x1ZGUgIkFQ
SVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlBsdWdp
bk1vZHVsZUluZm8uaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtMTExLDggKzExMSw4IEBAIFN0cmluZyBwbHVnSW5JbmZvcm1hdGlvblJlcGxhY2Vt
ZW50T2JzY3UKIHZvaWQgZ2V0UGx1Z2luTW9kdWxlSW5mb3JtYXRpb24oY29uc3QgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luLCBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlJiBtYXApCiB7CiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1h
dGlvblBhdGhLZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luLnBhdGgpKTsKLSAgICBtYXAu
c2V0KHBsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUo
cGx1Z2luLmluZm8ubmFtZSkpOworICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25QYXRoS2V5
KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnBhdGgpKTsKKyAgICBtYXAuc2V0KHBsdWdp
bkluZm9ybWF0aW9uRGlzcGxheU5hbWVLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4u
aW5mby5uYW1lKSk7CiAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9s
aWN5S2V5KCksIEFQSTo6VUludDY0OjpjcmVhdGUodG9XS1BsdWdpbkxvYWRQb2xpY3koUGx1Z2lu
SW5mb1N0b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihwbHVnaW4pKSkpOwogCiAgICAg
Z2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1hdGlvbihwbHVnaW4sIG1hcCk7CkBAIC0xMzgs
NyArMTM4LDcgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBjcmVhdGVQbAogICAg
IGlmICghZnJhbWVVUkxTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICBtYXAuc2V0KHBsdWdpbklu
Zm9ybWF0aW9uRnJhbWVVUkxLZXkoKSwgV2ViVVJMOjpjcmVhdGUoZnJhbWVVUkxTdHJpbmcpKTsK
ICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWFwLnNldChwbHVnaW5JbmZv
cm1hdGlvbk1JTUVUeXBlS2V5KCksIFdlYlN0cmluZzo6Y3JlYXRlKG1pbWVUeXBlKSk7CisgICAg
ICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpLCBBUEk6OlN0cmluZzo6
Y3JlYXRlKG1pbWVUeXBlKSk7CiAgICAgaWYgKCFwYWdlVVJMU3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZXkoKSwgV2ViVVJMOjpjcmVh
dGUocGFnZVVSTFN0cmluZykpOwogICAgIGlmICghcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJp
bmcuaXNFbXB0eSgpKQpAQCAtMTU3LDcgKzE1Nyw3IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGlj
dGlvbmFyeT4gY3JlYXRlUGwKICAgICBpZiAoIWZyYW1lVVJMU3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCksIFdlYlVSTDo6Y3Jl
YXRlKGZyYW1lVVJMU3RyaW5nKSk7CiAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAg
ICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpLCBXZWJTdHJpbmc6OmNy
ZWF0ZShtaW1lVHlwZSkpOworICAgICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5
cGVLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShtaW1lVHlwZSkpOwogICAgIGlmICghcGFnZVVS
TFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25QYWdl
VVJMS2V5KCksIFdlYlVSTDo6Y3JlYXRlKHBhZ2VVUkxTdHJpbmcpKTsKIApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxOSArMjksMTkgQEAKICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKIAogI2ltcG9ydCAiQVBJTnVtYmVyLmgiCisjaW1wb3J0ICJBUElTdHJp
bmcuaCIKICNpbXBvcnQgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbXBvcnQgIlBsdWdpblNhbmRi
b3hQcm9maWxlLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBvcnQgIldlYlN0
cmluZy5oIgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiB2b2lkIGdldFBsYXRmb3JtUGx1Z2luTW9kdWxlSW5mb3JtYXRpb24oY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luLCBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlJiBt
YXApCiB7Ci0gICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXko
KSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKTsKLSAgICBtYXAu
c2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpLCBXZWJTdHJpbmc6OmNyZWF0
ZShwbHVnaW4udmVyc2lvblN0cmluZykpOwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25C
dW5kbGVTaG9ydFZlcnNpb25LZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luLnNob3J0VmVy
c2lvblN0cmluZykpOworICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlm
aWVyS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKTsK
KyAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpLCBBUEk6OlN0
cmluZzo6Y3JlYXRlKHBsdWdpbi52ZXJzaW9uU3RyaW5nKSk7CisgICAgbWFwLnNldChwbHVnaW5J
bmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBs
dWdpbi5zaG9ydFZlcnNpb25TdHJpbmcpKTsKICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9u
VXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKSwgQVBJOjpC
b29sZWFuOjpjcmVhdGUoV0tJc1BsdWdpblVwZGF0ZUF2YWlsYWJsZShuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSkpKTsKICAgICBtYXAuc2V0KHBsdWdp
bkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkoKSwgQVBJOjpCb29sZWFuOjpjcmVhdGUo
cGx1Z2luSGFzU2FuZGJveFByb2ZpbGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJTmF2aWdhdGlvbkRhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJTmF2aWdhdGlvbkRhdGEuaAkocmV2
aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSU5hdmlnYXRpb25E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB+TmF2aWdhdGlvbkRhdGEoKTsKIAotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RvcmUudGl0bGU7IH0KLSAgICBTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9yZS51cmw7IH0KKyAgICBXVEY6OlN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmUudGl0bGU7IH0KKyAgICBXVEY6OlN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3N0b3Jl
LnVybDsgfQogICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZS5vcmlnaW5hbFJlcXVlc3Q7IH0KICAgICBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RvcmUucmVzcG9uc2U7IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBXZWJD
b250ZXh0OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZwogICAgIG1lc3NhZ2VOYW1lU3RyaW5nQnVp
bGRlci5hcHBlbmQoIi4iKTsKICAgICBtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIuYXBwZW5kKG1l
c3NhZ2VOYW1lLmRhdGEoKSwgbWVzc2FnZU5hbWUuc2l6ZSgpKTsKIAotICAgIHNfaW52YWxpZE1l
c3NhZ2VDYWxsYmFjayh0b0FQSShXZWJTdHJpbmc6OmNyZWF0ZShtZXNzYWdlTmFtZVN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSkuZ2V0KCkpKTsKKyAgICBzX2ludmFsaWRNZXNzYWdlQ2FsbGJhY2so
dG9BUEkoQVBJOjpTdHJpbmc6OmNyZWF0ZShtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSkuZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkQ2FjaGVQYWdl
KFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyNzcsMjAgKzEyNzcsMjAgQEAgdm9pZCBX
ZWJDb250ZXh0OjpwbHVnaW5JbmZvU3RvcmVEaWRMb2FkUAogCiAgICAgZm9yIChjb25zdCBhdXRv
JiBwbHVnaW5Nb2R1bGUgOiBwbHVnaW5Nb2R1bGVzKSB7CiAgICAgICAgIEltbXV0YWJsZURpY3Rp
b25hcnk6Ok1hcFR5cGUgbWFwOwotICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgicGF0aCIp
LCBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUucGF0aCkpOwotICAgICAgICBtYXAuc2V0
KEFTQ0lJTGl0ZXJhbCgibmFtZSIpLCBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuaW5m
by5uYW1lKSk7Ci0gICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJmaWxlIiksIFdlYlN0cmlu
Zzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS5pbmZvLmZpbGUpKTsKLSAgICAgICAgbWFwLnNldChBU0NJ
SUxpdGVyYWwoImRlc2MiKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8uZGVz
YykpOworICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgicGF0aCIpLCBBUEk6OlN0cmluZzo6
Y3JlYXRlKHBsdWdpbk1vZHVsZS5wYXRoKSk7CisgICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFs
KCJuYW1lIiksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8ubmFtZSkpOwor
ICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgiZmlsZSIpLCBBUEk6OlN0cmluZzo6Y3JlYXRl
KHBsdWdpbk1vZHVsZS5pbmZvLmZpbGUpKTsKKyAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwo
ImRlc2MiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuaW5mby5kZXNjKSk7CiAK
ICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1pbWVUeXBlczsKICAgICAgICAg
bWltZVR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2luTW9kdWxlLmluZm8ubWltZXMu
c2l6ZSgpKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1Z2lu
TW9kdWxlLmluZm8ubWltZXMpCi0gICAgICAgICAgICBtaW1lVHlwZXMudW5jaGVja2VkQXBwZW5k
KFdlYlN0cmluZzo6Y3JlYXRlKG1pbWVDbGFzc0luZm8udHlwZSkpOworICAgICAgICAgICAgbWlt
ZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKG1pbWVDbGFzc0luZm8u
dHlwZSkpOwogICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgibWltZXMiKSwgQVBJOjpBcnJh
eTo6Y3JlYXRlKHN0ZDo6bW92ZShtaW1lVHlwZXMpKSk7CiAKICNpZiBQTEFURk9STShNQUMpCi0g
ICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJidW5kbGVJZCIpLCBXZWJTdHJpbmc6OmNyZWF0
ZShwbHVnaW5Nb2R1bGUuYnVuZGxlSWRlbnRpZmllcikpOwotICAgICAgICBtYXAuc2V0KEFTQ0lJ
TGl0ZXJhbCgidmVyc2lvbiIpLCBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUudmVyc2lv
blN0cmluZykpOworICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgiYnVuZGxlSWQiKSwgQVBJ
OjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuYnVuZGxlSWRlbnRpZmllcikpOworICAgICAg
ICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgidmVyc2lvbiIpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBs
dWdpbk1vZHVsZS52ZXJzaW9uU3RyaW5nKSk7CiAjZW5kaWYKIAogICAgICAgICBwbHVnaW5zLnVu
Y2hlY2tlZEFwcGVuZChJbW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoc3RkOjptb3ZlKG1hcCkp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNl
TWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4
LDggKzE2OCw4IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmRpZEdldERhdGEKICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhYmFzZURldGFpbHMgOiBvcmlnaW5BbmREYXRhYmFz
ZXMuZGF0YWJhc2VzKSB7CiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6
T2JqZWN0Pj4gZGV0YWlsc01hcDsKIAotICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQoZGF0YWJh
c2VEZXRhaWxzTmFtZUtleSgpLCBXZWJTdHJpbmc6OmNyZWF0ZShkYXRhYmFzZURldGFpbHMubmFt
ZSgpKSk7Ci0gICAgICAgICAgICBkZXRhaWxzTWFwLnNldChkYXRhYmFzZURldGFpbHNEaXNwbGF5
TmFtZUtleSgpLCBXZWJTdHJpbmc6OmNyZWF0ZShkYXRhYmFzZURldGFpbHMuZGlzcGxheU5hbWUo
KSkpOworICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQoZGF0YWJhc2VEZXRhaWxzTmFtZUtleSgp
LCBBUEk6OlN0cmluZzo6Y3JlYXRlKGRhdGFiYXNlRGV0YWlscy5uYW1lKCkpKTsKKyAgICAgICAg
ICAgIGRldGFpbHNNYXAuc2V0KGRhdGFiYXNlRGV0YWlsc0Rpc3BsYXlOYW1lS2V5KCksIEFQSTo6
U3RyaW5nOjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLmRpc3BsYXlOYW1lKCkpKTsKICAgICAgICAg
ICAgIGRldGFpbHNNYXAuc2V0KGRhdGFiYXNlRGV0YWlsc0V4cGVjdGVkVXNhZ2VLZXkoKSwgQVBJ
OjpVSW50NjQ6OmNyZWF0ZShkYXRhYmFzZURldGFpbHMuZXhwZWN0ZWRVc2FnZSgpKSk7CiAgICAg
ICAgICAgICBkZXRhaWxzTWFwLnNldChkYXRhYmFzZURldGFpbHNDdXJyZW50VXNhZ2VLZXkoKSwg
QVBJOjpVSW50NjQ6OmNyZWF0ZShkYXRhYmFzZURldGFpbHMuY3VycmVudFVzYWdlKCkpKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkocmV2aXNp
b24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw4IEBACiAjaW5jbHVkZSAiV2ViRm9ybUNsaWVu
dC5oIgogCiAjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkFQSVN0
cmluZy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtNDAsNyArMzksNyBAQCBib29sIFdlYkZvcm1DbGllbnQ6OndpbGxTdWJtaXRGb3JtKFdlYlBh
CiAKICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpNYXBUeXBlIG1hcDsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRleHRGaWVsZFZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbWFwLnNl
dCh0ZXh0RmllbGRWYWx1ZXNbaV0uZmlyc3QsIFdlYlN0cmluZzo6Y3JlYXRlKHRleHRGaWVsZFZh
bHVlc1tpXS5zZWNvbmQpKTsKKyAgICAgICAgbWFwLnNldCh0ZXh0RmllbGRWYWx1ZXNbaV0uZmly
c3QsIEFQSTo6U3RyaW5nOjpjcmVhdGUodGV4dEZpZWxkVmFsdWVzW2ldLnNlY29uZCkpOwogICAg
IFJlZlB0cjxJbW11dGFibGVEaWN0aW9uYXJ5PiB0ZXh0RmllbGRzTWFwID0gSW1tdXRhYmxlRGlj
dGlvbmFyeTo6Y3JlYXRlKHN0ZDo6bW92ZShtYXApKTsKIAogICAgIG1fY2xpZW50LndpbGxTdWJt
aXRGb3JtKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJKHNvdXJjZUZyYW1lKSwgdG9B
UEkodGV4dEZpZWxkc01hcC5nZXQoKSksIHRvQVBJKHVzZXJEYXRhKSwgdG9BUEkobGlzdGVuZXIp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzQsMTQgKzI3NCwxNCBAQCB2b2lkIFdlYkxvYWRlckNsaWVudDo6ZGlkRmFpbFRvSW5pdGlhbGl6
CiAgICAgaWYgKG1fY2xpZW50LmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW5fZGVwcmVjYXRlZEZv
clVzZVdpdGhWMCkKICAgICAgICAgbV9jbGllbnQuZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbl9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwKAogICAgICAgICAgICAgdG9BUEkocGFnZSksCi0gICAgICAg
ICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpKSksCisgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlv
bi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKICAg
ICAgICAgICAgIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAKICAgICBpZiAobV9jbGllbnQu
cGx1Z2luRGlkRmFpbF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxKQogICAgICAgICBtX2NsaWVudC5w
bHVnaW5EaWRGYWlsX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEoCiAgICAgICAgICAgICB0b0FQSShw
YWdlKSwKICAgICAgICAgICAgIGtXS0Vycm9yQ29kZUNhbm5vdExvYWRQbHVnSW4sCi0gICAgICAg
ICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3Jt
YXRpb25NSU1FVHlwZUtleSgpKSksCisgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlv
bi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICAwLAogICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKQEAgLTMwMCw5ICszMDAsOSBAQCB2b2lkIFdlYkxvYWRlckNsaWVudDo6ZGlk
QmxvY2tJbnNlY3VyZVBsCiAgICAgICAgIG1fY2xpZW50LnBsdWdpbkRpZEZhaWxfZGVwcmVjYXRl
ZEZvclVzZVdpdGhWMSgKICAgICAgICAgICAgIHRvQVBJKHBhZ2UpLAogICAgICAgICAgICAga1dL
RXJyb3JDb2RlSW5zZWN1cmVQbHVnSW5WZXJzaW9uLAotICAgICAgICAgICAgdG9BUEkocGx1Z2lu
SW5mb3JtYXRpb24tPmdldDxXZWJTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXko
KSkpLAotICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxXZWJTdHJpbmc+
KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllcktleSgpKSksCi0gICAgICAgICAgICB0
b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25C
dW5kbGVWZXJzaW9uS2V5KCkpKSwKKyAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9u
LT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSkpLAorICAg
ICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2lu
SW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCkpKSwKKyAgICAgICAgICAgIHRvQVBJKHBs
dWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxl
VmVyc2lvbktleSgpKSksCiAgICAgICAgICAgICBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
CiAgICAgaWYgKG1fY2xpZW50LnBsdWdpbkRpZEZhaWwpCkBAIC0zMjQsNyArMzI0LDcgQEAgUGx1
Z2luTW9kdWxlTG9hZFBvbGljeSBXZWJMb2FkZXJDbGllbnQ6OgogICAgICAgICBsb2FkUG9saWN5
ID0gdG9QbHVnaW5Nb2R1bGVMb2FkUG9saWN5KG1fY2xpZW50LnBsdWdpbkxvYWRQb2xpY3kodG9B
UEkocGFnZSksIHRvV0tQbHVnaW5Mb2FkUG9saWN5KGN1cnJlbnRQbHVnaW5Mb2FkUG9saWN5KSwg
dG9BUEkocGx1Z2luSW5mb3JtYXRpb24pLCAmdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbk91dCwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAKICAgICBpZiAodW5hdmFpbGFiaWxpdHlEZXNj
cmlwdGlvbk91dCkgewotICAgICAgICBSZWZQdHI8V2ViU3RyaW5nPiB3ZWJVbmF2YWlsYWJpbGl0
eURlc2NyaXB0aW9uID0gYWRvcHRSZWYodG9JbXBsKHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb25P
dXQpKTsKKyAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiB3ZWJVbmF2YWlsYWJpbGl0eURlc2Ny
aXB0aW9uID0gYWRvcHRSZWYodG9JbXBsKHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb25PdXQpKTsK
ICAgICAgICAgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbiA9IHdlYlVuYXZhaWxhYmlsaXR5RGVz
Y3JpcHRpb24tPnN0cmluZygpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDkg
KzE0NSw5IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB0b1N0cmluZ1ZlY3RvcihBUEkKICAgICAK
ICAgICBwYXR0ZXJuVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgV2ViU3RyaW5nKiB3ZWJT
dHJpbmcgPSBhcnJheS0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgQVNTRVJUKHdlYlN0cmlu
Zyk7Ci0gICAgICAgIHBhdHRlcm5WZWN0b3IudW5jaGVja2VkQXBwZW5kKHdlYlN0cmluZy0+c3Ry
aW5nKCkpOworICAgICAgICBBUEk6OlN0cmluZyogc3RyaW5nID0gYXJyYXktPmF0PEFQSTo6U3Ry
aW5nPihpKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZyk7CisgICAgICAgIHBhdHRlcm5WZWN0b3Iu
dW5jaGVja2VkQXBwZW5kKHN0cmluZy0+c3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICByZXR1
cm4gcGF0dGVyblZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xp
ZW50LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlVJQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIFN0cmluZyBX
ZWJVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdCgKICAgICBpZiAoIW1fY2xpZW50LnJ1bkph
dmFTY3JpcHRQcm9tcHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFdlYlN0cmlu
Zyogc3RyaW5nID0gdG9JbXBsKG1fY2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQodG9BUEkocGFn
ZSksIHRvQVBJKG1lc3NhZ2UuaW1wbCgpKSwgdG9BUEkoZGVmYXVsdFZhbHVlLmltcGwoKSksIHRv
QVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CisgICAgQVBJOjpTdHJpbmcq
IHN0cmluZyA9IHRvSW1wbChtX2NsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0KHRvQVBJKHBhZ2Up
LCB0b0FQSShtZXNzYWdlLmltcGwoKSksIHRvQVBJKGRlZmF1bHRWYWx1ZS5pbXBsKCkpLCB0b0FQ
SShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpOwogICAgIGlmICghc3RyaW5nKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTE4Myw5ICsxODMsOSBAQCB2b2lkIFdlYlVJ
Q2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvCiAgICAgICAgIGlmIChtX2NsaWVudC5taXNz
aW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKQogICAgICAgICAg
ICAgbV9jbGllbnQubWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdp
dGhWMCgKICAgICAgICAgICAgICAgICB0b0FQSShwYWdlKSwKLSAgICAgICAgICAgICAgICB0b0FQ
SShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1F
VHlwZUtleSgpKSksCi0gICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdl
dDxXZWJTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpKSwKLSAgICAgICAg
ICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5m
b3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgpKSksCisgICAgICAgICAgICAgICAg
dG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRp
b25NSU1FVHlwZUtleSgpKSksCisgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRp
b24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSkpLAor
ICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+
KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxLZXkoKSkpLAogICAgICAg
ICAgICAgICAgIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogCkBAIC0xOTMsOSAr
MTkzLDkgQEAgdm9pZCBXZWJVSUNsaWVudDo6dW5hdmFpbGFibGVQbHVnaW5CdXR0bwogICAgICAg
ICBtX2NsaWVudC51bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVz
ZVdpdGhWMSgKICAgICAgICAgICAgIHRvQVBJKHBhZ2UpLAogICAgICAgICAgICAgcGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24sCi0gICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+
Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpKSksCi0gICAgICAg
ICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3Jt
YXRpb25QbHVnaW5VUkxLZXkoKSkpLAotICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRp
b24tPmdldDxXZWJTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3BhZ2VBdHRyaWJ1dGVV
UkxLZXkoKSkpLAorICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6
OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpKSksCisgICAgICAgICAgICB0
b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlv
blBsdWdpblVSTEtleSgpKSksCisgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+
Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJM
S2V5KCkpKSwKICAgICAgICAgICAgIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAKICAgICBp
ZiAobV9jbGllbnQudW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ3JlZGVudGlhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ3JlZGVudGlhbC5jcHAJKHJldmlzaW9u
IDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NyZWRlbnRpYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiV0tDcmVkZW50aWFsLmgiCiAKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNp
bmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDcmVkZW50aWFsLmgi
Ci0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tEYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgV0tUeXBlSUQgV0tEYXRhYmFzZU1hbmFnZXJHZXRU
eXBlSUQoKQogV0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXRPcmlnaW5LZXkoKQogewog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2Vi
U3RyaW5nOjpjcmVhdGUoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6Om9yaWdpbktleSgpKS5sZWFr
UmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpvcmlnaW5LZXkoKSkubGVha1JlZigpOwogICAgIHJl
dHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTUzLDcgKzUzLDcgQEAg
V0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXRPcmlnaW5LZQogV0tTdHJpbmdSZWYgV0tE
YXRhYmFzZU1hbmFnZXJHZXRPcmlnaW5RdW90YUtleSgpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eTo6b3JpZ2luUXVvdGFLZXkoKSkubGVha1JlZigpOworICAgIHN0
YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1h
bmFnZXJQcm94eTo6b3JpZ2luUXVvdGFLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQ
SShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTYzLDcgKzYzLDcgQEAgV0tTdHJpbmdS
ZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXRPcmlnaW5RdQogV0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1h
bmFnZXJHZXRPcmlnaW5Vc2FnZUtleSgpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAg
ICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1h
bmFnZXJQcm94eTo6b3JpZ2luVXNhZ2VLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6
OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94
eTo6b3JpZ2luVXNhZ2VLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwog
I2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTczLDcgKzczLDcgQEAgV0tTdHJpbmdSZWYgV0tEYXRh
YmFzZU1hbmFnZXJHZXRPcmlnaW5VcwogV0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXRE
YXRhYmFzZURldGFpbHNLZXkoKQogewogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgc3Rh
dGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUoV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHk6OmRhdGFiYXNlRGV0YWlsc0tleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6
U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclByb3h5
OjpkYXRhYmFzZURldGFpbHNLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkp
OwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTgzLDcgKzgzLDcgQEAgV0tTdHJpbmdSZWYgV0tE
YXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZQogV0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJH
ZXREYXRhYmFzZURldGFpbHNOYW1lS2V5KCkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
ICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNl
TWFuYWdlclByb3h5OjpkYXRhYmFzZURldGFpbHNOYW1lS2V5KCkpLmxlYWtSZWYoKTsKKyAgICBz
dGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHk6OmRhdGFiYXNlRGV0YWlsc05hbWVLZXkoKSkubGVha1JlZigpOwogICAgIHJl
dHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTkzLDcgKzkzLDcgQEAg
V0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZQogV0tTdHJpbmdSZWYgV0tE
YXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZURldGFpbHNEaXNwbGF5TmFtZUtleSgpCiB7CiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJp
bmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzRGlzcGxh
eU5hbWVLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJ
OjpTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxz
RGlzcGxheU5hbWVLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vs
c2UKICAgICByZXR1cm4gMDsKQEAgLTEwMyw3ICsxMDMsNyBAQCBXS1N0cmluZ1JlZiBXS0RhdGFi
YXNlTWFuYWdlckdldERhdGFiYXNlCiBXS1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldERh
dGFiYXNlRGV0YWlsc0V4cGVjdGVkVXNhZ2VLZXkoKQogewogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUoV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHk6OmRhdGFiYXNlRGV0YWlsc0V4cGVjdGVkVXNhZ2VLZXkoKSkubGVh
a1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0
ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzRXhwZWN0ZWRVc2FnZUtl
eSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVy
biAwOwpAQCAtMTEzLDcgKzExMyw3IEBAIFdLU3RyaW5nUmVmIFdLRGF0YWJhc2VNYW5hZ2VyR2V0
RGF0YWJhc2UKIFdLU3RyaW5nUmVmIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VEZXRhaWxz
Q3VycmVudFVzYWdlS2V5KCkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRp
YyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5OjpkYXRhYmFzZURldGFpbHNDdXJyZW50VXNhZ2VLZXkoKSkubGVha1JlZigpOworICAgIHN0
YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1h
bmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzQ3VycmVudFVzYWdlS2V5KCkpLmxlYWtSZWYoKTsK
ICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMTYwNTcxKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNSwxMyArMzE1LDEzIEBAIHZvaWQgV0tQYWdlVGVybWluYXRlKFdLUGFnZVJlZiBw
YWdlUmVmKQogCiBXS1N0cmluZ1JlZiBXS1BhZ2VHZXRTZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlw
ZSgpCiB7Ci0gICAgc3RhdGljIFdlYlN0cmluZyogc2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUg
PSBXZWJTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkhpc3RvcnlVUkwiKS5sZWFrUmVmKCk7CisgICAg
c3RhdGljIEFQSTo6U3RyaW5nKiBzZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUoIlNlc3Npb25IaXN0b3J5VVJMIikubGVha1JlZigpOwogICAgIHJldHVybiB0
b0FQSShzZXNzaW9uSGlzdG9yeVVSTFZhbHVlVHlwZSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLUGFn
ZUdldFNlc3Npb25CYWNrRm9yd2FyZExpc3RJdGVtVmFsdWVUeXBlKCkKIHsKLSAgICBzdGF0aWMg
V2ViU3RyaW5nKiBzZXNzaW9uQmFja0ZvcndhcmRMaXN0VmFsdWVUeXBlID0gV2ViU3RyaW5nOjpj
cmVhdGUoIlNlc3Npb25CYWNrRm9yd2FyZExpc3RJdGVtIikubGVha1JlZigpOworICAgIHN0YXRp
YyBBUEk6OlN0cmluZyogc2Vzc2lvbkJhY2tGb3J3YXJkTGlzdFZhbHVlVHlwZSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUoIlNlc3Npb25CYWNrRm9yd2FyZExpc3RJdGVtIikubGVha1JlZigpOwogICAg
IHJldHVybiB0b0FQSShzZXNzaW9uQmFja0ZvcndhcmRMaXN0VmFsdWVUeXBlKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tD
b250ZXh0UHJpdmF0ZU1hYy5tbQkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkFQSUFycmF5LmgiCiAjaW1wb3J0ICJBUElO
dW1iZXIuaCIKKyNpbXBvcnQgIkFQSVN0cmluZy5oIgogI2ltcG9ydCAiSW1tdXRhYmxlRGljdGlv
bmFyeS5oIgogI2ltcG9ydCAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW1wb3J0ICJQbHVnaW5JbmZv
cm1hdGlvbi5oIgpAQCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCAiV0tTaGFyZWRBUElDYXN0Lmgi
CiAjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0LmgiCi0jaW1wb3J0
ICJXZWJTdHJpbmcuaCIKICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tCShyZXZp
c2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJv
d3NpbmdDb250ZXh0R3JvdXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
ZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElBcnJheS5oIgorI2ltcG9ydCAiQVBJU3Ry
aW5nLmgiCiAjaW1wb3J0ICJXS0FycmF5LmgiCiAjaW1wb3J0ICJXS1BhZ2VHcm91cC5oIgogI2lt
cG9ydCAiV0tQcmVmZXJlbmNlcy5oIgpAQCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCAiV0tTdHJp
bmdDRi5oIgogI2ltcG9ydCAiV0tVUkwuaCIKICNpbXBvcnQgIldLVVJMQ0YuaCIKLSNpbXBvcnQg
IldlYlN0cmluZy5oIgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dl
YkNyZWRlbnRpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5oCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMiArMjcsMTAgQEAKICNkZWZpbmUgV2ViQ3JlZGVudGlhbF9oCiAKICNp
bmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLQorI2luY2x1ZGUg
IkFQSVN0cmluZy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkNl
cnRpZmljYXRlSW5mbzsKQEAgLTQ2LDcgKzQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkNyZWRlbnRpYWwoY3JlZGVudGlhbCkpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDcmVkZW50aWFsPiBjcmVhdGUoV2ViU3RyaW5nKiB1c2Vy
bmFtZSwgV2ViU3RyaW5nKiBwYXNzd29yZCwgV2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNl
IHBlcnNpc3RlbmNlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNyZWRlbnRpYWw+IGNyZWF0
ZShBUEk6OlN0cmluZyogdXNlcm5hbWUsIEFQSTo6U3RyaW5nKiBwYXNzd29yZCwgV2ViQ29yZTo6
Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJDcmVkZW50aWFsKFdlYkNvcmU6OkNyZWRlbnRpYWwodXNlcm5hbWUt
PnN0cmluZygpLCBwYXNzd29yZC0+c3RyaW5nKCksIHBlcnNpc3RlbmNlKSkpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlv
bk1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24g
MTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90
aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBA
QCB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6cG9wdWxhCiAgICAgcGVybWlzc2lv
bnMuY2xlYXIoKTsKICAgICBSZWZQdHI8QVBJOjpBcnJheT4ga25vd25PcmlnaW5zID0ga25vd25Q
ZXJtaXNzaW9ucy0+a2V5cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga25vd25Pcmln
aW5zLT5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJTdHJpbmcqIG9yaWdpbiA9IGtub3duT3Jp
Z2lucy0+YXQ8V2ViU3RyaW5nPihpKTsKKyAgICAgICAgQVBJOjpTdHJpbmcqIG9yaWdpbiA9IGtu
b3duT3JpZ2lucy0+YXQ8QVBJOjpTdHJpbmc+KGkpOwogICAgICAgICBwZXJtaXNzaW9ucy5zZXQo
b3JpZ2luLT5zdHJpbmcoKSwga25vd25QZXJtaXNzaW9ucy0+Z2V0PEFQSTo6Qm9vbGVhbj4ob3Jp
Z2luLT5zdHJpbmcoKSktPnZhbHVlKCkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92
aWRlci5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1
LDkgKzEzNSw5IEBAIHZvaWQgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OnNldEF1dG9TdGEKIHsK
ICAgICBtX2F1dG9TdGFydE9yaWdpbnMuY2xlYXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwg
bGVuZ3RoID0gb3JpZ2luTGlzdC5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAob3JpZ2luTGlzdC5hdChpKS0+dHlwZSgpICE9IFdlYlN0cmluZzo6QVBJVHlwZSkKKyAgICAg
ICAgaWYgKG9yaWdpbkxpc3QuYXQoaSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJVHlwZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2F1dG9TdGFydE9yaWdpbnMuYXBwZW5k
KHN0YXRpY19jYXN0PFdlYlN0cmluZyo+KG9yaWdpbkxpc3QuYXQoaSkpLT5zdHJpbmcoKSk7Cisg
ICAgICAgIG1fYXV0b1N0YXJ0T3JpZ2lucy5hcHBlbmQoc3RhdGljX2Nhc3Q8QVBJOjpTdHJpbmcq
PihvcmlnaW5MaXN0LmF0KGkpKS0+c3RyaW5nKCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5T
aXRlRGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI6OmNs
ZWFyU2l0ZQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXRl
cy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChXZWJTdHJpbmcqIHNpdGUgPSBzaXRl
cy0+YXQ8V2ViU3RyaW5nPihpKSkKKyAgICAgICAgICAgIGlmIChBUEk6OlN0cmluZyogc2l0ZSA9
IHNpdGVzLT5hdDxBUEk6OlN0cmluZz4oaSkpCiAgICAgICAgICAgICAgICAgc2l0ZXNWZWN0b3Iu
YXBwZW5kKHNpdGUtPnN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgyNyw3ICsyODI3LDcgQEAKIAkJQkNGMDQ5RTQxMUZF
MjBGNjAwRjg2QTU4IC8qIFdLQnVuZGxlRnJhbWVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlRnJhbWVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRjA0OUU1MTFGRTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRsZVByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjA0QzhDMTFGRjlCN0QwMEY4NkE1OCAvKiBB
UElPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRjA0QzhFMTFGRjlGNkUwMEY4NkE1OCAv
KiBXZWJTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjA0QzhFMTFGRjlGNkUwMEY4NkE1
OCAvKiBBUElTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJU3Ry
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjE4NjM3MTY3RDA3MUUwMEEx
QTg1QSAvKiBDYWNoZU1vZGVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhY2hlTW9kZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y0REUy
MjE2OEU0QkQ1MDBDOTRBRkMgLyogTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oOyBwYXRo
ID0gTmV0d29yay9OZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNGNERFMjQxNjhGQTQ0ODAwQzk0QUZDIC8qIFdlYkNvbnRleHRTdXBwbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRTdXBwbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjAzLDcgKzM2MDMsNyBAQAog
CQkJCTUxMjE3NDYzMTY0QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5oICovLAog
CQkJCUY2MzQ0NDU1MTJBODg1QzgwMDA2MTJEOCAvKiBXZWJTZWN1cml0eU9yaWdpbi5oICovLAog
CQkJCUE3MkQ1RDdGMTIzNkNCQTgwMEE4OEIxNSAvKiBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCAqLywKLQkJCQlCQ0YwNEM4RTExRkY5RjZFMDBGODZBNTggLyogV2ViU3RyaW5nLmggKi8sCisJ
CQkJQkNGMDRDOEUxMUZGOUY2RTAwRjg2QTU4IC8qIEFQSVN0cmluZy5oICovLAogCQkJCUMwMzM3
REQ3MTI3QTUxQjYwMDhGRjRGNCAvKiBXZWJUb3VjaEV2ZW50LmNwcCAqLywKIAkJCQlCQ0RCODZD
MDEyMDBGQjk3MDA3MjU0QkUgLyogV2ViVVJMLmggKi8sCiAJCQkJQkNFMjMxNUMxMjJDMzBDQTAw
RDVDMzVBIC8qIFdlYlVSTFJlcXVlc3QuY3BwICovLApAQCAtNjMwOSw4ICs2MzA5LDggQEAKIAkJ
CQlCQzhGMkYyQjE2MjczQTJDMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhGMkYyRTE2MjczQUNDMDA1
RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVySW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5NTAxNzI0MTYyQTQ1MDQwMDRBOUQ3MSAvKiBXS1dl
YlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKLSAJCQkJMUY3NTA2QjYxODU5MTY1NzAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJ
bk5vZGVIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0gCQkJCTFGNzUwNkI1MTg1OTE2
NTQwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5TY3JpcHRXb3JsZEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkxRjc1MDZCNjE4NTkxNjU3MDBFQzBGRjcgLyogV0tXZWJQcm9jZXNz
UGx1Z0luTm9kZUhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxRjc1MDZCNTE4
NTkxNjU0MDBFQzBGRjcgLyogV0tXZWJQcm9jZXNzUGx1Z0luU2NyaXB0V29ybGRJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzczQ0VBRDYxODU0MTdBRTAwOEMzNjNEIC8qIFdLTlNEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFGMDE4NDAwQjAwMDBFOUFFNjkgLyogV0tQYWdl
Rm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5ODlEODUxNjFBOTg5MDAwMEQ0NkQz
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDE0LDcgKzQxNCw3IEBAIFBhc3NSZWZQdHI8QVBJOjpBcnJheT4gSW5qZWN0ZWRCdW5k
bGU6Om8KICAgICBvcmlnaW5JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdp
bnMuc2l6ZSgpKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2lucykKLSAg
ICAgICAgb3JpZ2luSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKFdlYlN0cmluZzo6Y3JlYXRl
KG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgb3JpZ2luSWRlbnRpZmll
cnMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLT5kYXRhYmFzZUlk
ZW50aWZpZXIoKSkpOwogCiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShzdGQ6Om1vdmUo
b3JpZ2luSWRlbnRpZmllcnMpKTsKIH0KQEAgLTQ4NSw3ICs0ODUsNyBAQCBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gdG9TdHJpbmdWZWN0b3IoQVBJCiAgICAgICAgIHJldHVybiBwYXR0ZXJuc1ZlY3Rv
cjsKIAogICAgIHBhdHRlcm5zVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHBhdHRlcm5zLT5lbGVtZW50c09mVHlwZTxXZWJT
dHJpbmc+KCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHBhdHRlcm5zLT5lbGVtZW50
c09mVHlwZTxBUEk6OlN0cmluZz4oKSkKICAgICAgICAgcGF0dGVybnNWZWN0b3IudW5jaGVja2Vk
QXBwZW5kKGVudHJ5LT5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIHBhdHRlcm5zVmVjdG9yOwogfQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNw
cAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OmdldAogCiAgICAgICAgIEFTU0VSVCh0eXBlc0FycmF5LT5zaXplKCkgPT0gZGF0YUFycmF5LT5z
aXplKCkpOwogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHlwZSA6IHR5cGVzQXJyYXktPmVs
ZW1lbnRzT2ZUeXBlPFdlYlN0cmluZz4oKSkKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0eXBl
IDogdHlwZXNBcnJheS0+ZWxlbWVudHNPZlR5cGU8QVBJOjpTdHJpbmc+KCkpCiAgICAgICAgICAg
ICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUtPnN0cmluZygpKTsKIAogICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBkYXRhQXJyYXktPmVsZW1lbnRzT2ZUeXBlPFdlYkRhdGE+KCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNw
cAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6d2ls
bFMKIAogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICBtYXAuc2V0KHZhbHVl
c1tpXS5maXJzdCwgV2ViU3RyaW5nOjpjcmVhdGUodmFsdWVzW2ldLnNlY29uZCkpOworICAgICAg
ICBtYXAuc2V0KHZhbHVlc1tpXS5maXJzdCwgQVBJOjpTdHJpbmc6OmNyZWF0ZSh2YWx1ZXNbaV0u
c2Vjb25kKSk7CiAgICAgYXV0byB0ZXh0RmllbGRzTWFwID0gSW1tdXRhYmxlRGljdGlvbmFyeTo6
Y3JlYXRlKHN0ZDo6bW92ZShtYXApKTsKIAogICAgIG1fY2xpZW50LndpbGxTZW5kU3VibWl0RXZl
bnQodG9BUEkocGFnZSksIHRvQVBJKG5vZGVIYW5kbGUuZ2V0KCkpLCB0b0FQSShmcmFtZSksIHRv
QVBJKHNvdXJjZUZyYW1lKSwgdG9BUEkodGV4dEZpZWxkc01hcC5nZXQoKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50Ojp3aWxsUwogCiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSBt
YXA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1hcC5zZXQodmFsdWVzW2ldLmZpcnN0LCBXZWJTdHJpbmc6OmNyZWF0ZSh2YWx1ZXNbaV0u
c2Vjb25kKSk7CisgICAgICAgIG1hcC5zZXQodmFsdWVzW2ldLmZpcnN0LCBBUEk6OlN0cmluZzo6
Y3JlYXRlKHZhbHVlc1tpXS5zZWNvbmQpKTsKICAgICBhdXRvIHRleHRGaWVsZHNNYXAgPSBJbW11
dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoc3RkOjptb3ZlKG1hcCkpOwogCiAgICAgV0tUeXBlUmVm
IHVzZXJEYXRhVG9QYXNzID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlVUlDbGllbnQuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlVUlD
bGllbnQ6OnNob3VsCiB7CiAgICAgaWYgKCFtX2NsaWVudC5zaG91bGRHZW5lcmF0ZUZpbGVGb3JV
cGxvYWQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBSZWZQdHI8V2ViU3RyaW5nPiBn
ZW5lcmF0ZWRGaWxlUGF0aCA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5zaG91bGRHZW5lcmF0
ZUZpbGVGb3JVcGxvYWQodG9BUEkocGFnZSksIHRvQVBJKG9yaWdpbmFsRmlsZVBhdGguaW1wbCgp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOworICAgIFJlZlB0cjxBUEk6OlN0cmluZz4g
Z2VuZXJhdGVkRmlsZVBhdGggPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuc2hvdWxkR2VuZXJh
dGVGaWxlRm9yVXBsb2FkKHRvQVBJKHBhZ2UpLCB0b0FQSShvcmlnaW5hbEZpbGVQYXRoLmltcGwo
KSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKICAgICByZXR1cm4gZ2VuZXJhdGVkRmls
ZVBhdGggPyBnZW5lcmF0ZWRGaWxlUGF0aC0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKIH0KIApAQCAt
OTgsNyArOTgsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQ6OmdlbmVyCiB7
CiAgICAgaWYgKCFtX2NsaWVudC5zaG91bGRHZW5lcmF0ZUZpbGVGb3JVcGxvYWQpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICBSZWZQdHI8V2ViU3RyaW5nPiBnZW5lcmF0ZWRGaWxlUGF0
aCA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5nZW5lcmF0ZUZpbGVGb3JVcGxvYWQodG9BUEko
cGFnZSksIHRvQVBJKG9yaWdpbmFsRmlsZVBhdGguaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKSkpOworICAgIFJlZlB0cjxBUEk6OlN0cmluZz4gZ2VuZXJhdGVkRmlsZVBhdGggPSBh
ZG9wdFJlZih0b0ltcGwobV9jbGllbnQuZ2VuZXJhdGVGaWxlRm9yVXBsb2FkKHRvQVBJKHBhZ2Up
LCB0b0FQSShvcmlnaW5hbEZpbGVQYXRoLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
bykpKTsKICAgICByZXR1cm4gZ2VuZXJhdGVkRmlsZVBhdGggPyBnZW5lcmF0ZWRGaWxlUGF0aC0+
c3RyaW5nKCkgOiBTdHJpbmcoKTsKIH0KIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIFN0cmluZyBJbmpl
Y3RlZEJ1bmRsZVBhZ2VVSUNsaWVudDo6cGx1Z0kKICAgICBpZiAoIW1fY2xpZW50LmNyZWF0ZVBs
dWdJblN0YXJ0TGFiZWxUaXRsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVm
UHRyPFdlYlN0cmluZz4gdGl0bGUgPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY3JlYXRlUGx1
Z0luU3RhcnRMYWJlbFRpdGxlKHRvQVBJKG1pbWVUeXBlLmltcGwoKSksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbykpKTsKKyAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHRpdGxlID0gYWRvcHRSZWYo
dG9JbXBsKG1fY2xpZW50LmNyZWF0ZVBsdWdJblN0YXJ0TGFiZWxUaXRsZSh0b0FQSShtaW1lVHlw
ZS5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAgICAgcmV0dXJuIHRpdGxl
ID8gdGl0bGUtPnN0cmluZygpIDogU3RyaW5nKCk7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCBT
dHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQ6OnBsdWdJCiAgICAgaWYgKCFtX2NsaWVu
dC5jcmVhdGVQbHVnSW5TdGFydExhYmVsU3VidGl0bGUpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAotICAgIFJlZlB0cjxXZWJTdHJpbmc+IHN1YnRpdGxlID0gYWRvcHRSZWYodG9JbXBsKG1f
Y2xpZW50LmNyZWF0ZVBsdWdJblN0YXJ0TGFiZWxTdWJ0aXRsZSh0b0FQSShtaW1lVHlwZS5pbXBs
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CisgICAgUmVmUHRyPEFQSTo6U3RyaW5n
PiBzdWJ0aXRsZSA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5jcmVhdGVQbHVnSW5TdGFydExh
YmVsU3VidGl0bGUodG9BUEkobWltZVR5cGUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKSkpOwogICAgIHJldHVybiBzdWJ0aXRsZSA/IHN1YnRpdGxlLT5zdHJpbmcoKSA6IFN0cmlu
ZygpOwogfQogCkBAIC0xNjUsNyArMTY1LDcgQEAgU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZVVJ
Q2xpZW50OjpwbHVnSQogICAgIGlmICghbV9jbGllbnQuY3JlYXRlUGx1Z0luRXh0cmFTdHlsZVNo
ZWV0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZWZQdHI8V2ViU3RyaW5nPiBz
dHlsZVNoZWV0ID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0ZVBsdWdJbkV4dHJhU3R5
bGVTaGVldChtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CisgICAgUmVmUHRyPEFQSTo6U3Ry
aW5nPiBzdHlsZVNoZWV0ID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0ZVBsdWdJbkV4
dHJhU3R5bGVTaGVldChtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAgICAgcmV0dXJuIHN0
eWxlU2hlZXQgPyBzdHlsZVNoZWV0LT5zdHJpbmcoKSA6IFN0cmluZygpOwogfQogCkBAIC0xNzQs
NyArMTc0LDcgQEAgU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50OjpwbHVnSQogICAg
IGlmICghbV9jbGllbnQuY3JlYXRlUGx1Z0luRXh0cmFTY3JpcHQpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIFJlZlB0cjxXZWJTdHJpbmc+IHNjcmlwdCA9IGFkb3B0UmVmKHRvSW1w
bChtX2NsaWVudC5jcmVhdGVQbHVnSW5FeHRyYVNjcmlwdChtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pKSk7CisgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzY3JpcHQgPSBhZG9wdFJlZih0b0ltcGwo
bV9jbGllbnQuY3JlYXRlUGx1Z0luRXh0cmFTY3JpcHQobV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KSkpOwogICAgIHJldHVybiBzY3JpcHQgPyBzY3JpcHQtPnN0cmluZygpIDogU3RyaW5nKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDE2MDU3MSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIldL
QnVuZGxlUGFnZVByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCisjaW5jbHVkZSAi
QVBJU3RyaW5nLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCIK
ICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuaCIKICNpbmNsdWRlICJQYWdlQmFu
bmVyLmgiCkBAIC00NCw3ICs0NSw2IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUg
IldlYlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVx
dWVzdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbQkocmV2aXNpb24gMTYwNTcxKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgLSAoTlNBcnJh
eSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQQogICAgIHNpemVfdCBjb3VudCA9IFdLQXJy
YXlHZXRTaXplKHJlc3VsdC5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3Vu
dDsgaysrKSB7CiAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4
KHJlc3VsdC5nZXQoKSwgayk7Ci0gICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBX
ZWJTdHJpbmc6OkFQSVR5cGUpIHsKKyAgICAgICAgaWYgKHRvSW1wbChpdGVtKS0+dHlwZSgpID09
IEFQSTo6U3RyaW5nOjpBUElUeXBlKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IG5hbWUgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIChXS1N0cmluZ1JlZilpdGVtKSk7CiAgICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OihO
U1N0cmluZyAqKW5hbWUuZ2V0KCldOwogICAgICAgICB9CkBAIC0yMDcsNyArMjA3LDcgQEAgLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+
dHlwZSgpID09IFdlYlN0cmluZzo6QVBJVHlwZSkKKyAgICBpZiAodG9JbXBsKHJlc3VsdC5nZXQo
KSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKICAgICAgICAgcmV0dXJuIENGQnJp
ZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIChX
S1N0cmluZ1JlZilyZXN1bHQuZ2V0KCkpKTsKICAgICBlbHNlIGlmICh0b0ltcGwocmVzdWx0Lmdl
dCgpKS0+dHlwZSgpID09IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKICAgICAgICAgcmV0dXJuIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KHJlc3VsdC5nZXQoKSkpXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219253</attachid>
            <date>2013-12-14 10:32:08 -0800</date>
            <delta_ts>2013-12-14 11:56:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125726-20131214103207.patch</filename>
            <type>text/plain</type>
            <size>72317</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDU4MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEzLTEyLTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dLMl0gUmVuYW1lIFdlYlN0cmluZyB0
byBBUEk6OlN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI1NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0Q29kZXIubW06CisgICAgICAg
ICogU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tOgorICAgICAgICAq
IFNoYXJlZC9BUEkvYy9XS1BsdWdpbkluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKiBTaGFyZWQv
QVBJL2MvV0tTaGFyZWRBUElDYXN0Lmg6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5n
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvY2YvV0tTdHJpbmdDRi5tbToKKyAgICAgICAg
KiBTaGFyZWQvQVBJQXJyYXkuY3BwOgorICAgICAgICAqIFNoYXJlZC9BUElBcnJheS5oOgorICAg
ICAgICAqIFNoYXJlZC9BUElTdHJpbmcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlN0cmluZy5oLgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XS05TU3RyaW5nLmg6Cisg
ICAgICAgICogU2hhcmVkL0NvY29hL1dLTlNTdHJpbmcubW06CisgICAgICAgICogU2hhcmVkL0lt
bXV0YWJsZURpY3Rpb25hcnkuY3BwOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBl
L1BsdWdpbkluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2Fw
ZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW06CisgICAgICAgICogU2hhcmVkL1VzZXJEYXRh
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViQXJjaGl2ZVJlc291cmNlLmg6CisgICAgICAgICogU2hhcmVkL1dlYk9wZW5QYW5l
bFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAqIFNoYXJlZC9XZWJSZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgICogU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHA6CisgICAgICAgICogU2hhcmVkL1dl
YlN0cmluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NyZWRlbnRp
YWwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHA6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJTmF2aWdhdGlvbkRhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViQ3JlZGVudGlhbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVn
aW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkNvbnRleHQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94
eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHA6CisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW06CisKIDIwMTMtMTItMTMgIERh
biBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBEZW1vdGVkIEFjdGl2aXR5
QXNzZXJ0aW9uLmggdG8gYSBwcm9qZWN0IGhlYWRlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUElBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SUFycmF5LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KyNpbmNsdWRlICJBUElTdHJpbmcuaCIKIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQwLDEzICs0
MCwxMyBAQCBQYXNzUmVmUHRyPEFycmF5PiBBcnJheTo6Y3JlYXRlKFZlY3RvcjxSCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBcnJheShzdGQ6Om1vdmUoZWxlbWVudHMpKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8QXJyYXk+IEFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RyaW5ncykKK1Bhc3NSZWZQdHI8QXJyYXk+IEFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShj
b25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBzdHJpbmdzKQogewogICAgIFZlY3RvcjxSZWZQdHI8
T2JqZWN0Pj4gZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
dHJpbmdzLnNpemUoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IHN0cmluZ3Mp
Ci0gICAgICAgIGVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXZWJLaXQ6OldlYlN0cmluZzo6Y3Jl
YXRlKHN0cmluZykpOworICAgICAgICBlbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJp
bmc6OmNyZWF0ZShzdHJpbmcpKTsKIAogICAgIHJldHVybiBjcmVhdGUoc3RkOjptb3ZlKGVsZW1l
bnRzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQXJyYXkuaAkocmV2aXNpb24gMTYwNTcx
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cnJheT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk+IGNyZWF0ZShWZWN0
b3I8UmVmUHRyPE9iamVjdD4+IGVsZW1lbnRzKTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5PiBjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFycmF5PiBjcmVhdGVTdHJpbmdBcnJheShjb25zdCBWZWN0b3I8V1RGOjpT
dHJpbmc+Jik7CiAKICAgICB2aXJ0dWFsIH5BcnJheSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSVN0cmluZy5oCShyZXZpc2lvbiAxNjA1NzEpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJTdHJpbmcuaDoxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlN0cmluZ19oCisjZGVmaW5lIFdlYlN0cmluZ19oCisKKyNpbmNsdWRlICJBUElPYmplY3Qu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gV2ViU3RyaW5nIC0gQSBzdHJpbmcgdHlwZSBz
dWl0YWJsZSBmb3IgdmVuZGluZyB0byBhbiBBUEkuCisKK2NsYXNzIFdlYlN0cmluZyA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlN0cmluZz4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlTnVsbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZygpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHN0cmluZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKHN0cmluZykpOworICAg
IH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlKEpTU3RyaW5nUmVm
IGpzU3RyaW5nUmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJp
bmcoU3RyaW5nKGpzU3RyaW5nUmVmLT5zdHJpbmcoKSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZUZyb21VVEY4U3RyaW5nKGNvbnN0IGNoYXIqIHN0
cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKFN0cmlu
Zzo6ZnJvbVVURjgoc3RyaW5nKSkpOworICAgIH0KKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KKyAgICBzaXplX3QgZ2V0Q2hhcmFj
dGVycyhVQ2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyTGVuZ3RoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
YnVmZmVyTGVuZ3RoID0gc3RkOjptaW4oYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fc3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fc3RyaW5nLmNo
YXJhY3RlcnMoKSwgYnVmZmVyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIHJldHVy
biBidWZmZXJMZW5ndGg7CisgICAgfQorCisgICAgc2l6ZV90IG1heGltdW1VVEY4Q1N0cmluZ1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKSAqIDMgKyAxOyB9CisgICAgc2l6
ZV90IGdldFVURjhDU3RyaW5nKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAg
eworICAgICAgICBpZiAoIWJ1ZmZlclNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgY2hhciogcCA9IGJ1ZmZlcjsKKyAgICAgICAgY29uc3QgVUNoYXIqIGQgPSBtX3N0cmluZy5j
aGFyYWN0ZXJzKCk7CisgICAgICAgIFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdCByZXN1
bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmZCwgZCArIG1fc3RyaW5nLmxl
bmd0aCgpLCAmcCwgcCArIGJ1ZmZlclNpemUgLSAxLCAvKiBzdHJpY3QgKi8gdHJ1ZSk7CisgICAg
ICAgICpwKysgPSAnXDAnOworICAgICAgICBpZiAocmVzdWx0ICE9IFdURjo6VW5pY29kZTo6Y29u
dmVyc2lvbk9LICYmIHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6OnRhcmdldEV4aGF1c3RlZCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcCAtIGJ1ZmZlcjsKKyAgICB9CisK
KyAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IG90
aGVyLT5tX3N0cmluZzsgfQorICAgIGJvb2wgZXF1YWxUb1VURjhTdHJpbmcoY29uc3QgY2hhciog
b3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFN0cmluZzo6ZnJvbVVURjgob3RoZXIpOyB9Cisg
ICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZ0lnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBvdGhlcikg
eyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9zdHJpbmcsIG90aGVyKTsgfQorCisgICAgY29u
c3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQorCisgICAgSlNT
dHJpbmdSZWYgY3JlYXRlSlNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgSlNDOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRl
KG1fc3RyaW5nKS5sZWFrUmVmKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYlN0cmluZygp
CisgICAgICAgIDogbV9zdHJpbmcoKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9zdHJpbmcoIXN0cmluZy5pbXBsKCkgPyBT
dHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkgOiBzdHJpbmcpCisgICAgeworICAgIH0KKworICAg
IFN0cmluZyBtX3N0cmluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViU3RyaW5nX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElTdHJpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgV2ViU3RyaW5nX2gKLSNkZWZpbmUgV2ViU3RyaW5nX2gKKyNpZm5kZWYg
QVBJU3RyaW5nX2gKKyNkZWZpbmUgQVBJU3RyaW5nX2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KQEAgLTM0
LDMwICszNCwzMiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjguaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgQVBJ
IHsKIAotLy8gV2ViU3RyaW5nIC0gQSBzdHJpbmcgdHlwZSBzdWl0YWJsZSBmb3IgdmVuZGluZyB0
byBhbiBBUEkuCi0KLWNsYXNzIFdlYlN0cmluZyA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OlN0cmluZz4geworY2xhc3MgU3RyaW5nIEZJTkFMIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6U3RyaW5nPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGVOdWxsKCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmc+IGNyZWF0ZU51bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHJpbmcpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZz4g
Y3JlYXRlKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dHJpbmcoc3RyaW5nKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5n
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nPiBjcmVhdGUoSlNTdHJpbmdSZWYganNTdHJpbmdSZWYpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZyhzdHJpbmcpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHJpbmcoanNTdHJpbmdSZWYtPnN0cmluZygpKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGUoSlNTdHJpbmdSZWYganNTdHJpbmdSZWYp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nPiBjcmVhdGVGcm9tVVRGOFN0cmluZyhjb25z
dCBjaGFyKiBzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0
cmluZyhTdHJpbmcoanNTdHJpbmdSZWYtPnN0cmluZygpKSkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlRnJvbVVURjhTdHJpbmco
Y29uc3QgY2hhciogc3RyaW5nKQorICAgIHZpcnR1YWwgflN0cmluZygpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZyhTdHJpbmc6OmZyb21VVEY4KHN0cmluZykp
KTsKICAgICB9CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlz
TnVsbCgpOyB9CkBAIC04NywxMSArODksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcCAt
IGJ1ZmZlcjsKICAgICB9CiAKLSAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIpIHsgcmV0
dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQotICAgIGJvb2wgZXF1YWxUb1VURjhT
dHJpbmcoY29uc3QgY2hhciogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFN0cmluZzo6ZnJv
bVVURjgob3RoZXIpOyB9CisgICAgYm9vbCBlcXVhbChTdHJpbmcqIG90aGVyKSB7IHJldHVybiBt
X3N0cmluZyA9PSBvdGhlci0+bV9zdHJpbmc7IH0KKyAgICBib29sIGVxdWFsVG9VVEY4U3RyaW5n
KGNvbnN0IGNoYXIqIG90aGVyKSB7IHJldHVybiBtX3N0cmluZyA9PSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgob3RoZXIpOyB9CiAgICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZ0lnbm9yaW5nQ2FzZShj
b25zdCBjaGFyKiBvdGhlcikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9zdHJpbmcsIG90
aGVyKTsgfQogCi0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZzsgfQorICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZzsgfQogCiAgICAgSlNTdHJpbmdSZWYgY3JlYXRlSlNTdHJpbmcoKSBjb25zdAogICAg
IHsKQEAgLTEwMCwxOSArMTAyLDE5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
V2ViU3RyaW5nKCkKKyAgICBTdHJpbmcoKQogICAgICAgICA6IG1fc3RyaW5nKCkKICAgICB7CiAg
ICAgfQogCi0gICAgV2ViU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAgICA6IG1f
c3RyaW5nKCFzdHJpbmcuaW1wbCgpID8gU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpIDogc3Ry
aW5nKQorICAgIFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQorICAgICAgICA6IG1f
c3RyaW5nKCFzdHJpbmcuaW1wbCgpID8gV1RGOjpTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkg
OiBzdHJpbmcpCiAgICAgewogICAgIH0KIAotICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICBXVEY6
OlN0cmluZyBtX3N0cmluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYg
Ly8gV2ViU3RyaW5nX2gKKyNlbmRpZiAvLyBBUElTdHJpbmdfaApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTYwNTcxKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5o
IgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNs
dWRlICJBUElTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU5LDcgKzU5LDcg
QEAgUGFzc1JlZlB0cjxBUEk6OkFycmF5PiBJbW11dGFibGVEaWN0aW9uYQogICAgIGtleXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX21hcC5zaXplKCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRv
JiBrZXkgOiBtX21hcC5rZXlzKCkpCi0gICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKFdlYlN0
cmluZzo6Y3JlYXRlKGtleSkpOworICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0
cmluZzo6Y3JlYXRlKGtleSkpOwogCiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShzdGQ6
Om1vdmUoa2V5cykpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1VzZXJEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlckRhdGEuY3BwCShyZXZp
c2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXNlckRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJBUElGcmFtZUhhbmRsZS5o
IgogI2luY2x1ZGUgIkFQSUdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQVBJTnVtYmVyLmgiCisjaW5j
bHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJNdXRhYmxlRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIFVzZXJEYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBBUEk6Ok9iamVjdDo6VHlwZTo6U3RyaW5nOiB7Ci0gICAgICAg
IGF1dG8mIHN0cmluZyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYlN0cmluZyY+KG9iamVjdCk7Cisg
ICAgICAgIGF1dG8mIHN0cmluZyA9IHN0YXRpY19jYXN0PGNvbnN0IEFQSTo6U3RyaW5nJj4ob2Jq
ZWN0KTsKICAgICAgICAgZW5jb2RlciA8PCBzdHJpbmcuc3RyaW5nKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIFVzZXJEYXRhOjpkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRECiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RyaW5nKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXN1bHQgPSBXZWJTdHJpbmc6OmNyZWF0
ZShzdHJpbmcpOworICAgICAgICByZXN1bHQgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmluZyk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1Vz
ZXJNZXNzYWdlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1Vz
ZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElHZW9tZXRyeS5oIgogI2luY2x1
ZGUgIkFQSU51bWJlci5oIgorI2luY2x1ZGUgIkFQSVN0cmluZy5oIgogI2luY2x1ZGUgIkFyZ3Vt
ZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgogI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJXZWJSZW5kZXJMYXll
ci5oIgogI2luY2x1ZGUgIldlYlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIldlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVS
TC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJVUkxSZXNwb25z
ZS5oIgpAQCAtMTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQVBJOjpPYmplY3Q6OlR5cGU6OlN0cmluZzogewot
ICAgICAgICAgICAgV2ViU3RyaW5nKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPiht
X3Jvb3QpOworICAgICAgICAgICAgQVBJOjpTdHJpbmcqIHN0cmluZyA9IHN0YXRpY19jYXN0PEFQ
STo6U3RyaW5nKj4obV9yb290KTsKICAgICAgICAgICAgIGVuY29kZXIgPDwgc3RyaW5nLT5zdHJp
bmcoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMTQsNyArMzE0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgU3RyaW5nIHN0cmluZzsKICAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBXZWJTdHJpbmc6OmNyZWF0ZShzdHJpbmcpOwor
ICAgICAgICAgICAgY29kZXIubV9yb290ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShzdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBUEk6Ok9iamVjdDo6
VHlwZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQXJjaGl2ZVJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkFyY2hpdmVSZXNvdXJjZS5oCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQXJjaGl2ZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDYgQEAgY2xhc3MgQXJjaGl2ZVJlc291cmNlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFdlYkRhdGE7Ci1jbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7CiAKIGNsYXNzIFdl
YkFyY2hpdmVSZXNvdXJjZSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OldlYkFyY2hpdmVSZXNvdXJjZT4gewpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
Yk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUGFyYW1ldGVycy5o
IgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNs
dWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlckxheWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyTGF5ZXIu
Y3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiV2Vi
UmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCisjaW5jbHVkZSAiQVBJU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVudC5oPgpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiV2ViUmVuZGVyT2JqZWN0LmgiCiAKICNpbmNsdWRl
ICJBUElBcnJheS5oIgorI2luY2x1ZGUgIkFQSVN0cmluZy5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXJDbGllbnQuaD4KQEAgLTc2LDcgKzc2LDcgQEAgV2ViUmVuZGVyT2JqZWN0OjpXZWJSZW5k
ZXJPYmplY3QoUmVuZGVyTwogICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShlbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpKTsKIAogICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZWxlbWVudC0+Y2xhc3NOYW1lcygpLnNpemUo
KTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcy5hcHBlbmQo
V2ViU3RyaW5nOjpjcmVhdGUoZWxlbWVudC0+Y2xhc3NOYW1lcygpW2ldKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNsYXNzTmFtZXMuYXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoZWxlbWVudC0+
Y2xhc3NOYW1lcygpW2ldKSk7CiAKICAgICAgICAgICAgICAgICBtX2VsZW1lbnRDbGFzc05hbWVz
ID0gQVBJOjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92ZShjbGFzc05hbWVzKSk7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oCShyZXZpc2lvbiAxNjA1NzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlN0cmluZ19oCi0jZGVmaW5lIFdl
YlN0cmluZ19oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotLy8gV2ViU3RyaW5nIC0gQSBzdHJpbmcgdHlwZSBzdWl0YWJsZSBmb3IgdmVuZGluZyB0byBh
biBBUEkuCi0KLWNsYXNzIFdlYlN0cmluZyA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpP
YmplY3Q6OlR5cGU6OlN0cmluZz4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlN0cmluZz4gY3JlYXRlTnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYlN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTdHJpbmc+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViU3RyaW5nKHN0cmluZykpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYlN0cmluZz4gY3JlYXRlKEpTU3RyaW5nUmVmIGpzU3RyaW5nUmVmKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmcoU3RyaW5nKGpzU3RyaW5nUmVmLT5z
dHJpbmcoKSkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTdHJpbmc+IGNy
ZWF0ZUZyb21VVEY4U3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSkpOwot
ICAgIH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxs
KCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5
KCk7IH0KLSAgICAKLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
bGVuZ3RoKCk7IH0KLSAgICBzaXplX3QgZ2V0Q2hhcmFjdGVycyhVQ2hhciogYnVmZmVyLCBzaXpl
X3QgYnVmZmVyTGVuZ3RoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXJMZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gc3RkOjptaW4o
YnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc3RyaW5nLmxlbmd0aCgpKSk7Ci0g
ICAgICAgIG1lbWNweShidWZmZXIsIG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgYnVmZmVyTGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIHJldHVybiBidWZmZXJMZW5ndGg7Ci0gICAgfQot
Ci0gICAgc2l6ZV90IG1heGltdW1VVEY4Q1N0cmluZ1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy5sZW5ndGgoKSAqIDMgKyAxOyB9Ci0gICAgc2l6ZV90IGdldFVURjhDU3RyaW5nKGNoYXIq
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCi0gICAgewotICAgICAgICBpZiAoIWJ1ZmZlclNp
emUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2hhciogcCA9IGJ1ZmZlcjsKLSAg
ICAgICAgY29uc3QgVUNoYXIqIGQgPSBtX3N0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIFdU
Rjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZl
cnRVVEYxNlRvVVRGOCgmZCwgZCArIG1fc3RyaW5nLmxlbmd0aCgpLCAmcCwgcCArIGJ1ZmZlclNp
emUgLSAxLCAvKiBzdHJpY3QgKi8gdHJ1ZSk7Ci0gICAgICAgICpwKysgPSAnXDAnOwotICAgICAg
ICBpZiAocmVzdWx0ICE9IFdURjo6VW5pY29kZTo6Y29udmVyc2lvbk9LICYmIHJlc3VsdCAhPSBX
VEY6OlVuaWNvZGU6OnRhcmdldEV4aGF1c3RlZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICByZXR1cm4gcCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFsKFdlYlN0cmlu
Zyogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQotICAgIGJv
b2wgZXF1YWxUb1VURjhTdHJpbmcoY29uc3QgY2hhciogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5n
ID09IFN0cmluZzo6ZnJvbVVURjgob3RoZXIpOyB9Ci0gICAgYm9vbCBlcXVhbFRvVVRGOFN0cmlu
Z0lnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBvdGhlcikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UobV9zdHJpbmcsIG90aGVyKTsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZzsgfQotCi0gICAgSlNTdHJpbmdSZWYgY3JlYXRlSlNTdHJpbmco
KSBjb25zdAotICAgIHsKLSAgICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAg
ICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKG1fc3RyaW5nKS5sZWFrUmVmKCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFdlYlN0cmluZygpCi0gICAgICAgIDogbV9zdHJpbmcoKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWJTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAg
ICAgIDogbV9zdHJpbmcoIXN0cmluZy5pbXBsKCkgPyBTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHko
KSkgOiBzdHJpbmcpCi0gICAgewotICAgIH0KLQotICAgIFN0cmluZyBtX3N0cmluZzsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViU3RyaW5nX2gKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0
Q29kZXIubW0JKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Q29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMw
LDEwIEBACiAKICNpbXBvcnQgIkFQSUFycmF5LmgiCiAjaW1wb3J0ICJBUElOdW1iZXIuaCIKKyNp
bXBvcnQgIkFQSVN0cmluZy5oIgogI2ltcG9ydCAiTXV0YWJsZURpY3Rpb25hcnkuaCIKICNpbXBv
cnQgIldLUmVtb3RlT2JqZWN0SW50ZXJmYWNlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRhdGEu
aCIKLSNpbXBvcnQgIldlYlN0cmluZy5oIgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CkBA
IC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0
RQogICAgIGlmICghb2JqZWN0Q2xhc3MpCiAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0lu
dmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCItY2xhc3NGb3JDb2RlciByZXR1cm5lZCBu
aWwgZm9yICVAIiwgb2JqZWN0XTsKIAotICAgIGVuY29kZXItPl9jdXJyZW50RGljdGlvbmFyeS0+
c2V0KGNsYXNzTmFtZUtleSwgV2ViU3RyaW5nOjpjcmVhdGUoY2xhc3NfZ2V0TmFtZShvYmplY3RD
bGFzcykpKTsKKyAgICBlbmNvZGVyLT5fY3VycmVudERpY3Rpb25hcnktPnNldChjbGFzc05hbWVL
ZXksIEFQSTo6U3RyaW5nOjpjcmVhdGUoY2xhc3NfZ2V0TmFtZShvYmplY3RDbGFzcykpKTsKIAog
ICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TSW52b2NhdGlvbiBjbGFzc11dKSB7CiAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gc3BlY2lhbCBjYXNlIE5TSW52b2NhdGlvbiBzaW5jZSB3ZSBk
b24ndCB3YW50IHRvIGVuY29kZSB0aGUgdGFyZ2V0LgpAQCAtNDM0LDcgKzQzNCw3IEBAICAgICBj
b25zdCBhdXRvJiBhbGxvd2VkQ2xhc3NlcyA9IFtkZWNvZGUKIAogc3RhdGljIGlkIGRlY29kZU9i
amVjdChXS1JlbW90ZU9iamVjdERlY29kZXIgKmRlY29kZXIpCiB7Ci0gICAgV2ViU3RyaW5nKiBj
bGFzc05hbWVTdHJpbmcgPSBkZWNvZGVyLT5fY3VycmVudERpY3Rpb25hcnktPmdldDxXZWJTdHJp
bmc+KGNsYXNzTmFtZUtleSk7CisgICAgQVBJOjpTdHJpbmcqIGNsYXNzTmFtZVN0cmluZyA9IGRl
Y29kZXItPl9jdXJyZW50RGljdGlvbmFyeS0+Z2V0PEFQSTo6U3RyaW5nPihjbGFzc05hbWVLZXkp
OwogICAgIGlmICghY2xhc3NOYW1lU3RyaW5nKQogICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6
TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIkNsYXNzIG5hbWUg
bWlzc2luZyJdOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVt
b3RlT2JqZWN0UmVnaXN0cnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tCShyZXZpc2lvbiAxNjA1NzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0UmVnaXN0cnku
bW0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgLSAodm9pZClfc2VuZEludm9jYXRp
b246KE5TSW52b2NhdGlvbiAqKQogICAgIFtlbmNvZGVyIGVuY29kZU9iamVjdDppbnZvY2F0aW9u
IGZvcktleTppbnZvY2F0aW9uS2V5XTsKIAogICAgIFJlZlB0cjxNdXRhYmxlRGljdGlvbmFyeT4g
Ym9keSA9IE11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoKTsKLSAgICBib2R5LT5zZXQoaW50ZXJm
YWNlSWRlbnRpZmllcktleSwgV2ViU3RyaW5nOjpjcmVhdGUoaW50ZXJmYWNlLmlkZW50aWZpZXIp
KTsKKyAgICBib2R5LT5zZXQoaW50ZXJmYWNlSWRlbnRpZmllcktleSwgQVBJOjpTdHJpbmc6OmNy
ZWF0ZShpbnRlcmZhY2UuaWRlbnRpZmllcikpOwogICAgIGJvZHktPnNldChlbmNvZGVkSW52b2Nh
dGlvbktleSwgW2VuY29kZXIgcm9vdE9iamVjdERpY3Rpb25hcnldKTsKIAogICAgIFtzZWxmIF9z
ZW5kTWVzc2FnZVdpdGhCb2R5OmJvZHkucmVsZWFzZSgpXTsKQEAgLTEyMyw3ICsxMjMsNyBAQCAt
IChCT09MKV9oYW5kbGVNZXNzYWdlV2l0aE5hbWU6KFdLU3RyaW5nCiAKICAgICBjb25zdCBJbW11
dGFibGVEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5ID0gdG9JbXBsKHN0YXRpY19jYXN0PFdLRGljdGlv
bmFyeVJlZj4oYm9keSkpOwogCi0gICAgV2ViU3RyaW5nKiBpbnRlcmZhY2VJZGVudGlmaWVyID0g
ZGljdGlvbmFyeS0+Z2V0PFdlYlN0cmluZz4oaW50ZXJmYWNlSWRlbnRpZmllcktleSk7CisgICAg
QVBJOjpTdHJpbmcqIGludGVyZmFjZUlkZW50aWZpZXIgPSBkaWN0aW9uYXJ5LT5nZXQ8QVBJOjpT
dHJpbmc+KGludGVyZmFjZUlkZW50aWZpZXJLZXkpOwogICAgIGlmICghaW50ZXJmYWNlSWRlbnRp
ZmllcikKICAgICAgICAgcmV0dXJuIE5POwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJL2MvV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLUGx1Z2luSW5mb3JtYXRpb24uY3BwCShyZXZpc2lvbiAxNjA1NzEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldLUGx1Z2luSW5mb3JtYXRpb24uaCIKIAorI2luY2x1ZGUgIkFQSVN0cmluZy5o
IgogI2luY2x1ZGUgIlBsdWdpbkluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElD
YXN0LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCkK
IHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5n
KiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZp
ZXJLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpT
dHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSkubGVh
a1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAg
LTQ1LDcgKzQ1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZQog
V0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkoKQogewogI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9
IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpKS5s
ZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3Jl
YXRlKHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpKS5sZWFrUmVmKCk7CiAgICAg
cmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtNTUsNyArNTUsNyBA
QCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlVmVyCiBXS1N0cmluZ1JlZiBX
S1BsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5KCkKIHsKICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJp
bmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0VmVyc2lvbktleSgpKS5sZWFr
UmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJzaW9uS2V5KCkpLmxlYWtSZWYoKTsKICAg
ICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC02NSw3ICs2NSw3
IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25CdW5kbGVTaG8KIFdLU3RyaW5nUmVm
IFdLUGx1Z2luSW5mb3JtYXRpb25QYXRoS2V5KCkKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShw
bHVnaW5JbmZvcm1hdGlvblBhdGhLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0
cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBhdGhLZXko
KSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4g
MDsKQEAgLTc1LDcgKzc1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBhdGhL
ZXkoKQogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkKIHsK
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBr
ZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCkp
LmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpj
cmVhdGUocGx1Z2luSW5mb3JtYXRpb25EaXNwbGF5TmFtZUtleSgpKS5sZWFrUmVmKCk7CiAgICAg
cmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtODUsNyArODUsNyBA
QCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uRGlzcGxheU5hCiBXS1N0cmluZ1JlZiBX
S1BsdWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXkoKQogewogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmlu
Zzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uRGVmYXVsdExvYWRQb2xpY3lLZXkoKSkubGVha1Jl
ZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShw
bHVnaW5JbmZvcm1hdGlvbkRlZmF1bHRMb2FkUG9saWN5S2V5KCkpLmxlYWtSZWYoKTsKICAgICBy
ZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC05NSw3ICs5NSw3IEBA
IFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG8KIFdLU3RyaW5nUmVmIFdL
UGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWls
YWJsZUtleSgpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGlj
IFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25VcGRh
dGVQYXN0TGFzdEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSgpKS5sZWFrUmVmKCk7
CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdp
bkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFpbGFibGVL
ZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1
cm4gMDsKQEAgLTEwNSw3ICsxMDUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9u
VXBkYXRlUGFzCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2Zp
bGVLZXkoKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBX
ZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uSGFzU2Fu
ZGJveFByb2ZpbGVLZXkoKSkubGVha1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5
ID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkhhc1NhbmRib3hQcm9maWxl
S2V5KCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0
dXJuIDA7CkBAIC0xMTUsNyArMTE1LDcgQEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlv
bkhhc1NhbmRibwogV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCkK
IHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5n
KiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvbkZyYW1lVVJMS2V5KCkp
LmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpj
cmVhdGUocGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0
dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtMTI1LDcgKzEyNSw3IEBA
IFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEsKIFdLU3RyaW5nUmVmIFdL
UGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUo
cGx1Z2luSW5mb3JtYXRpb25NSU1FVHlwZUtleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQ
STo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uTUlN
RVR5cGVLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAg
ICByZXR1cm4gMDsKQEAgLTEzNSw3ICsxMzUsNyBAQCBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9y
bWF0aW9uTUlNRVR5cGVLCiBXS1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtl
eSgpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0
cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25QYWdlVVJMS2V5
KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5n
OjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25QYWdlVVJMS2V5KCkpLmxlYWtSZWYoKTsKICAgICBy
ZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xNDUsNyArMTQ1LDcg
QEAgV0tTdHJpbmdSZWYgV0tQbHVnaW5JbmZvcm1hdGlvblBhZ2VVUkxLZQogV0tTdHJpbmdSZWYg
V0tQbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkKIHsKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBX
ZWJTdHJpbmc6OmNyZWF0ZShwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJM
S2V5KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3Ry
aW5nOjpjcmVhdGUocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtleSgp
KS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAw
OwpAQCAtMTU1LDcgKzE1NSw3IEBAIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25QbHVn
aW5zcGEKIFdLU3RyaW5nUmVmIFdLUGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKQogewog
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtl
eSA9IFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpLmxl
YWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVh
dGUocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXkoKSkubGVha1JlZigpOwogICAgIHJldHVy
biB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTE2NSw3ICsxNjUsNyBAQCBX
S1N0cmluZ1JlZiBXS1BsdWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMCiBXS1N0cmluZ1JlZiBXS1Bs
dWdJbkluZm9ybWF0aW9uUmVwbGFjZW1lbnRPYnNjdXJlZEtleSgpCiB7CiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5n
OjpjcmVhdGUocGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1cmVkS2V5KCkpLmxlYWtS
ZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUo
cGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1cmVkS2V5KCkpLmxlYWtSZWYoKTsKICAg
ICByZXR1cm4gdG9BUEkoa2V5KTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiAxNjA1
NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV0tTaGFyZWRBUElDYXN0X2gK
IAogI2luY2x1ZGUgIkFQSU51bWJlci5oIgorI2luY2x1ZGUgIkFQSVN0cmluZy5oIgogI2luY2x1
ZGUgIkltYWdlT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCkBAIC00NCw3ICs0NSw2IEBACiAjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKICNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIldlYlNlY3Vy
aXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgi
CiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgi
CkBAIC0xMDgsNyArMTA4LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVjdFJlZiwgQVBJOjpS
ZWN0KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdlYlNlY3VyaXR5
T3JpZ2luKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmLCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tTaXplUmVmLCBB
UEk6OlNpemUpCi1XS19BRERfQVBJX01BUFBJTkcoV0tTdHJpbmdSZWYsIFdlYlN0cmluZykKK1dL
X0FERF9BUElfTUFQUElORyhXS1N0cmluZ1JlZiwgQVBJOjpTdHJpbmcpCiBXS19BRERfQVBJX01B
UFBJTkcoV0tUeXBlUmVmLCBBUEk6Ok9iamVjdCkKIFdLX0FERF9BUElfTUFQUElORyhXS1VJbnQ2
NFJlZiwgQVBJOjpVSW50NjQpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVUkxSZWYsIFdlYlVSTCkK
QEAgLTEyNCw2ICsxMjQsMTIgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLV2ViQXJjaGl2ZVJlc291
cmNlUgogV0tfQUREX0FQSV9NQVBQSU5HKFdLT2JqQ1R5cGVXcmFwcGVyUmVmLCBPYmpDT2JqZWN0
R3JhcGgpCiAjZW5kaWYKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB0eXBlbmFtZSBJ
bXBsVHlwZUluZm88VD46OkFQSVR5cGUgdG9BUEkoVCB0KQoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHR5cGVuYW1lIEltcGxUeXBlSW5mbzxUPjo6QVBJVHlwZT4odCk7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIEltcGxUeXBlLCB0eXBlbmFtZSBBUElUeXBlID0gdHlwZW5hbWUgSW1w
bFR5cGVJbmZvPEltcGxUeXBlKj46OkFQSVR5cGU+CiBjbGFzcyBQcm94eWluZ1JlZlB0ciB7CiBw
dWJsaWM6CkBAIC0xNTIsMjMgKzE1OCwxNyBAQCBpbmxpbmUgdHlwZW5hbWUgQVBJVHlwZUluZm88
VD46OkltcGxUeXBlCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQVBJVHlw
ZUluZm88VD46OkltcGxUeXBlPihjb25zdF9jYXN0PE5vbkNvbnN0VmFsdWVUeXBlKj4odCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHR5cGVuYW1lIEltcGxUeXBlSW5mbzxU
Pjo6QVBJVHlwZSB0b0FQSShUIHQpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dHlw
ZW5hbWUgSW1wbFR5cGVJbmZvPFQ+OjpBUElUeXBlPih0KTsKLX0KLQogLyogU3BlY2lhbCBjYXNl
cy4gKi8KIAotaW5saW5lIFByb3h5aW5nUmVmUHRyPFdlYlN0cmluZz4gdG9BUEkoU3RyaW5nSW1w
bCogc3RyaW5nKQoraW5saW5lIFByb3h5aW5nUmVmUHRyPEFQSTo6U3RyaW5nPiB0b0FQSShTdHJp
bmdJbXBsKiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFByb3h5aW5nUmVmUHRyPFdlYlN0cmluZz4o
V2ViU3RyaW5nOjpjcmVhdGUoc3RyaW5nKSk7CisgICAgcmV0dXJuIFByb3h5aW5nUmVmUHRyPEFQ
STo6U3RyaW5nPihBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmluZykpOwogfQogCiBpbmxpbmUgV0tT
dHJpbmdSZWYgdG9Db3BpZWRBUEkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgUmVmUHRy
PFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2ViU3RyaW5nOjpjcmVhdGUoc3RyaW5nKTsKLSAgICBy
ZXR1cm4gdG9BUEkod2ViU3RyaW5nLnJlbGVhc2UoKS5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxB
UEk6OlN0cmluZz4gYXBpU3RyaW5nID0gQVBJOjpTdHJpbmc6OmNyZWF0ZShzdHJpbmcpOworICAg
IHJldHVybiB0b0FQSShhcGlTdHJpbmcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CiAKIGlubGlu
ZSBQcm94eWluZ1JlZlB0cjxXZWJVUkw+IHRvVVJMUmVmKFN0cmluZ0ltcGwqIHN0cmluZykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcAkocmV2aXNpb24gMTYw
NTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdL
VHlwZUlEIFdLU3RyaW5nR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViU3RyaW5n
OjpBUElUeXBlKTsKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpTdHJpbmc6OkFQSVR5cGUpOwogfQog
CiBXS1N0cmluZ1JlZiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb25zdCBjaGFyKiBz
dHJpbmcpCiB7Ci0gICAgUmVmUHRyPFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2ViU3RyaW5nOjpj
cmVhdGVGcm9tVVRGOFN0cmluZyhzdHJpbmcpOwotICAgIHJldHVybiB0b0FQSSh3ZWJTdHJpbmcu
cmVsZWFzZSgpLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBhcGlTdHJpbmcg
PSBBUEk6OlN0cmluZzo6Y3JlYXRlRnJvbVVURjhTdHJpbmcoc3RyaW5nKTsKKyAgICByZXR1cm4g
dG9BUEkoYXBpU3RyaW5nLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCiBib29sIFdLU3RyaW5n
SXNFbXB0eShXS1N0cmluZ1JlZiBzdHJpbmdSZWYpCkBAIC04NSw4ICs4NSw4IEBAIGJvb2wgV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW4KIAogV0tTdHJpbmdSZWYgV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoSlNTdHJpbmdSZWYganNTdHJpbmdSZWYpCiB7Ci0gICAgUmVmUHRy
PFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2ViU3RyaW5nOjpjcmVhdGUoanNTdHJpbmdSZWYpOwot
ICAgIHJldHVybiB0b0FQSSh3ZWJTdHJpbmcucmVsZWFzZSgpLmxlYWtSZWYoKSk7CisgICAgUmVm
UHRyPEFQSTo6U3RyaW5nPiBhcGlTdHJpbmcgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKGpzU3RyaW5n
UmVmKTsKKyAgICByZXR1cm4gdG9BUEkoYXBpU3RyaW5nLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwog
fQogCiBKU1N0cmluZ1JlZiBXS1N0cmluZ0NvcHlKU1N0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmdS
ZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2YvV0tTdHJpbmdDRi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvY2YvV0tTdHJpbmdDRi5t
bQkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL2NmL1dL
U3RyaW5nQ0YubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgV0tTdHJpbmdSZWYg
V0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQwogI2lmIFdLX0FQSV9FTkFCTEVECiAgICAgLy8g
U2luY2UgV0tOU1N0cmluZyBpcyBhbiBpbnRlcm5hbCBjbGFzcyB3aXRoIG5vIHN1YmNsYXNzZXMs
IHdlIGNhbiBkbyBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjay4KICAgICBpZiAob2JqZWN0X2dldENs
YXNzKChOU1N0cmluZyAqKWNmU3RyaW5nKSA9PSB3a05TU3RyaW5nQ2xhc3MoKSkgewotICAgICAg
ICByZXR1cm4gdG9BUEkoc3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4oJlsoV0tOU1N0cmluZyAqKWNm
U3RyaW5nIHJldGFpbl0uX2FwaU9iamVjdCkpOworICAgICAgICByZXR1cm4gdG9BUEkoc3RhdGlj
X2Nhc3Q8QVBJOjpTdHJpbmcqPigmWyhXS05TU3RyaW5nICopY2ZTdHJpbmcgcmV0YWluXS5fYXBp
T2JqZWN0KSk7CiAgICAgfQogI2VuZGlmCiAgICAgU3RyaW5nIHN0cmluZyhjZlN0cmluZyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV0tOU1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TU3RyaW5nLmgJKHJldmlzaW9uIDE2
MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TU3RyaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDExICsyNywxMSBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorI2lt
cG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgotI2ltcG9ydCAiV2ViU3Ry
aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotaW5saW5lIE5TU3RyaW5nICp3cmFwcGVyKFdl
YlN0cmluZyYgc3RyaW5nKSB7IEFTU0VSVChbc3RyaW5nLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNz
OltOU1N0cmluZyBjbGFzc11dKTsgcmV0dXJuIChOU1N0cmluZyAqKXN0cmluZy53cmFwcGVyKCk7
IH0KK2lubGluZSBOU1N0cmluZyAqd3JhcHBlcihBUEk6OlN0cmluZyYgc3RyaW5nKSB7IEFTU0VS
VChbc3RyaW5nLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsgcmV0
dXJuIChOU1N0cmluZyAqKXN0cmluZy53cmFwcGVyKCk7IH0KIH0KIAogQGludGVyZmFjZSBXS05T
U3RyaW5nIDogV0tPYmplY3QgPE5TQ29weWluZz4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db2NvYS9XS05TU3RyaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db2NvYS9XS05TU3RyaW5nLm1tCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29jb2EvV0tOU1N0cmluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiV2ViU3RyaW5nLmgiCisjaW1w
b3J0ICJBUElTdHJpbmcuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogLSAoTlNPYmplY3QgKilfd2ViX2NyZWF0ZVRhcmdldAogewotICAgIGNvbnN0IFN0cmluZyYg
c3RyaW5nID0gc3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4oJnNlbGYuX2FwaU9iamVjdCktPnN0cmlu
ZygpOworICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nID0gc3RhdGljX2Nhc3Q8QVBJOjpTdHJpbmcq
Pigmc2VsZi5fYXBpT2JqZWN0KS0+c3RyaW5nKCk7CiAgICAgcmV0dXJuIChOU1N0cmluZyAqKUNG
TWFrZUNvbGxlY3RhYmxlKHN0cmluZy5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9y
bWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9O
ZXRzY2FwZS9QbHVnaW5JbmZvcm1hdGlvbi5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL1BsdWdpbkluZm9ybWF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAKICNpbmNsdWRlICJBUElOdW1iZXIuaCIKKyNpbmNsdWRlICJBUElTdHJpbmcu
aCIKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJ
bmZvLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAj
aW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTExMSw4ICsxMTEsOCBAQCBTdHJpbmcgcGx1Z0luSW5mb3JtYXRpb25SZXBsYWNlbWVudE9ic2N1
CiB2b2lkIGdldFBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8m
IHBsdWdpbiwgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSYgbWFwKQogewogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25QYXRo
S2V5KCksIFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5wYXRoKSk7Ci0gICAgbWFwLnNldChwbHVn
aW5JbmZvcm1hdGlvbkRpc3BsYXlOYW1lS2V5KCksIFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5p
bmZvLm5hbWUpKTsKKyAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uUGF0aEtleSgpLCBBUEk6
OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5wYXRoKSk7CisgICAgbWFwLnNldChwbHVnaW5JbmZvcm1h
dGlvbkRpc3BsYXlOYW1lS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLmluZm8ubmFt
ZSkpOwogICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25EZWZhdWx0TG9hZFBvbGljeUtleSgp
LCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvV0tQbHVnaW5Mb2FkUG9saWN5KFBsdWdpbkluZm9TdG9y
ZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4ocGx1Z2luKSkpKTsKIAogICAgIGdldFBsYXRm
b3JtUGx1Z2luTW9kdWxlSW5mb3JtYXRpb24ocGx1Z2luLCBtYXApOwpAQCAtMTM4LDcgKzEzOCw3
IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gY3JlYXRlUGwKICAgICBpZiAoIWZy
YW1lVVJMU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlv
bkZyYW1lVVJMS2V5KCksIFdlYlVSTDo6Y3JlYXRlKGZyYW1lVVJMU3RyaW5nKSk7CiAgICAgaWYg
KCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25N
SU1FVHlwZUtleSgpLCBXZWJTdHJpbmc6OmNyZWF0ZShtaW1lVHlwZSkpOworICAgICAgICBtYXAu
c2V0KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZSht
aW1lVHlwZSkpOwogICAgIGlmICghcGFnZVVSTFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIG1h
cC5zZXQocGx1Z2luSW5mb3JtYXRpb25QYWdlVVJMS2V5KCksIFdlYlVSTDo6Y3JlYXRlKHBhZ2VV
UkxTdHJpbmcpKTsKICAgICBpZiAoIXBsdWdpbnNwYWdlQXR0cmlidXRlVVJMU3RyaW5nLmlzRW1w
dHkoKSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBQYXNzUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+
IGNyZWF0ZVBsCiAgICAgaWYgKCFmcmFtZVVSTFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIG1h
cC5zZXQocGx1Z2luSW5mb3JtYXRpb25GcmFtZVVSTEtleSgpLCBXZWJVUkw6OmNyZWF0ZShmcmFt
ZVVSTFN0cmluZykpOwogICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtYXAu
c2V0KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5cGVLZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUobWlt
ZVR5cGUpKTsKKyAgICAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCks
IEFQSTo6U3RyaW5nOjpjcmVhdGUobWltZVR5cGUpKTsKICAgICBpZiAoIXBhZ2VVUkxTdHJpbmcu
aXNFbXB0eSgpKQogICAgICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uUGFnZVVSTEtleSgp
LCBXZWJVUkw6OmNyZWF0ZShwYWdlVVJMU3RyaW5nKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1
Z2luSW5mb3JtYXRpb25NYWMubW0JKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjksMTkgKzI5LDE5IEBACiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiAKICNpbXBvcnQgIkFQSU51bWJlci5oIgorI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAj
aW1wb3J0ICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW1wb3J0ICJQbHVnaW5TYW5kYm94UHJvZmls
ZS5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJXZWJTdHJpbmcuaCIK
ICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogdm9pZCBnZXRQbGF0Zm9ybVBsdWdpbk1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IFBsdWdpbk1v
ZHVsZUluZm8mIHBsdWdpbiwgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSYgbWFwKQogewot
ICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCksIFdlYlN0
cmluZzo6Y3JlYXRlKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSk7Ci0gICAgbWFwLnNldChwbHVn
aW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2lu
LnZlcnNpb25TdHJpbmcpKTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hv
cnRWZXJzaW9uS2V5KCksIFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5zaG9ydFZlcnNpb25TdHJp
bmcpKTsKKyAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlSWRlbnRpZmllcktleSgp
LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSk7CisgICAgbWFw
LnNldChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkoKSwgQVBJOjpTdHJpbmc6OmNy
ZWF0ZShwbHVnaW4udmVyc2lvblN0cmluZykpOworICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRp
b25CdW5kbGVTaG9ydFZlcnNpb25LZXkoKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW4uc2hv
cnRWZXJzaW9uU3RyaW5nKSk7CiAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvblVwZGF0ZVBh
c3RMYXN0QmxvY2tlZFZlcnNpb25Jc0tub3duQXZhaWxhYmxlS2V5KCksIEFQSTo6Qm9vbGVhbjo6
Y3JlYXRlKFdLSXNQbHVnaW5VcGRhdGVBdmFpbGFibGUobnNTdHJpbmdGcm9tV2ViQ29yZVN0cmlu
ZyhwbHVnaW4uYnVuZGxlSWRlbnRpZmllcikpKSk7CiAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1h
dGlvbkhhc1NhbmRib3hQcm9maWxlS2V5KCksIEFQSTo6Qm9vbGVhbjo6Y3JlYXRlKHBsdWdpbkhh
c1NhbmRib3hQcm9maWxlKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSkpOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSU5hdmlnYXRpb25EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSU5hdmlnYXRpb25EYXRhLmgJKHJldmlzaW9uIDE2
MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUElOYXZpZ2F0aW9uRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfk5h
dmlnYXRpb25EYXRhKCk7CiAKLSAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
b3JlLnRpdGxlOyB9Ci0gICAgU3RyaW5nIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmUudXJs
OyB9CisgICAgV1RGOjpTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JlLnRpdGxl
OyB9CisgICAgV1RGOjpTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZS51cmw7IH0K
ICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcmUub3JpZ2luYWxSZXF1ZXN0OyB9CiAgICAgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3N0b3JlLnJl
c3BvbnNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgV2ViQ29udGV4dDo6
ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWcKICAgICBtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIuIik7CiAgICAgbWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyLmFwcGVuZChtZXNzYWdlTmFt
ZS5kYXRhKCksIG1lc3NhZ2VOYW1lLnNpemUoKSk7CiAKLSAgICBzX2ludmFsaWRNZXNzYWdlQ2Fs
bGJhY2sodG9BUEkoV2ViU3RyaW5nOjpjcmVhdGUobWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpLmdldCgpKSk7CisgICAgc19pbnZhbGlkTWVzc2FnZUNhbGxiYWNrKHRvQVBJKEFQ
STo6U3RyaW5nOjpjcmVhdGUobWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpLmdl
dCgpKSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc0RpZENhY2hlUGFnZShXZWJQcm9j
ZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjc3LDIwICsxMjc3LDIwIEBAIHZvaWQgV2ViQ29udGV4
dDo6cGx1Z2luSW5mb1N0b3JlRGlkTG9hZFAKIAogICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2lu
TW9kdWxlIDogcGx1Z2luTW9kdWxlcykgewogICAgICAgICBJbW11dGFibGVEaWN0aW9uYXJ5OjpN
YXBUeXBlIG1hcDsKLSAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoInBhdGgiKSwgV2ViU3Ry
aW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLnBhdGgpKTsKLSAgICAgICAgbWFwLnNldChBU0NJSUxp
dGVyYWwoIm5hbWUiKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8ubmFtZSkp
OwotICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgiZmlsZSIpLCBXZWJTdHJpbmc6OmNyZWF0
ZShwbHVnaW5Nb2R1bGUuaW5mby5maWxlKSk7Ci0gICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFs
KCJkZXNjIiksIFdlYlN0cmluZzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS5pbmZvLmRlc2MpKTsKKyAg
ICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoInBhdGgiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShw
bHVnaW5Nb2R1bGUucGF0aCkpOworICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgibmFtZSIp
LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS5pbmZvLm5hbWUpKTsKKyAgICAgICAg
bWFwLnNldChBU0NJSUxpdGVyYWwoImZpbGUiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5N
b2R1bGUuaW5mby5maWxlKSk7CisgICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJkZXNjIiks
IEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8uZGVzYykpOwogCiAgICAgICAg
IFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiBtaW1lVHlwZXM7CiAgICAgICAgIG1pbWVUeXBl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsdWdpbk1vZHVsZS5pbmZvLm1pbWVzLnNpemUoKSk7
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZUNsYXNzSW5mbyA6IHBsdWdpbk1vZHVsZS5p
bmZvLm1pbWVzKQotICAgICAgICAgICAgbWltZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXZWJTdHJp
bmc6OmNyZWF0ZShtaW1lQ2xhc3NJbmZvLnR5cGUpKTsKKyAgICAgICAgICAgIG1pbWVUeXBlcy51
bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShtaW1lQ2xhc3NJbmZvLnR5cGUpKTsK
ICAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoIm1pbWVzIiksIEFQSTo6QXJyYXk6OmNyZWF0
ZShzdGQ6Om1vdmUobWltZVR5cGVzKSkpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBt
YXAuc2V0KEFTQ0lJTGl0ZXJhbCgiYnVuZGxlSWQiKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2lu
TW9kdWxlLmJ1bmRsZUlkZW50aWZpZXIpKTsKLSAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwo
InZlcnNpb24iKSwgV2ViU3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLnZlcnNpb25TdHJpbmcp
KTsKKyAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoImJ1bmRsZUlkIiksIEFQSTo6U3RyaW5n
OjpjcmVhdGUocGx1Z2luTW9kdWxlLmJ1bmRsZUlkZW50aWZpZXIpKTsKKyAgICAgICAgbWFwLnNl
dChBU0NJSUxpdGVyYWwoInZlcnNpb24iKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1
bGUudmVyc2lvblN0cmluZykpOwogI2VuZGlmCiAKICAgICAgICAgcGx1Z2lucy51bmNoZWNrZWRB
cHBlbmQoSW1tdXRhYmxlRGljdGlvbmFyeTo6Y3JlYXRlKHN0ZDo6bW92ZShtYXApKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQ
cm94eS5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw4ICsxNjgs
OCBAQCB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkaWRHZXREYXRhCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZGF0YWJhc2VEZXRhaWxzIDogb3JpZ2luQW5kRGF0YWJhc2VzLmRhdGFi
YXNlcykgewogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6Ok9iamVjdD4+
IGRldGFpbHNNYXA7CiAKLSAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0KGRhdGFiYXNlRGV0YWls
c05hbWVLZXkoKSwgV2ViU3RyaW5nOjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLm5hbWUoKSkpOwot
ICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQoZGF0YWJhc2VEZXRhaWxzRGlzcGxheU5hbWVLZXko
KSwgV2ViU3RyaW5nOjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLmRpc3BsYXlOYW1lKCkpKTsKKyAg
ICAgICAgICAgIGRldGFpbHNNYXAuc2V0KGRhdGFiYXNlRGV0YWlsc05hbWVLZXkoKSwgQVBJOjpT
dHJpbmc6OmNyZWF0ZShkYXRhYmFzZURldGFpbHMubmFtZSgpKSk7CisgICAgICAgICAgICBkZXRh
aWxzTWFwLnNldChkYXRhYmFzZURldGFpbHNEaXNwbGF5TmFtZUtleSgpLCBBUEk6OlN0cmluZzo6
Y3JlYXRlKGRhdGFiYXNlRGV0YWlscy5kaXNwbGF5TmFtZSgpKSk7CiAgICAgICAgICAgICBkZXRh
aWxzTWFwLnNldChkYXRhYmFzZURldGFpbHNFeHBlY3RlZFVzYWdlS2V5KCksIEFQSTo6VUludDY0
OjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKSkpOwogICAgICAgICAgICAg
ZGV0YWlsc01hcC5zZXQoZGF0YWJhc2VEZXRhaWxzQ3VycmVudFVzYWdlS2V5KCksIEFQSTo6VUlu
dDY0OjpjcmVhdGUoZGF0YWJhc2VEZXRhaWxzLmN1cnJlbnRVc2FnZSgpKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNsaWVudC5jcHAJKHJldmlzaW9uIDE2MDU3
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXZWJGb3JtQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRlICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC00MCw3ICszOSw3IEBAIGJvb2wgV2ViRm9ybUNsaWVudDo6d2lsbFN1
Ym1pdEZvcm0oV2ViUGEKIAogICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGV4dEZpZWxkVmFsdWVzLnNpemUoKTsgKytpKQot
ICAgICAgICBtYXAuc2V0KHRleHRGaWVsZFZhbHVlc1tpXS5maXJzdCwgV2ViU3RyaW5nOjpjcmVh
dGUodGV4dEZpZWxkVmFsdWVzW2ldLnNlY29uZCkpOworICAgICAgICBtYXAuc2V0KHRleHRGaWVs
ZFZhbHVlc1tpXS5maXJzdCwgQVBJOjpTdHJpbmc6OmNyZWF0ZSh0ZXh0RmllbGRWYWx1ZXNbaV0u
c2Vjb25kKSk7CiAgICAgUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IHRleHRGaWVsZHNNYXAg
PSBJbW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUoc3RkOjptb3ZlKG1hcCkpOwogCiAgICAgbV9j
bGllbnQud2lsbFN1Ym1pdEZvcm0odG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkoc291
cmNlRnJhbWUpLCB0b0FQSSh0ZXh0RmllbGRzTWFwLmdldCgpKSwgdG9BUEkodXNlckRhdGEpLCB0
b0FQSShsaXN0ZW5lciksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTYwNTcx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NCwxNCArMjc0LDE0IEBAIHZvaWQgV2ViTG9hZGVyQ2xpZW50OjpkaWRG
YWlsVG9Jbml0aWFsaXoKICAgICBpZiAobV9jbGllbnQuZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdp
bl9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKQogICAgICAgICBtX2NsaWVudC5kaWRGYWlsVG9Jbml0
aWFsaXplUGx1Z2luX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAoCiAgICAgICAgICAgICB0b0FQSShw
YWdlKSwKLSAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5n
PihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKKyAgICAgICAgICAgIHRvQVBJKHBs
dWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5
cGVLZXkoKSkpLAogICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIAogICAg
IGlmIChtX2NsaWVudC5wbHVnaW5EaWRGYWlsX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEpCiAgICAg
ICAgIG1fY2xpZW50LnBsdWdpbkRpZEZhaWxfZGVwcmVjYXRlZEZvclVzZVdpdGhWMSgKICAgICAg
ICAgICAgIHRvQVBJKHBhZ2UpLAogICAgICAgICAgICAga1dLRXJyb3JDb2RlQ2Fubm90TG9hZFBs
dWdJbiwKLSAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5n
PihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKKyAgICAgICAgICAgIHRvQVBJKHBs
dWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uTUlNRVR5
cGVLZXkoKSkpLAogICAgICAgICAgICAgMCwKICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwpAQCAtMzAwLDkgKzMwMCw5IEBAIHZvaWQgV2ViTG9h
ZGVyQ2xpZW50OjpkaWRCbG9ja0luc2VjdXJlUGwKICAgICAgICAgbV9jbGllbnQucGx1Z2luRGlk
RmFpbF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxKAogICAgICAgICAgICAgdG9BUEkocGFnZSksCiAg
ICAgICAgICAgICBrV0tFcnJvckNvZGVJbnNlY3VyZVBsdWdJblZlcnNpb24sCi0gICAgICAgICAg
ICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRp
b25NSU1FVHlwZUtleSgpKSksCi0gICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+
Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCkpKSwK
LSAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5nPihwbHVn
aW5JbmZvcm1hdGlvbkJ1bmRsZVZlcnNpb25LZXkoKSkpLAorICAgICAgICAgICAgdG9BUEkocGx1
Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25NSU1FVHlw
ZUtleSgpKSksCisgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6
U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSkpLAorICAgICAg
ICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdldDxBUEk6OlN0cmluZz4ocGx1Z2luSW5m
b3JtYXRpb25CdW5kbGVWZXJzaW9uS2V5KCkpKSwKICAgICAgICAgICAgIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7CiAKICAgICBpZiAobV9jbGllbnQucGx1Z2luRGlkRmFpbCkKQEAgLTMyNCw3
ICszMjQsNyBAQCBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFdlYkxvYWRlckNsaWVudDo6CiAgICAg
ICAgIGxvYWRQb2xpY3kgPSB0b1BsdWdpbk1vZHVsZUxvYWRQb2xpY3kobV9jbGllbnQucGx1Z2lu
TG9hZFBvbGljeSh0b0FQSShwYWdlKSwgdG9XS1BsdWdpbkxvYWRQb2xpY3koY3VycmVudFBsdWdp
bkxvYWRQb2xpY3kpLCB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbiksICZ1bmF2YWlsYWJpbGl0eURl
c2NyaXB0aW9uT3V0LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKTsKIAogICAgIGlmICh1bmF2
YWlsYWJpbGl0eURlc2NyaXB0aW9uT3V0KSB7Ci0gICAgICAgIFJlZlB0cjxXZWJTdHJpbmc+IHdl
YlVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24gPSBhZG9wdFJlZih0b0ltcGwodW5hdmFpbGFiaWxp
dHlEZXNjcmlwdGlvbk91dCkpOworICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHdlYlVuYXZh
aWxhYmlsaXR5RGVzY3JpcHRpb24gPSBhZG9wdFJlZih0b0ltcGwodW5hdmFpbGFiaWxpdHlEZXNj
cmlwdGlvbk91dCkpOwogICAgICAgICB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uID0gd2ViVW5h
dmFpbGFiaWxpdHlEZXNjcmlwdGlvbi0+c3RyaW5nKCk7CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDE2MDU3MSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDUsOSArMTQ1LDkgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHRvU3RyaW5nVmVj
dG9yKEFQSQogICAgIAogICAgIHBhdHRlcm5WZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
aXplKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBX
ZWJTdHJpbmcqIHdlYlN0cmluZyA9IGFycmF5LT5hdDxXZWJTdHJpbmc+KGkpOwotICAgICAgICBB
U1NFUlQod2ViU3RyaW5nKTsKLSAgICAgICAgcGF0dGVyblZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
d2ViU3RyaW5nLT5zdHJpbmcoKSk7CisgICAgICAgIEFQSTo6U3RyaW5nKiBzdHJpbmcgPSBhcnJh
eS0+YXQ8QVBJOjpTdHJpbmc+KGkpOworICAgICAgICBBU1NFUlQoc3RyaW5nKTsKKyAgICAgICAg
cGF0dGVyblZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RyaW5nLT5zdHJpbmcoKSk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiBwYXR0ZXJuVmVjdG9yOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQx
LDcgQEAgU3RyaW5nIFdlYlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KAogICAgIGlmICgh
bV9jbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
Ci0gICAgV2ViU3RyaW5nKiBzdHJpbmcgPSB0b0ltcGwobV9jbGllbnQucnVuSmF2YVNjcmlwdFBy
b21wdCh0b0FQSShwYWdlKSwgdG9BUEkobWVzc2FnZS5pbXBsKCkpLCB0b0FQSShkZWZhdWx0VmFs
dWUuaW1wbCgpKSwgdG9BUEkoZnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKTsKKyAg
ICBBUEk6OlN0cmluZyogc3RyaW5nID0gdG9JbXBsKG1fY2xpZW50LnJ1bkphdmFTY3JpcHRQcm9t
cHQodG9BUEkocGFnZSksIHRvQVBJKG1lc3NhZ2UuaW1wbCgpKSwgdG9BUEkoZGVmYXVsdFZhbHVl
LmltcGwoKSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAg
aWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTgzLDkgKzE4Myw5
IEBAIHZvaWQgV2ViVUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG8KICAgICAgICAgaWYg
KG1fY2xpZW50Lm1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRo
VjApCiAgICAgICAgICAgICBtX2NsaWVudC5taXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXBy
ZWNhdGVkRm9yVXNlV2l0aFYwKAogICAgICAgICAgICAgICAgIHRvQVBJKHBhZ2UpLAotICAgICAg
ICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5nPihwbHVnaW5J
bmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKLSAgICAgICAgICAgICAgICB0b0FQSShwbHVnaW5J
bmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5VUkxLZXko
KSkpLAotICAgICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3Ry
aW5nPihwbHVnaW5JbmZvcm1hdGlvblBsdWdpbnNwYWdlQXR0cmlidXRlVVJMS2V5KCkpKSwKKyAg
ICAgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6U3RyaW5nPihw
bHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwKKyAgICAgICAgICAgICAgICB0b0FQSShw
bHVnaW5JbmZvcm1hdGlvbi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvblBsdWdp
blVSTEtleSgpKSksCisgICAgICAgICAgICAgICAgdG9BUEkocGx1Z2luSW5mb3JtYXRpb24tPmdl
dDxBUEk6OlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTEtl
eSgpKSksCiAgICAgICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9
CiAKQEAgLTE5Myw5ICsxOTMsOSBAQCB2b2lkIFdlYlVJQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdp
bkJ1dHRvCiAgICAgICAgIG1fY2xpZW50LnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYxKAogICAgICAgICAgICAgdG9BUEkocGFnZSksCiAgICAgICAg
ICAgICBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwKLSAgICAgICAgICAgIHRvQVBJKHBsdWdp
bkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5
KCkpKSwKLSAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8V2ViU3RyaW5n
PihwbHVnaW5JbmZvcm1hdGlvblBsdWdpblVSTEtleSgpKSksCi0gICAgICAgICAgICB0b0FQSShw
bHVnaW5JbmZvcm1hdGlvbi0+Z2V0PFdlYlN0cmluZz4ocGx1Z2luSW5mb3JtYXRpb25QbHVnaW5z
cGFnZUF0dHJpYnV0ZVVSTEtleSgpKSksCisgICAgICAgICAgICB0b0FQSShwbHVnaW5JbmZvcm1h
dGlvbi0+Z2V0PEFQSTo6U3RyaW5nPihwbHVnaW5JbmZvcm1hdGlvbk1JTUVUeXBlS2V5KCkpKSwK
KyAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBs
dWdpbkluZm9ybWF0aW9uUGx1Z2luVVJMS2V5KCkpKSwKKyAgICAgICAgICAgIHRvQVBJKHBsdWdp
bkluZm9ybWF0aW9uLT5nZXQ8QVBJOjpTdHJpbmc+KHBsdWdpbkluZm9ybWF0aW9uUGx1Z2luc3Bh
Z2VBdHRyaWJ1dGVVUkxLZXkoKSkpLAogICAgICAgICAgICAgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKIAogICAgIGlmIChtX2NsaWVudC51bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDcmVkZW50aWFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDcmVkZW50aWFs
LmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQ3JlZGVudGlhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXS0NyZWRlbnRpYWwuaCIKIAorI2luY2x1ZGUgIkFQ
SVN0cmluZy5oIgogI2luY2x1ZGUgIldlYkNlcnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIldl
YkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBXS1R5cGVJRCBXS0RhdGFi
YXNlTWFuYWdlckdldFR5cGVJRCgpCiBXS1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldE9y
aWdpbktleSgpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBzdGF0aWMgV2ViU3Ry
aW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6b3Jp
Z2luS2V5KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6
U3RyaW5nOjpjcmVhdGUoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6Om9yaWdpbktleSgpKS5sZWFr
UmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAt
NTMsNyArNTMsNyBAQCBXS1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldE9yaWdpbktlCiBX
S1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldE9yaWdpblF1b3RhS2V5KCkKIHsKICNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmlu
Zzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpvcmlnaW5RdW90YUtleSgpKS5sZWFr
UmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpvcmlnaW5RdW90YUtleSgpKS5sZWFrUmVmKCk7CiAg
ICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtNjMsNyArNjMs
NyBAQCBXS1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldE9yaWdpblF1CiBXS1N0cmluZ1Jl
ZiBXS0RhdGFiYXNlTWFuYWdlckdldE9yaWdpblVzYWdlS2V5KCkKIHsKICNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotICAgIHN0YXRpYyBXZWJTdHJpbmcqIGtleSA9IFdlYlN0cmluZzo6Y3JlYXRl
KFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpvcmlnaW5Vc2FnZUtleSgpKS5sZWFrUmVmKCk7Cisg
ICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFi
YXNlTWFuYWdlclByb3h5OjpvcmlnaW5Vc2FnZUtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJu
IHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtNzMsNyArNzMsNyBAQCBXS1N0
cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldE9yaWdpblVzCiBXS1N0cmluZ1JlZiBXS0RhdGFi
YXNlTWFuYWdlckdldERhdGFiYXNlRGV0YWlsc0tleSgpCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6OmNyZWF0ZShXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzS2V5KCkpLmxlYWtSZWYoKTsKKyAg
ICBzdGF0aWMgQVBJOjpTdHJpbmcqIGtleSA9IEFQSTo6U3RyaW5nOjpjcmVhdGUoV2ViRGF0YWJh
c2VNYW5hZ2VyUHJveHk6OmRhdGFiYXNlRGV0YWlsc0tleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0
dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtODMsNyArODMsNyBAQCBX
S1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlCiBXS1N0cmluZ1JlZiBXS0Rh
dGFiYXNlTWFuYWdlckdldERhdGFiYXNlRGV0YWlsc05hbWVLZXkoKQogewogI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVh
dGUoV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmRhdGFiYXNlRGV0YWlsc05hbWVLZXkoKSkubGVh
a1JlZigpOworICAgIHN0YXRpYyBBUEk6OlN0cmluZyoga2V5ID0gQVBJOjpTdHJpbmc6OmNyZWF0
ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzTmFtZUtleSgpKS5sZWFr
UmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAt
OTMsNyArOTMsNyBAQCBXS1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlCiBX
S1N0cmluZ1JlZiBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlRGV0YWlsc0Rpc3BsYXlOYW1l
S2V5KCkKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHN0YXRpYyBXZWJTdHJpbmcq
IGtleSA9IFdlYlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkYXRhYmFz
ZURldGFpbHNEaXNwbGF5TmFtZUtleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3Ry
aW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Ojpk
YXRhYmFzZURldGFpbHNEaXNwbGF5TmFtZUtleSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRv
QVBJKGtleSk7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtMTAzLDcgKzEwMyw3IEBAIFdLU3Ry
aW5nUmVmIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2UKIFdLU3RyaW5nUmVmIFdLRGF0YWJh
c2VNYW5hZ2VyR2V0RGF0YWJhc2VEZXRhaWxzRXhwZWN0ZWRVc2FnZUtleSgpCiB7CiAjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBrZXkgPSBXZWJTdHJpbmc6
OmNyZWF0ZShXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGF0YWJhc2VEZXRhaWxzRXhwZWN0ZWRV
c2FnZUtleSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6
OlN0cmluZzo6Y3JlYXRlKFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkYXRhYmFzZURldGFpbHNF
eHBlY3RlZFVzYWdlS2V5KCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gdG9BUEkoa2V5KTsKICNl
bHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xMTMsNyArMTEzLDcgQEAgV0tTdHJpbmdSZWYgV0tEYXRh
YmFzZU1hbmFnZXJHZXREYXRhYmFzZQogV0tTdHJpbmdSZWYgV0tEYXRhYmFzZU1hbmFnZXJHZXRE
YXRhYmFzZURldGFpbHNDdXJyZW50VXNhZ2VLZXkoKQogewogI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCi0gICAgc3RhdGljIFdlYlN0cmluZyoga2V5ID0gV2ViU3RyaW5nOjpjcmVhdGUoV2ViRGF0
YWJhc2VNYW5hZ2VyUHJveHk6OmRhdGFiYXNlRGV0YWlsc0N1cnJlbnRVc2FnZUtleSgpKS5sZWFr
UmVmKCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBrZXkgPSBBUEk6OlN0cmluZzo6Y3JlYXRl
KFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkYXRhYmFzZURldGFpbHNDdXJyZW50VXNhZ2VLZXko
KSkubGVha1JlZigpOwogICAgIHJldHVybiB0b0FQSShrZXkpOwogI2Vsc2UKICAgICByZXR1cm4g
MDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZp
c2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDEzICszMTUsMTMgQEAgdm9pZCBXS1BhZ2VUZXJtaW5h
dGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAKIFdLU3RyaW5nUmVmIFdLUGFnZUdldFNlc3Npb25IaXN0
b3J5VVJMVmFsdWVUeXBlKCkKIHsKLSAgICBzdGF0aWMgV2ViU3RyaW5nKiBzZXNzaW9uSGlzdG9y
eVVSTFZhbHVlVHlwZSA9IFdlYlN0cmluZzo6Y3JlYXRlKCJTZXNzaW9uSGlzdG9yeVVSTCIpLmxl
YWtSZWYoKTsKKyAgICBzdGF0aWMgQVBJOjpTdHJpbmcqIHNlc3Npb25IaXN0b3J5VVJMVmFsdWVU
eXBlID0gQVBJOjpTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkhpc3RvcnlVUkwiKS5sZWFrUmVmKCk7
CiAgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlKTsKIH0KIAogV0tT
dHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkJhY2tGb3J3YXJkTGlzdEl0ZW1WYWx1ZVR5cGUoKQog
ewotICAgIHN0YXRpYyBXZWJTdHJpbmcqIHNlc3Npb25CYWNrRm9yd2FyZExpc3RWYWx1ZVR5cGUg
PSBXZWJTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkJhY2tGb3J3YXJkTGlzdEl0ZW0iKS5sZWFrUmVm
KCk7CisgICAgc3RhdGljIEFQSTo6U3RyaW5nKiBzZXNzaW9uQmFja0ZvcndhcmRMaXN0VmFsdWVU
eXBlID0gQVBJOjpTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkJhY2tGb3J3YXJkTGlzdEl0ZW0iKS5s
ZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25CYWNrRm9yd2FyZExpc3RWYWx1ZVR5
cGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29u
dGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCShyZXZpc2lvbiAxNjA1NzEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQVBJQXJyYXkuaCIK
ICNpbXBvcnQgIkFQSU51bWJlci5oIgorI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW1wb3J0ICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbXBv
cnQgIlBsdWdpbkluZm9ybWF0aW9uLmgiCkBAIC0zOCw3ICszOSw2IEBACiAjaW1wb3J0ICJXS1No
YXJlZEFQSUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKICNpbXBvcnQgIldlYkNvbnRl
eHQuaCIKLSNpbXBvcnQgIldlYlN0cmluZy5oIgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0
R3JvdXAubW0JKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSUFycmF5LmgiCisj
aW1wb3J0ICJBUElTdHJpbmcuaCIKICNpbXBvcnQgIldLQXJyYXkuaCIKICNpbXBvcnQgIldLUGFn
ZUdyb3VwLmgiCiAjaW1wb3J0ICJXS1ByZWZlcmVuY2VzLmgiCkBAIC0zOCw3ICszOSw2IEBACiAj
aW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1VSTC5oIgogI2ltcG9ydCAiV0tVUkxD
Ri5oIgotI2ltcG9ydCAiV2ViU3RyaW5nLmgiCiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJDcmVkZW50aWFsLmgJKHJldmlzaW9uIDE2MDU3
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJDcmVkZW50
aWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxMCBAQAogI2RlZmluZSBXZWJDcmVk
ZW50aWFsX2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5o
IgotCisjaW5jbHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFs
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgV2ViQ2VydGlmaWNhdGVJbmZvOwpAQCAtNDYsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ3JlZGVudGlhbChjcmVkZW50aWFsKSk7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNyZWRlbnRpYWw+IGNyZWF0ZShX
ZWJTdHJpbmcqIHVzZXJuYW1lLCBXZWJTdHJpbmcqIHBhc3N3b3JkLCBXZWJDb3JlOjpDcmVkZW50
aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ3Jl
ZGVudGlhbD4gY3JlYXRlKEFQSTo6U3RyaW5nKiB1c2VybmFtZSwgQVBJOjpTdHJpbmcqIHBhc3N3
b3JkLCBXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNyZWRlbnRpYWwoV2ViQ29yZTo6Q3JlZGVu
dGlhbCh1c2VybmFtZS0+c3RyaW5nKCksIHBhc3N3b3JkLT5zdHJpbmcoKSwgcGVyc2lzdGVuY2Up
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHku
Y3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw3ICs5NSw3IEBAIHZvaWQgV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5Ojpwb3B1bGEK
ICAgICBwZXJtaXNzaW9ucy5jbGVhcigpOwogICAgIFJlZlB0cjxBUEk6OkFycmF5PiBrbm93bk9y
aWdpbnMgPSBrbm93blBlcm1pc3Npb25zLT5rZXlzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrbm93bk9yaWdpbnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyogb3Jp
Z2luID0ga25vd25PcmlnaW5zLT5hdDxXZWJTdHJpbmc+KGkpOworICAgICAgICBBUEk6OlN0cmlu
Zyogb3JpZ2luID0ga25vd25PcmlnaW5zLT5hdDxBUEk6OlN0cmluZz4oaSk7CiAgICAgICAgIHBl
cm1pc3Npb25zLnNldChvcmlnaW4tPnN0cmluZygpLCBrbm93blBlcm1pc3Npb25zLT5nZXQ8QVBJ
OjpCb29sZWFuPihvcmlnaW4tPnN0cmluZygpKS0+dmFsdWUoKSk7CiAgICAgfQogfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJ
bkF1dG9TdGFydFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUsOSArMTM1LDkgQEAgdm9pZCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcjo6
c2V0QXV0b1N0YQogewogICAgIG1fYXV0b1N0YXJ0T3JpZ2lucy5jbGVhcigpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBsZW5ndGggPSBvcmlnaW5MaXN0LnNpemUoKTsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChvcmlnaW5MaXN0LmF0KGkpLT50eXBlKCkgIT0gV2ViU3RyaW5nOjpB
UElUeXBlKQorICAgICAgICBpZiAob3JpZ2luTGlzdC5hdChpKS0+dHlwZSgpICE9IEFQSTo6U3Ry
aW5nOjpBUElUeXBlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fYXV0b1N0YXJ0
T3JpZ2lucy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4ob3JpZ2luTGlzdC5hdChpKSkt
PnN0cmluZygpKTsKKyAgICAgICAgbV9hdXRvU3RhcnRPcmlnaW5zLmFwcGVuZChzdGF0aWNfY2Fz
dDxBUEk6OlN0cmluZyo+KG9yaWdpbkxpc3QuYXQoaSkpLT5zdHJpbmcoKSk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0
YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFdlYlBsdWdpblNpdGVE
YXRhTWFuYWdlcjo6Y2xlYXJTaXRlCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpdGVzLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKFdlYlN0cmlu
Zyogc2l0ZSA9IHNpdGVzLT5hdDxXZWJTdHJpbmc+KGkpKQorICAgICAgICAgICAgaWYgKEFQSTo6
U3RyaW5nKiBzaXRlID0gc2l0ZXMtPmF0PEFQSTo6U3RyaW5nPihpKSkKICAgICAgICAgICAgICAg
ICBzaXRlc1ZlY3Rvci5hcHBlbmQoc2l0ZS0+c3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODI3LDcgKzI4MjcsNyBAQAog
CQlCQ0YwNDlFNDExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVGcmFtZVByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVGcmFtZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDQ5RTUxMUZFMjBGNjAwRjg2QTU4IC8qIFdL
QnVuZGxlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRs
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDRDOEMxMUZGOUI3
RDAwRjg2QTU4IC8qIEFQSU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNGMDRDOEUxMUZG
OUY2RTAwRjg2QTU4IC8qIFdlYlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMDRDOEUx
MUZGOUY2RTAwRjg2QTU4IC8qIEFQSVN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUElTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMTg2
MzcxNjdEMDcxRTAwQTFBODVBIC8qIENhY2hlTW9kZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVNb2RlbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjRERTIyMTY4RTRCRDUwMEM5NEFGQyAvKiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NTdXBw
bGVtZW50Lmg7IHBhdGggPSBOZXR3b3JrL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y0REUyNDE2OEZBNDQ4MDBDOTRBRkMgLyogV2Vi
Q29udGV4dFN1cHBsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29udGV4dFN1cHBsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MDMs
NyArMzYwMyw3IEBACiAJCQkJNTEyMTc0NjMxNjRDMjEzNzAwMzdBNUMxIC8qIFdlYlJlc291cmNl
QnVmZmVyLmggKi8sCiAJCQkJRjYzNDQ0NTUxMkE4ODVDODAwMDYxMkQ4IC8qIFdlYlNlY3VyaXR5
T3JpZ2luLmggKi8sCiAJCQkJQTcyRDVEN0YxMjM2Q0JBODAwQTg4QjE1IC8qIFdlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oICovLAotCQkJCUJDRjA0QzhFMTFGRjlGNkUwMEY4NkE1OCAvKiBXZWJT
dHJpbmcuaCAqLywKKwkJCQlCQ0YwNEM4RTExRkY5RjZFMDBGODZBNTggLyogQVBJU3RyaW5nLmgg
Ki8sCiAJCQkJQzAzMzdERDcxMjdBNTFCNjAwOEZGNEY0IC8qIFdlYlRvdWNoRXZlbnQuY3BwICov
LAogCQkJCUJDREI4NkMwMTIwMEZCOTcwMDcyNTRCRSAvKiBXZWJVUkwuaCAqLywKIAkJCQlCQ0Uy
MzE1QzEyMkMzMENBMDBENUMzNUEgLyogV2ViVVJMUmVxdWVzdC5jcHAgKi8sCkBAIC02MzA5LDgg
KzYzMDksOCBAQAogCQkJCUJDOEYyRjJCMTYyNzNBMkMwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQ
bHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEYy
RjJFMTYyNzNBQ0MwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENv
bnRyb2xsZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjk1MDE3MjQxNjJBNDUwNDAw
NEE5RDcxIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlclByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAotIAkJCQkxRjc1MDZCNjE4NTkxNjU3MDBFQzBGRjcgLyogV0tX
ZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKLSAJCQkJ
MUY3NTA2QjUxODU5MTY1NDAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJblNjcmlwdFdvcmxk
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTFGNzUwNkI2MTg1OTE2NTcwMEVDMEZGNyAv
KiBXS1dlYlByb2Nlc3NQbHVnSW5Ob2RlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFGNzUwNkI1MTg1OTE2NTQwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5TY3JpcHRX
b3JsZEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNDRUFENjE4NTQxN0FFMDA4QzM2
M0QgLyogV0tOU0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjhBMUYwMTg0MDBCMDAwMEU5
QUU2OSAvKiBXS1BhZ2VGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk4OUQ4NTE2
MUE5ODkwMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNyArNDE0LDcgQEAgUGFzc1JlZlB0cjxBUEk6OkFycmF5
PiBJbmplY3RlZEJ1bmRsZTo6bwogICAgIG9yaWdpbklkZW50aWZpZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkob3JpZ2lucy5zaXplKCkpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4g
OiBvcmlnaW5zKQotICAgICAgICBvcmlnaW5JZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoV2Vi
U3RyaW5nOjpjcmVhdGUob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSkpOworICAgICAgICBv
cmlnaW5JZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShvcmln
aW4tPmRhdGFiYXNlSWRlbnRpZmllcigpKSk7CiAKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3Jl
YXRlKHN0ZDo6bW92ZShvcmlnaW5JZGVudGlmaWVycykpOwogfQpAQCAtNDg1LDcgKzQ4NSw3IEBA
IHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB0b1N0cmluZ1ZlY3RvcihBUEkKICAgICAgICAgcmV0dXJu
IHBhdHRlcm5zVmVjdG9yOwogCiAgICAgcGF0dGVybnNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogcGF0dGVybnMtPmVsZW1l
bnRzT2ZUeXBlPFdlYlN0cmluZz4oKSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogcGF0
dGVybnMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6U3RyaW5nPigpKQogICAgICAgICBwYXR0ZXJuc1Zl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoZW50cnktPnN0cmluZygpKTsKICAgICByZXR1cm4gcGF0dGVy
bnNWZWN0b3I7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudDo6Z2V0CiAKICAgICAgICAgQVNTRVJUKHR5cGVzQXJyYXktPnNpemUoKSA9
PSBkYXRhQXJyYXktPnNpemUoKSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0eXBlIDog
dHlwZXNBcnJheS0+ZWxlbWVudHNPZlR5cGU8V2ViU3RyaW5nPigpKQorICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHR5cGUgOiB0eXBlc0FycmF5LT5lbGVtZW50c09mVHlwZTxBUEk6OlN0cmluZz4o
KSkKICAgICAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZS0+c3RyaW5nKCkpOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGRhdGFBcnJheS0+ZWxlbWVudHNPZlR5
cGU8V2ViRGF0YT4oKSkgewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZUZvcm1DbGllbnQuY3BwCShyZXZpc2lvbiAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VG
b3JtQ2xpZW50Ojp3aWxsUwogCiAgICAgSW1tdXRhYmxlRGljdGlvbmFyeTo6TWFwVHlwZSBtYXA7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG1hcC5zZXQodmFsdWVzW2ldLmZpcnN0LCBXZWJTdHJpbmc6OmNyZWF0ZSh2YWx1ZXNbaV0uc2Vj
b25kKSk7CisgICAgICAgIG1hcC5zZXQodmFsdWVzW2ldLmZpcnN0LCBBUEk6OlN0cmluZzo6Y3Jl
YXRlKHZhbHVlc1tpXS5zZWNvbmQpKTsKICAgICBhdXRvIHRleHRGaWVsZHNNYXAgPSBJbW11dGFi
bGVEaWN0aW9uYXJ5OjpjcmVhdGUoc3RkOjptb3ZlKG1hcCkpOwogCiAgICAgbV9jbGllbnQud2ls
bFNlbmRTdWJtaXRFdmVudCh0b0FQSShwYWdlKSwgdG9BUEkobm9kZUhhbmRsZS5nZXQoKSksIHRv
QVBJKGZyYW1lKSwgdG9BUEkoc291cmNlRnJhbWUpLCB0b0FQSSh0ZXh0RmllbGRzTWFwLmdldCgp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OndpbGxTCiAKICAgICBJbW11dGFibGVEaWN0aW9u
YXJ5OjpNYXBUeXBlIG1hcDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbWFwLnNldCh2YWx1ZXNbaV0uZmlyc3QsIFdlYlN0cmluZzo6Y3Jl
YXRlKHZhbHVlc1tpXS5zZWNvbmQpKTsKKyAgICAgICAgbWFwLnNldCh2YWx1ZXNbaV0uZmlyc3Qs
IEFQSTo6U3RyaW5nOjpjcmVhdGUodmFsdWVzW2ldLnNlY29uZCkpOwogICAgIGF1dG8gdGV4dEZp
ZWxkc01hcCA9IEltbXV0YWJsZURpY3Rpb25hcnk6OmNyZWF0ZShzdGQ6Om1vdmUobWFwKSk7CiAK
ICAgICBXS1R5cGVSZWYgdXNlckRhdGFUb1Bhc3MgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAJKHJldmlzaW9uIDE2MDU3MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlVUlD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIFN0cmluZyBJbmplY3Rl
ZEJ1bmRsZVBhZ2VVSUNsaWVudDo6c2hvdWwKIHsKICAgICBpZiAoIW1fY2xpZW50LnNob3VsZEdl
bmVyYXRlRmlsZUZvclVwbG9hZCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJlZlB0
cjxXZWJTdHJpbmc+IGdlbmVyYXRlZEZpbGVQYXRoID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50
LnNob3VsZEdlbmVyYXRlRmlsZUZvclVwbG9hZCh0b0FQSShwYWdlKSwgdG9BUEkob3JpZ2luYWxG
aWxlUGF0aC5pbXBsKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CisgICAgUmVmUHRy
PEFQSTo6U3RyaW5nPiBnZW5lcmF0ZWRGaWxlUGF0aCA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVu
dC5zaG91bGRHZW5lcmF0ZUZpbGVGb3JVcGxvYWQodG9BUEkocGFnZSksIHRvQVBJKG9yaWdpbmFs
RmlsZVBhdGguaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOwogICAgIHJldHVy
biBnZW5lcmF0ZWRGaWxlUGF0aCA/IGdlbmVyYXRlZEZpbGVQYXRoLT5zdHJpbmcoKSA6IFN0cmlu
ZygpOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNs
aWVudDo6Z2VuZXIKIHsKICAgICBpZiAoIW1fY2xpZW50LnNob3VsZEdlbmVyYXRlRmlsZUZvclVw
bG9hZCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJlZlB0cjxXZWJTdHJpbmc+IGdl
bmVyYXRlZEZpbGVQYXRoID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmdlbmVyYXRlRmlsZUZv
clVwbG9hZCh0b0FQSShwYWdlKSwgdG9BUEkob3JpZ2luYWxGaWxlUGF0aC5pbXBsKCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pKSk7CisgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBnZW5lcmF0
ZWRGaWxlUGF0aCA9IGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5nZW5lcmF0ZUZpbGVGb3JVcGxv
YWQodG9BUEkocGFnZSksIHRvQVBJKG9yaWdpbmFsRmlsZVBhdGguaW1wbCgpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKSkpOwogICAgIHJldHVybiBnZW5lcmF0ZWRGaWxlUGF0aCA/IGdlbmVy
YXRlZEZpbGVQYXRoLT5zdHJpbmcoKSA6IFN0cmluZygpOwogfQogCkBAIC0xNDcsNyArMTQ3LDcg
QEAgU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50OjpwbHVnSQogICAgIGlmICghbV9j
bGllbnQuY3JlYXRlUGx1Z0luU3RhcnRMYWJlbFRpdGxlKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBSZWZQdHI8V2ViU3RyaW5nPiB0aXRsZSA9IGFkb3B0UmVmKHRvSW1wbChtX2Ns
aWVudC5jcmVhdGVQbHVnSW5TdGFydExhYmVsVGl0bGUodG9BUEkobWltZVR5cGUuaW1wbCgpKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOworICAgIFJlZlB0cjxBUEk6OlN0cmluZz4gdGl0
bGUgPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY3JlYXRlUGx1Z0luU3RhcnRMYWJlbFRpdGxl
KHRvQVBJKG1pbWVUeXBlLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKICAg
ICByZXR1cm4gdGl0bGUgPyB0aXRsZS0+c3RyaW5nKCkgOiBTdHJpbmcoKTsKIH0KIApAQCAtMTU2
LDcgKzE1Niw3IEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudDo6cGx1Z0kKICAg
ICBpZiAoIW1fY2xpZW50LmNyZWF0ZVBsdWdJblN0YXJ0TGFiZWxTdWJ0aXRsZSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPFdlYlN0cmluZz4gc3VidGl0bGUgPSBhZG9w
dFJlZih0b0ltcGwobV9jbGllbnQuY3JlYXRlUGx1Z0luU3RhcnRMYWJlbFN1YnRpdGxlKHRvQVBJ
KG1pbWVUeXBlLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKKyAgICBSZWZQ
dHI8QVBJOjpTdHJpbmc+IHN1YnRpdGxlID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0
ZVBsdWdJblN0YXJ0TGFiZWxTdWJ0aXRsZSh0b0FQSShtaW1lVHlwZS5pbXBsKCkpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pKSk7CiAgICAgcmV0dXJuIHN1YnRpdGxlID8gc3VidGl0bGUtPnN0
cmluZygpIDogU3RyaW5nKCk7CiB9CiAKQEAgLTE2NSw3ICsxNjUsNyBAQCBTdHJpbmcgSW5qZWN0
ZWRCdW5kbGVQYWdlVUlDbGllbnQ6OnBsdWdJCiAgICAgaWYgKCFtX2NsaWVudC5jcmVhdGVQbHVn
SW5FeHRyYVN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJlZlB0
cjxXZWJTdHJpbmc+IHN0eWxlU2hlZXQgPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQuY3JlYXRl
UGx1Z0luRXh0cmFTdHlsZVNoZWV0KG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKKyAgICBS
ZWZQdHI8QVBJOjpTdHJpbmc+IHN0eWxlU2hlZXQgPSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQu
Y3JlYXRlUGx1Z0luRXh0cmFTdHlsZVNoZWV0KG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsK
ICAgICByZXR1cm4gc3R5bGVTaGVldCA/IHN0eWxlU2hlZXQtPnN0cmluZygpIDogU3RyaW5nKCk7
CiB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGll
bnQ6OnBsdWdJCiAgICAgaWYgKCFtX2NsaWVudC5jcmVhdGVQbHVnSW5FeHRyYVNjcmlwdCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPFdlYlN0cmluZz4gc2NyaXB0ID0g
YWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0ZVBsdWdJbkV4dHJhU2NyaXB0KG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbykpKTsKKyAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHNjcmlwdCA9IGFk
b3B0UmVmKHRvSW1wbChtX2NsaWVudC5jcmVhdGVQbHVnSW5FeHRyYVNjcmlwdChtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pKSk7CiAgICAgcmV0dXJuIHNjcmlwdCA/IHNjcmlwdC0+c3RyaW5nKCkg
OiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2
aXNpb24gMTYwNTcxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiV0tCdW5kbGVQYWdlUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXku
aCIKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZUJhY2tG
b3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VCYW5uZXIuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJXZWJQYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNs
dWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tCShyZXZpc2lv
biAxNjA1NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAs
NyBAQCAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBCiAgICAgc2l6ZV90
IGNvdW50ID0gV0tBcnJheUdldFNpemUocmVzdWx0LmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBr
ID0gMDsgayA8IGNvdW50OyBrKyspIHsKICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5
R2V0SXRlbUF0SW5kZXgocmVzdWx0LmdldCgpLCBrKTsKLSAgICAgICAgaWYgKHRvSW1wbChpdGVt
KS0+dHlwZSgpID09IFdlYlN0cmluZzo6QVBJVHlwZSkgeworICAgICAgICBpZiAodG9JbXBsKGl0
ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpIHsKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKWl0ZW0pKTsKICAgICAgICAgICAgIFtuYW1l
cyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZS5nZXQoKV07CiAgICAgICAgIH0KQEAgLTIwNyw3
ICsyMDcsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKHRvSW1wbChy
ZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gV2ViU3RyaW5nOjpBUElUeXBlKQorICAgIGlmICh0b0lt
cGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQogICAgICAg
ICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKXJlc3VsdC5nZXQoKSkpOwogICAgIGVsc2UgaWYgKHRv
SW1wbChyZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQogICAg
ICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOldLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0LmdldCgpKSldOwo=
</data>
<flag name="review"
          id="242852"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>