<?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>16712</bug_id>
          
          <creation_ts>2008-01-02 14:20:01 -0800</creation_ts>
          <short_desc>change StringImpl to take and return PassRefPtr instead of raw pointers</short_desc>
          <delta_ts>2008-01-02 17:27:03 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66063</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 14:20:01 -0800</bug_when>
    <thetext>As I mentioned in my mail about strings, the next step in reforming string classes is to make StringImpl be consistent about use of PassRefPtr instead of raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66067</commentid>
    <comment_count>1</comment_count>
      <attachid>18241</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 15:02:53 -0800</bug_when>
    <thetext>Created attachment 18241
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66073</commentid>
    <comment_count>2</comment_count>
      <attachid>18242</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 15:41:11 -0800</bug_when>
    <thetext>Created attachment 18242
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66078</commentid>
    <comment_count>3</comment_count>
      <attachid>18242</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-01-02 16:21:12 -0800</bug_when>
    <thetext>Comment on attachment 18242
patch

r=me with some minor changes discussed on IRC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66086</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 17:27:03 -0800</bug_when>
    <thetext>r29098</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18241</attachid>
            <date>2008-01-02 15:02:53 -0800</date>
            <delta_ts>2008-01-02 15:41:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>StringImplPatch.txt</filename>
            <type>text/plain</type>
            <size>76511</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTA5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYyIEBACisyMDA4LTAxLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzEyCisgICAgICAgICAgY2hh
bmdlIFN0cmluZ0ltcGwgdG8gdGFrZSBhbmQgcmV0dXJuIFBhc3NSZWZQdHIgaW5zdGVhZCBvZiBy
YXcgcG9pbnRlcnMKKworICAgICAgICBBbHNvIGVsaW1pbmF0ZWQgdXNlIG9mIGNvbnN0IFN0cmlu
Z0ltcGwuIFNpbmNlIFN0cmluZ0ltcGwgaXMgaW1tdXRhYmxlIHRoZXJlCisgICAgICAgIGlzIG5v
IGRpc3RpbmN0aW9uIGJldHdlZW4gYSBjb25zdCBhbmQgbm9uLWNvbnN0IG9uZSBhdCB0aGUgbW9t
ZW50LgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAq
IGNzcy9DU1NIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVUkwpOiBNYWtlIFN0
cmluZyBkaXJlY3RseSwgbm90IGJ5IG1ha2luZyBhIFN0cmluZ0ltcGwuCisgICAgICAgICogZG9t
L0F0dHIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXR0cjo6Y3JlYXRlVGV4dENoaWxkKTogQ29u
dmVydCBBdG9taWNTdHJpbmcgdG8gU3RyaW5nIHdpdGggZG9tU3RyaW5nLAorICAgICAgICBub3Qg
dmlhIFN0cmluZ0ltcGwuCisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpzZXRWYWx1ZSk6IFJlbW92
ZSB1bm5lZWQgY2FsbCB0byBpbXBsKCkgd2hlbiBwYXNzaW5nIGEgU3RyaW5nCisgICAgICAgIHRv
IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIFN0cmluZy4KKworICAgICAgICAqIGRvbS9DREFUQVNl
Y3Rpb24uY3BwOiBSZW1vdmVkIHVudXNlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6
OkNEQVRBU2VjdGlvbjo6Y2xvbmVOb2RlKTogQWRkZWQgYSBub3ctbmVlZGVkIC5nZXQoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KTogQ2hhbmdlZCBmdW5jdGlv
biB0byB0YWtlIGEgUGFzc1JlZlB0ci4KKyAgICAgICAgKiBkb20vQ0RBVEFTZWN0aW9uLmg6CisK
KyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKTogUmVtb3ZlZCB1bm5lZWRlZCBpbml0aWFsaXphdGlv
biBhbmQKKyAgICAgICAgcmVmKCkgbm93IHRoYXQgdGhlIHN0cmluZyBpcyBhIFJlZlB0ci4gQWxz
byB1cGRhdGVkIHRvIG5vdCBjYWxsICJuZXcgU3RyaW5nSW1wbCIuCisgICAgICAgIChXZWJDb3Jl
OjpDaGFyYWN0ZXJEYXRhOjp+Q2hhcmFjdGVyRGF0YSk6IFJlbW92ZWQgdW5uZWVkZWQgZGVyZWYo
KSBzaW5jZSBpdCdzCisgICAgICAgIGEgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFj
dGVyRGF0YTo6c2V0RGF0YSk6IE1vcmUgb2YgdGhhdC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGE6OnN1YnN0cmluZ0RhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGE6OmFwcGVuZERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rl
ckRhdGE6Omluc2VydERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRh
dGE6OmRlbGV0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6
OnJlcGxhY2VEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpu
b2RlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3Bh
dGNoTW9kaWZpZWRFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YTo6ZHVtcCk6IERpdHRvLgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6IENoYW5nZWQg
dG8gdXNlIGEgUmVmUHRyLiBJIGNvdWxkIGhhdmUgdXNlZCBhIFN0cmluZworICAgICAgICBpbnN0
ZWFkLCBidXQgc2luY2UgU3RyaW5nIGFkZHMgZXh0cmEgYnJhbmNoZXMgdG8gaGFuZGxlIDAsIEkg
ZmlndXJlZCBpdCB3YXMKKyAgICAgICAgbW9yZSBjb25zZXJ2YXRpdmUgdG8ganVzdCB1c2UgUmVm
UHRyLiBMYXRlciBpdCB3b3VsZCBiZSBnb29kIHRvIGZpZ3VyZSBvdXQKKyAgICAgICAgd2hpY2gg
aXMgcHJlZmVycmVkIHN0eWxlIGFuZCBiZSBtb3JlIGNvbnNpc3RlbnQuIE1heWJlIHdlJ2xsIHBo
YXNlIG91dAorICAgICAgICBTdHJpbmdJbXBsLCBvciBtYXliZSB3ZSdsbCBnbyB0aGUgb3RoZXIg
d2F5IGFuZCB1c2UgaXQgbW9yZSBzaW5jZSBpdCBjYW4gYmUKKyAgICAgICAgbW9yZSBlZmZpY2ll
bnQuCisKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YWRkU3RyaW5nKTogQ2hhbmdlZCBzZXQgdG8gdXNlIFN0cmluZyByYXRoZXIgdGhhbiBT
dHJpbmdJbXBsLgorICAgICAgICAoV2ViQ29yZTo6aXNTVkcxMEZlYXR1cmUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzU1ZHMTFGZWF0dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSZXBsYWNlZCBjdXN0b20gY29k
ZSB0bworICAgICAgICBmaW5kIGEgY29sb24gd2l0aCBhIGNhbGwgdG8gU3RyaW5nOjpmaW5kLgor
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjppbnNl
cnROb2RlKTogVXBkYXRlZCBzaW5jZSB0aGUgcmVzdWx0IG9mIHNwbGl0VGV4dCBpcyBub3cKKyAg
ICAgICAgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dDo6c3BsaXRUZXh0KTogVXBkYXRlZCBzaW5jZSBzdHIgaXMgbm93IGEgUmVm
UHRyLiBBbHNvIG1hZGUgdGhlCisgICAgICAgIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGJlIGEg
UGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OmNyZWF0ZVJlbmRlcmVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVOZXcpOiBNYWRlIHRoZSBwYXJhbWV0
ZXIgYW5kIHJlc3VsdCBib3RoIGJlIFBhc3NSZWZQdHIuCisgICAgICAgICogZG9tL1RleHQuaDoK
KworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6Om5vZGVOYW1lKTogVXNlIFN0cmluZzo6dXBwZXIuCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVtR3JhcGhlbWVDbHVz
dGVycyk6IFJlbW92ZSBub3ctdW5uZWVkZWQgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpudW1D
aGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hU
TUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKTogVXBkYXRlZCBmb3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2UuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU3RyaW5n
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKTogVXBkYXRlZCBzaW5jZSB0aGVyZSBpcyBubyBsb25nZXIK
KyAgICAgICAgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgc3RyaW5nLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOiBBZGRlZCBuZXcgY29uc3RydWN0b3JzIHRo
YXQgdGFrZQorICAgICAgICBQYXNzUmVmUHRyIGFuZCBSZWZQdHIuIFJlbW92ZWQgbWlzbGVhZGlu
ZyBjb21tZW50LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOiBDaGFuZ2VkIHRvIHVzZSBTdHJpbmdJbXBsOjpj
cmVhdGUsIHdoaWNoIGhhbmRsZXMKKyAgICAgICAgdGhlIGVtcHR5IHN0cmluZyBhdXRvbWF0aWNh
bGx5LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjphcHBlbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZzo6Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24pOiBTaW1pbGFy
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpmb3JtYXQpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvU3RyaW5nSGFzaC5oOiBUb29rIG91dCB1bm5lZWRlZCBjb25zdC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVVQ2hhclZlY3Rvcik6IENoYW5nZWQgdG8gdGFrZSBhIGNvbnN0IHBvaW50ZXIgc2lu
Y2UgdGhlCisgICAgICAgIGJ1ZmZlcnMgYXJlIG5vdyBjb25zdCBVQ2hhciBidWZmZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3RyaW5nSW1wbCk6IFJlbW92ZWQgc29tZSBjb25z
dHJ1Y3RvcnMuIEdvdCByaWQgb2YgdGhlCisgICAgICAgIHNlcGFyYXRlIGluaXQgZnVuY3Rpb25z
LiBUaGUgY29uc3RydWN0b3JzIGFyZSBub3cgcHJpdmF0ZSBhbmQgdXNlZCBvbmx5IGluCisgICAg
ICAgIHRoZSBjcmVhdGUgZnVuY3Rpb25zIGFuZCBvbmUgb3IgdHdvIG90aGVyIHBsYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOiBSZW1v
dmVkIG5vdy1tZWFuaW5nbGVzcyBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6
OnN1YnN0cmluZyk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHZhbHVlIHRvIGJlIGEKKyAg
ICAgICAgUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNoYXJhY3Rl
clN0YXJ0aW5nQXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvTGVu
Z3RoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0Nvb3Jkc0FycmF5
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0xlbmd0aEFycmF5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppc0xvd2VyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpsb3dlcik6IERpdHRvLiBDaGFuZ2VkIHRvIHVz
ZSBWZWN0b3IgYW5kIGFkb3B0IHNvIHdlCisgICAgICAgIGRvbid0IGhhdmUgdG8gdXNlIG5ldyBk
aXJlY3RseSBoZXJlLiBNYWtlcyBlbXB0eSBzdHJpbmcgaGFuZGxpbmcgbW9yZSBjb25zaXN0ZW50
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6dXBwZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNlY3VyZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6Zm9sZENhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OnN0cmlwV2hpdGVTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6c2ltcGxpZnlXaGl0ZVNwYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJ
bXBsOjpjYXBpdGFsaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0
b0ludCk6IFJlbW92ZWQgbm93LW1lYW5pbmdsZXNzIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6dG9JbnQ2NCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6dG9VSW50NjQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvRG91
YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0Zsb2F0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmaW5kKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6ZW5kc1dpdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnJlcGxhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nQ2FzZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6YXNjaWkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6YWRvcHQpOiBBZGRlZCBzcGVjaWFsIGNh
c2Ugc28gdGhpcyB1c2VzIHRoZSBzaGFyZWQKKyAgICAgICAgZW1wdHkgc3RyaW5nIGxpa2Ugb3Ro
ZXIgZnVuY3Rpb25zLiBBbHNvIG9wdGltaXplZCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCisg
ICAgICAgIHZlY3RvciBoYXBwZW5zIHRvIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgc2l6ZSBzbyB3
ZSBkb24ndCBkbyBhIGZhc3RSZWFsbG9jCisgICAgICAgIGF0IGFsbCBpbiB0aG9zZSBjYXNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6IEFkZGVkLiBUaGVzZSBhcmUg
bm93IHRoZSBwdWJsaWMgZnVuY3Rpb25zIGZvcgorICAgICAgICBjcmVhdGluZyBuZXcgU3RyaW5n
SW1wbCBvYmplY3RzLiBUaGV5IGFsbCBpbXBsZW1lbnQgdGhlIHNoYXJlZCBlbXB0eSBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxs
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoKKworICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nOjpTdHJpbmcpOiBVc2UgU3RyaW5nSW1wbDo6Y3JlYXRlIGluc3RlYWQgb2YgbmV3IFN0
cmluZ0ltcGwuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOiBSZW1vdmVkIG5v
dy1vYnNvbGV0ZSBjb25zdC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBs
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6b3BlcmF0b3IgTlNTdHJpbmcg
Kik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1N0cmluZ01hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZzo6U3RyaW5nKTogVXNlIFN0cmluZ0ltcGw6OmNyZWF0ZSBp
bnN0ZWFkIG9mIG5ldyBTdHJpbmdJbXBsLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvcXQvU3Ry
aW5nUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L3d4L1N0cmluZ1d4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6U3RyaW5nKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJSLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJSOjpSZW5kZXJCUik6IERpdHRvLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dCk6IFVzZSBQYXNzUmVm
UHRyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJzQXJlQWxsQVNDSUkpOiBSZW1vdmVkIG5vdy11bm5lZWRlZCBjb25zdC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRGcmFnbWVudDo6b3JpZ2luYWxUZXh0KTogVXNlIFJlZlB0ci4KKwogMjAwOC0wMS0wMiAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4ZWQgYSB0
eXBvIChwb2ludGVkIG91dCBpbiByZXZpZXcsIGJ1dCBJIHNvbWVob3cgbWlzc2VkIGl0IGF0IGZp
cnN0KS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDkgQEAgX19aTjdXZWJDb3Jl
MTBFdmVudE5hbWVzMTBjbGlja0V2ZW50RQogX19aTjdXZWJDb3JlMTBFdmVudE5hbWVzMTJrZXlk
b3duRXZlbnRFCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnRDMUVSS05TXzEyQXRvbWljU3RyaW5n
RWJiUE5TXzlET01XaW5kb3dFaWlpaWliYmJidFBOU18xNUV2ZW50VGFyZ2V0Tm9kZUVQTlNfOUNs
aXBib2FyZEViCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGwxMWNvbXB1dGVIYXNoRVBLdGoKK19f
Wk43V2ViQ29yZTEwU3RyaW5nSW1wbDdyZXBsYWNlRXR0CiBfX1pON1dlYkNvcmUxMFN0cmluZ0lt
cGxEMUV2CitfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjdXZWJD
b3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJh
eQogX19aTjdXZWJDb3JlMTFFZGl0Q29tbWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRp
dENvbW1hbmQ3dW5hcHBseUV2CkBAIC00MTAsOCArNDEyLDggQEAgX19aTjdXZWJDb3JlNUltYWdl
MjFnZXRUSUZGUmVwcmVzZW50YXRpbwogX19aTjdXZWJDb3JlNVJhbmdlQzFFUE5TXzhEb2N1bWVu
dEVQTlNfNE5vZGVFaVM0X2kKIF9fWk43V2ViQ29yZTVSYW5nZUQxRXYKIF9fWk43V2ViQ29yZTVj
YWNoZUV2Ci1fX1pON1dlYkNvcmU1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUEtjCi1fX1pON1dl
YkNvcmU1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUzJfCitfX1pON1dlYkNvcmU1ZXF1YWxFUE5T
XzEwU3RyaW5nSW1wbEVQS2MKK19fWk43V2ViQ29yZTVlcXVhbEVQTlNfMTBTdHJpbmdJbXBsRVMx
XwogX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0
aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktO
U182U3RyaW5nRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTNjYW5ESFRNTFBhc3Rl
RXYKQEAgLTU0MSw4ICs1NDMsNiBAQCBfX1pON1dlYkNvcmU5VGltZXJCYXNlRDJFdgogX19aTjdX
ZWJDb3JlOXBhZ2VDYWNoZUV2CiBfX1pON1dlYkNvcmVlcUVSS05TXzE5UmVzb3VyY2VSZXF1ZXN0
QmFzZUVTMl8KIF9fWk43V2ViQ29yZWVxRVJLTlNfNEtVUkxFUzJfCi1fX1pOSzdXZWJDb3JlMTBT
dHJpbmdJbXBsN3JlcGxhY2VFdHQKLV9fWk5LN1dlYkNvcmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJp
bmdFdgogX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2ViQ29yZTEx
Q29udGV4dE1lbnUxOXBsYXRmb3JtRGVzY3JpcHRpb25FdgogX19aTks3V2ViQ29yZTExRnJhbWVM
b2FkZXIxMGlzQ29tcGxldGVFdgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSGVscGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NIZWxwZXIuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysr
IFdlYkNvcmUvY3NzL0NTU0hlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcg
QEAgU3RyaW5nIHBhcnNlVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICAgICAgYnVmZmVy
W25sKytdID0gYzsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRh
dGEoKSwgbmwpOworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbmwpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3Jl
L2RvbS9BdHRyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEF0dHI6
OmNyZWF0ZVRleHRDaGlsZCgpCiB7CiAgICAgQVNTRVJUKHJlZkNvdW50KCkpOwogICAgIGlmICgh
bV9hdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0
ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgp
LmltcGwoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNy
ZWF0ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgpLmRvbVN0cmluZygpKTsKIAogICAgICAg
ICAvLyBUaGlzIGRvZXMgZXZlcnl0aGluZyBhcHBlbmRDaGlsZCgpIHdvdWxkIGRvIGluIHRoaXMg
c2l0dWF0aW9uIChhc3N1bWluZyBtX2lnbm9yZUNoaWxkcmVuQ2hhbmdlZCB3YXMgc2V0KSwKICAg
ICAgICAgLy8gYnV0IG11Y2ggbW9yZSBlZmZpY2llbnRseS4KQEAgLTExNiw3ICsxMTYsNyBAQCB2
b2lkIEF0dHI6OnNldFZhbHVlKCBjb25zdCBTdHJpbmcmIHYsIEV4CiAgICAgaW50IGUgPSAwOwog
ICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkKys7CiAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAg
ICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2LmltcGwoKSksIGUpOwor
ICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHYpLCBlKTsKICAgICBt
X2lnbm9yZUNoaWxkcmVuQ2hhbmdlZC0tOwogICAgIAogICAgIG1fYXR0cmlidXRlLT5zZXRWYWx1
ZSh2LmltcGwoKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5jcHAJKHJldmlzaW9uIDI5MDg4KQorKysg
V2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDYgQEAgQ0RBVEFTZWN0aW9uOjpDREFUQVNlY3Rpb24oRG9jdW1lbnQgKmltcAogewogfQogCi1D
REFUQVNlY3Rpb246OkNEQVRBU2VjdGlvbihEb2N1bWVudCAqaW1wbCkgOiBUZXh0KGltcGwpCi17
Ci19Ci0KIENEQVRBU2VjdGlvbjo6fkNEQVRBU2VjdGlvbigpCiB7CiB9CkBAIC02Miw5ICs1OCw5
IEBAIGJvb2wgQ0RBVEFTZWN0aW9uOjpjaGlsZFR5cGVBbGxvd2VkKE5vZGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVRleHQgKkNEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KFN0cmluZ0ltcGwgKl9z
dHIpCitQYXNzUmVmUHRyPFRleHQ+IENEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyaW5nKQogewotICAgIHJldHVybiBuZXcgQ0RBVEFTZWN0aW9uKGRvY3Vt
ZW50KCksIF9zdHIpOworICAgIHJldHVybiBuZXcgQ0RBVEFTZWN0aW9uKGRvY3VtZW50KCksIHN0
cmluZyk7CiB9CiAKIFN0cmluZyBDREFUQVNlY3Rpb246OnRvU3RyaW5nKCkgY29uc3QKSW5kZXg6
IFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NE
QVRBU2VjdGlvbi5oCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENEQVRBU2VjdGlvbiA6IHB1YmxpYyBUZXh0Ci17Ci0vLyAjIyMgc2hvdWxk
IHRoZXNlIGhhdmUgaWQ9PUlEX1RFWFQKK2NsYXNzIENEQVRBU2VjdGlvbiA6IHB1YmxpYyBUZXh0
IHsKIHB1YmxpYzoKLSAgICBDREFUQVNlY3Rpb24oRG9jdW1lbnQgKmltcGwsIGNvbnN0IFN0cmlu
ZyAmX3RleHQpOwotICAgIENEQVRBU2VjdGlvbihEb2N1bWVudCAqaW1wbCk7CisgICAgQ0RBVEFT
ZWN0aW9uKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB+Q0RBVEFTZWN0
aW9uKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwpAQCAtNDQsNyAr
NDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVGV4dCogY3JlYXRlTmV3KFN0cmluZ0ltcGwqKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4pOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgpAQCAtMzYsMTkgKzM3LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwog
Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1bWVudCAqZG9jKQogICAgIDogRXZlbnRU
YXJnZXROb2RlKGRvYykKIHsKLSAgICBzdHIgPSAwOwogfQogCiBDaGFyYWN0ZXJEYXRhOjpDaGFy
YWN0ZXJEYXRhKERvY3VtZW50ICpkb2MsIGNvbnN0IFN0cmluZyAmX3RleHQpCiAgICAgOiBFdmVu
dFRhcmdldE5vZGUoZG9jKQogewotICAgIHN0ciA9IF90ZXh0LmltcGwoKSA/IF90ZXh0LmltcGwo
KSA6IG5ldyBTdHJpbmdJbXBsKHN0YXRpY19jYXN0PFVDaGFyKj4oMCksIDApOwotICAgIHN0ci0+
cmVmKCk7CisgICAgc3RyID0gX3RleHQuaW1wbCgpID8gX3RleHQuaW1wbCgpIDogU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKIH0KIAogQ2hhcmFjdGVyRGF0YTo6fkNoYXJhY3RlckRhdGEoKQogewotICAg
IGlmKHN0cikgc3RyLT5kZXJlZigpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTU5LDEzICs1NywxMSBA
QCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZXF1YWwoc3RyLCBkYXRhLmltcGwoKSkpCisgICAgaWYgKGVx
dWFsKHN0ci5nZXQoKSwgZGF0YS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmdJbXBsKiBvbGRTdHIgPSBzdHI7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IHN0
cjsKICAgICBzdHIgPSBkYXRhLmltcGwoKTsKLSAgICBpZiAoc3RyKQotICAgICAgICBzdHItPnJl
ZigpOwogICAgIAogICAgIGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVu
ZGVyZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVkKCkpIHsKICAgICAgICAgZGV0YWNoKCk7CkBA
IC03Myw5ICs2OSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcK
ICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPihyZW5kZXJlcigpKS0+c2V0VGV4dChzdHIpOwogICAgIAotICAgIGRpc3BhdGNoTW9kaWZp
ZWRFdmVudChvbGRTdHIpOwotICAgIGlmIChvbGRTdHIpCi0gICAgICAgIG9sZFN0ci0+ZGVyZWYo
KTsKKyAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKICAgICAKICAgICBk
b2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHRoaXMpOwogfQpAQCAtODcsNyArODEsNyBAQCBTdHJp
bmcgQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSggY29uCiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gc3RyLT5zdWJzdHJpbmcob2Zmc2V0LGNv
dW50KTsKKyAgICByZXR1cm4gc3RyLT5zdWJzdHJpbmcob2Zmc2V0LCBjb3VudCk7CiB9CiAKIHZv
aWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSggY29uc3QgU3RyaW5nICZhcmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTAzLDkgKzk3LDggQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmRE
YXRhKCBjb25zdCBTdAogICAgIFN0cmluZyBuZXdTdHIgPSBzdHI7CiAgICAgbmV3U3RyLmFwcGVu
ZChhcmcpOwogCi0gICAgU3RyaW5nSW1wbCogb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBvbGRTdHIgPSBzdHI7CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHIt
PnJlZigpOwogCiAgICAgaWYgKCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5k
ZXJlcigpLT5zdHlsZSgpKSkgJiYgYXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAg
LTExMyw4ICsxMDYsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoIGNvbnN0IFN0
CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2xkU3RyLT5sZW5ndGgo
KSwgMCk7CiAgICAgCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0cik7Ci0gICAgb2xk
U3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwog
fQogCiB2b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEoIGNvbnN0IHVuc2lnbmVkIG9mZnNl
dCwgY29uc3QgU3RyaW5nICZhcmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTI3LDkgKzExOSw4
IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSggY29uc3QgdW4KICAgICBTdHJpbmcg
bmV3U3RyID0gc3RyOwogICAgIG5ld1N0ci5pbnNlcnQoYXJnLCBvZmZzZXQpOwogCi0gICAgU3Ry
aW5nSW1wbCogb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBz
dHI7CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogCiAgICAgaWYg
KCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkg
JiYgYXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAgLTEzNyw4ICsxMjgsNyBAQCB2
b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEoIGNvbnN0IHVuCiAgICAgfSBlbHNlIGlmIChy
ZW5kZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSkt
PnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCAwKTsKICAgICAKLSAgICBkaXNwYXRjaE1v
ZGlmaWVkRXZlbnQob2xkU3RyKTsKLSAgICBvbGRTdHItPmRlcmVmKCk7CisgICAgZGlzcGF0Y2hN
b2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7CiAgICAgCiAgICAgLy8gdXBkYXRlIHRoZSBtYXJr
ZXJzIGZvciBzcGVsbCBjaGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFyZy5sZW5ndGgoKTsKQEAgLTE1NSw5ICsxNDUsOCBAQCB2b2lkIENoYXJhY3Rl
ckRhdGE6OmRlbGV0ZURhdGEoIGNvbnN0IHVuCiAgICAgU3RyaW5nIG5ld1N0ciA9IHN0cjsKICAg
ICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwogCi0gICAgU3RyaW5nSW1wbCogb2xkU3Ry
ID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBzdHI7CiAgICAgc3RyID0g
bmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogICAgIAogICAgIGlmICgoIXJlbmRlcmVy
KCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVuZGVyZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVk
KCkpIHsKICAgICAgICAgZGV0YWNoKCk7CkBAIC0xNjUsOCArMTU0LDcgQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpkZWxldGVEYXRhKCBjb25zdCB1bgogICAgIH0gZWxzZSBpZiAocmVuZGVyZXIoKSkK
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0
aE9mZnNldChzdHIsIG9mZnNldCwgY291bnQpOwogCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50
KG9sZFN0cik7Ci0gICAgb2xkU3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVu
dChvbGRTdHIuZ2V0KCkpOwogCiAgICAgLy8gdXBkYXRlIHRoZSBtYXJrZXJzIGZvciBzcGVsbCBj
aGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwogICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtl
cnModGhpcywgb2Zmc2V0LCBjb3VudCk7CkBAIC0xOTAsOSArMTc4LDggQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpyZXBsYWNlRGF0YSggY29uc3QgdQogICAgIG5ld1N0ci5yZW1vdmUob2Zmc2V0LCBy
ZWFsQ291bnQpOwogICAgIG5ld1N0ci5pbnNlcnQoYXJnLCBvZmZzZXQpOwogCi0gICAgU3RyaW5n
SW1wbCAqb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBzdHI7
CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogCiAgICAgaWYgKCgh
cmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkgJiYg
YXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAgLTIwMCw4ICsxODcsNyBAQCB2b2lk
IENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKCBjb25zdCB1CiAgICAgfSBlbHNlIGlmIChyZW5k
ZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNl
dFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgCi0gICAgZGlzcGF0Y2hN
b2RpZmllZEV2ZW50KG9sZFN0cik7Ci0gICAgb2xkU3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNo
TW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwogICAgIAogICAgIC8vIHVwZGF0ZSB0aGUgbWFy
a2VycyBmb3Igc3BlbGwgY2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKICAgICBpbnQgZGlm
ZiA9IGFyZy5sZW5ndGgoKSAtIGNvdW50OwpAQCAtMjM5LDEyICsyMjUsOCBAQCB2b2lkIENoYXJh
Y3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVuCiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAg
ICAgICAgcGFyZW50Tm9kZSgpLT5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICBpZiAoZG9jdW1lbnQo
KS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElT
VEVORVIpKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwgKm5ld1ZhbHVlID0gc3RyLT5jb3B5KCk7Ci0g
ICAgICAgIG5ld1ZhbHVlLT5yZWYoKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9NQ2hhcmFjdGVyRGF0YU1v
ZGlmaWVkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxmYWxzZSwwLHByZXZWYWx1
ZSxuZXdWYWx1ZSxTdHJpbmcoKSwwKSxlYyk7Ci0gICAgICAgIG5ld1ZhbHVlLT5kZXJlZigpOwor
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBkaXNwYXRjaEV2ZW50KG5ldyBNdXRh
dGlvbkV2ZW50KERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgMCwg
cHJldlZhbHVlLCBzdHIsIFN0cmluZygpLCAwKSwgZWMpOwogICAgIH0KICAgICBkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9CkBAIC0yODcsNyArMjY5LDcgQEAgYm9vbCBDaGFyYWN0
ZXJEYXRhOjpvZmZzZXRJbkNoYXJhY3RlcnMoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgQ2hhcmFj
dGVyRGF0YTo6ZHVtcChUZXh0U3RyZWFtICpzdHJlYW0sIERlcHJlY2F0ZWRTdHJpbmcgaW5kKSBj
b25zdAogewotICAgICpzdHJlYW0gPDwgIiBzdHI9XCIiIDw8IFN0cmluZyhzdHIpLmRlcHJlY2F0
ZWRTdHJpbmcoKS5hc2NpaSgpIDw8ICJcIiI7CisgICAgKnN0cmVhbSA8PCAiIHN0cj1cIiIgPDwg
U3RyaW5nKHN0cikudXRmOCgpLmRhdGEoKSA8PCAiXCIiOwogCiAgICAgRXZlbnRUYXJnZXROb2Rl
OjpkdW1wKHN0cmVhbSxpbmQpOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAkocmV2aXNpb24gMjkw
ODgpCisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVy
T2Zmc2V0KCkgY29uc3Q7Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9
CisgICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgeyByZXR1cm4gc3RyLmdldCgpOyB9CiAgICAgdmly
dHVhbCB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgb2Zmc2V0SW5DaGFyYWN0ZXJzKCkgY29uc3Q7
CkBAIC02OSw5ICs2OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8g
bm90ZTogc2luY2UgRE9NU3RyaW5ncyBhcmUgc2hhcmVkLCBzdHIgc2hvdWxkIGFsd2F5cyBiZSBj
b3BpZWQgd2hlbiBtYWtpbmcKLSAgICAvLyBhIGNoYW5nZSBvciByZXR1cm5pbmcgYSBzdHJpbmcK
LSAgICBTdHJpbmdJbXBsKiBzdHI7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cjsKIAogICAg
IHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIHByZXZWYWx1ZSk7CiB9OwpJ
bmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE4ICs2
NiwxNSBAQCBzdGF0aWMgYm9vbCBxdWFsaWZpZWROYW1lSXNNYWxmb3JtZWQoY29uCiAKICNpZiBF
TkFCTEUoU1ZHKQogCi1zdGF0aWMgdm9pZCBhZGRTdHJpbmcoSGFzaFNldDxTdHJpbmdJbXBsKiwg
Q2FzZUZvbGRpbmdIYXNoPiYgc2V0LCBjb25zdAotY2hhciogc3RyaW5nKQorc3RhdGljIHZvaWQg
YWRkU3RyaW5nKEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+JiBzZXQsIGNvbnN0IGNo
YXIqIHN0cmluZykKIHsKLSAgICBTdHJpbmdJbXBsKiBzID0gbmV3IFN0cmluZ0ltcGwoc3RyaW5n
KTsKLSAgICBzLT5yZWYoKTsKLSAgICBzZXQuYWRkKHMpOworICAgIHNldC5hZGQoc3RyaW5nKTsK
IH0KIAogc3RhdGljIGJvb2wgaXNTVkcxMEZlYXR1cmUoY29uc3QgU3RyaW5nICZmZWF0dXJlKQog
ewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hT
ZXQ8U3RyaW5nSW1wbCosIENhc2VGb2xkaW5nSGFzaD4gc3ZnRmVhdHVyZXM7CisgICAgc3RhdGlj
IEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IHN2Z0ZlYXR1cmVzOwogICAgIGlmICgh
aW5pdGlhbGl6ZWQpIHsKICAgICAgICAgLy8gU2FkbHksIHdlIGNhbm5vdCBjbGFpbSB0byBpbXBs
ZW1lbnQgYW55IFNWRyAxLjAgZmVhdHVyZSBzZXQsIGR1ZSB0bwogICAgICAgICAvLyBsYWNrIG9m
IEZvbnQgc3VwcG9ydC4KQEAgLTk1LDEzICs5MiwxMyBAQCBzdGF0aWMgYm9vbCBpc1NWRzEwRmVh
dHVyZShjb25zdCBTdHJpbmcgCiAvLyAgICAgIGFkZFN0cmluZyhzdmdGZWF0dXJlcywgImRvbS5z
dmcuYWxsIik7CiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJu
IHN2Z0ZlYXR1cmVzLmNvbnRhaW5zKGZlYXR1cmUuaW1wbCgpKTsKKyAgICByZXR1cm4gc3ZnRmVh
dHVyZXMuY29udGFpbnMoZmVhdHVyZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzU1ZHMTFGZWF0dXJl
KGNvbnN0IFN0cmluZyAmZmVhdHVyZSkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwotICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNlRm9sZGluZ0hhc2g+
IHN2Z0ZlYXR1cmVzOworICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNo
PiBzdmdGZWF0dXJlczsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIC8vIFNhZGx5
LCB3ZSBjYW5ub3QgY2xhaW0gdG8gaW1wbGVtZW50IGFueSBvZiB0aGUgU1ZHIDEuMSBnZW5lcmlj
IGZlYXR1cmUgc2V0cwogICAgICAgICAvLyBsYWNrIG9mIEZvbnQgYW5kIEZpbHRlciBzdXBwb3J0
LgpAQCAtMTU4LDcgKzE1NSw3IEBAIHN0YXRpYyBib29sIGlzU1ZHMTFGZWF0dXJlKGNvbnN0IFN0
cmluZyAKICAgICAgICAgYWRkU3RyaW5nKHN2Z0ZlYXR1cmVzLCAiRXh0ZW5zaWJpbGl0eSIpOwog
ICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBzdmdGZWF0dXJl
cy5jb250YWlucyhmZWF0dXJlLmltcGwoKSk7CisgICAgcmV0dXJuIHN2Z0ZlYXR1cmVzLmNvbnRh
aW5zKGZlYXR1cmUpOwogfQogI2VuZGlmCiAKQEAgLTI0OSwxNCArMjQ2LDcgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAgICAvLyAtIGlmIHRoZSBxdWFs
aWZpZWROYW1lIGhhcyBhIHByZWZpeCBhbmQgdGhlIG5hbWVzcGFjZVVSSSBpcyBudWxsLCBvcgog
ICAgICAgICAvLyAtIGlmIHRoZSBxdWFsaWZpZWROYW1lIGhhcyBhIHByZWZpeCB0aGF0IGlzICJ4
bWwiIGFuZCB0aGUgbmFtZXNwYWNlVVJJIGlzIGRpZmZlcmVudAogICAgICAgICAvLyAgIGZyb20g
Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgW05hbWVzcGFjZXNdLgotICAg
ICAgICBpbnQgY29sb25wb3MgPSAtMTsKLSAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgU3Ry
aW5nSW1wbCAqcW5hbWUgPSBxdWFsaWZpZWROYW1lLmltcGwoKTsKLSAgICAgICAgZm9yIChpID0g
MDsgaSA8IHFuYW1lLT5sZW5ndGgoKSAmJiBjb2xvbnBvcyA8IDA7IGkrKykgewotICAgICAgICAg
ICAgaWYgKCgqcW5hbWUpW2ldID09ICc6JykKLSAgICAgICAgICAgICAgICBjb2xvbnBvcyA9IGk7
Ci0gICAgICAgIH0KLSAgICAKKyAgICAgICAgaW50IGNvbG9ucG9zID0gcXVhbGlmaWVkTmFtZS5m
aW5kKCc6Jyk7ICAgIAogICAgICAgICBpZiAocXVhbGlmaWVkTmFtZUlzTWFsZm9ybWVkKHF1YWxp
ZmllZE5hbWUpIHx8CiAgICAgICAgICAgICAoY29sb25wb3MgPj0gMCAmJiBuYW1lc3BhY2VVUkku
aXNOdWxsKCkpIHx8CiAgICAgICAgICAgICAoY29sb25wb3MgPT0gMyAmJiBxdWFsaWZpZWROYW1l
WzBdID09ICd4JyAmJiBxdWFsaWZpZWROYW1lWzFdID09ICdtJyAmJiBxdWFsaWZpZWROYW1lWzJd
ID09ICdsJyAmJgpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL2RvbS9SYW5n
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcsMTAgKzEwNTcsMTAgQEAgdm9pZCBSYW5nZTo6
aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IAogICAgIGlmKG1fc3RhcnRDb250YWluZXItPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8CiAgICAgICAgbV9zdGFydENvbnRhaW5lci0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKICAgICAgICAgZWMgPSAw
OwotICAgICAgICBUZXh0ICpuZXdUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fc3RhcnRDb250
YWluZXIuZ2V0KCkpLT5zcGxpdFRleHQobV9zdGFydE9mZnNldCwgZWMpOworICAgICAgICBSZWZQ
dHI8VGV4dD4gbmV3VGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3N0YXJ0Q29udGFpbmVyLmdl
dCgpKS0+c3BsaXRUZXh0KG1fc3RhcnRPZmZzZXQsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5wYXJlbnROb2RlKCkt
Pmluc2VydEJlZm9yZShuZXdOb2RlLCBuZXdUZXh0LCBlYyk7CisgICAgICAgIG1fc3RhcnRDb250
YWluZXItPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG5ld1RleHQuZ2V0KCks
IGVjKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5pbnNlcnRCZWZv
cmUobmV3Tm9kZSwgbV9zdGFydENvbnRhaW5lci0+Y2hpbGROb2RlKG1fc3RhcnRPZmZzZXQpLCBl
Yyk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9kb20vVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgVGV4dDo6flRleHQoKQogewogfQog
Ci1UZXh0ICpUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykKK1Bhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogCkBAIC03MCwxNiArNzAsMTQgQEAgVGV4
dCAqVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRQogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBTdHJpbmdJbXBsICpvbGRTdHIgPSBzdHI7Ci0gICAgVGV4dCAqbmV3VGV4
dCA9IGNyZWF0ZU5ldyhzdHItPnN1YnN0cmluZyhvZmZzZXQpKTsKLSAgICBzdHIgPSBzdHItPnN1
YnN0cmluZygwLCBvZmZzZXQpOwotICAgIHN0ci0+cmVmKCk7CisgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG9sZFN0ciA9IHN0cjsKKyAgICBQYXNzUmVmUHRyPFRleHQ+IG5ld1RleHQgPSBjcmVhdGVO
ZXcob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0KSk7CisgICAgc3RyID0gb2xkU3RyLT5zdWJzdHJp
bmcoMCwgb2Zmc2V0KTsKIAotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIpOwotICAg
IG9sZFN0ci0+ZGVyZWYoKTsKKyAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgp
KTsKIAogICAgIGlmIChwYXJlbnROb2RlKCkpCi0gICAgICAgIHBhcmVudE5vZGUoKS0+aW5zZXJ0
QmVmb3JlKG5ld1RleHQsbmV4dFNpYmxpbmcoKSwgZWMpOworICAgICAgICBwYXJlbnROb2RlKCkt
Pmluc2VydEJlZm9yZShuZXdUZXh0LmdldCgpLCBuZXh0U2libGluZygpLCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTgzLDkgKzE4MSw5IEBAIGJvb2wgVGV4dDo6
Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVRleHQg
KlRleHQ6OmNyZWF0ZU5ldyhTdHJpbmdJbXBsICpfc3RyKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0
OjpjcmVhdGVOZXcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJu
IG5ldyBUZXh0KGRvY3VtZW50KCksIF9zdHIpOworICAgIHJldHVybiBuZXcgVGV4dChkb2N1bWVu
dCgpLCBzdHJpbmcpOwogfQogCiBTdHJpbmcgVGV4dDo6dG9TdHJpbmcoKSBjb25zdApJbmRleDog
V2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQuaAkocmV2
aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL2RvbS9UZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
OSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw4ICsyOSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNvbnN0IHVuc2lnbmVkIGNUZXh0Tm9kZUxlbmd0
aExpbWl0ID0gMSA8PCAxNjsKIAotY2xhc3MgVGV4dCA6IHB1YmxpYyBDaGFyYWN0ZXJEYXRhCi17
CitjbGFzcyBUZXh0IDogcHVibGljIENoYXJhY3RlckRhdGEgewogcHVibGljOgogICAgIFRleHQo
RG9jdW1lbnQgKmltcGwsIGNvbnN0IFN0cmluZyAmX3RleHQpOwogICAgIFRleHQoRG9jdW1lbnQg
KmltcGwpOwpAQCAtNDAsMTAgKzM3LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBtZXRob2Rz
ICYgYXR0cmlidXRlcyBmb3IgQ2hhcmFjdGVyRGF0YQogCi0gICAgVGV4dCAqc3BsaXRUZXh0ICgg
Y29uc3QgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxU
ZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAv
LyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gcGFyZW50IGNsYXNzZXMKIAotICAgIC8vIERP
TSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7CkBAIC01Miw5ICs1MCw5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwgUmVuZGVyU3R5bGUgKik7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CisgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAg
IHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSk7CiAKICAgICB2aXJ0dWFsIFN0
cmluZyB0b1N0cmluZygpIGNvbnN0OwpAQCAtNjIsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0PiBjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQqLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCYgY2hhcnNMZWZ0LCB1bnNpZ25lZCBtYXhDaGFycyA9IGNU
ZXh0Tm9kZUxlbmd0aExpbWl0KTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICB2aXJ0dWFsIHZvaWQg
Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVGV4dCog
Y3JlYXRlTmV3KFN0cmluZ0ltcGwqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gY3Jl
YXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgU3Ry
aW5nIEhUTUxFbGVtZW50Ojpub2RlTmFtZSgpIGNvbnN0CiAgICAgLy8gRklYTUU6IFdvdWxkIGJl
IG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNzdHJpbmcgbG9va3VwIGJhc2VkIG9mZiB1cHBlcmNhc2Ug
Y2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGNvcHkKICAgICAvLyB0aGUgc3RyaW5nIG9uIGEg
aGl0IGluIHRoZSBoYXNoLgogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gdGFnUU5hbWUoKS5sb2NhbE5hbWUoKS5pbXBsKCktPnVwcGVyKCk7Cisg
ICAgICAgIHJldHVybiB0YWdRTmFtZSgpLmxvY2FsTmFtZSgpLmRvbVN0cmluZygpLnVwcGVyKCk7
CiAgICAgcmV0dXJuIEVsZW1lbnQ6Om5vZGVOYW1lKCk7CiB9CiAgICAgCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjb25zdCBp
bnQgbWF4U2F2ZWRSZXN1bHRzID0gMjU2OwogLy8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xpY2tp
bmcgaW4gdGhlIHRleHQgZmllbGQuCiBzdGF0aWMgY29uc3QgaW50IGNNYXhMZW4gPSA1MjQyODg7
CiAKLXN0YXRpYyBpbnQgbnVtR3JhcGhlbWVDbHVzdGVycyhjb25zdCBTdHJpbmdJbXBsKiBzKQor
c3RhdGljIGludCBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqIHMpCiB7CiAgICAgaWYg
KCFzKQogICAgICAgICByZXR1cm4gMDsKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIGludCBudW1H
cmFwaGVtZUNsdXN0ZXJzKGNvbnN0IFN0cgogICAgIHJldHVybiBudW07CiB9CiAKLXN0YXRpYyBp
bnQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhjb25zdCBTdHJpbmdJbXBsKiBzLCBp
bnQgbnVtR3JhcGhlbWVDbHVzdGVycykKK3N0YXRpYyBpbnQgbnVtQ2hhcmFjdGVyc0luR3JhcGhl
bWVDbHVzdGVycyhTdHJpbmdJbXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVzdGVycykKIHsKICAg
ICBpZiAoIXMpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tl
bml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAko
cmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MjMsNyArMTYyMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRva2Vu
aXplcjo6cHJvY2Vzc1QKICAgICAgICAgfQogCiAjZW5kaWYKLSAgICAgICAgY3VyclRva2VuLnRl
eHQgPSBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsKGJ1ZmZlciwgZGVzdCAtIGJ1ZmZl
cik7CisgICAgICAgIGN1cnJUb2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5n
TnVsbENoYXJhY3RlcnMoYnVmZmVyLCBkZXN0IC0gYnVmZmVyKTsKICAgICAgICAgaWYgKGN1cnJU
b2tlbi50YWdOYW1lICE9IGNvbW1lbnRBdG9tKQogICAgICAgICAgICAgY3VyclRva2VuLnRhZ05h
bWUgPSB0ZXh0QXRvbTsKICAgICB9IGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09IG51bGxB
dG9tKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNp
b24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgCiAK
ICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBj
aGFyKiBjb25zdCYgYywgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAgIFN0cmluZ0ltcGwq
IHIgPSBuZXcgU3RyaW5nSW1wbChjKTsKKyAgICAgICAgU3RyaW5nSW1wbCogciA9IG5ldyBTdHJp
bmdJbXBsKGMsIHN0cmxlbihjKSk7CiAgICAgICAgIHItPm1faGFzaCA9IGhhc2g7CiAgICAgICAg
IHItPm1faW5UYWJsZSA9IHRydWU7CiAgICAgICAgIGxvY2F0aW9uID0gcjsgCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NiArNTUsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nKGNvbnN0IGNoYXIqKTsKICAgICBTdHJpbmco
Y29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nKFN0cmluZ0ltcGwqIGkp
IDogbV9pbXBsKGkpIHsgfQorICAgIFN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGkpIDog
bV9pbXBsKGkpIHsgfQorICAgIFN0cmluZyhSZWZQdHI8U3RyaW5nSW1wbD4gaSkgOiBtX2ltcGwo
aSkgeyB9CiAKICAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxVQ2hhcj4mKTsKIApAQCAt
MTgxLDcgKzE4Myw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgIC8v
IEZvciBkZWJ1Z2dpbmcgb25seSwgbGVha3MgbWVtb3J5LgogICAgIFZlY3RvcjxjaGFyPiBhc2Np
aSgpIGNvbnN0OwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZp
c2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCwxMSArMzgsNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3Ry
LCB1bnNpZ25lCiB7CiAgICAgaWYgKCFzdHIpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
ZiAobGVuID09IDApCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChzdHIsIGxlbik7CisgICAgbV9p
bXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ciwgbGVuKTsKIH0KIAogU3RyaW5nOjpTdHJpbmco
Y29uc3QgVUNoYXIqIHN0cikKQEAgLTU0LDQ0ICs1MCwyOCBAQCBTdHJpbmc6OlN0cmluZyhjb25z
dCBVQ2hhciogc3RyKQogICAgIHdoaWxlIChzdHJbbGVuXSAhPSBVQ2hhcigwKSkKICAgICAgICAg
bGVuKys7CiAgICAgCi0gICAgaWYgKGxlbiA9PSAwKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJ
bXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwo
c3RyLCBsZW4pOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIsIGxlbik7CiB9
CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cikKIHsKICAgICBp
ZiAoc3RyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0ci5pc0Vt
cHR5KCkpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZSAK
LSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KHN0ci51bmljb2RlKCkpLCBzdHIubGVuZ3RoKCkpOworICAgIG1faW1wbCA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNvZGUo
KSksIHN0ci5sZW5ndGgoKSk7CiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIHN0cikK
IHsKICAgICBpZiAoIXN0cikKICAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGwgPSBzdHJsZW4o
c3RyKTsKLSAgICBpZiAobCA9PSAwKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0
eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoc3RyLCBsKTsK
KyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyKTsKIH0KIAogU3RyaW5nOjpTdHJp
bmcoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFzdHIpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChsZW5ndGggPT0gMCkKLSAgICAgICAgbV9pbXBsID0g
U3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJp
bmdJbXBsKHN0ciwgbGVuZ3RoKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3Ry
LCBsZW5ndGgpOwogfQogCiB2b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyAmc3RyKQpA
QCAtMTE1LDcgKzk1LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjaGFyIGMpCiAgICAgICAgIG5l
d0NoYXJhY3RlcnNbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwogICAgICAgICBtX2ltcGwgPSBTdHJp
bmdJbXBsOjphZG9wdChuZXdDaGFyYWN0ZXJzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbXBs
ID0gbmV3IFN0cmluZ0ltcGwoJmMsIDEpOworICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGUoJmMsIDEpOwogfQogCiB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCkBAIC0xMjYs
NyArMTA2LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICBuZXdDaGFy
YWN0ZXJzW21faW1wbC0+bGVuZ3RoKCldID0gYzsKICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1w
bDo6YWRvcHQobmV3Q2hhcmFjdGVycyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5l
dyBTdHJpbmdJbXBsKCZjLCAxKTsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
KCZjLCAxKTsKIH0KIAogU3RyaW5nIG9wZXJhdG9yKyhjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0
cmluZyYgYikKQEAgLTE2NywxMSArMTQ3LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBV
Q2hhciogY2hhcmFjdAogICAgIGlmICghbV9pbXBsKSB7CiAgICAgICAgIGlmICghY2hhcmFjdGVy
c1RvQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWxlbmd0aFRvQXBw
ZW5kKSB7Ci0gICAgICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBs
KGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOworICAgICAgICBtX2ltcGwgPSBT
dHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMxNyw3ICsyOTMsNyBAQCBjb25zdCBVQ2hhciog
U3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICht
X2ltcGwtPmhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKQogICAgICAgICByZXR1cm4gbV9p
bXBsLT5jaGFyYWN0ZXJzKCk7Ci0gICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoKm1faW1wbCwg
U3RyaW5nSW1wbDo6V2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKTsKKyAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCptX2ltcGwp
OwogICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKIH0KIApAQCAtMzY1LDcgKzM0MSw3
IEBAIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKIAogICAgIHZhX2Vu
ZChhcmdzKTsKICAgICAKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwg
bGVuKTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIGxlbik7
CiB9CiAKIFN0cmluZyBTdHJpbmc6Om51bWJlcihpbnQgbikKQEAgLTU1OCwyMiArNTM0LDE0IEBA
IFN0cmluZzo6U3RyaW5nKGNvbnN0IElkZW50aWZpZXImIHN0cikKIHsKICAgICBpZiAoc3RyLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0g
ICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
bV9pbXBsID0gbmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0
ci5kYXRhKCkpLCBzdHIuc2l6ZSgpKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0ci5kYXRhKCkpLCBzdHIuc2l6ZSgpKTsK
IH0KIAogU3RyaW5nOjpTdHJpbmcoY29uc3QgVVN0cmluZyYgc3RyKQogewogICAgIGlmIChzdHIu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoc3RyLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlIAotICAgICAg
ICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
c3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkp
OwogfQogCiBTdHJpbmc6Om9wZXJhdG9yIElkZW50aWZpZXIoKSBjb25zdApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nSGFzaC5oCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHN0cnVjdCBTdHJpbmdIYXNoIHsKLSAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmhh
c2goKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBj
b25zdCBTdHJpbmdJbXBsKiBiKQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChTdHJpbmdJ
bXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChhID09IGIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OCw3ICs3OCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFBhdWwgSHNp
ZWgncyBTdXBlckZhc3RIYXNoCiAgICAgICAgIC8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlz
LmNvbS9xZWQvaGFzaC5odG1sCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0
cmluZ0ltcGwqIHN0cikKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3RyaW5nSW1wbCog
c3RyKQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsID0gc3RyLT5sZW5ndGgoKTsK
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBzID0gc3RyLT5jaGFyYWN0ZXJzKCk7CkBAIC0xNjYs
NyArMTY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGhhc2g7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCisgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChhID09IGIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBA
QCBzdGF0aWMgaW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1bnNpCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbikpOwogfQogCi1z
dGF0aWMgaW5saW5lIHZvaWQgZGVsZXRlVUNoYXJWZWN0b3IoVUNoYXIqIHApCitzdGF0aWMgaW5s
aW5lIHZvaWQgZGVsZXRlVUNoYXJWZWN0b3IoY29uc3QgVUNoYXIqIHApCiB7Ci0gICAgZmFzdEZy
ZWUocCk7CisgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxVQ2hhcio+KHApKTsKIH0KIAogU3RyaW5n
SW1wbCogU3RyaW5nSW1wbDo6ZW1wdHkoKQpAQCAtNzEsNzAgKzcxLDQ5IEBAIFN0cmluZ0ltcGwq
IFN0cmluZ0ltcGw6OmVtcHR5KCkKICAgICByZXR1cm4gJmU7CiB9CiAKLVN0cmluZ0ltcGw6OlN0
cmluZ0ltcGwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyKQotewotICAgIGluaXQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0ci51bmljb2RlKCkpLCBzdHIubGVuZ3RoKCkpOwot
fQotCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBzdHIsIHVuc2lnbmVkIGxl
bikKKyAgICA6IG1fbGVuZ3RoKGxlbikKKyAgICAsIG1faGFzaCgwKQorICAgICwgbV9pblRhYmxl
KGZhbHNlKQorICAgICwgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2UpCiB7Ci0g
ICAgaW5pdChzdHIsIGxlbik7CisgICAgQVNTRVJUKHN0cik7CisgICAgQVNTRVJUKGxlbik7Cisg
ICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW4pOworICAgIG1lbWNweShkYXRhLCBz
dHIsIGxlbiAqIHNpemVvZihVQ2hhcikpOworICAgIG1fZGF0YSA9IGRhdGE7CiB9CiAKIFN0cmlu
Z0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgU3RyaW5nSW1wbCYgc3RyLCBXaXRoVGVybWluYXRpbmdO
dWxsQ2hhcmFjdGVyKQogICAgIDogbV9sZW5ndGgoc3RyLm1fbGVuZ3RoKQotICAgICwgbV9kYXRh
KG5ld1VDaGFyVmVjdG9yKG1fbGVuZ3RoICsgMSkpCisgICAgLCBtX2RhdGEobmV3VUNoYXJWZWN0
b3Ioc3RyLm1fbGVuZ3RoICsgMSkpCiAgICAgLCBtX2hhc2goc3RyLm1faGFzaCkKICAgICAsIG1f
aW5UYWJsZShmYWxzZSkKICAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKHRydWUp
CiB7Ci0gICAgbWVtY3B5KG1fZGF0YSwgc3RyLm1fZGF0YSwgbV9sZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKLSAgICBtX2RhdGFbbV9sZW5ndGhdID0gMDsKLX0KLQotU3RyaW5nSW1wbDo6U3RyaW5n
SW1wbChjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAgaW5pdChzdHIsIHN0cmxlbihzdHIpKTsKKyAg
ICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9yKHN0ci5tX2xlbmd0aCk7CisgICAgbWVtY3B5
KGRhdGEsIHN0ci5tX2RhdGEsIHN0ci5tX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgIGRh
dGFbc3RyLm1fbGVuZ3RoXSA9IDA7CisgICAgbV9kYXRhID0gZGF0YTsKIH0KIAogU3RyaW5nSW1w
bDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKKyAgICA6IG1fbGVu
Z3RoKGxlbikKKyAgICAsIG1fZGF0YShuZXdVQ2hhclZlY3RvcihsZW4pKQorICAgICwgbV9oYXNo
KDApCisgICAgLCBtX2luVGFibGUoZmFsc2UpCisgICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENo
YXJhY3RlcihmYWxzZSkKIHsKLSAgICBpbml0KHN0ciwgbGVuKTsKLX0KLQotdm9pZCBTdHJpbmdJ
bXBsOjppbml0KGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgbGVuKQotewotICAgIG1faGFzaCA9
IDA7Ci0gICAgbV9pblRhYmxlID0gZmFsc2U7Ci0gICAgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFy
YWN0ZXIgPSBmYWxzZTsKLSAgICBtX2xlbmd0aCA9IGxlbjsKLSAgICBpZiAoIW1fbGVuZ3RoIHx8
ICFzdHIpIHsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBtX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7CisgICAgQVNTRVJUKHN0
cik7CisgICAgQVNTRVJUKGxlbik7CisgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3Rvcihs
ZW4pOworICAgIFVDaGFyKiBwdHIgPSBkYXRhOwogICAgIGludCBpID0gbV9sZW5ndGg7Ci0gICAg
VUNoYXIqIHB0ciA9IG1fZGF0YTsKICAgICB3aGlsZSAoaS0tKSB7CiAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYyA9ICpzdHIrKzsKICAgICAgICAgKnB0cisrID0gYzsKICAgICB9Ci19Ci0KLXZvaWQg
U3RyaW5nSW1wbDo6aW5pdChjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAg
bV9oYXNoID0gMDsKLSAgICBtX2luVGFibGUgPSBmYWxzZTsKLSAgICBtX2hhc1Rlcm1pbmF0aW5n
TnVsbENoYXJhY3RlciA9IGZhbHNlOwotICAgIG1fbGVuZ3RoID0gbGVuOwotICAgIGlmICghbV9s
ZW5ndGggfHwgIXN0cikgewotICAgICAgICBtX2RhdGEgPSAwOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIAotICAgIG1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbik7Ci0gICAgbWVtY3B5
KG1fZGF0YSwgc3RyLCBsZW4gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtX2RhdGEgPSBkYXRhOwog
fQogCiBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCkBAIC0xNDQsMTIgKzEyMywxMiBAQCBTdHJp
bmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKIH0K
IAotYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QKK2Jvb2wg
U3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCiB7CiAgICAgcmV0dXJuIGNvbnRh
aW5zT25seVdoaXRlc3BhY2UoMCwgbV9sZW5ndGgpOwogfQogCi1ib29sIFN0cmluZ0ltcGw6OmNv
bnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdAor
Ym9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIGxlbikKIHsKICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xNjIsMTYgKzE0MSwxNiBAQCBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCi1TdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpz
dWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4pIGNvbnN0CitQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxl
bikKIHsKLSAgICBpZiAocG9zID49IG1fbGVuZ3RoKSByZXR1cm4KLSAgICAgICAgbmV3IFN0cmlu
Z0ltcGw7CisgICAgaWYgKHBvcyA+PSBtX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7
CiAgICAgaWYgKGxlbiA+IG1fbGVuZ3RoIC0gcG9zKQogICAgICAgICBsZW4gPSBtX2xlbmd0aCAt
IHBvczsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwobV9kYXRhICsgcG9zLCBsZW4pOworICAg
IHJldHVybiBjcmVhdGUobV9kYXRhICsgcG9zLCBsZW4pOwogfQogCi1VQ2hhcjMyIFN0cmluZ0lt
cGw6OmNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQgaSkgY29uc3QKK1VDaGFyMzIgU3RyaW5n
SW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKQogewogICAgIGlmIChVMTZfSVNf
U0lOR0xFKG1fZGF0YVtpXSkpCiAgICAgICAgIHJldHVybiBtX2RhdGFbaV07CkBAIC0yMjUsMTQg
KzIwNCwxNCBAQCBzdGF0aWMgTGVuZ3RoIHBhcnNlTGVuZ3RoKGNvbnN0IFVDaGFyKiBtCiAgICAg
cmV0dXJuIExlbmd0aCgwLCBSZWxhdGl2ZSk7CiB9CiAKLUxlbmd0aCBTdHJpbmdJbXBsOjp0b0xl
bmd0aCgpIGNvbnN0CitMZW5ndGggU3RyaW5nSW1wbDo6dG9MZW5ndGgoKQogewogICAgIHJldHVy
biBwYXJzZUxlbmd0aChtX2RhdGEsIG1fbGVuZ3RoKTsKIH0KIAotTGVuZ3RoKiBTdHJpbmdJbXBs
Ojp0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBjb25zdAorTGVuZ3RoKiBTdHJpbmdJbXBsOjp0b0Nv
b3Jkc0FycmF5KGludCYgbGVuKQogewotICAgIFVDaGFyKiBzcGFjaWZpZWQgPSBuZXdVQ2hhclZl
Y3RvcihtX2xlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBzcGFjaWZpZWQobV9sZW5ndGgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKSB7CiAgICAgICAgIFVD
aGFyIGNjID0gbV9kYXRhW2ldOwogICAgICAgICBpZiAoY2MgPiAnOScgfHwgKGNjIDwgJzAnICYm
IGNjICE9ICctJyAmJiBjYyAhPSAnKicgJiYgY2MgIT0gJy4nKSkKQEAgLTI0MCw4ICsyMTksNyBA
QCBMZW5ndGgqIFN0cmluZ0ltcGw6OnRvQ29vcmRzQXJyYXkoaW50JiBsCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHNwYWNpZmllZFtpXSA9IGNjOwogICAgIH0KLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4oc3BhY2lmaWVk
KSwgbV9sZW5ndGgpOwotICAgIGRlbGV0ZVVDaGFyVmVjdG9yKHNwYWNpZmllZCk7CisgICAgRGVw
cmVjYXRlZFN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+
KHNwYWNpZmllZC5kYXRhKCkpLCBtX2xlbmd0aCk7CiAKICAgICBzdHIgPSBzdHIuc2ltcGxpZnlX
aGl0ZVNwYWNlKCk7CiAKQEAgLTI2MSw3ICsyMzksNyBAQCBMZW5ndGgqIFN0cmluZ0ltcGw6OnRv
Q29vcmRzQXJyYXkoaW50JiBsCiAgICAgcmV0dXJuIHI7CiB9CiAKLUxlbmd0aCogU3RyaW5nSW1w
bDo6dG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3QKK0xlbmd0aCogU3RyaW5nSW1wbDo6dG9M
ZW5ndGhBcnJheShpbnQmIGxlbikKIHsKICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cihyZWludGVy
cHJldF9jYXN0PGNvbnN0IERlcHJlY2F0ZWRDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOwogICAg
IHN0ciA9IHN0ci5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKQEAgLTI5MSw3ICsyNjksNyBAQCBMZW5n
dGgqIFN0cmluZ0ltcGw6OnRvTGVuZ3RoQXJyYXkoaW50JiBsCiAgICAgcmV0dXJuIHI7CiB9CiAK
LWJvb2wgU3RyaW5nSW1wbDo6aXNMb3dlcigpIGNvbnN0Citib29sIFN0cmluZ0ltcGw6OmlzTG93
ZXIoKQogewogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0
aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgYm9vbCBhbGxMb3dlciA9IHRydWU7CkBAIC0z
MTUsMTcgKzI5MywxMCBAQCBib29sIFN0cmluZ0ltcGw6OmlzTG93ZXIoKSBjb25zdAogICAgIHJl
dHVybiBhbGxMb3dlcjsKIH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6bG93ZXIoKSBjb25z
dAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcigpCiB7Ci0gICAgU3Ry
aW5nSW1wbCogYyA9IG5ldyBTdHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAg
IHJldHVybiBjOwotCi0gICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7
Ci0gICAgaW50IGxlbmd0aCA9IG1fbGVuZ3RoOwotCi0gICAgYy0+bV9kYXRhID0gZGF0YTsKLSAg
ICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBWZWN0b3I8VUNoYXI+IGRhdGEobV9sZW5ndGgp
OworICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKICAgICAvLyBEbyBhIGZhc3RlciBs
b29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgogICAg
IFVDaGFyIG9yZWQgPSAwOwpAQCAtMzM1LDc1ICszMDYsNDUgQEAgU3RyaW5nSW1wbCogU3RyaW5n
SW1wbDo6bG93ZXIoKSBjb25zdAogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOwog
ICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gYzsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRp
b24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29s
IGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwg
bGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0
aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YS5kYXRhKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0
aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gYzsKLQotICAgIGlmIChyZWFsTGVuZ3RoID4gbGVuZ3RoKSB7Ci0gICAgICAg
IGRlbGV0ZVVDaGFyVmVjdG9yKGRhdGEpOwotICAgICAgICBkYXRhID0gbmV3VUNoYXJWZWN0b3Io
cmVhbExlbmd0aCk7Ci0gICAgfQotICAgIGxlbmd0aCA9IHJlYWxMZW5ndGg7Ci0KLSAgICBjLT5t
X2RhdGEgPSBkYXRhOwotICAgIGMtPm1fbGVuZ3RoID0gbGVuZ3RoOwotCi0gICAgVW5pY29kZTo6
dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Ci0gICAgaWYg
KGVycm9yKSB7Ci0gICAgICAgIGMtPnJlZigpOwotICAgICAgICBjLT5kZXJlZigpOwotICAgICAg
ICByZXR1cm4gY29weSgpOwotICAgIH0KLSAgICByZXR1cm4gYzsKKyAgICAgICAgcmV0dXJuIGFk
b3B0KGRhdGEpOworICAgIGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOworICAgIFVuaWNvZGU6OnRv
TG93ZXIoZGF0YS5kYXRhKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAg
ICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiBhZG9wdChkYXRh
KTsKIH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6dXBwZXIoKSBjb25zdAorUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiB7Ci0gICAgU3RyaW5nSW1wbCogYyA9
IG5ldyBTdHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgIHJldHVybiBjOwog
ICAgIGJvb2wgZXJyb3I7CiAgICAgaW50MzJfdCBsZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKDAs
IDAsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Ci0gICAgYy0+bV9kYXRhID0gbmV3VUNoYXJW
ZWN0b3IobGVuZ3RoKTsKLSAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICBVbmljb2RlOjp0
b1VwcGVyKGMtPm1fZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwotICAg
IGlmIChlcnJvcikgewotICAgICAgICBjLT5yZWYoKTsKLSAgICAgICAgYy0+ZGVyZWYoKTsKLSAg
ICAgICAgcmV0dXJuIGNvcHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGM7CisgICAgVmVjdG9yPFVD
aGFyPiBkYXRhKGxlbmd0aCk7CisgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLmRhdGEoKSwgbGVu
Z3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQogCi1TdHJpbmdJbXBsKiBT
dHJpbmdJbXBsOjpzZWN1cmUoVUNoYXIgYUNoYXIpIGNvbnN0CitQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnNlY3VyZShVQ2hhciBhQ2hhcikKIHsKICAgICBpbnQgbGVuZ3RoID0g
bV9sZW5ndGg7Ci0gICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOworICAg
IFZlY3RvcjxVQ2hhcj4gZGF0YShsZW5ndGgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCiAgICAgICAgIGRhdGFbaV0gPSBhQ2hhcjsKLQotICAgIFN0cmluZ0ltcGwqIGMg
PSBuZXcgU3RyaW5nSW1wbDsKLSAgICBjLT5tX2RhdGEgPSBkYXRhOwotICAgIGMtPm1fbGVuZ3Ro
ID0gbGVuZ3RoOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAot
U3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6Zm9sZENhc2UoKSBjb25zdAorUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpmb2xkQ2FzZSgpCiB7Ci0gICAgU3RyaW5nSW1wbCogYyA9IG5l
dyBTdHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgIHJldHVybiBjOwotCi0g
ICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7CisgICAgVmVjdG9yPFVD
aGFyPiBkYXRhKG1fbGVuZ3RoKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCi0g
ICAgYy0+bV9kYXRhID0gZGF0YTsKLSAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKLQogICAgIC8v
IERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBh
cmUgQVNDSUkuCiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewpAQCAtNDEyLDM4ICszNTMsMjIgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1w
bDo6Zm9sZENhc2UoKSBjb25zdAogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOwog
ICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gYzsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRp
b24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29s
IGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEs
IGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5n
dGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLmRhdGEoKSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVu
Z3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBjOwotCi0gICAgaWYgKHJlYWxMZW5ndGggPiBsZW5ndGgpIHsKLSAgICAg
ICAgZGVsZXRlVUNoYXJWZWN0b3IoZGF0YSk7Ci0gICAgICAgIGRhdGEgPSBuZXdVQ2hhclZlY3Rv
cihyZWFsTGVuZ3RoKTsKLSAgICB9Ci0gICAgbGVuZ3RoID0gcmVhbExlbmd0aDsKLQotICAgIGMt
Pm1fZGF0YSA9IGRhdGE7Ci0gICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7Ci0KLSAgICBVbmljb2Rl
Ojpmb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Ci0gICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgIGMtPnJlZigpOwotICAgICAgICBjLT5kZXJlZigpOwotICAg
ICAgICByZXR1cm4gY29weSgpOwotICAgIH0KLSAgICByZXR1cm4gYzsKKyAgICAgICAgcmV0dXJu
IGFkb3B0KGRhdGEpOworICAgIGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOworICAgIFVuaWNvZGU6
OmZvbGRDYXNlKGRhdGEuZGF0YSgpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7
CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7CiB9CiAKLVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgpIGNv
bnN0CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgp
CiB7Ci0gICAgU3RyaW5nSW1wbCogYyA9IG5ldyBTdHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5n
dGgpCi0gICAgICAgIHJldHVybiBjOwotCiAgICAgdW5zaWduZWQgc3RhcnQgPSAwOwogICAgIHVu
c2lnbmVkIGVuZCA9IG1fbGVuZ3RoIC0gMTsKICAgICAKQEAgLTQ1MywzMiArMzc4LDI0IEBAIFN0
cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgKICAgICAKICAgICAvLyBvbmx5
IHdoaXRlIHNwYWNlCiAgICAgaWYgKHN0YXJ0ID4gZW5kKSAKLSAgICAgICAgcmV0dXJuIGM7Cisg
ICAgICAgIHJldHVybiBlbXB0eSgpOwogCiAgICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9tIGVu
ZAogICAgIHdoaWxlIChlbmQgJiYgaXNTcGFjZShtX2RhdGFbZW5kXSkpICAgICAgICAgCiAgICAg
ICAgIGVuZC0tOwotICAgIAotICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydCArIDE7Ci0gICAg
Yy0+bV9kYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3RoKTsKLSAgICBjLT5tX2xlbmd0aCA9IGxl
bmd0aDsKLSAgICBtZW1jcHkoYy0+bV9kYXRhLCBtX2RhdGEgKyBzdGFydCwgbGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7Ci0gICAgCi0gICAgcmV0dXJuIGM7CisKKyAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOwogfQogCi1TdHJpbmdJbXBsKiBTdHJpbmdJ
bXBsOjpzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzaW1wbGlmeVdoaXRlU3BhY2UoKQogewotICAgIFN0cmluZ0ltcGwqIGMgPSBu
ZXcgU3RyaW5nSW1wbDsKLSAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gYzsKLSAg
ICAKLSAgICBjLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7Ci0gICAgY29uc3Qg
VUNoYXIgKmZyb20gPSBtX2RhdGE7Ci0gICAgY29uc3QgVUNoYXIgKmZyb21lbmQgPSBmcm9tICsg
bV9sZW5ndGg7CisgICAgVmVjdG9yPFVDaGFyPiBkYXRhKG1fbGVuZ3RoKTsKKworICAgIGNvbnN0
IFVDaGFyKiBmcm9tID0gbV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiBmcm9tZW5kID0gZnJvbSAr
IG1fbGVuZ3RoOwogICAgIGludCBvdXRjID0gMDsKICAgICAKLSAgICBVQ2hhciAqdG8gPSBjLT5t
X2RhdGE7CisgICAgVUNoYXIqIHRvID0gZGF0YS5kYXRhKCk7CiAgICAgCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiBpc1NwYWNlKCpmcm9tKSkK
QEAgLTQ5NCwxOCArNDExLDE0IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnNpbXBsaWZ5V2hp
dGVTcGEKICAgICBpZiAob3V0YyA+IDAgJiYgdG9bb3V0YyAtIDFdID09ICcgJykKICAgICAgICAg
b3V0Yy0tOwogICAgIAotICAgIGMtPm1fbGVuZ3RoID0gb3V0YzsKKyAgICBkYXRhLnJlc2l6ZShv
dXRjKTsKICAgICAKLSAgICByZXR1cm4gYzsKKyAgICByZXR1cm4gYWRvcHQoZGF0YSk7CiB9CiAK
LVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmNhcGl0YWxpemUoVUNoYXIgcHJldmlvdXMpIGNvbnN0
CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNhcGl0YWxpemUoVUNoYXIgcHJl
dmlvdXMpCiB7Ci0gICAgU3RyaW5nSW1wbCogY2FwaXRhbGl6ZWRTdHJpbmcgPSBuZXcgU3RyaW5n
SW1wbDsKLSAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gY2FwaXRhbGl6ZWRTdHJp
bmc7Ci0KLSAgICBVQ2hhciogc3RyaW5nV2l0aFByZXZpb3VzID0gbmV3VUNoYXJWZWN0b3IobV9s
ZW5ndGggKyAxKTsKKyAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ1dpdGhQcmV2aW91cyhtX2xlbmd0
aCArIDEpOwogICAgIHN0cmluZ1dpdGhQcmV2aW91c1swXSA9IHByZXZpb3VzID09IG5vQnJlYWtT
cGFjZSA/ICcgJyA6IHByZXZpb3VzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2xl
bmd0aCArIDE7IGkrKykgewogICAgICAgICAvLyBSZXBsYWNlICZuYnNwIHdpdGggYSByZWFsIHNw
YWNlIHNpbmNlIElDVSBubyBsb25nZXIgdHJlYXRzICZuYnNwIGFzIGEgd29yZCBzZXBhcmF0b3Iu
CkBAIC01MTUsMzAgKzQyOCwyNSBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpjYXBpdGFsaXpl
KFVDaGFyCiAgICAgICAgICAgICBzdHJpbmdXaXRoUHJldmlvdXNbaV0gPSBtX2RhdGFbaSAtIDFd
OwogICAgIH0KIAotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9IHdvcmRCcmVha0l0
ZXJhdG9yKHN0cmluZ1dpdGhQcmV2aW91cywgbV9sZW5ndGggKyAxKTsKLSAgICBpZiAoIWJvdW5k
YXJ5KSB7Ci0gICAgICAgIGRlbGV0ZVVDaGFyVmVjdG9yKHN0cmluZ1dpdGhQcmV2aW91cyk7Ci0g
ICAgICAgIHJldHVybiBjYXBpdGFsaXplZFN0cmluZzsKLSAgICB9CisgICAgVGV4dEJyZWFrSXRl
cmF0b3IqIGJvdW5kYXJ5ID0gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nV2l0aFByZXZpb3VzLmRh
dGEoKSwgbV9sZW5ndGggKyAxKTsKKyAgICBpZiAoIWJvdW5kYXJ5KQorICAgICAgICByZXR1cm4g
dGhpczsKIAotICAgIGNhcGl0YWxpemVkU3RyaW5nLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3Rvciht
X2xlbmd0aCk7Ci0gICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fbGVuZ3RoID0gbV9sZW5ndGg7Cisg
ICAgVmVjdG9yPFVDaGFyPiBkYXRhKG1fbGVuZ3RoKTsKIAogICAgIGludDMyX3QgZW5kT2ZXb3Jk
OwogICAgIGludDMyX3Qgc3RhcnRPZldvcmQgPSB0ZXh0QnJlYWtGaXJzdChib3VuZGFyeSk7CiAg
ICAgZm9yIChlbmRPZldvcmQgPSB0ZXh0QnJlYWtOZXh0KGJvdW5kYXJ5KTsgZW5kT2ZXb3JkICE9
IFRleHRCcmVha0RvbmU7IHN0YXJ0T2ZXb3JkID0gZW5kT2ZXb3JkLCBlbmRPZldvcmQgPSB0ZXh0
QnJlYWtOZXh0KGJvdW5kYXJ5KSkgewogICAgICAgICBpZiAoc3RhcnRPZldvcmQgIT0gMCkgLy8g
SWdub3JlIGZpcnN0IGNoYXIgb2YgcHJldmlvdXMgc3RyaW5nCi0gICAgICAgICAgICBjYXBpdGFs
aXplZFN0cmluZy0+bV9kYXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPSBtX2RhdGFbc3RhcnRPZldvcmQg
LSAxXSA9PSBub0JyZWFrU3BhY2UgPyBub0JyZWFrU3BhY2UgOiB0b1RpdGxlQ2FzZShzdHJpbmdX
aXRoUHJldmlvdXNbc3RhcnRPZldvcmRdKTsKKyAgICAgICAgICAgIGRhdGFbc3RhcnRPZldvcmQg
LSAxXSA9IG1fZGF0YVtzdGFydE9mV29yZCAtIDFdID09IG5vQnJlYWtTcGFjZSA/IG5vQnJlYWtT
cGFjZSA6IHRvVGl0bGVDYXNlKHN0cmluZ1dpdGhQcmV2aW91c1tzdGFydE9mV29yZF0pOwogICAg
ICAgICBmb3IgKGludCBpID0gc3RhcnRPZldvcmQgKyAxOyBpIDwgZW5kT2ZXb3JkOyBpKyspCi0g
ICAgICAgICAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9kYXRhW2kgLSAxXSA9IG1fZGF0YVtpIC0g
MV07CisgICAgICAgICAgICBkYXRhW2kgLSAxXSA9IG1fZGF0YVtpIC0gMV07CiAgICAgfQogCi0g
ICAgZGVsZXRlVUNoYXJWZWN0b3Ioc3RyaW5nV2l0aFByZXZpb3VzKTsKLQotICAgIHJldHVybiBj
YXBpdGFsaXplZFN0cmluZzsKKyAgICByZXR1cm4gYWRvcHQoZGF0YSk7CiB9CiAKLWludCBTdHJp
bmdJbXBsOjp0b0ludChib29sKiBvaykgY29uc3QKK2ludCBTdHJpbmdJbXBsOjp0b0ludChib29s
KiBvaykKIHsKICAgICB1bnNpZ25lZCBpID0gMDsKIApAQCAtNTU5LDcgKzQ2Nyw3IEBAIGludCBT
dHJpbmdJbXBsOjp0b0ludChib29sKiBvaykgY29uc3QKICAgICByZXR1cm4gRGVwcmVjYXRlZENv
bnN0U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihtX2RhdGEp
LCBpKS5zdHJpbmcoKS50b0ludChvayk7CiB9CiAKLWludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2
NChib29sKiBvaykgY29uc3QKK2ludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2NChib29sKiBvaykK
IHsKICAgICB1bnNpZ25lZCBpID0gMDsKIApAQCAtNTgwLDcgKzQ4OCw3IEBAIGludDY0X3QgU3Ry
aW5nSW1wbDo6dG9JbnQ2NChib29sKiBvaykgY28KICAgICByZXR1cm4gRGVwcmVjYXRlZENvbnN0
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihtX2RhdGEpLCBp
KS5zdHJpbmcoKS50b0ludDY0KG9rKTsKIH0KIAotdWludDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50
NjQoYm9vbCogb2spIGNvbnN0Cit1aW50NjRfdCBTdHJpbmdJbXBsOjp0b1VJbnQ2NChib29sKiBv
aykKIHsKICAgICB1bnNpZ25lZCBpID0gMDsKIApAQCAtNTk3LDcgKzUwNSw3IEBAIHVpbnQ2NF90
IFN0cmluZ0ltcGw6OnRvVUludDY0KGJvb2wqIG9rKSAKICAgICByZXR1cm4gRGVwcmVjYXRlZENv
bnN0U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihtX2RhdGEp
LCBpKS5zdHJpbmcoKS50b1VJbnQ2NChvayk7CiB9CiAKLWRvdWJsZSBTdHJpbmdJbXBsOjp0b0Rv
dWJsZShib29sKiBvaykgY29uc3QKK2RvdWJsZSBTdHJpbmdJbXBsOjp0b0RvdWJsZShib29sKiBv
aykKIHsKICAgICBpZiAoIW1fbGVuZ3RoKSB7CiAgICAgICAgIGlmIChvaykKQEAgLTYxMiw3ICs1
MjAsNyBAQCBkb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2spIGNvCiAgICAgcmV0
dXJuIHZhbDsKIH0KIAotZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaykgY29uc3QK
K2Zsb2F0IFN0cmluZ0ltcGw6OnRvRmxvYXQoYm9vbCogb2spCiB7CiAgICAgLy8gRklYTUU6IHRo
aXMgd2lsbCByZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZG9lcyBub3QgZml0IGludG8g
YSBmbG9hdAogICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHRvRG91YmxlKG9rKSk7
CkBAIC02NTIsNyArNTYwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbgogLy8gYmFzZWQgYWxnb3JpdGhtcy4KIC8vIE5PVEU6IFRob3NlIHRpbWUgdHJpYWxzIHdl
cmUgZG9uZSB3aGVuIHRoaXMgZnVuY3Rpb24gd2FzIHBhcnQgb2YgS1dRJ3MgRGVwcmVjYXRlZFN0
cmluZwogLy8gSXQgd2FzIGNvcGllZCBoZXJlIGFuZCBjaGFuZ2VkIHNsaWdodGx5IHNpbmNlLgot
aW50IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogY2hzLCBpbnQgaW5kZXgsIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSkgY29uc3QKK2ludCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIGNocywg
aW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCiB7CiAgICAgaWYgKCFjaHMgfHwgaW5kZXgg
PCAwKQogICAgICAgICByZXR1cm4gLTE7CkBAIC02ODYsNyArNTk0LDcgQEAgaW50IFN0cmluZ0lt
cGw6OmZpbmQoY29uc3QgY2hhciogY2hzLCBpbgogICAgIHJldHVybiAtMTsKIH0KIAotaW50IFN0
cmluZ0ltcGw6OmZpbmQoY29uc3QgVUNoYXIgYywgaW50IHN0YXJ0KSBjb25zdAoraW50IFN0cmlu
Z0ltcGw6OmZpbmQoY29uc3QgVUNoYXIgYywgaW50IHN0YXJ0KQogewogICAgIHVuc2lnbmVkIGlu
dCBpbmRleCA9IHN0YXJ0OwogICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCApCkBAIC03MDEsNyAr
NjA5LDcgQEAgaW50IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgVUNoYXIgYywgaW50IAogCiAvLyBU
aGlzIHdhcyBjb3BpZWQgZnJvbSBEZXByZWNhdGVkU3RyaW5nIGFuZCBtYWRlIHRvIHdvcmsgaGVy
ZSB3LyBzbWFsbCBtb2RpZmljYXRpb25zLgogLy8gRklYTUUgY29tbWVudHMgd2VyZSBmcm9tIHRo
ZSBEZXByZWNhdGVkU3RyaW5nIHZlcnNpb24uCi1pbnQgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBT
dHJpbmdJbXBsKiBzdHIsIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAoraW50
IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogc3RyLCBpbnQgaW5kZXgsIGJvb2wgY2FzZVNl
bnNpdGl2ZSkKIHsKICAgICAvLyBGSVhNRSwgdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWxnb3Jp
dGhtCiAgICAgLyoKQEAgLTc2MCw3ICs2NjgsNyBAQCBpbnQgU3RyaW5nSW1wbDo6ZmluZChjb25z
dCBTdHJpbmdJbXBsKiBzCiAgICAgfQogfQogCi1pbnQgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQo
Y29uc3QgVUNoYXIgYywgaW50IGluZGV4KSBjb25zdAoraW50IFN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKGNvbnN0IFVDaGFyIGMsIGludCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gKGludClt
X2xlbmd0aCB8fCBtX2xlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gLTE7CkBAIC03NzYsNyAr
Njg0LDcgQEAgaW50IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKGNvbnN0IFVDaGFyIAogICAgIH0K
IH0KIAotaW50IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKGNvbnN0IFN0cmluZ0ltcGwqIHN0ciwg
aW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CitpbnQgU3RyaW5nSW1wbDo6cmV2
ZXJzZUZpbmQoU3RyaW5nSW1wbCogc3RyLCBpbnQgaW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkK
IHsKICAgICAvLyBGSVhNRSwgdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWxnb3JpdGhtCiAgICAg
LyoKQEAgLTgzNSw3ICs3NDMsNyBAQCBpbnQgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoY29uc3Qg
U3RyaW5nCiAgICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFN0cmluZ0ltcGw6OmVuZHNXaXRoKGNv
bnN0IFN0cmluZ0ltcGwqIG1fZGF0YSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAorYm9vbCBT
dHJpbmdJbXBsOjplbmRzV2l0aChTdHJpbmdJbXBsKiBtX2RhdGEsIGJvb2wgY2FzZVNlbnNpdGl2
ZSkKIHsKICAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpbnQgc3RhcnQgPSBtX2xlbmd0aCAtIG1f
ZGF0YS0+bV9sZW5ndGg7CkBAIC04NDQsMzkgKzc1MiwzNCBAQCBib29sIFN0cmluZ0ltcGw6OmVu
ZHNXaXRoKGNvbnN0IFN0cmluZ0ltCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmdJbXBs
KiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIG9sZEMsIFVDaGFyIG5ld0MpIGNvbnN0CitQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgb2xkQywgVUNoYXIg
bmV3QykKIHsKICAgICBpZiAob2xkQyA9PSBuZXdDKQotICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxTdHJpbmdJbXBsKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOwogICAgIHVuc2lnbmVk
IGk7CiAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKQogICAgICAgICBpZiAobV9k
YXRhW2ldID09IG9sZEMpCiAgICAgICAgICAgICBicmVhazsKICAgICBpZiAoaSA9PSBtX2xlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RyaW5nSW1wbCo+KHRoaXMpOwotCi0gICAg
U3RyaW5nSW1wbCogYyA9IG5ldyBTdHJpbmdJbXBsOwotCi0gICAgYy0+bV9kYXRhID0gbmV3VUNo
YXJWZWN0b3IobV9sZW5ndGgpOwotICAgIGMtPm1fbGVuZ3RoID0gbV9sZW5ndGg7CisgICAgICAg
IHJldHVybiB0aGlzOwogCisgICAgVmVjdG9yPFVDaGFyPiBkYXRhKG1fbGVuZ3RoKTsKICAgICBm
b3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgY2ggPSBtX2Rh
dGFbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwot
ICAgICAgICBjLT5tX2RhdGFbaV0gPSBjaDsKKyAgICAgICAgZGF0YVtpXSA9IGNoOwogICAgIH0K
LQotICAgIHJldHVybiBjOworICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAotU3RyaW5nSW1w
bCogU3RyaW5nSW1wbDo6cmVwbGFjZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmdJbXBsKiBzdHIpIGNvbnN0CitQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxl
bmd0aFRvUmVwbGFjZSwgU3RyaW5nSW1wbCogc3RyKQogewogICAgIHBvc2l0aW9uID0gbWluKHBv
c2l0aW9uLCBsZW5ndGgoKSk7CiAgICAgbGVuZ3RoVG9SZXBsYWNlID0gbWluKGxlbmd0aFRvUmVw
bGFjZSwgbGVuZ3RoKCkgLSBwb3NpdGlvbik7CiAgICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQg
PSBzdHIgPyBzdHItPmxlbmd0aCgpIDogMDsKICAgICBpZiAoIWxlbmd0aFRvUmVwbGFjZSAmJiAh
bGVuZ3RoVG9JbnNlcnQpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVu
Z3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0luc2VydCk7CiAgICAgbWVtY3B5KGJ1
ZmZlci5kYXRhKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKICAg
ICBpZiAoc3RyKQpAQCAtODg2LDEwICs3ODksMTAgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6
cmVwbGFjZSh1bnNpZ25lZAogICAgIHJldHVybiBhZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmdJ
bXBsKiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFN0cmluZ0ltcGwq
IHJlcGxhY2VtZW50KSBjb25zdAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpy
ZXBsYWNlKFVDaGFyIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGxhY2VtZW50KQogewogICAgIGlm
ICghcmVwbGFjZW1lbnQpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIAogICAgIGludCByZXBTdHJMZW5n
dGggPSByZXBsYWNlbWVudC0+bGVuZ3RoKCk7CiAgICAgaW50IHNyY1NlZ21lbnRTdGFydCA9IDA7
CkBAIC05MDMsMTIgKzgwNiw5IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNo
YXIgcGEKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcywgd2UgZG9uJ3QgaGF2ZSB0
byBkbyBhbnkgbW9yZSB3b3JrCiAgICAgaWYgKCFtYXRjaENvdW50KQotICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxTdHJpbmdJbXBsKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOwogICAg
IAotICAgIC8vIENyZWF0ZSB0aGUgbmV3IFN0cmluZ0ltcGw7Ci0gICAgU3RyaW5nSW1wbCogZHN0
ID0gbmV3IFN0cmluZ0ltcGwoKTsKLSAgICBkc3QtPm1fbGVuZ3RoID0gbV9sZW5ndGggLSBtYXRj
aENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGgpOwotICAgIGRzdC0+bV9kYXRhID0g
bmV3VUNoYXJWZWN0b3IoZHN0LT5tX2xlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBkYXRhKG1f
bGVuZ3RoIC0gbWF0Y2hDb3VudCArIChtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoKSk7CiAgICAg
CiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50RW5kOwpA
QCAtOTE4LDI3ICs4MTgsMjcgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hh
ciBwYQogICAgIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3Jj
U2VnbWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2Vn
bWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRzdC0+bV9kYXRhICsg
ZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgZHN0T2Zmc2V0LCBt
X2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIG1lbWNw
eShkc3QtPm1fZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSArIGRzdE9m
ZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAgICAgICAgIHNyY1NlZ21lbnRT
dGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwogICAgIH0KIAogICAgIHNyY1NlZ21lbnRMZW5ndGgg
PSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICBtZW1jcHkoZHN0LT5tX2RhdGEgKyBk
c3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwotICAgIAotICAgIHJldHVybiBkc3Q7CisgICAgbWVtY3B5KGRhdGEuZGF0
YSgpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAotU3Ry
aW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFjZShjb25zdCBTdHJpbmdJbXBsKiBwYXR0ZXJuLCBj
b25zdCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkgY29uc3QKK1Bhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiBy
ZXBsYWNlbWVudCkKIHsKICAgICBpZiAoIXBhdHRlcm4gfHwgIXJlcGxhY2VtZW50KQotICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0
aGlzOwogCiAgICAgaW50IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLT5sZW5ndGgoKTsKICAgICBp
ZiAoIXBhdHRlcm5MZW5ndGgpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwq
Pih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIAogICAgIGludCByZXBTdHJM
ZW5ndGggPSByZXBsYWNlbWVudC0+bGVuZ3RoKCk7CiAgICAgaW50IHNyY1NlZ21lbnRTdGFydCA9
IDA7CkBAIC05NTIsMTIgKzg1Miw5IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2Uo
Y29uc3QgU3QKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcywgd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnkgbW9yZSB3b3JrCiAgICAgaWYgKCFtYXRjaENvdW50KQotICAgICAgICByZXR1
cm4gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOwog
ICAgIAotICAgIC8vIENyZWF0ZSB0aGUgbmV3IFN0cmluZ0ltcGw7Ci0gICAgU3RyaW5nSW1wbCog
ZHN0ID0gbmV3IFN0cmluZ0ltcGwoKTsKLSAgICBkc3QtPm1fbGVuZ3RoID0gbV9sZW5ndGggKyBt
YXRjaENvdW50ICogKHJlcFN0ckxlbmd0aCAtIHBhdHRlcm5MZW5ndGgpOwotICAgIGRzdC0+bV9k
YXRhID0gbmV3VUNoYXJWZWN0b3IoZHN0LT5tX2xlbmd0aCk7CisgICAgVmVjdG9yPFVDaGFyPiBk
YXRhKG1fbGVuZ3RoIC0gbWF0Y2hDb3VudCArIChtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoKSk7
CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50
RW5kOwpAQCAtOTY3LDI1ICs4NjQsMjUgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFj
ZShjb25zdCBTdAogICAgIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVy
biwgc3JjU2VnbWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0g
c3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRzdC0+bV9k
YXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgZHN0T2Zm
c2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAg
IG1lbWNweShkc3QtPm1fZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVw
U3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSAr
IGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVD
aGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAgICAgICAgIHNyY1Nl
Z21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyBwYXR0ZXJuTGVuZ3RoOwogICAgIH0KIAogICAg
IHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICBtZW1j
cHkoZHN0LT5tX2RhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3Jj
U2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShkYXRhLmRhdGEoKSAr
IGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSk7CiAKLSAgICByZXR1cm4gZHN0OworICAgIHJldHVybiBhZG9wdChkYXRh
KTsKIH0KIAotYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBs
KiBiKQorYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBiKQogewogICAgIHJl
dHVybiBTdHJpbmdIYXNoOjplcXVhbChhLCBiKTsKIH0KIAotYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKQorYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBhLCBjb25z
dCBjaGFyKiBiKQogewogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuICFiOwpAQCAtMTAwNSwx
MiArOTAyLDEyIEBAIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2gKICAg
ICByZXR1cm4gIWJbbGVuZ3RoXTsKIH0KIAotYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBT
dHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQorYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBiKQogewogICAgIHJldHVybiBDYXNlRm9sZGlu
Z0hhc2g6OmVxdWFsKGEsIGIpOwogfQogCi1ib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0
cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpCitib29sIGVxdWFsSWdub3JpbmdDYXNlKFN0cmlu
Z0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpCiB7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4g
IWI7CkBAIC0xMTM3LDcgKzEwMzQsNyBAQCB1bnNpZ25lZCBTdHJpbmdJbXBsOjpjb21wdXRlSGFz
aChjb25zdCBjCiAgICAgcmV0dXJuIGhhc2g7CiB9CiAKLVZlY3RvcjxjaGFyPiBTdHJpbmdJbXBs
Ojphc2NpaSgpIGNvbnN0CitWZWN0b3I8Y2hhcj4gU3RyaW5nSW1wbDo6YXNjaWkoKQogewogICAg
IFZlY3RvcjxjaGFyPiBidWZmZXIobV9sZW5ndGggKyAxKTsKICAgICAKQEAgLTExNTMsNyArMTA1
MCw3IEBAIFZlY3RvcjxjaGFyPiBTdHJpbmdJbXBsOjphc2NpaSgpIGNvbnN0CiAgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KIAotV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYXVs
dFdyaXRpbmdEaXJlY3Rpb24oKSBjb25zdAorV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5n
SW1wbDo6ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKQogewogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7CiAgICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9u
IGNoYXJEaXJlY3Rpb24gPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihtX2RhdGFbaV0pOwpAQCAt
MTE2NSwyMyArMTA2MiwxMSBAQCBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpk
ZWZhCiAgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CiB9CiAKLVN0cmluZ0lt
cGw6OlN0cmluZ0ltcGwoY29uc3QgSWRlbnRpZmllciYgc3RyKQorUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogc3RyLCB1bnNpZ25lZCBsZW4pCiB7Ci0gICAgaW5pdChyZWludGVycHJldF9jYXN0PGNvbnN0
IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwotfQotCi1TdHJpbmdJbXBsOjpTdHJp
bmdJbXBsKGNvbnN0IFVTdHJpbmcmIHN0cikKLXsKLSAgICBpbml0KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbChjb25zdCBVQ2hhciog
c3RyLCB1bnNpZ25lZCBsZW4pCi17Ci0gICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gbmV3IFN0cmlu
Z0ltcGw7CiAgICAgaWYgKCFsZW4gfHwgIXN0cikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAKLSAgICBVQ2hhciogc3RyaXBwZWRDb3B5ID0gbmV3VUNoYXJWZWN0b3IobGVuKTsKKyAgICAg
ICAgcmV0dXJuIGVtcHR5KCk7CisgICAgVmVjdG9yPFVDaGFyPiBzdHJpcHBlZENvcHkobGVuKTsK
ICAgICBpbnQgc3RyaXBwZWRMZW5ndGggPSBsZW47CiAgICAgYm9vbCBmb3VuZE51bGwgPSBmYWxz
ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKQEAgLTExOTUsMjMg
KzEwODAsNTMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAg
ICAgICAgICAgaWYgKFVDaGFyIGMgPSBzdHJbaV0pCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRD
b3B5W3N0cmlwcGVkTGVuZ3RoKytdID0gYzsKICAgICAgICAgfQorICAgICAgICBzdHJpcHBlZENv
cHkucmVzaXplKHN0cmlwcGVkTGVuZ3RoKTsKICAgICB9Ci0KLSAgICByZXN1bHQtPm1fZGF0YSA9
IHN0cmlwcGVkQ29weTsKLSAgICByZXN1bHQtPm1fbGVuZ3RoID0gc3RyaXBwZWRMZW5ndGg7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gYWRvcHQoc3RyaXBwZWRDb3B5KTsKIH0KIAot
U3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6YWRvcHQoVmVjdG9yPFVDaGFyPiYgYnVmZmVyKQorUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphZG9wdChWZWN0b3I8VUNoYXI+JiBidWZm
ZXIpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgIGlmIChzaXplID09
IDApCisgICAgICAgIHJldHVybiBlbXB0eSgpOworCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gYnVm
ZmVyLmNhcGFjaXR5KCk7CisKICAgICBVQ2hhciogZGF0YSA9IGJ1ZmZlci5yZWxlYXNlQnVmZmVy
KCk7Ci0gICAgZGF0YSA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MoZGF0YSwgc2l6
ZSAqIHNpemVvZihVQ2hhcikpKTsKKyAgICBpZiAoc2l6ZSA8IGNhcGFjaXR5KQorICAgICAgICBk
YXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhkYXRhLCBzaXplICogc2l6ZW9m
KFVDaGFyKSkpOwogCi0gICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gbmV3IFN0cmluZ0ltcGw7Cisg
ICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHQgPSBuZXcgU3RyaW5nSW1wbDsKICAgICBy
ZXN1bHQtPm1fbGVuZ3RoID0gc2l6ZTsKICAgICByZXN1bHQtPm1fZGF0YSA9IGRhdGE7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpj
cmVhdGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
ZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisgICAg
cmV0dXJuIG5ldyBTdHJpbmdJbXBsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGVtcHR5KCk7CisgICAgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKGNoYXJhY3Rl
cnMsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3Jl
YXRlKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0
dXJuIGVtcHR5KCk7CisgICAgcmV0dXJuIGNyZWF0ZShzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsK
K30KKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKK3sKKyAgICByZXR1
cm4gbmV3IFN0cmluZ0ltcGwoc3RyaW5nLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJp
bmdJbXBsLmgJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTA5ICs0NywxMDMgQEAgc3RydWN0IFN0cmlu
Z0hhc2g7CiBzdHJ1Y3QgVUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogCiBjbGFzcyBTdHJpbmdJbXBs
IDogcHVibGljIFJlZkNvdW50ZWQ8U3RyaW5nSW1wbD4gewotcHJpdmF0ZToKLSAgICBzdHJ1Y3Qg
V2l0aE9uZVJlZiB7IH07Ci0gICAgU3RyaW5nSW1wbChXaXRoT25lUmVmKSA6IG1fbGVuZ3RoKDAp
LCBtX2RhdGEoMCksIG1faGFzaCgwKSwgbV9pblRhYmxlKGZhbHNlKSwgbV9oYXNUZXJtaW5hdGlu
Z051bGxDaGFyYWN0ZXIoZmFsc2UpIHsgcmVmKCk7IH0KLSAgICB2b2lkIGluaXQoY29uc3QgY2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCBpbml0KGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQogcHJvdGVjdGVkOgogICAgIFN0cmluZ0ltcGwoKSA6IG1fbGVuZ3RoKDAp
LCBtX2RhdGEoMCksIG1faGFzaCgwKSwgbV9pblRhYmxlKGZhbHNlKSwgbV9oYXNUZXJtaW5hdGlu
Z051bGxDaGFyYWN0ZXIoZmFsc2UpIHsgfQotcHVibGljOgorCitwcml2YXRlOgogICAgIFN0cmlu
Z0ltcGwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFN0cmluZ0ltcGwoY29u
c3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgU3RyaW5nSW1wbChjb25zdCBjaGFyKik7
Ci0gICAgU3RyaW5nSW1wbChjb25zdCBLSlM6OklkZW50aWZpZXImKTsKLSAgICBTdHJpbmdJbXBs
KGNvbnN0IEtKUzo6VVN0cmluZyYpOwotICAgIH5TdHJpbmdJbXBsKCk7CiAKICAgICBzdHJ1Y3Qg
V2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3RlciB7IH07CiAgICAgU3RyaW5nSW1wbChjb25zdCBT
dHJpbmdJbXBsJiwgV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpcHBpbmdOdWxsKGNvbnN0IFVDaGFyKiwg
dW5zaWduZWQgbGVuKTsKLSAgICBzdGF0aWMgU3RyaW5nSW1wbCogYWRvcHQoVmVjdG9yPFVDaGFy
PiYpOworICAgIHN0cnVjdCBXaXRoT25lUmVmIHsgfTsKKyAgICBTdHJpbmdJbXBsKFdpdGhPbmVS
ZWYpIDogbV9sZW5ndGgoMCksIG1fZGF0YSgwKSwgbV9oYXNoKDApLCBtX2luVGFibGUoZmFsc2Up
LCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkgeyByZWYoKTsgfQorCitwdWJs
aWM6CisgICAgflN0cmluZ0ltcGwoKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKik7
CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENo
YXJhY3Rlcihjb25zdCBTdHJpbmdJbXBsJik7CiAKLSAgICBib29sIGhhc1Rlcm1pbmF0aW5nTnVs
bENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5nTnVs
bENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFZlY3RvcjxVQ2hhcj4mKTsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdCB7IGlmIChtX2hhc2ggPT0gMCkgbV9oYXNoID0gY29tcHV0ZUhhc2go
bV9kYXRhLCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KKyAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycygpIHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBib29sIGhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcigp
IHsgcmV0dXJuIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOyB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgeyBpZiAobV9oYXNoID09IDApIG1faGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0YSwg
bV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVI
YXNoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKICAgICBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgY2hhciopOwogICAgIAogICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBI
ZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFk
LgogICAgIC8vIFNpbmNlIFN0cmluZ0ltcGwgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCB0aGVyZSdz
IG5vIG90aGVyIHJlYXNvbiB0byBtYWtlIGEgY29weS4KLSAgICBTdHJpbmdJbXBsKiBjb3B5KCkg
Y29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwobV9kYXRhLCBtX2xlbmd0aCk7IH0KKyAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNvcHkoKSB7IHJldHVybiBuZXcgU3RyaW5nSW1wbChtX2Rh
dGEsIG1fbGVuZ3RoKTsgfQogCi0gICAgU3RyaW5nSW1wbCogc3Vic3RyaW5nKHVuc2lnbmVkIHBv
cywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwog
Ci0gICAgVUNoYXIgb3BlcmF0b3JbXShpbnQgcG9zKSBjb25zdCB7IHJldHVybiBtX2RhdGFbcG9z
XTsgfQotICAgIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29uc3Q7Cisg
ICAgVUNoYXIgb3BlcmF0b3JbXShpbnQgcG9zKSB7IHJldHVybiBtX2RhdGFbcG9zXTsgfQorICAg
IFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7CiAKLSAgICBMZW5ndGggdG9M
ZW5ndGgoKSBjb25zdDsKKyAgICBMZW5ndGggdG9MZW5ndGgoKTsKIAotICAgIGJvb2wgY29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFj
ZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwotCi0gICAgaW50IHRvSW50KGJv
b2wqIG9rID0gMCkgY29uc3Q7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZSwgdW5saWtlIERl
cHJlY2F0ZWRTdHJpbmcKLSAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKSBjb25zdDsg
Ly8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlLCB1bmxpa2UgRGVwcmVjYXRlZFN0cmluZwotICAg
IHVpbnQ2NF90IHRvVUludDY0KGJvb2wqIG9rID0gMCkgY29uc3Q7IC8vIGlnbm9yZXMgdHJhaWxp
bmcgZ2FyYmFnZSwgdW5saWtlIERlcHJlY2F0ZWRTdHJpbmcKLSAgICBkb3VibGUgdG9Eb3VibGUo
Ym9vbCogb2sgPSAwKSBjb25zdDsKLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCkgY29u
c3Q7Ci0KLSAgICBMZW5ndGgqIHRvQ29vcmRzQXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIExl
bmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3Q7Ci0gICAgYm9vbCBpc0xvd2VyKCkg
Y29uc3Q7Ci0gICAgU3RyaW5nSW1wbCogbG93ZXIoKSBjb25zdDsKLSAgICBTdHJpbmdJbXBsKiB1
cHBlcigpIGNvbnN0OwotICAgIFN0cmluZ0ltcGwqIHNlY3VyZShVQ2hhciBhQ2hhcikgY29uc3Q7
Ci0gICAgU3RyaW5nSW1wbCogY2FwaXRhbGl6ZShVQ2hhciBwcmV2aW91c0NoYXJhY3RlcikgY29u
c3Q7Ci0gICAgU3RyaW5nSW1wbCogZm9sZENhc2UoKSBjb25zdDsKLQotICAgIFN0cmluZ0ltcGwq
IHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwotICAgIFN0cmluZ0ltcGwqIHNpbXBsaWZ5V2hpdGVT
cGFjZSgpIGNvbnN0OwotCi0gICAgaW50IGZpbmQoY29uc3QgY2hhciosIGludCBpbmRleCA9IDAs
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OwotICAgIGludCBmaW5kKFVDaGFyLCBp
bnQgaW5kZXggPSAwKSBjb25zdDsKLSAgICBpbnQgZmluZChjb25zdCBTdHJpbmdJbXBsKiwgaW50
IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zT25seVdoaXRlc3BhY2UoKTsKKyAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKTsKKworICAgIGludCB0b0ludChib29sKiBvayA9IDAp
OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UsIHVubGlrZSBEZXByZWNhdGVkU3RyaW5nCisg
ICAgaW50NjRfdCB0b0ludDY0KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2Fy
YmFnZSwgdW5saWtlIERlcHJlY2F0ZWRTdHJpbmcKKyAgICB1aW50NjRfdCB0b1VJbnQ2NChib29s
KiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UsIHVubGlrZSBEZXByZWNhdGVk
U3RyaW5nCisgICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCk7CisgICAgZmxvYXQgdG9G
bG9hdChib29sKiBvayA9IDApOworCisgICAgTGVuZ3RoKiB0b0Nvb3Jkc0FycmF5KGludCYgbGVu
KTsKKyAgICBMZW5ndGgqIHRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pOworICAgIGJvb2wgaXNMb3dl
cigpOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXIoKTsKKyAgICBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHVwcGVyKCk7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzZWN1cmUo
VUNoYXIgYUNoYXIpOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY2FwaXRhbGl6ZShVQ2hh
ciBwcmV2aW91c0NoYXJhY3Rlcik7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBmb2xkQ2Fz
ZSgpOworCisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCisgICAgaW50
IGZpbmQoY29uc3QgY2hhciosIGludCBpbmRleCA9IDAsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRy
dWUpOworICAgIGludCBmaW5kKFVDaGFyLCBpbnQgaW5kZXggPSAwKTsKKyAgICBpbnQgZmluZChT
dHJpbmdJbXBsKiwgaW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKTsKIAotICAg
IGludCByZXZlcnNlRmluZChVQ2hhciwgaW50IGluZGV4KSBjb25zdDsKLSAgICBpbnQgcmV2ZXJz
ZUZpbmQoY29uc3QgU3RyaW5nSW1wbCosIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
dHJ1ZSkgY29uc3Q7CisgICAgaW50IHJldmVyc2VGaW5kKFVDaGFyLCBpbnQgaW5kZXgpOworICAg
IGludCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgaW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRp
dmUgPSB0cnVlKTsKICAgICAKLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nSW1wbCog
bV9kYXRhLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKG1f
ZGF0YSwgMCwgY2FzZVNlbnNpdGl2ZSkgPT0gMDsgfQotICAgIGJvb2wgZW5kc1dpdGgoY29uc3Qg
U3RyaW5nSW1wbCosIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OworICAgIGJvb2wg
c3RhcnRzV2l0aChTdHJpbmdJbXBsKiBtX2RhdGEsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
IHsgcmV0dXJuIGZpbmQobV9kYXRhLCAwLCBjYXNlU2Vuc2l0aXZlKSA9PSAwOyB9CisgICAgYm9v
bCBlbmRzV2l0aChTdHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7CiAKLSAg
ICAvLyBEb2VzIG5vdCBtb2RpZnkgdGhlIHN0cmluZy4KLSAgICBTdHJpbmdJbXBsKiByZXBsYWNl
KFVDaGFyLCBVQ2hhcikgY29uc3Q7Ci0gICAgU3RyaW5nSW1wbCogcmVwbGFjZShVQ2hhciwgY29u
c3QgU3RyaW5nSW1wbCopIGNvbnN0OwotICAgIFN0cmluZ0ltcGwqIHJlcGxhY2UoY29uc3QgU3Ry
aW5nSW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBTdHJpbmdJbXBsKiByZXBs
YWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IFN0cmluZ0ltcGwqKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFVDaGFyKTsKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIsIFN0cmluZ0ltcGwqKTsKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwq
KTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOwogCiAgICAgc3RhdGljIFN0cmluZ0ltcGwqIGVtcHR5
KCk7CiAKLSAgICBWZWN0b3I8Y2hhcj4gYXNjaWkoKSBjb25zdDsKKyAgICBWZWN0b3I8Y2hhcj4g
YXNjaWkoKTsKIAotICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGRlZmF1bHRXcml0aW5nRGly
ZWN0aW9uKCkgY29uc3Q7CisgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGVmYXVsdFdyaXRp
bmdEaXJlY3Rpb24oKTsKIAogI2lmIFBMQVRGT1JNKENGKQotICAgIFN0cmluZ0ltcGwoQ0ZTdHJp
bmdSZWYpOwotICAgIENGU3RyaW5nUmVmIGNyZWF0ZUNGU3RyaW5nKCkgY29uc3Q7CisgICAgQ0ZT
dHJpbmdSZWYgY3JlYXRlQ0ZTdHJpbmcoKTsKICNlbmRpZgogI2lmZGVmIF9fT0JKQ19fCi0gICAg
U3RyaW5nSW1wbChOU1N0cmluZyopOwotICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpIGNvbnN0Owor
ICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oU1lNQklBTikK
LSAgICBTdHJpbmdJbXBsKGNvbnN0IFREZXNDJik7Ci0gICAgVFB0ckMgZGVzKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIFN0cmluZ0ltcGwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwogCiBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIFVDaGFyKiBtX2RhdGE7CisgICAgY29u
c3QgVUNoYXIqIG1fZGF0YTsKIAogICAgIGZyaWVuZCBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAg
ZnJpZW5kIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CkBAIC0xNjAsMTMgKzE1NCwxMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7CiB9Owog
Ci1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7Ci1ib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7Ci1pbmxpbmUgYm9vbCBlcXVh
bChjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBh
KTsgfQotCi1ib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBT
dHJpbmdJbXBsKik7Ci1ib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBjaGFyKik7Ci1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBh
LCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBhKTsg
fQorYm9vbCBlcXVhbChTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOworYm9vbCBlcXVhbChTdHJp
bmdJbXBsKiwgY29uc3QgY2hhciopOworaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwg
U3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgYSk7IH0KKworYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOworYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShTdHJpbmdJbXBsKiwgY29uc3QgY2hhciopOworaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nh
c2UoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UoYiwgYSk7IH0KIAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5n
Q0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdDRi5j
cHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0NG
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBTdHJpbmc6OlN0cmluZyhDRlN0
cmluZ1JlZiBzdHIpCiAgICAgZWxzZSB7CiAgICAgICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVm
ZmVyKHNpemUpOwogICAgICAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoc3RyLCBDRlJhbmdlTWFr
ZSgwLCBzaXplKSwgKFVuaUNoYXIqKWJ1ZmZlci5kYXRhKCkpOwotICAgICAgICBtX2ltcGwgPSBu
ZXcgU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgbV9pbXBsID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHNpemUpOwogICAgIH0KIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHJldmlzaW9uIDI5MDg4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRlN0cmlu
Z1JlZiBTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZygpIGNvbnN0CitDRlN0cmluZ1JlZiBTdHJp
bmdJbXBsOjpjcmVhdGVDRlN0cmluZygpCiB7Ci0gICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoTlVMTCwgKGNvbnN0IFVuaUNoYXIqKW1fZGF0YSwgbV9sZW5ndGgpOworICAg
IHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKE5VTEwsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1fbGVuZ3RoKTsKIH0KIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkocmV2aXNpb24gMjkwODgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHJpbmdJ
bXBsOjpvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3QKK1N0cmluZ0ltcGw6Om9wZXJhdG9yIE5T
U3RyaW5nICooKQogewogICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6
bV9kYXRhIGxlbmd0aDptX2xlbmd0aF07CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
bWFjL1N0cmluZ01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L1N0cmluZ01hYy5tbQkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
bWFjL1N0cmluZ01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBTdHJpbmc6
OlN0cmluZyhOU1N0cmluZyogc3RyKQogICAgIGVsc2UgewogICAgICAgICBWZWN0b3I8VUNoYXIs
IDEwMjQ+IGJ1ZmZlcihzaXplKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKHJlaW50
ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0ciksIENGUmFuZ2VNYWtlKDAsIHNpemUpLCBidWZm
ZXIuZGF0YSgpKTsKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRhdGEo
KSwgc2l6ZSk7CisgICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShidWZmZXIuZGF0
YSgpLCBzaXplKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9xdC9T
dHJpbmdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1N0cmlu
Z1F0LmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvU3Ry
aW5nUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMCArMzUsMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gU3RyaW5nIGNvbnZlcnNpb25zCiBTdHJpbmc6OlN0cmluZyhjb25zdCBRU3Ry
aW5nJiBxc3RyKQogewotICAgIGlmIChxc3RyLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1faW1wbCA9
IDA7CisgICAgaWYgKHFzdHIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
dW5zaWduZWQgaW50IGxlbiA9IHFzdHIubGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIHN0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihxc3RyLmNvbnN0RGF0YSgpKTsKLQotICAg
IGlmICghc3RyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGxlbiA9PSAwKQotICAg
ICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9p
bXBsID0gbmV3IFN0cmluZ0ltcGwoc3RyLCBsZW4pOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocXN0ci5jb25zdERhdGEoKSks
IHFzdHIubGVuZ3RoKCkpOwogfQogCiBTdHJpbmc6OlN0cmluZyhjb25zdCBRU3RyaW5nUmVmJiBy
ZWYpCiB7CiAgICAgaWYgKCFyZWYuc3RyaW5nKCkpIAotICAgICAgICBtX2ltcGwgPSAwOwotICAg
IGVsc2UgaWYgKCFyZWYubGVuZ3RoKCkpIAotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpl
bXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihyZWYudW5pY29kZSgpKSwgcmVmLmxlbmd0aCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHJlZi51bmljb2RlKCkpLCByZWYubGVuZ3RoKCkpOwog
fQogCiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvd3gvU3RyaW5nV3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC93eC9TdHJpbmdXeC5jcHAJKHJldmlz
aW9uIDI5MDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3d4L1N0cmluZ1d4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCB3eFN0cmlu
ZyYgd3hzdHIpCiAgICAgLy8gY29udmVyc2lvbiB0byBVVEYtMTYgb3IgZ2V0dGluZyBpbnRlcm5h
bCBidWZmZXIgaXNuJ3Qgc3VwcG9zZWQgdG8gZmFpbDoKICAgICB3eEFTU0VSVF9NU0coc3RyICE9
IE5VTEwsIF9UKCJmYWlsZWQgc3RyaW5nIGNvbnZlcnNpb24/IikpOwogCi0gICAgbV9pbXBsID0g
bmV3IFN0cmluZ0ltcGwoc3RyLCBsZW4pOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShzdHIsIGxlbik7CiB9CiAKIFN0cmluZzo6b3BlcmF0b3Igd3hTdHJpbmcoKSBjb25zdApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJSLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCUi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyQlI6OlJlbmRlckJSKE5vZGUqIG5vZGUpCi0gICAgOiBS
ZW5kZXJUZXh0KG5vZGUsIG5ldyBTdHJpbmdJbXBsKCJcbiIpKQorICAgIDogUmVuZGVyVGV4dChu
b2RlLCBTdHJpbmdJbXBsOjpjcmVhdGUoIlxuIikpCiAgICAgLCBtX2xpbmVIZWlnaHQoLTEpCiB7
CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2
aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXND
aGlsZE9mSGlkZGVuQ29udGFpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZW5kZXJTVkdJbmxp
bmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqIG4sIFN0cmluZ0ltcGwqIHN0cikgCitS
ZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqIG4sIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gc3RyKSAKICAgICA6IFJlbmRlclRleHQobiwgc3RyKQogewogfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gMjkwODgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHBy
b2plY3QuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxvamgxNkBzdHVk
ZW50LmNhbnRlcmJ1cnkuYWMubno+Ci0gKiAgICAgICAgICAgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dCA6IHB1YmxpYyBSZW5kZXJU
ZXh0IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBTdHJpbmdJbXBs
Kik7CisgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
Pik7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR0lubGluZVRleHQiOyB9CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0
cnVlKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIHsgcmV0dXJuIGZhbHNlOyB9
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgaW5saW5lIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IFN0cmluZ0ltcGwq
IHRleHQpCitzdGF0aWMgaW5saW5lIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKFN0cmluZ0lt
cGwqIHRleHQpCiB7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gdGV4dC0+Y2hhcmFjdGVycygp
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQtPmxlbmd0aCgpOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDEwICs0NywxMCBAQCBSZW5kZXJUZXh0RnJhZ21lbnQ6OlJlbmRlclRleHRGcmFnbWVudChOCiBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHRGcmFnbWVudDo6b3JpZ2luYWxUZXh0KCkg
Y29uc3QKIHsKICAgICBOb2RlKiBlID0gZWxlbWVudCgpOwotICAgIFN0cmluZ0ltcGwqIHJlc3Vs
dCA9IChlID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5zdHJpbmcoKSA6IGNvbnRlbnRTdHJpbmco
KSk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IChlID8gc3RhdGljX2Nhc3Q8VGV4
dCo+KGUpLT5zdHJpbmcoKSA6IGNvbnRlbnRTdHJpbmcoKSk7CiAgICAgaWYgKHJlc3VsdCAmJiAo
c3RhcnQoKSA+IDAgfHwgc3RhcnQoKSA8IHJlc3VsdC0+bGVuZ3RoKCkpKQogICAgICAgICByZXN1
bHQgPSByZXN1bHQtPnN1YnN0cmluZyhzdGFydCgpLCBlbmQoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0RnJh
Z21lbnQ6OmRlc3Ryb3koKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18242</attachid>
            <date>2008-01-02 15:41:11 -0800</date>
            <delta_ts>2008-01-02 16:21:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>StringImplPatch.txt</filename>
            <type>text/plain</type>
            <size>77707</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTA5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYyIEBACisyMDA4LTAxLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzEyCisgICAgICAgICAgY2hh
bmdlIFN0cmluZ0ltcGwgdG8gdGFrZSBhbmQgcmV0dXJuIFBhc3NSZWZQdHIgaW5zdGVhZCBvZiBy
YXcgcG9pbnRlcnMKKworICAgICAgICBBbHNvIGVsaW1pbmF0ZWQgdXNlIG9mIGNvbnN0IFN0cmlu
Z0ltcGwuIFNpbmNlIFN0cmluZ0ltcGwgaXMgaW1tdXRhYmxlIHRoZXJlCisgICAgICAgIGlzIG5v
IGRpc3RpbmN0aW9uIGJldHdlZW4gYSBjb25zdCBhbmQgbm9uLWNvbnN0IG9uZSBhdCB0aGUgbW9t
ZW50LgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAq
IGNzcy9DU1NIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVUkwpOiBNYWtlIFN0
cmluZyBkaXJlY3RseSwgbm90IGJ5IG1ha2luZyBhIFN0cmluZ0ltcGwuCisgICAgICAgICogZG9t
L0F0dHIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXR0cjo6Y3JlYXRlVGV4dENoaWxkKTogQ29u
dmVydCBBdG9taWNTdHJpbmcgdG8gU3RyaW5nIHdpdGggZG9tU3RyaW5nLAorICAgICAgICBub3Qg
dmlhIFN0cmluZ0ltcGwuCisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpzZXRWYWx1ZSk6IFJlbW92
ZSB1bm5lZWQgY2FsbCB0byBpbXBsKCkgd2hlbiBwYXNzaW5nIGEgU3RyaW5nCisgICAgICAgIHRv
IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIFN0cmluZy4KKworICAgICAgICAqIGRvbS9DREFUQVNl
Y3Rpb24uY3BwOiBSZW1vdmVkIHVudXNlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6
OkNEQVRBU2VjdGlvbjo6Y2xvbmVOb2RlKTogQWRkZWQgYSBub3ctbmVlZGVkIC5nZXQoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KTogQ2hhbmdlZCBmdW5jdGlv
biB0byB0YWtlIGEgUGFzc1JlZlB0ci4KKyAgICAgICAgKiBkb20vQ0RBVEFTZWN0aW9uLmg6CisK
KyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKTogUmVtb3ZlZCB1bm5lZWRlZCBpbml0aWFsaXphdGlv
biBhbmQKKyAgICAgICAgcmVmKCkgbm93IHRoYXQgdGhlIHN0cmluZyBpcyBhIFJlZlB0ci4gQWxz
byB1cGRhdGVkIHRvIG5vdCBjYWxsICJuZXcgU3RyaW5nSW1wbCIuCisgICAgICAgIChXZWJDb3Jl
OjpDaGFyYWN0ZXJEYXRhOjp+Q2hhcmFjdGVyRGF0YSk6IFJlbW92ZWQgdW5uZWVkZWQgZGVyZWYo
KSBzaW5jZSBpdCdzCisgICAgICAgIGEgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFj
dGVyRGF0YTo6c2V0RGF0YSk6IE1vcmUgb2YgdGhhdC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGE6OnN1YnN0cmluZ0RhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGE6OmFwcGVuZERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rl
ckRhdGE6Omluc2VydERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRh
dGE6OmRlbGV0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6
OnJlcGxhY2VEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpu
b2RlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3Bh
dGNoTW9kaWZpZWRFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YTo6ZHVtcCk6IERpdHRvLgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6IENoYW5nZWQg
dG8gdXNlIGEgUmVmUHRyLiBJIGNvdWxkIGhhdmUgdXNlZCBhIFN0cmluZworICAgICAgICBpbnN0
ZWFkLCBidXQgc2luY2UgU3RyaW5nIGFkZHMgZXh0cmEgYnJhbmNoZXMgdG8gaGFuZGxlIDAsIEkg
ZmlndXJlZCBpdCB3YXMKKyAgICAgICAgbW9yZSBjb25zZXJ2YXRpdmUgdG8ganVzdCB1c2UgUmVm
UHRyLiBMYXRlciBpdCB3b3VsZCBiZSBnb29kIHRvIGZpZ3VyZSBvdXQKKyAgICAgICAgd2hpY2gg
aXMgcHJlZmVycmVkIHN0eWxlIGFuZCBiZSBtb3JlIGNvbnNpc3RlbnQuIE1heWJlIHdlJ2xsIHBo
YXNlIG91dAorICAgICAgICBTdHJpbmdJbXBsLCBvciBtYXliZSB3ZSdsbCBnbyB0aGUgb3RoZXIg
d2F5IGFuZCB1c2UgaXQgbW9yZSBzaW5jZSBpdCBjYW4gYmUKKyAgICAgICAgbW9yZSBlZmZpY2ll
bnQuCisKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YWRkU3RyaW5nKTogQ2hhbmdlZCBzZXQgdG8gdXNlIFN0cmluZyByYXRoZXIgdGhhbiBT
dHJpbmdJbXBsLgorICAgICAgICAoV2ViQ29yZTo6aXNTVkcxMEZlYXR1cmUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzU1ZHMTFGZWF0dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSZXBsYWNlZCBjdXN0b20gY29k
ZSB0bworICAgICAgICBmaW5kIGEgY29sb24gd2l0aCBhIGNhbGwgdG8gU3RyaW5nOjpmaW5kLgor
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjppbnNl
cnROb2RlKTogVXBkYXRlZCBzaW5jZSB0aGUgcmVzdWx0IG9mIHNwbGl0VGV4dCBpcyBub3cKKyAg
ICAgICAgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dDo6c3BsaXRUZXh0KTogVXBkYXRlZCBzaW5jZSBzdHIgaXMgbm93IGEgUmVm
UHRyLiBBbHNvIG1hZGUgdGhlCisgICAgICAgIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGJlIGEg
UGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OmNyZWF0ZVJlbmRlcmVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVOZXcpOiBNYWRlIHRoZSBwYXJhbWV0
ZXIgYW5kIHJlc3VsdCBib3RoIGJlIFBhc3NSZWZQdHIuCisgICAgICAgICogZG9tL1RleHQuaDoK
KworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6Om5vZGVOYW1lKTogVXNlIFN0cmluZzo6dXBwZXIuCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVtR3JhcGhlbWVDbHVz
dGVycyk6IFJlbW92ZSBub3ctdW5uZWVkZWQgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpudW1D
aGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hU
TUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKTogVXBkYXRlZCBmb3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2UuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU3RyaW5n
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKTogVXBkYXRlZCBzaW5jZSB0aGVyZSBpcyBubyBsb25nZXIK
KyAgICAgICAgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgc3RyaW5nLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOiBBZGRlZCBuZXcgY29uc3RydWN0b3JzIHRo
YXQgdGFrZQorICAgICAgICBQYXNzUmVmUHRyIGFuZCBSZWZQdHIuIFJlbW92ZWQgbWlzbGVhZGlu
ZyBjb21tZW50LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOiBDaGFuZ2VkIHRvIHVzZSBTdHJpbmdJbXBsOjpj
cmVhdGUsIHdoaWNoIGhhbmRsZXMKKyAgICAgICAgdGhlIGVtcHR5IHN0cmluZyBhdXRvbWF0aWNh
bGx5LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjphcHBlbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZzo6Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24pOiBTaW1pbGFy
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpmb3JtYXQpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvU3RyaW5nSGFzaC5oOiBUb29rIG91dCB1bm5lZWRlZCBjb25zdC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVVQ2hhclZlY3Rvcik6IENoYW5nZWQgdG8gdGFrZSBhIGNvbnN0IHBvaW50ZXIgc2lu
Y2UgdGhlCisgICAgICAgIGJ1ZmZlcnMgYXJlIG5vdyBjb25zdCBVQ2hhciBidWZmZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3RyaW5nSW1wbCk6IFJlbW92ZWQgc29tZSBjb25z
dHJ1Y3RvcnMuIEdvdCByaWQgb2YgdGhlCisgICAgICAgIHNlcGFyYXRlIGluaXQgZnVuY3Rpb25z
LiBUaGUgY29uc3RydWN0b3JzIGFyZSBub3cgcHJpdmF0ZSBhbmQgdXNlZCBvbmx5IGluCisgICAg
ICAgIHRoZSBjcmVhdGUgZnVuY3Rpb25zIGFuZCBvbmUgb3IgdHdvIG90aGVyIHBsYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOiBSZW1v
dmVkIG5vdy1tZWFuaW5nbGVzcyBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6
OnN1YnN0cmluZyk6IERpdHRvLiBBbHNvIGNoYW5nZWQgcmV0dXJuIHZhbHVlIHRvIGJlIGEKKyAg
ICAgICAgUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNoYXJhY3Rl
clN0YXJ0aW5nQXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvTGVu
Z3RoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0Nvb3Jkc0FycmF5
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0xlbmd0aEFycmF5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppc0xvd2VyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpsb3dlcik6IERpdHRvLiBDaGFuZ2VkIHRvIHVz
ZSBWZWN0b3IgYW5kIGFkb3B0IHNvIHdlCisgICAgICAgIGRvbid0IGhhdmUgdG8gdXNlIG5ldyBk
aXJlY3RseSBoZXJlLiBNYWtlcyBlbXB0eSBzdHJpbmcgaGFuZGxpbmcgbW9yZSBjb25zaXN0ZW50
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6dXBwZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNlY3VyZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6Zm9sZENhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OnN0cmlwV2hpdGVTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6c2ltcGxpZnlXaGl0ZVNwYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJ
bXBsOjpjYXBpdGFsaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0
b0ludCk6IFJlbW92ZWQgbm93LW1lYW5pbmdsZXNzIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6dG9JbnQ2NCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6dG9VSW50NjQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvRG91
YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0Zsb2F0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmaW5kKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6ZW5kc1dpdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnJlcGxhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nQ2FzZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6YXNjaWkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6YWRvcHQpOiBBZGRlZCBzcGVjaWFsIGNh
c2Ugc28gdGhpcyB1c2VzIHRoZSBzaGFyZWQKKyAgICAgICAgZW1wdHkgc3RyaW5nIGxpa2Ugb3Ro
ZXIgZnVuY3Rpb25zLiBBbHNvIG9wdGltaXplZCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCisg
ICAgICAgIHZlY3RvciBoYXBwZW5zIHRvIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgc2l6ZSBzbyB3
ZSBkb24ndCBkbyBhIGZhc3RSZWFsbG9jCisgICAgICAgIGF0IGFsbCBpbiB0aG9zZSBjYXNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6IEFkZGVkLiBUaGVzZSBhcmUg
bm93IHRoZSBwdWJsaWMgZnVuY3Rpb25zIGZvcgorICAgICAgICBjcmVhdGluZyBuZXcgU3RyaW5n
SW1wbCBvYmplY3RzLiBUaGV5IGFsbCBpbXBsZW1lbnQgdGhlIHNoYXJlZCBlbXB0eSBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxs
Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoKKworICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nOjpTdHJpbmcpOiBVc2UgU3RyaW5nSW1wbDo6Y3JlYXRlIGluc3RlYWQgb2YgbmV3IFN0
cmluZ0ltcGwuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOiBSZW1vdmVkIG5v
dy1vYnNvbGV0ZSBjb25zdC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBs
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6b3BlcmF0b3IgTlNTdHJpbmcg
Kik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL1N0cmluZ01hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZzo6U3RyaW5nKTogVXNlIFN0cmluZ0ltcGw6OmNyZWF0ZSBp
bnN0ZWFkIG9mIG5ldyBTdHJpbmdJbXBsLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvcXQvU3Ry
aW5nUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L3d4L1N0cmluZ1d4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6U3RyaW5nKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJSLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJSOjpSZW5kZXJCUik6IERpdHRvLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6UmVuZGVyU1ZHSW5saW5lVGV4dCk6IFVzZSBQYXNzUmVm
UHRyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJzQXJlQWxsQVNDSUkpOiBSZW1vdmVkIG5vdy11bm5lZWRlZCBjb25zdC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRGcmFnbWVudDo6b3JpZ2luYWxUZXh0KTogVXNlIFJlZlB0ci4KKwogMjAwOC0wMS0wMiAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4ZWQgYSB0
eXBvIChwb2ludGVkIG91dCBpbiByZXZpZXcsIGJ1dCBJIHNvbWVob3cgbWlzc2VkIGl0IGF0IGZp
cnN0KS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDkgQEAgX19aTjdXZWJDb3Jl
MTBFdmVudE5hbWVzMTBjbGlja0V2ZW50RQogX19aTjdXZWJDb3JlMTBFdmVudE5hbWVzMTJrZXlk
b3duRXZlbnRFCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnRDMUVSS05TXzEyQXRvbWljU3RyaW5n
RWJiUE5TXzlET01XaW5kb3dFaWlpaWliYmJidFBOU18xNUV2ZW50VGFyZ2V0Tm9kZUVQTlNfOUNs
aXBib2FyZEViCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGwxMWNvbXB1dGVIYXNoRVBLdGoKK19f
Wk43V2ViQ29yZTEwU3RyaW5nSW1wbDdyZXBsYWNlRXR0CiBfX1pON1dlYkNvcmUxMFN0cmluZ0lt
cGxEMUV2CitfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjdXZWJD
b3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJh
eQogX19aTjdXZWJDb3JlMTFFZGl0Q29tbWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRp
dENvbW1hbmQ3dW5hcHBseUV2CkBAIC00MTAsOCArNDEyLDggQEAgX19aTjdXZWJDb3JlNUltYWdl
MjFnZXRUSUZGUmVwcmVzZW50YXRpbwogX19aTjdXZWJDb3JlNVJhbmdlQzFFUE5TXzhEb2N1bWVu
dEVQTlNfNE5vZGVFaVM0X2kKIF9fWk43V2ViQ29yZTVSYW5nZUQxRXYKIF9fWk43V2ViQ29yZTVj
YWNoZUV2Ci1fX1pON1dlYkNvcmU1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUEtjCi1fX1pON1dl
YkNvcmU1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUzJfCitfX1pON1dlYkNvcmU1ZXF1YWxFUE5T
XzEwU3RyaW5nSW1wbEVQS2MKK19fWk43V2ViQ29yZTVlcXVhbEVQTlNfMTBTdHJpbmdJbXBsRVMx
XwogX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0
aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktO
U182U3RyaW5nRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTNjYW5ESFRNTFBhc3Rl
RXYKQEAgLTU0MSw4ICs1NDMsNiBAQCBfX1pON1dlYkNvcmU5VGltZXJCYXNlRDJFdgogX19aTjdX
ZWJDb3JlOXBhZ2VDYWNoZUV2CiBfX1pON1dlYkNvcmVlcUVSS05TXzE5UmVzb3VyY2VSZXF1ZXN0
QmFzZUVTMl8KIF9fWk43V2ViQ29yZWVxRVJLTlNfNEtVUkxFUzJfCi1fX1pOSzdXZWJDb3JlMTBT
dHJpbmdJbXBsN3JlcGxhY2VFdHQKLV9fWk5LN1dlYkNvcmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJp
bmdFdgogX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2ViQ29yZTEx
Q29udGV4dE1lbnUxOXBsYXRmb3JtRGVzY3JpcHRpb25FdgogX19aTks3V2ViQ29yZTExRnJhbWVM
b2FkZXIxMGlzQ29tcGxldGVFdgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSGVscGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NIZWxwZXIuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysr
IFdlYkNvcmUvY3NzL0NTU0hlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcg
QEAgU3RyaW5nIHBhcnNlVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICAgICAgYnVmZmVy
W25sKytdID0gYzsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRh
dGEoKSwgbmwpOworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbmwpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3Jl
L2RvbS9BdHRyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEF0dHI6
OmNyZWF0ZVRleHRDaGlsZCgpCiB7CiAgICAgQVNTRVJUKHJlZkNvdW50KCkpOwogICAgIGlmICgh
bV9hdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0
ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgp
LmltcGwoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNy
ZWF0ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgpLmRvbVN0cmluZygpKTsKIAogICAgICAg
ICAvLyBUaGlzIGRvZXMgZXZlcnl0aGluZyBhcHBlbmRDaGlsZCgpIHdvdWxkIGRvIGluIHRoaXMg
c2l0dWF0aW9uIChhc3N1bWluZyBtX2lnbm9yZUNoaWxkcmVuQ2hhbmdlZCB3YXMgc2V0KSwKICAg
ICAgICAgLy8gYnV0IG11Y2ggbW9yZSBlZmZpY2llbnRseS4KQEAgLTExNiw3ICsxMTYsNyBAQCB2
b2lkIEF0dHI6OnNldFZhbHVlKCBjb25zdCBTdHJpbmcmIHYsIEV4CiAgICAgaW50IGUgPSAwOwog
ICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkKys7CiAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAg
ICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2LmltcGwoKSksIGUpOwor
ICAgIGFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKHYpLCBlKTsKICAgICBt
X2lnbm9yZUNoaWxkcmVuQ2hhbmdlZC0tOwogICAgIAogICAgIG1fYXR0cmlidXRlLT5zZXRWYWx1
ZSh2LmltcGwoKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5jcHAJKHJldmlzaW9uIDI5MDg4KQorKysg
V2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDYgQEAgQ0RBVEFTZWN0aW9uOjpDREFUQVNlY3Rpb24oRG9jdW1lbnQgKmltcAogewogfQogCi1D
REFUQVNlY3Rpb246OkNEQVRBU2VjdGlvbihEb2N1bWVudCAqaW1wbCkgOiBUZXh0KGltcGwpCi17
Ci19Ci0KIENEQVRBU2VjdGlvbjo6fkNEQVRBU2VjdGlvbigpCiB7CiB9CkBAIC02Miw5ICs1OCw5
IEBAIGJvb2wgQ0RBVEFTZWN0aW9uOjpjaGlsZFR5cGVBbGxvd2VkKE5vZGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVRleHQgKkNEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KFN0cmluZ0ltcGwgKl9z
dHIpCitQYXNzUmVmUHRyPFRleHQ+IENEQVRBU2VjdGlvbjo6Y3JlYXRlTmV3KFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyaW5nKQogewotICAgIHJldHVybiBuZXcgQ0RBVEFTZWN0aW9uKGRvY3Vt
ZW50KCksIF9zdHIpOworICAgIHJldHVybiBuZXcgQ0RBVEFTZWN0aW9uKGRvY3VtZW50KCksIHN0
cmluZyk7CiB9CiAKIFN0cmluZyBDREFUQVNlY3Rpb246OnRvU3RyaW5nKCkgY29uc3QKSW5kZXg6
IFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NE
QVRBU2VjdGlvbi5oCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvZG9tL0NEQVRBU2VjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENEQVRBU2VjdGlvbiA6IHB1YmxpYyBUZXh0Ci17Ci0vLyAjIyMgc2hvdWxk
IHRoZXNlIGhhdmUgaWQ9PUlEX1RFWFQKK2NsYXNzIENEQVRBU2VjdGlvbiA6IHB1YmxpYyBUZXh0
IHsKIHB1YmxpYzoKLSAgICBDREFUQVNlY3Rpb24oRG9jdW1lbnQgKmltcGwsIGNvbnN0IFN0cmlu
ZyAmX3RleHQpOwotICAgIENEQVRBU2VjdGlvbihEb2N1bWVudCAqaW1wbCk7CisgICAgQ0RBVEFT
ZWN0aW9uKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB+Q0RBVEFTZWN0
aW9uKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwpAQCAtNDQsNyAr
NDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVGV4dCogY3JlYXRlTmV3KFN0cmluZ0ltcGwqKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlTmV3KFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4pOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgpAQCAtMzYsMTkgKzM3LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwog
Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1bWVudCAqZG9jKQogICAgIDogRXZlbnRU
YXJnZXROb2RlKGRvYykKIHsKLSAgICBzdHIgPSAwOwogfQogCiBDaGFyYWN0ZXJEYXRhOjpDaGFy
YWN0ZXJEYXRhKERvY3VtZW50ICpkb2MsIGNvbnN0IFN0cmluZyAmX3RleHQpCiAgICAgOiBFdmVu
dFRhcmdldE5vZGUoZG9jKQogewotICAgIHN0ciA9IF90ZXh0LmltcGwoKSA/IF90ZXh0LmltcGwo
KSA6IG5ldyBTdHJpbmdJbXBsKHN0YXRpY19jYXN0PFVDaGFyKj4oMCksIDApOwotICAgIHN0ci0+
cmVmKCk7CisgICAgc3RyID0gX3RleHQuaW1wbCgpID8gX3RleHQuaW1wbCgpIDogU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKIH0KIAogQ2hhcmFjdGVyRGF0YTo6fkNoYXJhY3RlckRhdGEoKQogewotICAg
IGlmKHN0cikgc3RyLT5kZXJlZigpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTU5LDEzICs1NywxMSBA
QCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZXF1YWwoc3RyLCBkYXRhLmltcGwoKSkpCisgICAgaWYgKGVx
dWFsKHN0ci5nZXQoKSwgZGF0YS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmdJbXBsKiBvbGRTdHIgPSBzdHI7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IHN0
cjsKICAgICBzdHIgPSBkYXRhLmltcGwoKTsKLSAgICBpZiAoc3RyKQotICAgICAgICBzdHItPnJl
ZigpOwogICAgIAogICAgIGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVu
ZGVyZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVkKCkpIHsKICAgICAgICAgZGV0YWNoKCk7CkBA
IC03Myw5ICs2OSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcK
ICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPihyZW5kZXJlcigpKS0+c2V0VGV4dChzdHIpOwogICAgIAotICAgIGRpc3BhdGNoTW9kaWZp
ZWRFdmVudChvbGRTdHIpOwotICAgIGlmIChvbGRTdHIpCi0gICAgICAgIG9sZFN0ci0+ZGVyZWYo
KTsKKyAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKICAgICAKICAgICBk
b2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHRoaXMpOwogfQpAQCAtODcsNyArODEsNyBAQCBTdHJp
bmcgQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSggY29uCiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gc3RyLT5zdWJzdHJpbmcob2Zmc2V0LGNv
dW50KTsKKyAgICByZXR1cm4gc3RyLT5zdWJzdHJpbmcob2Zmc2V0LCBjb3VudCk7CiB9CiAKIHZv
aWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSggY29uc3QgU3RyaW5nICZhcmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTAzLDkgKzk3LDggQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmRE
YXRhKCBjb25zdCBTdAogICAgIFN0cmluZyBuZXdTdHIgPSBzdHI7CiAgICAgbmV3U3RyLmFwcGVu
ZChhcmcpOwogCi0gICAgU3RyaW5nSW1wbCogb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBvbGRTdHIgPSBzdHI7CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHIt
PnJlZigpOwogCiAgICAgaWYgKCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5k
ZXJlcigpLT5zdHlsZSgpKSkgJiYgYXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAg
LTExMyw4ICsxMDYsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoIGNvbnN0IFN0
CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2xkU3RyLT5sZW5ndGgo
KSwgMCk7CiAgICAgCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0cik7Ci0gICAgb2xk
U3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwog
fQogCiB2b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEoIGNvbnN0IHVuc2lnbmVkIG9mZnNl
dCwgY29uc3QgU3RyaW5nICZhcmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTI3LDkgKzExOSw4
IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSggY29uc3QgdW4KICAgICBTdHJpbmcg
bmV3U3RyID0gc3RyOwogICAgIG5ld1N0ci5pbnNlcnQoYXJnLCBvZmZzZXQpOwogCi0gICAgU3Ry
aW5nSW1wbCogb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBz
dHI7CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogCiAgICAgaWYg
KCghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkg
JiYgYXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAgLTEzNyw4ICsxMjgsNyBAQCB2
b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEoIGNvbnN0IHVuCiAgICAgfSBlbHNlIGlmIChy
ZW5kZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSkt
PnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCAwKTsKICAgICAKLSAgICBkaXNwYXRjaE1v
ZGlmaWVkRXZlbnQob2xkU3RyKTsKLSAgICBvbGRTdHItPmRlcmVmKCk7CisgICAgZGlzcGF0Y2hN
b2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7CiAgICAgCiAgICAgLy8gdXBkYXRlIHRoZSBtYXJr
ZXJzIGZvciBzcGVsbCBjaGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFyZy5sZW5ndGgoKTsKQEAgLTE1NSw5ICsxNDUsOCBAQCB2b2lkIENoYXJhY3Rl
ckRhdGE6OmRlbGV0ZURhdGEoIGNvbnN0IHVuCiAgICAgU3RyaW5nIG5ld1N0ciA9IHN0cjsKICAg
ICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwogCi0gICAgU3RyaW5nSW1wbCogb2xkU3Ry
ID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBzdHI7CiAgICAgc3RyID0g
bmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogICAgIAogICAgIGlmICgoIXJlbmRlcmVy
KCkgfHwgIXJlbmRlcmVySXNOZWVkZWQocmVuZGVyZXIoKS0+c3R5bGUoKSkpICYmIGF0dGFjaGVk
KCkpIHsKICAgICAgICAgZGV0YWNoKCk7CkBAIC0xNjUsOCArMTU0LDcgQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpkZWxldGVEYXRhKCBjb25zdCB1bgogICAgIH0gZWxzZSBpZiAocmVuZGVyZXIoKSkK
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0
aE9mZnNldChzdHIsIG9mZnNldCwgY291bnQpOwogCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50
KG9sZFN0cik7Ci0gICAgb2xkU3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVu
dChvbGRTdHIuZ2V0KCkpOwogCiAgICAgLy8gdXBkYXRlIHRoZSBtYXJrZXJzIGZvciBzcGVsbCBj
aGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwogICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtl
cnModGhpcywgb2Zmc2V0LCBjb3VudCk7CkBAIC0xOTAsOSArMTc4LDggQEAgdm9pZCBDaGFyYWN0
ZXJEYXRhOjpyZXBsYWNlRGF0YSggY29uc3QgdQogICAgIG5ld1N0ci5yZW1vdmUob2Zmc2V0LCBy
ZWFsQ291bnQpOwogICAgIG5ld1N0ci5pbnNlcnQoYXJnLCBvZmZzZXQpOwogCi0gICAgU3RyaW5n
SW1wbCAqb2xkU3RyID0gc3RyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGRTdHIgPSBzdHI7
CiAgICAgc3RyID0gbmV3U3RyLmltcGwoKTsKLSAgICBzdHItPnJlZigpOwogCiAgICAgaWYgKCgh
cmVuZGVyZXIoKSB8fCAhcmVuZGVyZXJJc05lZWRlZChyZW5kZXJlcigpLT5zdHlsZSgpKSkgJiYg
YXR0YWNoZWQoKSkgewogICAgICAgICBkZXRhY2goKTsKQEAgLTIwMCw4ICsxODcsNyBAQCB2b2lk
IENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKCBjb25zdCB1CiAgICAgfSBlbHNlIGlmIChyZW5k
ZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNl
dFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgCi0gICAgZGlzcGF0Y2hN
b2RpZmllZEV2ZW50KG9sZFN0cik7Ci0gICAgb2xkU3RyLT5kZXJlZigpOworICAgIGRpc3BhdGNo
TW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwogICAgIAogICAgIC8vIHVwZGF0ZSB0aGUgbWFy
a2VycyBmb3Igc3BlbGwgY2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKICAgICBpbnQgZGlm
ZiA9IGFyZy5sZW5ndGgoKSAtIGNvdW50OwpAQCAtMjE0LDEzICsyMDAsNiBAQCBTdHJpbmcgQ2hh
cmFjdGVyRGF0YTo6bm9kZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gc3RyOwogfQogCi1ib29s
IENoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgaW50IGZyb20s
IHVuc2lnbmVkIGludCBsZW4pIGNvbnN0Ci17Ci0gICAgaWYgKHN0cikKLSAgICAgICAgcmV0dXJu
IHN0ci0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZShmcm9tLCBsZW4pOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIENoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25z
dAogewogICAgIGlmIChzdHIpCkBAIC0yMzksMTIgKzIxOCw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0
YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW4KICAgICBpZiAocGFyZW50Tm9kZSgpKQogICAgICAgICBw
YXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlmIChkb2N1bWVudCgpLT5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUikp
IHsKLSAgICAgICAgU3RyaW5nSW1wbCAqbmV3VmFsdWUgPSBzdHItPmNvcHkoKTsKLSAgICAgICAg
bmV3VmFsdWUtPnJlZigpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVudChET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRF
dmVudCwKLSAgICAgICAgICAgICAgICAgICAgICB0cnVlLGZhbHNlLDAscHJldlZhbHVlLG5ld1Zh
bHVlLFN0cmluZygpLDApLGVjKTsKLSAgICAgICAgbmV3VmFsdWUtPmRlcmVmKCk7CisgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZl
bnQoRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIGZhbHNlLCAwLCBwcmV2VmFs
dWUsIHN0ciwgU3RyaW5nKCksIDApLCBlYyk7CiAgICAgfQogICAgIGRpc3BhdGNoU3VidHJlZU1v
ZGlmaWVkRXZlbnQoKTsKIH0KQEAgLTI4Nyw3ICsyNjIsNyBAQCBib29sIENoYXJhY3RlckRhdGE6
Om9mZnNldEluQ2hhcmFjdGVycygpCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBDaGFyYWN0ZXJEYXRh
OjpkdW1wKFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQpIGNvbnN0CiB7
Ci0gICAgKnN0cmVhbSA8PCAiIHN0cj1cIiIgPDwgU3RyaW5nKHN0cikuZGVwcmVjYXRlZFN0cmlu
ZygpLmFzY2lpKCkgPDwgIlwiIjsKKyAgICAqc3RyZWFtIDw8ICIgc3RyPVwiIiA8PCBTdHJpbmco
c3RyKS51dGY4KCkuZGF0YSgpIDw8ICJcIiI7CiAKICAgICBFdmVudFRhcmdldE5vZGU6OmR1bXAo
c3RyZWFtLGluZCk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCShyZXZpc2lvbiAyOTA4OCkKKysr
IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBTdHJpbmcgJmFyZywgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9v
bCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgCi0gICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcworCisgICAgLy8g
RE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tIHBhcmVudCBjbGFzc2VzCiAKICAgICB2aXJ0dWFs
IFN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVl
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTU4LDcgKzU3LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7Ci0g
ICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9CisgICAgU3RyaW5nSW1wbCog
c3RyaW5nKCkgeyByZXR1cm4gc3RyLmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrQ2hh
ckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2
aXJ0dWFsIGJvb2wgb2Zmc2V0SW5DaGFyYWN0ZXJzKCkgY29uc3Q7CkBAIC02OSw5ICs2OCw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gbm90ZTogc2luY2UgRE9NU3Ry
aW5ncyBhcmUgc2hhcmVkLCBzdHIgc2hvdWxkIGFsd2F5cyBiZSBjb3BpZWQgd2hlbiBtYWtpbmcK
LSAgICAvLyBhIGNoYW5nZSBvciByZXR1cm5pbmcgYSBzdHJpbmcKLSAgICBTdHJpbmdJbXBsKiBz
dHI7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cjsKIAogICAgIHZvaWQgZGlzcGF0Y2hNb2Rp
ZmllZEV2ZW50KFN0cmluZ0ltcGwqIHByZXZWYWx1ZSk7CiB9OwpJbmRleDogV2ViQ29yZS9kb20v
RE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxl
bWVudGF0aW9uLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE4ICs2NiwxNSBAQCBzdGF0aWMgYm9v
bCBxdWFsaWZpZWROYW1lSXNNYWxmb3JtZWQoY29uCiAKICNpZiBFTkFCTEUoU1ZHKQogCi1zdGF0
aWMgdm9pZCBhZGRTdHJpbmcoSGFzaFNldDxTdHJpbmdJbXBsKiwgQ2FzZUZvbGRpbmdIYXNoPiYg
c2V0LCBjb25zdAotY2hhciogc3RyaW5nKQorc3RhdGljIHZvaWQgYWRkU3RyaW5nKEhhc2hTZXQ8
U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+JiBzZXQsIGNvbnN0IGNoYXIqIHN0cmluZykKIHsKLSAg
ICBTdHJpbmdJbXBsKiBzID0gbmV3IFN0cmluZ0ltcGwoc3RyaW5nKTsKLSAgICBzLT5yZWYoKTsK
LSAgICBzZXQuYWRkKHMpOworICAgIHNldC5hZGQoc3RyaW5nKTsKIH0KIAogc3RhdGljIGJvb2wg
aXNTVkcxMEZlYXR1cmUoY29uc3QgU3RyaW5nICZmZWF0dXJlKQogewogICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nSW1wbCosIENh
c2VGb2xkaW5nSGFzaD4gc3ZnRmVhdHVyZXM7CisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBD
YXNlRm9sZGluZ0hhc2g+IHN2Z0ZlYXR1cmVzOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAg
ICAgICAgLy8gU2FkbHksIHdlIGNhbm5vdCBjbGFpbSB0byBpbXBsZW1lbnQgYW55IFNWRyAxLjAg
ZmVhdHVyZSBzZXQsIGR1ZSB0bwogICAgICAgICAvLyBsYWNrIG9mIEZvbnQgc3VwcG9ydC4KQEAg
LTk1LDEzICs5MiwxMyBAQCBzdGF0aWMgYm9vbCBpc1NWRzEwRmVhdHVyZShjb25zdCBTdHJpbmcg
CiAvLyAgICAgIGFkZFN0cmluZyhzdmdGZWF0dXJlcywgImRvbS5zdmcuYWxsIik7CiAgICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIHN2Z0ZlYXR1cmVzLmNvbnRh
aW5zKGZlYXR1cmUuaW1wbCgpKTsKKyAgICByZXR1cm4gc3ZnRmVhdHVyZXMuY29udGFpbnMoZmVh
dHVyZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzU1ZHMTFGZWF0dXJlKGNvbnN0IFN0cmluZyAmZmVh
dHVyZSkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRp
YyBIYXNoU2V0PFN0cmluZ0ltcGwqLCBDYXNlRm9sZGluZ0hhc2g+IHN2Z0ZlYXR1cmVzOworICAg
IHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBzdmdGZWF0dXJlczsKICAg
ICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBjYW5ub3QgY2xhaW0g
dG8gaW1wbGVtZW50IGFueSBvZiB0aGUgU1ZHIDEuMSBnZW5lcmljIGZlYXR1cmUgc2V0cwogICAg
ICAgICAvLyBsYWNrIG9mIEZvbnQgYW5kIEZpbHRlciBzdXBwb3J0LgpAQCAtMTU4LDcgKzE1NSw3
IEBAIHN0YXRpYyBib29sIGlzU1ZHMTFGZWF0dXJlKGNvbnN0IFN0cmluZyAKICAgICAgICAgYWRk
U3RyaW5nKHN2Z0ZlYXR1cmVzLCAiRXh0ZW5zaWJpbGl0eSIpOwogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBzdmdGZWF0dXJlcy5jb250YWlucyhmZWF0dXJl
LmltcGwoKSk7CisgICAgcmV0dXJuIHN2Z0ZlYXR1cmVzLmNvbnRhaW5zKGZlYXR1cmUpOwogfQog
I2VuZGlmCiAKQEAgLTI0OSwxNCArMjQ2LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1w
bGVtZW50YXRpb246OgogICAgICAgICAvLyAtIGlmIHRoZSBxdWFsaWZpZWROYW1lIGhhcyBhIHBy
ZWZpeCBhbmQgdGhlIG5hbWVzcGFjZVVSSSBpcyBudWxsLCBvcgogICAgICAgICAvLyAtIGlmIHRo
ZSBxdWFsaWZpZWROYW1lIGhhcyBhIHByZWZpeCB0aGF0IGlzICJ4bWwiIGFuZCB0aGUgbmFtZXNw
YWNlVVJJIGlzIGRpZmZlcmVudAogICAgICAgICAvLyAgIGZyb20gImh0dHA6Ly93d3cudzMub3Jn
L1hNTC8xOTk4L25hbWVzcGFjZSIgW05hbWVzcGFjZXNdLgotICAgICAgICBpbnQgY29sb25wb3Mg
PSAtMTsKLSAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgU3RyaW5nSW1wbCAqcW5hbWUgPSBx
dWFsaWZpZWROYW1lLmltcGwoKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHFuYW1lLT5sZW5n
dGgoKSAmJiBjb2xvbnBvcyA8IDA7IGkrKykgewotICAgICAgICAgICAgaWYgKCgqcW5hbWUpW2ld
ID09ICc6JykKLSAgICAgICAgICAgICAgICBjb2xvbnBvcyA9IGk7Ci0gICAgICAgIH0KLSAgICAK
KyAgICAgICAgaW50IGNvbG9ucG9zID0gcXVhbGlmaWVkTmFtZS5maW5kKCc6Jyk7ICAgIAogICAg
ICAgICBpZiAocXVhbGlmaWVkTmFtZUlzTWFsZm9ybWVkKHF1YWxpZmllZE5hbWUpIHx8CiAgICAg
ICAgICAgICAoY29sb25wb3MgPj0gMCAmJiBuYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHx8CiAgICAg
ICAgICAgICAoY29sb25wb3MgPT0gMyAmJiBxdWFsaWZpZWROYW1lWzBdID09ICd4JyAmJiBxdWFs
aWZpZWROYW1lWzFdID09ICdtJyAmJiBxdWFsaWZpZWROYW1lWzJdID09ICdsJyAmJgpJbmRleDog
V2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmNw
cAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNTcsMTAgKzEwNTcsMTAgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShQYXNzUmVm
UHRyPE5vZGU+IAogICAgIGlmKG1fc3RhcnRDb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6
VEVYVF9OT0RFIHx8CiAgICAgICAgbV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREUpIHsKICAgICAgICAgZWMgPSAwOwotICAgICAgICBUZXh0ICpu
ZXdUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fc3RhcnRDb250YWluZXIuZ2V0KCkpLT5zcGxp
dFRleHQobV9zdGFydE9mZnNldCwgZWMpOworICAgICAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9
IHN0YXRpY19jYXN0PFRleHQqPihtX3N0YXJ0Q29udGFpbmVyLmdldCgpKS0+c3BsaXRUZXh0KG1f
c3RhcnRPZmZzZXQsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdO
b2RlLCBuZXdUZXh0LCBlYyk7CisgICAgICAgIG1fc3RhcnRDb250YWluZXItPnBhcmVudE5vZGUo
KS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG5ld1RleHQuZ2V0KCksIGVjKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbV9zdGFy
dENvbnRhaW5lci0+Y2hpbGROb2RlKG1fc3RhcnRPZmZzZXQpLCBlYyk7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9kb20vVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJ
KHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgVGV4dDo6flRleHQoKQogewogfQogCi1UZXh0ICpUZXh0OjpzcGxp
dFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8VGV4
dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgZWMgPSAwOwogCkBAIC03MCwxNiArNzAsMTQgQEAgVGV4dCAqVGV4dDo6c3BsaXRUZXh0
KHVuc2lnbmVkIG9mZnNldCwgRQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBTdHJp
bmdJbXBsICpvbGRTdHIgPSBzdHI7Ci0gICAgVGV4dCAqbmV3VGV4dCA9IGNyZWF0ZU5ldyhzdHIt
PnN1YnN0cmluZyhvZmZzZXQpKTsKLSAgICBzdHIgPSBzdHItPnN1YnN0cmluZygwLCBvZmZzZXQp
OwotICAgIHN0ci0+cmVmKCk7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IHN0cjsK
KyAgICBQYXNzUmVmUHRyPFRleHQ+IG5ld1RleHQgPSBjcmVhdGVOZXcob2xkU3RyLT5zdWJzdHJp
bmcob2Zmc2V0KSk7CisgICAgc3RyID0gb2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KTsKIAot
ICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIpOwotICAgIG9sZFN0ci0+ZGVyZWYoKTsK
KyAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKIAogICAgIGlmIChwYXJl
bnROb2RlKCkpCi0gICAgICAgIHBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKG5ld1RleHQsbmV4
dFNpYmxpbmcoKSwgZWMpOworICAgICAgICBwYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdU
ZXh0LmdldCgpLCBuZXh0U2libGluZygpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1
cm4gMDsKIApAQCAtMTgzLDkgKzE4MSw5IEBAIGJvb2wgVGV4dDo6Y2hpbGRUeXBlQWxsb3dlZChO
b2RlVHlwZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVRleHQgKlRleHQ6OmNyZWF0ZU5ldyhT
dHJpbmdJbXBsICpfc3RyKQorUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVOZXcoUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0KGRvY3VtZW50
KCksIF9zdHIpOworICAgIHJldHVybiBuZXcgVGV4dChkb2N1bWVudCgpLCBzdHJpbmcpOwogfQog
CiBTdHJpbmcgVGV4dDo6dG9TdHJpbmcoKSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQuaAkocmV2aXNpb24gMjkwODgpCisrKyBX
ZWJDb3JlL2RvbS9UZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw4ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKIGNvbnN0IHVuc2lnbmVkIGNUZXh0Tm9kZUxlbmd0aExpbWl0ID0gMSA8PCAxNjsK
IAotY2xhc3MgVGV4dCA6IHB1YmxpYyBDaGFyYWN0ZXJEYXRhCi17CitjbGFzcyBUZXh0IDogcHVi
bGljIENoYXJhY3RlckRhdGEgewogcHVibGljOgogICAgIFRleHQoRG9jdW1lbnQgKmltcGwsIGNv
bnN0IFN0cmluZyAmX3RleHQpOwogICAgIFRleHQoRG9jdW1lbnQgKmltcGwpOwpAQCAtNDAsMTAg
KzM3LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3Ig
Q2hhcmFjdGVyRGF0YQogCi0gICAgVGV4dCAqc3BsaXRUZXh0ICggY29uc3QgdW5zaWduZWQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxUZXh0PiBzcGxpdFRleHQodW5z
aWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAvLyBET00gbWV0aG9kcyBvdmVy
cmlkZGVuIGZyb20gcGFyZW50IGNsYXNzZXMKIAotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRk
ZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4g
Y2xvbmVOb2RlKGJvb2wgZGVlcCk7CkBAIC01Miw5ICs1MCw5IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSAqKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEgKiwgUmVuZGVyU3R5bGUgKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxl
KCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCByZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRU
eXBlQWxsb3dlZChOb2RlVHlwZSk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNv
bnN0OwpAQCAtNjIsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
ZXh0PiBjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCYgY2hhcnNMZWZ0LCB1bnNpZ25lZCBtYXhDaGFycyA9IGNUZXh0Tm9kZUxlbmd0aExpbWl0
KTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIo
Y2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBm
b3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAj
ZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVGV4dCogY3JlYXRlTmV3KFN0cmluZ0lt
cGwqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlTmV3KFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4pOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgU3RyaW5nIEhUTUxFbGVtZW50Ojpu
b2RlTmFtZSgpIGNvbnN0CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBh
dG9taWNzdHJpbmcgbG9va3VwIGJhc2VkIG9mZiB1cHBlcmNhc2UgY2hhcnMgdGhhdCBkb2VzIG5v
dCBoYXZlIHRvIGNvcHkKICAgICAvLyB0aGUgc3RyaW5nIG9uIGEgaGl0IGluIHRoZSBoYXNoLgog
ICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gdGFn
UU5hbWUoKS5sb2NhbE5hbWUoKS5pbXBsKCktPnVwcGVyKCk7CisgICAgICAgIHJldHVybiB0YWdR
TmFtZSgpLmxvY2FsTmFtZSgpLmRvbVN0cmluZygpLnVwcGVyKCk7CiAgICAgcmV0dXJuIEVsZW1l
bnQ6Om5vZGVOYW1lKCk7CiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRz
ID0gMjU2OwogLy8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xpY2tpbmcgaW4gdGhlIHRleHQgZmll
bGQuCiBzdGF0aWMgY29uc3QgaW50IGNNYXhMZW4gPSA1MjQyODg7CiAKLXN0YXRpYyBpbnQgbnVt
R3JhcGhlbWVDbHVzdGVycyhjb25zdCBTdHJpbmdJbXBsKiBzKQorc3RhdGljIGludCBudW1HcmFw
aGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqIHMpCiB7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIGludCBudW1HcmFwaGVtZUNsdXN0ZXJzKGNv
bnN0IFN0cgogICAgIHJldHVybiBudW07CiB9CiAKLXN0YXRpYyBpbnQgbnVtQ2hhcmFjdGVyc0lu
R3JhcGhlbWVDbHVzdGVycyhjb25zdCBTdHJpbmdJbXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVz
dGVycykKK3N0YXRpYyBpbnQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdJ
bXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVzdGVycykKIHsKICAgICBpZiAoIXMpCiAgICAgICAg
IHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMjkwODgpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MjMs
NyArMTYyMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRva2VuaXplcjo6cHJvY2Vzc1QKICAg
ICAgICAgfQogCiAjZW5kaWYKLSAgICAgICAgY3VyclRva2VuLnRleHQgPSBTdHJpbmdJbXBsOjpj
cmVhdGVTdHJpcHBpbmdOdWxsKGJ1ZmZlciwgZGVzdCAtIGJ1ZmZlcik7CisgICAgICAgIGN1cnJU
b2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnMoYnVm
ZmVyLCBkZXN0IC0gYnVmZmVyKTsKICAgICAgICAgaWYgKGN1cnJUb2tlbi50YWdOYW1lICE9IGNv
bW1lbnRBdG9tKQogICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKICAg
ICB9IGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09IG51bGxBdG9tKSB7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgCiAKICAgICBzdGF0aWMgdm9pZCB0
cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBjaGFyKiBjb25zdCYgYywgdW5z
aWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHIgPSBuZXcgU3RyaW5nSW1w
bChjKTsKKyAgICAgICAgU3RyaW5nSW1wbCogciA9IG5ldyBTdHJpbmdJbXBsKGMsIHN0cmxlbihj
KSk7CiAgICAgICAgIHItPm1faGFzaCA9IGhhc2g7CiAgICAgICAgIHItPm1faW5UYWJsZSA9IHRy
dWU7CiAgICAgICAgIGxvY2F0aW9uID0gcjsgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxh
dGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nKGNvbnN0IGNoYXIqKTsKICAgICBTdHJpbmcoY29uc3QgY2hhciosIHVuc2ln
bmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nKFN0cmluZ0ltcGwqIGkpIDogbV9pbXBsKGkpIHsgfQor
ICAgIFN0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGkpIDogbV9pbXBsKGkpIHsgfQorICAg
IFN0cmluZyhSZWZQdHI8U3RyaW5nSW1wbD4gaSkgOiBtX2ltcGwoaSkgeyB9CiAKICAgICBzdGF0
aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxVQ2hhcj4mKTsKIApAQCAtMTgxLDcgKzE4Myw2IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIEZvciBkZWJ1Z2dpbmcgb25s
eSwgbGVha3MgbWVtb3J5LgogICAgIFZlY3RvcjxjaGFyPiBhc2NpaSgpIGNvbnN0OwogI2VuZGlm
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSAr
MzgsNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lCiB7CiAgICAg
aWYgKCFzdHIpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobGVuID09IDApCi0gICAg
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2lt
cGwgPSBuZXcgU3RyaW5nSW1wbChzdHIsIGxlbik7CisgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6
Y3JlYXRlKHN0ciwgbGVuKTsKIH0KIAogU3RyaW5nOjpTdHJpbmcoY29uc3QgVUNoYXIqIHN0cikK
QEAgLTU0LDQ0ICs1MCwyOCBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3RyKQogICAg
IHdoaWxlIChzdHJbbGVuXSAhPSBVQ2hhcigwKSkKICAgICAgICAgbGVuKys7CiAgICAgCi0gICAg
aWYgKGxlbiA9PSAwKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAg
IGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoc3RyLCBsZW4pOworICAgIG1f
aW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIsIGxlbik7CiB9CiAKIFN0cmluZzo6U3RyaW5n
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cikKIHsKICAgICBpZiAoc3RyLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0gICAgICAgIG1f
aW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZSAKLSAgICAgICAgbV9pbXBsID0g
bmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0ci51bmljb2Rl
KCkpLCBzdHIubGVuZ3RoKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSk7
CiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKIHsKICAgICBpZiAoIXN0cikK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGwgPSBzdHJsZW4oc3RyKTsKLSAgICBpZiAobCA9
PSAwKQotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoc3RyLCBsKTsKKyAgICBtX2ltcGwgPSBTdHJp
bmdJbXBsOjpjcmVhdGUoc3RyKTsKIH0KIAogU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciogc3Ry
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFzdHIpCiAgICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChsZW5ndGggPT0gMCkKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHko
KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKHN0ciwgbGVuZ3Ro
KTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLCBsZW5ndGgpOwogfQogCiB2
b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyAmc3RyKQpAQCAtMTE1LDcgKzk1LDcgQEAg
dm9pZCBTdHJpbmc6OmFwcGVuZChjaGFyIGMpCiAgICAgICAgIG5ld0NoYXJhY3RlcnNbbV9pbXBs
LT5sZW5ndGgoKV0gPSBjOwogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChuZXdD
aGFyYWN0ZXJzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwo
JmMsIDEpOworICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoJmMsIDEpOwogfQog
CiB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCkBAIC0xMjYsNyArMTA2LDcgQEAgdm9pZCBT
dHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgICAgICBuZXdDaGFyYWN0ZXJzW21faW1wbC0+bGVu
Z3RoKCldID0gYzsKICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQobmV3Q2hhcmFj
dGVycyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKCZjLCAx
KTsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKTsKIH0KIAogU3Ry
aW5nIG9wZXJhdG9yKyhjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKQEAgLTE2Nywx
MSArMTQ3LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdAogICAg
IGlmICghbV9pbXBsKSB7CiAgICAgICAgIGlmICghY2hhcmFjdGVyc1RvQXBwZW5kKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWxlbmd0aFRvQXBwZW5kKSB7Ci0gICAgICAgICAg
ICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKGNoYXJhY3RlcnNUb0FwcGVu
ZCwgbGVuZ3RoVG9BcHBlbmQpOworICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUo
Y2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTMxNyw3ICsyOTMsNyBAQCBjb25zdCBVQ2hhciogU3RyaW5nOjpjaGFyYWN0ZXJz
V2l0aE51bGxUCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2ltcGwtPmhhc1Rlcm1pbmF0
aW5nTnVsbENoYXJhY3RlcigpKQogICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzKCk7
Ci0gICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwoKm1faW1wbCwgU3RyaW5nSW1wbDo6V2l0aFRl
cm1pbmF0aW5nTnVsbENoYXJhY3RlcigpKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVh
dGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCptX2ltcGwpOwogICAgIHJldHVybiBtX2lt
cGwtPmNoYXJhY3RlcnMoKTsKIH0KIApAQCAtMzY1LDcgKzM0MSw3IEBAIFN0cmluZyBTdHJpbmc6
OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKIAogICAgIHZhX2VuZChhcmdzKTsKICAgICAKLSAg
ICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwgbGVuKTsKKyAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIGxlbik7CiB9CiAKIFN0cmluZyBTdHJp
bmc6Om51bWJlcihpbnQgbikKQEAgLTU1OCwyMiArNTM0LDE0IEBAIFN0cmluZzo6U3RyaW5nKGNv
bnN0IElkZW50aWZpZXImIHN0cikKIHsKICAgICBpZiAoc3RyLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0gICAgICAgIG1faW1wbCA9IFN0
cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZSAKLSAgICAgICAgbV9pbXBsID0gbmV3IFN0cmlu
Z0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0ci5kYXRhKCkpLCBzdHIuc2l6
ZSgpKTsKKyAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KHN0ci5kYXRhKCkpLCBzdHIuc2l6ZSgpKTsKIH0KIAogU3RyaW5nOjpTdHJp
bmcoY29uc3QgVVN0cmluZyYgc3RyKQogewogICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoc3RyLmlzRW1wdHkoKSkKLSAgICAgICAgbV9pbXBsID0g
U3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlIAotICAgICAgICBtX2ltcGwgPSBuZXcgU3Ry
aW5nSW1wbChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5z
aXplKCkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwogfQogCiBTdHJpbmc6Om9w
ZXJhdG9yIElkZW50aWZpZXIoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSGFz
aC5oCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdIYXNo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIHN0cnVjdCBTdHJpbmdIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQotICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBi
KQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJu
IGtleS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGEs
IFN0cmluZ0ltcGwqIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChhID09IGIpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFBhdWwgSHNpZWgncyBTdXBlckZhc3RIYXNo
CiAgICAgICAgIC8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNvbS9xZWQvaGFzaC5odG1s
Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZ0ltcGwqIHN0cikKKyAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3RyaW5nSW1wbCogc3RyKQogICAgICAgICB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBsID0gc3RyLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBzID0gc3RyLT5jaGFyYWN0ZXJzKCk7CkBAIC0xNjYsNyArMTY2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGhhc2g7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0
IFN0cmluZ0ltcGwqIGIpCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGEs
IFN0cmluZ0ltcGwqIGIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChhID09IGIpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0lt
cGwuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBzdGF0aWMgaW5saW5lIFVD
aGFyKiBuZXdVQ2hhclZlY3Rvcih1bnNpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVDaGFyKj4o
ZmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
ZGVsZXRlVUNoYXJWZWN0b3IoVUNoYXIqIHApCitzdGF0aWMgaW5saW5lIHZvaWQgZGVsZXRlVUNo
YXJWZWN0b3IoY29uc3QgVUNoYXIqIHApCiB7Ci0gICAgZmFzdEZyZWUocCk7CisgICAgZmFzdEZy
ZWUoY29uc3RfY2FzdDxVQ2hhcio+KHApKTsKIH0KIAogU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6
ZW1wdHkoKQpAQCAtNzEsNzAgKzcxLDQ3IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmVtcHR5
KCkKICAgICByZXR1cm4gJmU7CiB9CiAKLVN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgRGVw
cmVjYXRlZFN0cmluZyYgc3RyKQotewotICAgIGluaXQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KHN0ci51bmljb2RlKCkpLCBzdHIubGVuZ3RoKCkpOwotfQotCiBTdHJpbmdJbXBsOjpT
dHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKKyAgICA6IG1fbGVuZ3Ro
KGxlbikKKyAgICAsIG1faGFzaCgwKQorICAgICwgbV9pblRhYmxlKGZhbHNlKQorICAgICwgbV9o
YXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoZmFsc2UpCiB7Ci0gICAgaW5pdChzdHIsIGxlbik7
CisgICAgVUNoYXIqIGRhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW4pOworICAgIG1lbWNweShkYXRh
LCBzdHIsIGxlbiAqIHNpemVvZihVQ2hhcikpOworICAgIG1fZGF0YSA9IGRhdGE7CiB9CiAKIFN0
cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgU3RyaW5nSW1wbCYgc3RyLCBXaXRoVGVybWluYXRp
bmdOdWxsQ2hhcmFjdGVyKQogICAgIDogbV9sZW5ndGgoc3RyLm1fbGVuZ3RoKQotICAgICwgbV9k
YXRhKG5ld1VDaGFyVmVjdG9yKG1fbGVuZ3RoICsgMSkpCisgICAgLCBtX2RhdGEobmV3VUNoYXJW
ZWN0b3Ioc3RyLm1fbGVuZ3RoICsgMSkpCiAgICAgLCBtX2hhc2goc3RyLm1faGFzaCkKICAgICAs
IG1faW5UYWJsZShmYWxzZSkKICAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKHRy
dWUpCiB7Ci0gICAgbWVtY3B5KG1fZGF0YSwgc3RyLm1fZGF0YSwgbV9sZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKLSAgICBtX2RhdGFbbV9sZW5ndGhdID0gMDsKLX0KLQotU3RyaW5nSW1wbDo6U3Ry
aW5nSW1wbChjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAgaW5pdChzdHIsIHN0cmxlbihzdHIpKTsK
KyAgICBVQ2hhciogZGF0YSA9IG5ld1VDaGFyVmVjdG9yKHN0ci5tX2xlbmd0aCk7CisgICAgbWVt
Y3B5KGRhdGEsIHN0ci5tX2RhdGEsIHN0ci5tX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAg
IGRhdGFbc3RyLm1fbGVuZ3RoXSA9IDA7CisgICAgbV9kYXRhID0gZGF0YTsKIH0KIAogU3RyaW5n
SW1wbDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKKyAgICA6IG1f
bGVuZ3RoKGxlbikKKyAgICAsIG1fZGF0YShuZXdVQ2hhclZlY3RvcihsZW4pKQorICAgICwgbV9o
YXNoKDApCisgICAgLCBtX2luVGFibGUoZmFsc2UpCisgICAgLCBtX2hhc1Rlcm1pbmF0aW5nTnVs
bENoYXJhY3RlcihmYWxzZSkKIHsKLSAgICBpbml0KHN0ciwgbGVuKTsKLX0KLQotdm9pZCBTdHJp
bmdJbXBsOjppbml0KGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgbGVuKQotewotICAgIG1faGFz
aCA9IDA7Ci0gICAgbV9pblRhYmxlID0gZmFsc2U7Ci0gICAgbV9oYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXIgPSBmYWxzZTsKLSAgICBtX2xlbmd0aCA9IGxlbjsKLSAgICBpZiAoIW1fbGVuZ3Ro
IHx8ICFzdHIpIHsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBtX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7CisgICAgQVNTRVJU
KHN0cik7CisgICAgQVNTRVJUKGxlbiA+IDApOworICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJW
ZWN0b3IobGVuKTsKKyAgICBVQ2hhciogcHRyID0gZGF0YTsKICAgICBpbnQgaSA9IG1fbGVuZ3Ro
OwotICAgIFVDaGFyKiBwdHIgPSBtX2RhdGE7CiAgICAgd2hpbGUgKGktLSkgewogICAgICAgICB1
bnNpZ25lZCBjaGFyIGMgPSAqc3RyKys7CiAgICAgICAgICpwdHIrKyA9IGM7CiAgICAgfQotfQot
Ci12b2lkIFN0cmluZ0ltcGw6OmluaXQoY29uc3QgVUNoYXIqIHN0ciwgdW5zaWduZWQgbGVuKQot
ewotICAgIG1faGFzaCA9IDA7Ci0gICAgbV9pblRhYmxlID0gZmFsc2U7Ci0gICAgbV9oYXNUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXIgPSBmYWxzZTsKLSAgICBtX2xlbmd0aCA9IGxlbjsKLSAgICBp
ZiAoIW1fbGVuZ3RoIHx8ICFzdHIpIHsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW4pOwotICAg
IG1lbWNweShtX2RhdGEsIHN0ciwgbGVuICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbV9kYXRhID0g
ZGF0YTsKIH0KIAogU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQpAQCAtMTQ0LDM0ICsxMjEsMjcg
QEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIGRlbGV0ZVVDaGFyVmVjdG9yKG1fZGF0
YSk7CiB9CiAKLWJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoMCwgbV9sZW5ndGgpOwotfQot
Ci1ib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuKSBjb25zdAorYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNw
YWNlKCkKIHsKLSAgICBpZiAoIW1fZGF0YSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8g
RklYTUU6IEJvdGggdGhlIGRlZmluaXRpb24gb2Ygd2hhdCB3aGl0ZXNwYWNlIGlzLCBhbmQgdGhl
IGRlZmluaXRpb24gb2Ygd2hhdAotICAgIC8vIHRoZSAibGVuIiBwYXJhbWV0ZXIgbWVhbnMgYXJl
IGRpZmZlcmVudCBoZXJlIGZyb20gd2hhdCdzIGRvbmUgaW4gUmVuZGVyVGV4dC4KLSAgICAvLyBG
SVhNRTogTm8gcmFuZ2UgY2hlY2tpbmcgaGVyZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9t
OyBpIDwgbGVuOyBpKyspCi0gICAgICAgIGlmIChtX2RhdGFbaV0gPiAweDdGIHx8ICFpc0FTQ0lJ
U3BhY2UobV9kYXRhW2ldKSkKKyAgICAvLyBGSVhNRTogVGhlIGRlZmluaXRpb24gb2Ygd2hpdGVz
cGFjZSBoZXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAvLyB0aGF0IGFy
ZSBub3Qgd2hpdGVzcGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIFJlbmRlclRleHQ7IEkg
d29uZGVyIGlmCisgICAgLy8gdGhhdCdzIGEgcHJvYmxlbSBpbiBwcmFjdGljZS4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykKKyAgICAgICAgaWYgKCFpc0FTQ0lJ
U3BhY2UobV9kYXRhW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KLSAgICAKLVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnN1YnN0cmluZyh1bnNpZ25l
ZCBwb3MsIHVuc2lnbmVkIGxlbikgY29uc3QKKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpzdWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4pCiB7Ci0gICAgaWYg
KHBvcyA+PSBtX2xlbmd0aCkgcmV0dXJuCi0gICAgICAgIG5ldyBTdHJpbmdJbXBsOworICAgIGlm
IChwb3MgPj0gbV9sZW5ndGgpCisgICAgICAgIHJldHVybiBlbXB0eSgpOwogICAgIGlmIChsZW4g
PiBtX2xlbmd0aCAtIHBvcykKICAgICAgICAgbGVuID0gbV9sZW5ndGggLSBwb3M7Ci0gICAgcmV0
dXJuIG5ldyBTdHJpbmdJbXBsKG1fZGF0YSArIHBvcywgbGVuKTsKKyAgICByZXR1cm4gY3JlYXRl
KG1fZGF0YSArIHBvcywgbGVuKTsKIH0KIAotVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJT
dGFydGluZ0F0KHVuc2lnbmVkIGkpIGNvbnN0CitVQ2hhcjMyIFN0cmluZ0ltcGw6OmNoYXJhY3Rl
clN0YXJ0aW5nQXQodW5zaWduZWQgaSkKIHsKICAgICBpZiAoVTE2X0lTX1NJTkdMRShtX2RhdGFb
aV0pKQogICAgICAgICByZXR1cm4gbV9kYXRhW2ldOwpAQCAtMjI1LDE0ICsxOTUsMTQgQEAgc3Rh
dGljIExlbmd0aCBwYXJzZUxlbmd0aChjb25zdCBVQ2hhciogbQogICAgIHJldHVybiBMZW5ndGgo
MCwgUmVsYXRpdmUpOwogfQogCi1MZW5ndGggU3RyaW5nSW1wbDo6dG9MZW5ndGgoKSBjb25zdAor
TGVuZ3RoIFN0cmluZ0ltcGw6OnRvTGVuZ3RoKCkKIHsKICAgICByZXR1cm4gcGFyc2VMZW5ndGgo
bV9kYXRhLCBtX2xlbmd0aCk7CiB9CiAKLUxlbmd0aCogU3RyaW5nSW1wbDo6dG9Db29yZHNBcnJh
eShpbnQmIGxlbikgY29uc3QKK0xlbmd0aCogU3RyaW5nSW1wbDo6dG9Db29yZHNBcnJheShpbnQm
IGxlbikKIHsKLSAgICBVQ2hhciogc3BhY2lmaWVkID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGgp
OworICAgIFZlY3RvcjxVQ2hhcj4gc3BhY2lmaWVkKG1fbGVuZ3RoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykgewogICAgICAgICBVQ2hhciBjYyA9IG1fZGF0
YVtpXTsKICAgICAgICAgaWYgKGNjID4gJzknIHx8IChjYyA8ICcwJyAmJiBjYyAhPSAnLScgJiYg
Y2MgIT0gJyonICYmIGNjICE9ICcuJykpCkBAIC0yNDAsOCArMjEwLDcgQEAgTGVuZ3RoKiBTdHJp
bmdJbXBsOjp0b0Nvb3Jkc0FycmF5KGludCYgbAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
cGFjaWZpZWRbaV0gPSBjYzsKICAgICB9Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzdHIocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KHNwYWNpZmllZCksIG1fbGVuZ3RoKTsK
LSAgICBkZWxldGVVQ2hhclZlY3RvcihzcGFjaWZpZWQpOworICAgIERlcHJlY2F0ZWRTdHJpbmcg
c3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVjYXRlZENoYXIqPihzcGFjaWZpZWQuZGF0
YSgpKSwgbV9sZW5ndGgpOwogCiAgICAgc3RyID0gc3RyLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwog
CkBAIC0yNjEsNyArMjMwLDcgQEAgTGVuZ3RoKiBTdHJpbmdJbXBsOjp0b0Nvb3Jkc0FycmF5KGlu
dCYgbAogICAgIHJldHVybiByOwogfQogCi1MZW5ndGgqIFN0cmluZ0ltcGw6OnRvTGVuZ3RoQXJy
YXkoaW50JiBsZW4pIGNvbnN0CitMZW5ndGgqIFN0cmluZ0ltcGw6OnRvTGVuZ3RoQXJyYXkoaW50
JiBsZW4pCiB7CiAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBEZXByZWNhdGVkQ2hhcio+KG1fZGF0YSksIG1fbGVuZ3RoKTsKICAgICBzdHIgPSBzdHIuc2lt
cGxpZnlXaGl0ZVNwYWNlKCk7CkBAIC0yOTEsNyArMjYwLDcgQEAgTGVuZ3RoKiBTdHJpbmdJbXBs
Ojp0b0xlbmd0aEFycmF5KGludCYgbAogICAgIHJldHVybiByOwogfQogCi1ib29sIFN0cmluZ0lt
cGw6OmlzTG93ZXIoKSBjb25zdAorYm9vbCBTdHJpbmdJbXBsOjppc0xvd2VyKCkKIHsKICAgICAv
LyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMg
YXJlIEFTQ0lJLgogICAgIGJvb2wgYWxsTG93ZXIgPSB0cnVlOwpAQCAtMzE1LDE3ICsyODQsMTAg
QEAgYm9vbCBTdHJpbmdJbXBsOjppc0xvd2VyKCkgY29uc3QKICAgICByZXR1cm4gYWxsTG93ZXI7
CiB9CiAKLVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6Omxvd2VyKCkgY29uc3QKK1Bhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogewotICAgIFN0cmluZ0ltcGwqIGMgPSBu
ZXcgU3RyaW5nSW1wbDsKLSAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gYzsKLQot
ICAgIFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGgpOwotICAgIGludCBsZW5n
dGggPSBtX2xlbmd0aDsKLQotICAgIGMtPm1fZGF0YSA9IGRhdGE7Ci0gICAgYy0+bV9sZW5ndGgg
PSBsZW5ndGg7CisgICAgVmVjdG9yPFVDaGFyPiBkYXRhKG1fbGVuZ3RoKTsKKyAgICBpbnQzMl90
IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNh
c2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAgICBVQ2hhciBvcmVkID0g
MDsKQEAgLTMzNSw3NSArMjk3LDQ1IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6Omxvd2VyKCkg
Y29uc3QKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAgaWYg
KCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVybiBhZG9w
dChkYXRhKTsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0
aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRh
LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0
b0xvd2VyKGRhdGEuZGF0YSgpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAg
ICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGM7
Ci0KLSAgICBpZiAocmVhbExlbmd0aCA+IGxlbmd0aCkgewotICAgICAgICBkZWxldGVVQ2hhclZl
Y3RvcihkYXRhKTsKLSAgICAgICAgZGF0YSA9IG5ld1VDaGFyVmVjdG9yKHJlYWxMZW5ndGgpOwot
ICAgIH0KLSAgICBsZW5ndGggPSByZWFsTGVuZ3RoOwotCi0gICAgYy0+bV9kYXRhID0gZGF0YTsK
LSAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKLQotICAgIFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwg
bGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAg
ICAgICBjLT5yZWYoKTsKLSAgICAgICAgYy0+ZGVyZWYoKTsKLSAgICAgICAgcmV0dXJuIGNvcHko
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAg
ICBkYXRhLnJlc2l6ZShyZWFsTGVuZ3RoKTsKKyAgICBVbmljb2RlOjp0b0xvd2VyKGRhdGEuZGF0
YSgpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaWYgKGVycm9yKQor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gYWRvcHQoZGF0YSk7CiB9CiAKLVN0cmlu
Z0ltcGwqIFN0cmluZ0ltcGw6OnVwcGVyKCkgY29uc3QKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6dXBwZXIoKQogewotICAgIFN0cmluZ0ltcGwqIGMgPSBuZXcgU3RyaW5nSW1w
bDsKLSAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gYzsKICAgICBib29sIGVycm9y
OwogICAgIGludDMyX3QgbGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcigwLCAwLCBtX2RhdGEsIG1f
bGVuZ3RoLCAmZXJyb3IpOwotICAgIGMtPm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbmd0aCk7
Ci0gICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgVW5pY29kZTo6dG9VcHBlcihjLT5tX2Rh
dGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgYy0+cmVmKCk7Ci0gICAgICAgIGMtPmRlcmVmKCk7Ci0gICAgICAgIHJldHVybiBj
b3B5KCk7Ci0gICAgfQotICAgIHJldHVybiBjOworICAgIFZlY3RvcjxVQ2hhcj4gZGF0YShsZW5n
dGgpOworICAgIFVuaWNvZGU6OnRvVXBwZXIoZGF0YS5kYXRhKCksIGxlbmd0aCwgbV9kYXRhLCBt
X2xlbmd0aCwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c2Vj
dXJlKFVDaGFyIGFDaGFyKSBjb25zdAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpzZWN1cmUoVUNoYXIgYUNoYXIpCiB7CiAgICAgaW50IGxlbmd0aCA9IG1fbGVuZ3RoOwotICAg
IFVDaGFyKiBkYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXI+
IGRhdGEobGVuZ3RoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAg
ICAgICBkYXRhW2ldID0gYUNoYXI7Ci0KLSAgICBTdHJpbmdJbXBsKiBjID0gbmV3IFN0cmluZ0lt
cGw7Ci0gICAgYy0+bV9kYXRhID0gZGF0YTsKLSAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAg
ICByZXR1cm4gYzsKKyAgICByZXR1cm4gYWRvcHQoZGF0YSk7CiB9CiAKLVN0cmluZ0ltcGwqIFN0
cmluZ0ltcGw6OmZvbGRDYXNlKCkgY29uc3QKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Zm9sZENhc2UoKQogewotICAgIFN0cmluZ0ltcGwqIGMgPSBuZXcgU3RyaW5nSW1wbDsK
LSAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gYzsKLQotICAgIFVDaGFyKiBkYXRh
ID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGgpOworICAgIFZlY3RvcjxVQ2hhcj4gZGF0YShtX2xl
bmd0aCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAotICAgIGMtPm1fZGF0YSA9
IGRhdGE7Ci0gICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7Ci0KICAgICAvLyBEbyBhIGZhc3RlciBs
b29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgogICAg
IFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
QEAgLTQxMiwzNyArMzQ0LDI0IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkg
Y29uc3QKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAgaWYg
KCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVybiBhZG9w
dChkYXRhKTsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0
aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0
YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6
Zm9sZENhc2UoZGF0YS5kYXRhKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsK
ICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4g
YzsKLQotICAgIGlmIChyZWFsTGVuZ3RoID4gbGVuZ3RoKSB7Ci0gICAgICAgIGRlbGV0ZVVDaGFy
VmVjdG9yKGRhdGEpOwotICAgICAgICBkYXRhID0gbmV3VUNoYXJWZWN0b3IocmVhbExlbmd0aCk7
Ci0gICAgfQotICAgIGxlbmd0aCA9IHJlYWxMZW5ndGg7Ci0KLSAgICBjLT5tX2RhdGEgPSBkYXRh
OwotICAgIGMtPm1fbGVuZ3RoID0gbGVuZ3RoOwotCi0gICAgVW5pY29kZTo6Zm9sZENhc2UoZGF0
YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewot
ICAgICAgICBjLT5yZWYoKTsKLSAgICAgICAgYy0+ZGVyZWYoKTsKLSAgICAgICAgcmV0dXJuIGNv
cHkoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGM7CisgICAgICAgIHJldHVybiBhZG9wdChkYXRhKTsK
KyAgICBkYXRhLnJlc2l6ZShyZWFsTGVuZ3RoKTsKKyAgICBVbmljb2RlOjpmb2xkQ2FzZShkYXRh
LmRhdGEoKSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQogCi1T
dHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpzdHJpcFdoaXRlU3BhY2UoKSBjb25zdAorUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdHJpcFdoaXRlU3BhY2UoKQogewotICAgIFN0cmlu
Z0ltcGwqIGMgPSBuZXcgU3RyaW5nSW1wbDsKICAgICBpZiAoIW1fbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gYzsKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKICAgICB1bnNpZ25lZCBzdGFydCA9
IDA7CiAgICAgdW5zaWduZWQgZW5kID0gbV9sZW5ndGggLSAxOwpAQCAtNDUzLDMyICszNzIsMjQg
QEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c3RyaXBXaGl0ZVNwYWNlKAogICAgIAogICAgIC8v
IG9ubHkgd2hpdGUgc3BhY2UKICAgICBpZiAoc3RhcnQgPiBlbmQpIAotICAgICAgICByZXR1cm4g
YzsKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZy
b20gZW5kCiAgICAgd2hpbGUgKGVuZCAmJiBpc1NwYWNlKG1fZGF0YVtlbmRdKSkgICAgICAgICAK
ICAgICAgICAgZW5kLS07Ci0gICAgCi0gICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0ICsgMTsK
LSAgICBjLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihsZW5ndGgpOwotICAgIGMtPm1fbGVuZ3Ro
ID0gbGVuZ3RoOwotICAgIG1lbWNweShjLT5tX2RhdGEsIG1fZGF0YSArIHN0YXJ0LCBsZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICAKLSAgICByZXR1cm4gYzsKKworICAgIHJldHVybiBjcmVh
dGUobV9kYXRhICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7CiB9CiAKLVN0cmluZ0ltcGwqIFN0
cmluZ0ltcGw6OnNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0CitQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5V2hpdGVTcGFjZSgpCiB7Ci0gICAgU3RyaW5nSW1wbCog
YyA9IG5ldyBTdHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgIHJldHVybiBj
OwotICAgIAotICAgIGMtPm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKG1fbGVuZ3RoKTsKLSAgICBj
b25zdCBVQ2hhciAqZnJvbSA9IG1fZGF0YTsKLSAgICBjb25zdCBVQ2hhciAqZnJvbWVuZCA9IGZy
b20gKyBtX2xlbmd0aDsKKyAgICBWZWN0b3I8VUNoYXI+IGRhdGEobV9sZW5ndGgpOworCisgICAg
Y29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIqIGZyb21lbmQgPSBm
cm9tICsgbV9sZW5ndGg7CiAgICAgaW50IG91dGMgPSAwOwogICAgIAotICAgIFVDaGFyICp0byA9
IGMtPm1fZGF0YTsKKyAgICBVQ2hhciogdG8gPSBkYXRhLmRhdGEoKTsKICAgICAKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIGlzU3BhY2UoKmZy
b20pKQpAQCAtNDk0LDE4ICs0MDUsMTQgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c2ltcGxp
ZnlXaGl0ZVNwYQogICAgIGlmIChvdXRjID4gMCAmJiB0b1tvdXRjIC0gMV0gPT0gJyAnKQogICAg
ICAgICBvdXRjLS07CiAgICAgCi0gICAgYy0+bV9sZW5ndGggPSBvdXRjOworICAgIGRhdGEucmVz
aXplKG91dGMpOwogICAgIAotICAgIHJldHVybiBjOworICAgIHJldHVybiBhZG9wdChkYXRhKTsK
IH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6Y2FwaXRhbGl6ZShVQ2hhciBwcmV2aW91cykg
Y29uc3QKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y2FwaXRhbGl6ZShVQ2hh
ciBwcmV2aW91cykKIHsKLSAgICBTdHJpbmdJbXBsKiBjYXBpdGFsaXplZFN0cmluZyA9IG5ldyBT
dHJpbmdJbXBsOwotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgIHJldHVybiBjYXBpdGFsaXpl
ZFN0cmluZzsKLQotICAgIFVDaGFyKiBzdHJpbmdXaXRoUHJldmlvdXMgPSBuZXdVQ2hhclZlY3Rv
cihtX2xlbmd0aCArIDEpOworICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nV2l0aFByZXZpb3VzKG1f
bGVuZ3RoICsgMSk7CiAgICAgc3RyaW5nV2l0aFByZXZpb3VzWzBdID0gcHJldmlvdXMgPT0gbm9C
cmVha1NwYWNlID8gJyAnIDogcHJldmlvdXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IG1fbGVuZ3RoICsgMTsgaSsrKSB7CiAgICAgICAgIC8vIFJlcGxhY2UgJm5ic3Agd2l0aCBhIHJl
YWwgc3BhY2Ugc2luY2UgSUNVIG5vIGxvbmdlciB0cmVhdHMgJm5ic3AgYXMgYSB3b3JkIHNlcGFy
YXRvci4KQEAgLTUxNSwzMCArNDIyLDI1IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmNhcGl0
YWxpemUoVUNoYXIKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tpXSA9IG1fZGF0YVtp
IC0gMV07CiAgICAgfQogCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGJvdW5kYXJ5ID0gd29yZEJy
ZWFrSXRlcmF0b3Ioc3RyaW5nV2l0aFByZXZpb3VzLCBtX2xlbmd0aCArIDEpOwotICAgIGlmICgh
Ym91bmRhcnkpIHsKLSAgICAgICAgZGVsZXRlVUNoYXJWZWN0b3Ioc3RyaW5nV2l0aFByZXZpb3Vz
KTsKLSAgICAgICAgcmV0dXJuIGNhcGl0YWxpemVkU3RyaW5nOwotICAgIH0KKyAgICBUZXh0QnJl
YWtJdGVyYXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmdXaXRoUHJldmlv
dXMuZGF0YSgpLCBtX2xlbmd0aCArIDEpOworICAgIGlmICghYm91bmRhcnkpCisgICAgICAgIHJl
dHVybiB0aGlzOwogCi0gICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fZGF0YSA9IG5ld1VDaGFyVmVj
dG9yKG1fbGVuZ3RoKTsKLSAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9sZW5ndGggPSBtX2xlbmd0
aDsKKyAgICBWZWN0b3I8VUNoYXI+IGRhdGEobV9sZW5ndGgpOwogCiAgICAgaW50MzJfdCBlbmRP
ZldvcmQ7CiAgICAgaW50MzJfdCBzdGFydE9mV29yZCA9IHRleHRCcmVha0ZpcnN0KGJvdW5kYXJ5
KTsKICAgICBmb3IgKGVuZE9mV29yZCA9IHRleHRCcmVha05leHQoYm91bmRhcnkpOyBlbmRPZldv
cmQgIT0gVGV4dEJyZWFrRG9uZTsgc3RhcnRPZldvcmQgPSBlbmRPZldvcmQsIGVuZE9mV29yZCA9
IHRleHRCcmVha05leHQoYm91bmRhcnkpKSB7CiAgICAgICAgIGlmIChzdGFydE9mV29yZCAhPSAw
KSAvLyBJZ25vcmUgZmlyc3QgY2hhciBvZiBwcmV2aW91cyBzdHJpbmcKLSAgICAgICAgICAgIGNh
cGl0YWxpemVkU3RyaW5nLT5tX2RhdGFbc3RhcnRPZldvcmQgLSAxXSA9IG1fZGF0YVtzdGFydE9m
V29yZCAtIDFdID09IG5vQnJlYWtTcGFjZSA/IG5vQnJlYWtTcGFjZSA6IHRvVGl0bGVDYXNlKHN0
cmluZ1dpdGhQcmV2aW91c1tzdGFydE9mV29yZF0pOworICAgICAgICAgICAgZGF0YVtzdGFydE9m
V29yZCAtIDFdID0gbV9kYXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPT0gbm9CcmVha1NwYWNlID8gbm9C
cmVha1NwYWNlIDogdG9UaXRsZUNhc2Uoc3RyaW5nV2l0aFByZXZpb3VzW3N0YXJ0T2ZXb3JkXSk7
CiAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydE9mV29yZCArIDE7IGkgPCBlbmRPZldvcmQ7IGkr
KykKLSAgICAgICAgICAgIGNhcGl0YWxpemVkU3RyaW5nLT5tX2RhdGFbaSAtIDFdID0gbV9kYXRh
W2kgLSAxXTsKKyAgICAgICAgICAgIGRhdGFbaSAtIDFdID0gbV9kYXRhW2kgLSAxXTsKICAgICB9
CiAKLSAgICBkZWxldGVVQ2hhclZlY3RvcihzdHJpbmdXaXRoUHJldmlvdXMpOwotCi0gICAgcmV0
dXJuIGNhcGl0YWxpemVkU3RyaW5nOworICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAotaW50
IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKSBjb25zdAoraW50IFN0cmluZ0ltcGw6OnRvSW50
KGJvb2wqIG9rKQogewogICAgIHVuc2lnbmVkIGkgPSAwOwogCkBAIC01NTksNyArNDYxLDcgQEAg
aW50IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKSBjb25zdAogICAgIHJldHVybiBEZXByZWNh
dGVkQ29uc3RTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KG1f
ZGF0YSksIGkpLnN0cmluZygpLnRvSW50KG9rKTsKIH0KIAotaW50NjRfdCBTdHJpbmdJbXBsOjp0
b0ludDY0KGJvb2wqIG9rKSBjb25zdAoraW50NjRfdCBTdHJpbmdJbXBsOjp0b0ludDY0KGJvb2wq
IG9rKQogewogICAgIHVuc2lnbmVkIGkgPSAwOwogCkBAIC01ODAsNyArNDgyLDcgQEAgaW50NjRf
dCBTdHJpbmdJbXBsOjp0b0ludDY0KGJvb2wqIG9rKSBjbwogICAgIHJldHVybiBEZXByZWNhdGVk
Q29uc3RTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KG1fZGF0
YSksIGkpLnN0cmluZygpLnRvSW50NjQob2spOwogfQogCi11aW50NjRfdCBTdHJpbmdJbXBsOjp0
b1VJbnQ2NChib29sKiBvaykgY29uc3QKK3VpbnQ2NF90IFN0cmluZ0ltcGw6OnRvVUludDY0KGJv
b2wqIG9rKQogewogICAgIHVuc2lnbmVkIGkgPSAwOwogCkBAIC01OTcsNyArNDk5LDcgQEAgdWlu
dDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50NjQoYm9vbCogb2spIAogICAgIHJldHVybiBEZXByZWNh
dGVkQ29uc3RTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXByZWNhdGVkQ2hhcio+KG1f
ZGF0YSksIGkpLnN0cmluZygpLnRvVUludDY0KG9rKTsKIH0KIAotZG91YmxlIFN0cmluZ0ltcGw6
OnRvRG91YmxlKGJvb2wqIG9rKSBjb25zdAorZG91YmxlIFN0cmluZ0ltcGw6OnRvRG91YmxlKGJv
b2wqIG9rKQogewogICAgIGlmICghbV9sZW5ndGgpIHsKICAgICAgICAgaWYgKG9rKQpAQCAtNjEy
LDcgKzUxNCw3IEBAIGRvdWJsZSBTdHJpbmdJbXBsOjp0b0RvdWJsZShib29sKiBvaykgY28KICAg
ICByZXR1cm4gdmFsOwogfQogCi1mbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rKSBj
b25zdAorZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaykKIHsKICAgICAvLyBGSVhN
RTogdGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBkb2VzIG5vdCBmaXQg
aW50byBhIGZsb2F0CiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQodG9Eb3VibGUo
b2spKTsKQEAgLTY1Miw3ICs1NTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxJZ25vcmlu
Z0Nhc2UoY29uCiAvLyBiYXNlZCBhbGdvcml0aG1zLgogLy8gTk9URTogVGhvc2UgdGltZSB0cmlh
bHMgd2VyZSBkb25lIHdoZW4gdGhpcyBmdW5jdGlvbiB3YXMgcGFydCBvZiBLV1EncyBEZXByZWNh
dGVkU3RyaW5nCiAvLyBJdCB3YXMgY29waWVkIGhlcmUgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgc2lu
Y2UuCi1pbnQgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBjaGFyKiBjaHMsIGludCBpbmRleCwgYm9v
bCBjYXNlU2Vuc2l0aXZlKSBjb25zdAoraW50IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciog
Y2hzLCBpbnQgaW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBpZiAoIWNocyB8fCBp
bmRleCA8IDApCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTY4Niw3ICs1ODgsNyBAQCBpbnQgU3Ry
aW5nSW1wbDo6ZmluZChjb25zdCBjaGFyKiBjaHMsIGluCiAgICAgcmV0dXJuIC0xOwogfQogCi1p
bnQgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBVQ2hhciBjLCBpbnQgc3RhcnQpIGNvbnN0CitpbnQg
U3RyaW5nSW1wbDo6ZmluZChjb25zdCBVQ2hhciBjLCBpbnQgc3RhcnQpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoICkKQEAgLTcw
MSw3ICs2MDMsNyBAQCBpbnQgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBVQ2hhciBjLCBpbnQgCiAK
IC8vIFRoaXMgd2FzIGNvcGllZCBmcm9tIERlcHJlY2F0ZWRTdHJpbmcgYW5kIG1hZGUgdG8gd29y
ayBoZXJlIHcvIHNtYWxsIG1vZGlmaWNhdGlvbnMuCiAvLyBGSVhNRSBjb21tZW50cyB3ZXJlIGZy
b20gdGhlIERlcHJlY2F0ZWRTdHJpbmcgdmVyc2lvbi4KLWludCBTdHJpbmdJbXBsOjpmaW5kKGNv
bnN0IFN0cmluZ0ltcGwqIHN0ciwgaW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0
CitpbnQgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBzdHIsIGludCBpbmRleCwgYm9vbCBj
YXNlU2Vuc2l0aXZlKQogewogICAgIC8vIEZJWE1FLCB1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBh
bGdvcml0aG0KICAgICAvKgpAQCAtNzYwLDcgKzY2Miw3IEBAIGludCBTdHJpbmdJbXBsOjpmaW5k
KGNvbnN0IFN0cmluZ0ltcGwqIHMKICAgICB9CiB9CiAKLWludCBTdHJpbmdJbXBsOjpyZXZlcnNl
RmluZChjb25zdCBVQ2hhciBjLCBpbnQgaW5kZXgpIGNvbnN0CitpbnQgU3RyaW5nSW1wbDo6cmV2
ZXJzZUZpbmQoY29uc3QgVUNoYXIgYywgaW50IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSAo
aW50KW1fbGVuZ3RoIHx8IG1fbGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTc3
Niw3ICs2NzgsNyBAQCBpbnQgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIgCiAg
ICAgfQogfQogCi1pbnQgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nSW1wbCog
c3RyLCBpbnQgaW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKK2ludCBTdHJpbmdJbXBs
OjpyZXZlcnNlRmluZChTdHJpbmdJbXBsKiBzdHIsIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0
aXZlKQogewogICAgIC8vIEZJWE1FLCB1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBhbGdvcml0aG0K
ICAgICAvKgpAQCAtODM1LDcgKzczNyw3IEBAIGludCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChj
b25zdCBTdHJpbmcKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgU3RyaW5nSW1wbDo6ZW5kc1dp
dGgoY29uc3QgU3RyaW5nSW1wbCogbV9kYXRhLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Citi
b29sIFN0cmluZ0ltcGw6OmVuZHNXaXRoKFN0cmluZ0ltcGwqIG1fZGF0YSwgYm9vbCBjYXNlU2Vu
c2l0aXZlKQogewogICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGludCBzdGFydCA9IG1fbGVuZ3Ro
IC0gbV9kYXRhLT5tX2xlbmd0aDsKQEAgLTg0NCwzOSArNzQ2LDM0IEBAIGJvb2wgU3RyaW5nSW1w
bDo6ZW5kc1dpdGgoY29uc3QgU3RyaW5nSW0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmlu
Z0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgb2xkQywgVUNoYXIgbmV3QykgY29uc3QK
K1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBvbGRDLCBV
Q2hhciBuZXdDKQogewogICAgIGlmIChvbGRDID09IG5ld0MpCi0gICAgICAgIHJldHVybiBjb25z
dF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgdW5z
aWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpCiAgICAgICAgIGlm
IChtX2RhdGFbaV0gPT0gb2xkQykKICAgICAgICAgICAgIGJyZWFrOwogICAgIGlmIChpID09IG1f
bGVuZ3RoKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxTdHJpbmdJbXBsKj4odGhpcyk7Ci0K
LSAgICBTdHJpbmdJbXBsKiBjID0gbmV3IFN0cmluZ0ltcGw7Ci0KLSAgICBjLT5tX2RhdGEgPSBu
ZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7Ci0gICAgYy0+bV9sZW5ndGggPSBtX2xlbmd0aDsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBWZWN0b3I8VUNoYXI+IGRhdGEobV9sZW5ndGgpOwog
ICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgewogICAgICAgICBVQ2hhciBjaCA9
IG1fZGF0YVtpXTsKICAgICAgICAgaWYgKGNoID09IG9sZEMpCiAgICAgICAgICAgICBjaCA9IG5l
d0M7Ci0gICAgICAgIGMtPm1fZGF0YVtpXSA9IGNoOworICAgICAgICBkYXRhW2ldID0gY2g7CiAg
ICAgfQotCi0gICAgcmV0dXJuIGM7CisgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQogCi1TdHJp
bmdJbXBsKiBTdHJpbmdJbXBsOjpyZXBsYWNlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBs
ZW5ndGhUb1JlcGxhY2UsIGNvbnN0IFN0cmluZ0ltcGwqIHN0cikgY29uc3QKK1Bhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoVG9SZXBsYWNlLCBTdHJpbmdJbXBsKiBzdHIpCiB7CiAgICAgcG9zaXRpb24gPSBt
aW4ocG9zaXRpb24sIGxlbmd0aCgpKTsKICAgICBsZW5ndGhUb1JlcGxhY2UgPSBtaW4obGVuZ3Ro
VG9SZXBsYWNlLCBsZW5ndGgoKSAtIHBvc2l0aW9uKTsKICAgICB1bnNpZ25lZCBsZW5ndGhUb0lu
c2VydCA9IHN0ciA/IHN0ci0+bGVuZ3RoKCkgOiAwOwogICAgIGlmICghbGVuZ3RoVG9SZXBsYWNl
ICYmICFsZW5ndGhUb0luc2VydCkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RyaW5nSW1w
bCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdGhpczsKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZl
cihsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0KTsKICAgICBtZW1j
cHkoYnVmZmVyLmRhdGEoKSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikp
OwogICAgIGlmIChzdHIpCkBAIC04ODYsMTAgKzc4MywxMCBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJ
bXBsOjpyZXBsYWNlKHVuc2lnbmVkCiAgICAgcmV0dXJuIGFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0
cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgU3RyaW5n
SW1wbCogcmVwbGFjZW1lbnQpIGNvbnN0CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbnQpCiB7CiAg
ICAgaWYgKCFyZXBsYWNlbWVudCkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RyaW5nSW1w
bCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgCiAgICAgaW50IHJlcFN0
ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKICAgICBpbnQgc3JjU2VnbWVudFN0YXJ0
ID0gMDsKQEAgLTkwMywxMiArODAwLDkgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFj
ZShVQ2hhciBwYQogICAgIAogICAgIC8vIElmIHdlIGhhdmUgMCBtYXRjaGVzLCB3ZSBkb24ndCBo
YXZlIHRvIGRvIGFueSBtb3JlIHdvcmsKICAgICBpZiAoIW1hdGNoQ291bnQpCi0gICAgICAgIHJl
dHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBuZXcgU3RyaW5nSW1wbDsKLSAgICBTdHJpbmdJbXBs
KiBkc3QgPSBuZXcgU3RyaW5nSW1wbCgpOwotICAgIGRzdC0+bV9sZW5ndGggPSBtX2xlbmd0aCAt
IG1hdGNoQ291bnQgKyAobWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aCk7Ci0gICAgZHN0LT5tX2Rh
dGEgPSBuZXdVQ2hhclZlY3Rvcihkc3QtPm1fbGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNoYXI+IGRh
dGEobV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGgpKTsK
ICAgICAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCiAgICAgaW50IHNyY1NlZ21lbnRF
bmQ7CkBAIC05MTgsMjcgKzgxMiwyNyBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpyZXBsYWNl
KFVDaGFyIHBhCiAgICAgCiAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJu
LCBzcmNTZWdtZW50U3RhcnQpKSA+PSAwKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
cmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZHN0LT5tX2Rh
dGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0
aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBkc3RPZmZz
ZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihV
Q2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAg
bWVtY3B5KGRzdC0+bV9kYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBT
dHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsg
ZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2Vn
bWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExl
bmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkc3QtPm1fZGF0
YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgCi0gICAgcmV0dXJuIGRzdDsKKyAgICBtZW1jcHkoZGF0
YS5kYXRhKCkgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVu
dExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQog
Ci1TdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpyZXBsYWNlKGNvbnN0IFN0cmluZ0ltcGwqIHBhdHRl
cm4sIGNvbnN0IFN0cmluZ0ltcGwqIHJlcGxhY2VtZW50KSBjb25zdAorUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmluZ0lt
cGwqIHJlcGxhY2VtZW50KQogewogICAgIGlmICghcGF0dGVybiB8fCAhcmVwbGFjZW1lbnQpCi0g
ICAgICAgIHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHRoaXM7CiAKICAgICBpbnQgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4tPmxlbmd0aCgpOwog
ICAgIGlmICghcGF0dGVybkxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RyaW5n
SW1wbCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgCiAgICAgaW50IHJl
cFN0ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKICAgICBpbnQgc3JjU2VnbWVudFN0
YXJ0ID0gMDsKQEAgLTk1MiwxMiArODQ2LDkgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVw
bGFjZShjb25zdCBTdAogICAgIAogICAgIC8vIElmIHdlIGhhdmUgMCBtYXRjaGVzLCB3ZSBkb24n
dCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsKICAgICBpZiAoIW1hdGNoQ291bnQpCi0gICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFN0cmluZ0ltcGwqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBuZXcgU3RyaW5nSW1wbDsKLSAgICBTdHJpbmdJ
bXBsKiBkc3QgPSBuZXcgU3RyaW5nSW1wbCgpOwotICAgIGRzdC0+bV9sZW5ndGggPSBtX2xlbmd0
aCArIG1hdGNoQ291bnQgKiAocmVwU3RyTGVuZ3RoIC0gcGF0dGVybkxlbmd0aCk7Ci0gICAgZHN0
LT5tX2RhdGEgPSBuZXdVQ2hhclZlY3Rvcihkc3QtPm1fbGVuZ3RoKTsKKyAgICBWZWN0b3I8VUNo
YXI+IGRhdGEobV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJMZW5n
dGgpKTsKICAgICAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCiAgICAgaW50IHNyY1Nl
Z21lbnRFbmQ7CkBAIC05NjcsMjUgKzg1OCwyNSBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpy
ZXBsYWNlKGNvbnN0IFN0CiAgICAgCiAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChw
YXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSA+PSAwKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5n
dGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZHN0
LT5tX2RhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVu
dExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBk
c3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAg
ICAgICAgbWVtY3B5KGRzdC0+bV9kYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRh
LCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0
YSgpICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXpl
b2YoVUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAg
c3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQog
CiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAg
IG1lbWNweShkc3QtPm1fZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0
LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEuZGF0
YSgpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKIAotICAgIHJldHVybiBkc3Q7CisgICAgcmV0dXJuIGFkb3B0
KGRhdGEpOwogfQogCi1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmlu
Z0ltcGwqIGIpCitib29sIGVxdWFsKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCiB7CiAg
ICAgcmV0dXJuIFN0cmluZ0hhc2g6OmVxdWFsKGEsIGIpOwogfQogCi1ib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpCitib29sIGVxdWFsKFN0cmluZ0ltcGwqIGEs
IGNvbnN0IGNoYXIqIGIpCiB7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gIWI7CkBAIC0x
MDA1LDEyICs4OTYsMTIgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBj
aAogICAgIHJldHVybiAhYltsZW5ndGhdOwogfQogCi1ib29sIGVxdWFsSWdub3JpbmdDYXNlKGNv
bnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCitib29sIGVxdWFsSWdub3Jp
bmdDYXNlKFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCiB7CiAgICAgcmV0dXJuIENhc2VG
b2xkaW5nSGFzaDo6ZXF1YWwoYSwgYik7CiB9CiAKLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29u
c3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKK2Jvb2wgZXF1YWxJZ25vcmluZ0Nhc2Uo
U3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKIHsKICAgICBpZiAoIWEpCiAgICAgICAgIHJl
dHVybiAhYjsKQEAgLTExMzcsNyArMTAyOCw3IEBAIHVuc2lnbmVkIFN0cmluZ0ltcGw6OmNvbXB1
dGVIYXNoKGNvbnN0IGMKICAgICByZXR1cm4gaGFzaDsKIH0KIAotVmVjdG9yPGNoYXI+IFN0cmlu
Z0ltcGw6OmFzY2lpKCkgY29uc3QKK1ZlY3RvcjxjaGFyPiBTdHJpbmdJbXBsOjphc2NpaSgpCiB7
CiAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihtX2xlbmd0aCArIDEpOwogICAgIApAQCAtMTE1Myw3
ICsxMDQ0LDcgQEAgVmVjdG9yPGNoYXI+IFN0cmluZ0ltcGw6OmFzY2lpKCkgY29uc3QKICAgICBy
ZXR1cm4gYnVmZmVyOwogfQogCi1XVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpk
ZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpIGNvbnN0CitXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBT
dHJpbmdJbXBsOjpkZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKICAgICAgICAgV1RGOjpVbmljb2RlOjpEaXJl
Y3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKG1fZGF0YVtpXSk7
CkBAIC0xMTY1LDIzICsxMDU2LDExIEBAIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIFN0cmluZ0lt
cGw6OmRlZmEKICAgICByZXR1cm4gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsKIH0KIAotU3Ry
aW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBJZGVudGlmaWVyJiBzdHIpCi17Ci0gICAgaW5pdChy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwot
fQotCi1TdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVTdHJpbmcmIHN0cikKK1Bhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIHN0ciwgdW5zaWduZWQgbGVuKQogewotICAgIGluaXQocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KHN0ci5kYXRhKCkpLCBzdHIuc2l6ZSgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsKGNvbnN0IFVD
aGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKLXsKLSAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSBuZXcg
U3RyaW5nSW1wbDsKICAgICBpZiAoIWxlbiB8fCAhc3RyKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIAotICAgIFVDaGFyKiBzdHJpcHBlZENvcHkgPSBuZXdVQ2hhclZlY3RvcihsZW4pOwor
ICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICBWZWN0b3I8VUNoYXI+IHN0cmlwcGVkQ29weShs
ZW4pOwogICAgIGludCBzdHJpcHBlZExlbmd0aCA9IGxlbjsKICAgICBib29sIGZvdW5kTnVsbCA9
IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewpAQCAtMTE5
NSwyMyArMTA3NCw1MyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0
CiAgICAgICAgICAgICBpZiAoVUNoYXIgYyA9IHN0cltpXSkKICAgICAgICAgICAgICAgICBzdHJp
cHBlZENvcHlbc3RyaXBwZWRMZW5ndGgrK10gPSBjOwogICAgICAgICB9CisgICAgICAgIHN0cmlw
cGVkQ29weS5yZXNpemUoc3RyaXBwZWRMZW5ndGgpOwogICAgIH0KLQotICAgIHJlc3VsdC0+bV9k
YXRhID0gc3RyaXBwZWRDb3B5OwotICAgIHJlc3VsdC0+bV9sZW5ndGggPSBzdHJpcHBlZExlbmd0
aDsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBhZG9wdChzdHJpcHBlZENvcHkpOwog
fQogCi1TdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjphZG9wdChWZWN0b3I8VUNoYXI+JiBidWZmZXIp
CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFZlY3RvcjxVQ2hhcj4m
IGJ1ZmZlcikKIHsKICAgICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgaWYgKHNp
emUgPT0gMCkKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisKKyAgICBzaXplX3QgY2FwYWNpdHkg
PSBidWZmZXIuY2FwYWNpdHkoKTsKKwogICAgIFVDaGFyKiBkYXRhID0gYnVmZmVyLnJlbGVhc2VC
dWZmZXIoKTsKLSAgICBkYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhkYXRh
LCBzaXplICogc2l6ZW9mKFVDaGFyKSkpOworICAgIGlmIChzaXplIDwgY2FwYWNpdHkpCisgICAg
ICAgIGRhdGEgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RSZWFsbG9jKGRhdGEsIHNpemUgKiBz
aXplb2YoVUNoYXIpKSk7CiAKLSAgICBTdHJpbmdJbXBsKiByZXN1bHQgPSBuZXcgU3RyaW5nSW1w
bDsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IG5ldyBTdHJpbmdJbXBsOwog
ICAgIHJlc3VsdC0+bV9sZW5ndGggPSBzaXplOwogICAgIHJlc3VsdC0+bV9kYXRhID0gZGF0YTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNyZWF0ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHkoKTsK
KyAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgY2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoY2hh
cmFjdGVycywgbGVuZ3RoKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpjcmVhdGUoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIGlmICghc3RyaW5nKQorICAgICAg
ICByZXR1cm4gZW1wdHkoKTsKKyAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgc3RybGVuKHN0cmlu
ZykpOworfQorCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhU
ZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nKQoreworICAg
IHJldHVybiBuZXcgU3RyaW5nSW1wbChzdHJpbmcsIFdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMDkgKzQ3LDEwMiBAQCBzdHJ1Y3Qg
U3RyaW5nSGFzaDsKIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiAKIGNsYXNzIFN0cmlu
Z0ltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHJpbmdJbXBsPiB7Ci1wcml2YXRlOgotICAgIHN0
cnVjdCBXaXRoT25lUmVmIHsgfTsKLSAgICBTdHJpbmdJbXBsKFdpdGhPbmVSZWYpIDogbV9sZW5n
dGgoMCksIG1fZGF0YSgwKSwgbV9oYXNoKDApLCBtX2luVGFibGUoZmFsc2UpLCBtX2hhc1Rlcm1p
bmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkgeyByZWYoKTsgfQotICAgIHZvaWQgaW5pdChjb25z
dCBjaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIGluaXQoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwotCiBwcm90ZWN0ZWQ6CiAgICAgU3RyaW5nSW1wbCgpIDogbV9sZW5n
dGgoMCksIG1fZGF0YSgwKSwgbV9oYXNoKDApLCBtX2luVGFibGUoZmFsc2UpLCBtX2hhc1Rlcm1p
bmF0aW5nTnVsbENoYXJhY3RlcihmYWxzZSkgeyB9Ci1wdWJsaWM6CisKK3ByaXZhdGU6CiAgICAg
U3RyaW5nSW1wbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgU3RyaW5nSW1w
bChjb25zdCBjaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBTdHJpbmdJbXBsKGNvbnN0IGNo
YXIqKTsKLSAgICBTdHJpbmdJbXBsKGNvbnN0IEtKUzo6SWRlbnRpZmllciYpOwotICAgIFN0cmlu
Z0ltcGwoY29uc3QgS0pTOjpVU3RyaW5nJik7Ci0gICAgflN0cmluZ0ltcGwoKTsKIAogICAgIHN0
cnVjdCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyIHsgfTsKICAgICBTdHJpbmdJbXBsKGNv
bnN0IFN0cmluZ0ltcGwmLCBXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKTsKIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGwoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCBsZW4pOwotICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBhZG9wdChWZWN0b3I8
VUNoYXI+Jik7CisgICAgc3RydWN0IFdpdGhPbmVSZWYgeyB9OworICAgIFN0cmluZ0ltcGwoV2l0
aE9uZVJlZikgOiBtX2xlbmd0aCgwKSwgbV9kYXRhKDApLCBtX2hhc2goMCksIG1faW5UYWJsZShm
YWxzZSksIG1faGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGZhbHNlKSB7IHJlZigpOyB9CisK
K3B1YmxpYzoKKyAgICB+U3RyaW5nSW1wbCgpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNo
YXIqKTsKIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRoVGVybWluYXRpbmdO
dWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmluZ0ltcGwmKTsKIAotICAgIGJvb2wgaGFzVGVybWluYXRp
bmdOdWxsQ2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXJtaW5hdGluZ051bGxDaGFy
YWN0ZXI7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpcHBp
bmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoVmVjdG9yPFVDaGFyPiYpOwogCi0gICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgaWYgKG1faGFzaCA9PSAwKSBtX2hhc2ggPSBjb21wdXRl
SGFzaChtX2RhdGEsIG1fbGVuZ3RoKTsgcmV0dXJuIG1faGFzaDsgfQorICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzKCkgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyKCkgeyByZXR1cm4gbV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7IH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSB7IGlmIChtX2hhc2ggPT0gMCkgbV9oYXNoID0gY29tcHV0ZUhhc2gobV9k
YXRhLCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogICAgIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlSGFzaChjb25zdCBjaGFyKik7CiAgICAgCiAgICAgLy8gTWFrZXMgYSBkZWVwIGNv
cHkuIEhlbHBmdWwgb25seSBpZiB5b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24gYW5vdGhlciB0
aHJlYWQuCiAgICAgLy8gU2luY2UgU3RyaW5nSW1wbCBvYmplY3RzIGFyZSBpbW11dGFibGUsIHRo
ZXJlJ3Mgbm8gb3RoZXIgcmVhc29uIHRvIG1ha2UgYSBjb3B5LgotICAgIFN0cmluZ0ltcGwqIGNv
cHkoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKTsgfQor
ICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY29weSgpIHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBs
KG1fZGF0YSwgbV9sZW5ndGgpOyB9CisKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0
cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsKIAotICAgIFN0cmlu
Z0ltcGwqIHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKSBj
b25zdDsKKyAgICBVQ2hhciBvcGVyYXRvcltdKGludCBwb3MpIHsgcmV0dXJuIG1fZGF0YVtwb3Nd
OyB9CisgICAgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKTsKIAotICAgIFVD
aGFyIG9wZXJhdG9yW10oaW50IHBvcykgY29uc3QgeyByZXR1cm4gbV9kYXRhW3Bvc107IH0KLSAg
ICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OworICAgIExlbmd0
aCB0b0xlbmd0aCgpOwogCi0gICAgTGVuZ3RoIHRvTGVuZ3RoKCkgY29uc3Q7CisgICAgYm9vbCBj
b250YWluc09ubHlXaGl0ZXNwYWNlKCk7CiAKLSAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLQotICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNv
bnN0OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UsIHVubGlrZSBEZXByZWNhdGVkU3RyaW5n
Ci0gICAgaW50NjRfdCB0b0ludDY0KGJvb2wqIG9rID0gMCkgY29uc3Q7IC8vIGlnbm9yZXMgdHJh
aWxpbmcgZ2FyYmFnZSwgdW5saWtlIERlcHJlY2F0ZWRTdHJpbmcKLSAgICB1aW50NjRfdCB0b1VJ
bnQ2NChib29sKiBvayA9IDApIGNvbnN0OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UsIHVu
bGlrZSBEZXByZWNhdGVkU3RyaW5nCi0gICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCkg
Y29uc3Q7Ci0gICAgZmxvYXQgdG9GbG9hdChib29sKiBvayA9IDApIGNvbnN0OwotCi0gICAgTGVu
Z3RoKiB0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBjb25zdDsKLSAgICBMZW5ndGgqIHRvTGVuZ3Ro
QXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIGJvb2wgaXNMb3dlcigpIGNvbnN0OwotICAgIFN0
cmluZ0ltcGwqIGxvd2VyKCkgY29uc3Q7Ci0gICAgU3RyaW5nSW1wbCogdXBwZXIoKSBjb25zdDsK
LSAgICBTdHJpbmdJbXBsKiBzZWN1cmUoVUNoYXIgYUNoYXIpIGNvbnN0OwotICAgIFN0cmluZ0lt
cGwqIGNhcGl0YWxpemUoVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0OwotICAgIFN0cmlu
Z0ltcGwqIGZvbGRDYXNlKCkgY29uc3Q7Ci0KLSAgICBTdHJpbmdJbXBsKiBzdHJpcFdoaXRlU3Bh
Y2UoKSBjb25zdDsKLSAgICBTdHJpbmdJbXBsKiBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsK
LQotICAgIGludCBmaW5kKGNvbnN0IGNoYXIqLCBpbnQgaW5kZXggPSAwLCBib29sIGNhc2VTZW5z
aXRpdmUgPSB0cnVlKSBjb25zdDsKLSAgICBpbnQgZmluZChVQ2hhciwgaW50IGluZGV4ID0gMCkg
Y29uc3Q7Ci0gICAgaW50IGZpbmQoY29uc3QgU3RyaW5nSW1wbCosIGludCBpbmRleCwgYm9vbCBj
YXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CisgICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCk7
IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZSwgdW5saWtlIERlcHJlY2F0ZWRTdHJpbmcKKyAg
ICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJi
YWdlLCB1bmxpa2UgRGVwcmVjYXRlZFN0cmluZworICAgIHVpbnQ2NF90IHRvVUludDY0KGJvb2wq
IG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZSwgdW5saWtlIERlcHJlY2F0ZWRT
dHJpbmcKKyAgICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKTsKKyAgICBmbG9hdCB0b0Zs
b2F0KGJvb2wqIG9rID0gMCk7CiAKLSAgICBpbnQgcmV2ZXJzZUZpbmQoVUNoYXIsIGludCBpbmRl
eCkgY29uc3Q7Ci0gICAgaW50IHJldmVyc2VGaW5kKGNvbnN0IFN0cmluZ0ltcGwqLCBpbnQgaW5k
ZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OworICAgIExlbmd0aCogdG9Db29y
ZHNBcnJheShpbnQmIGxlbik7CisgICAgTGVuZ3RoKiB0b0xlbmd0aEFycmF5KGludCYgbGVuKTsK
KyAgICBib29sIGlzTG93ZXIoKTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGxvd2VyKCk7
CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB1cHBlcigpOworICAgIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gc2VjdXJlKFVDaGFyIGFDaGFyKTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IGNhcGl0YWxpemUoVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIpOworICAgIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gZm9sZENhc2UoKTsKKworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzaW1wbGlmeVdoaXRlU3Bh
Y2UoKTsKKworICAgIGludCBmaW5kKGNvbnN0IGNoYXIqLCBpbnQgaW5kZXggPSAwLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKTsKKyAgICBpbnQgZmluZChVQ2hhciwgaW50IGluZGV4ID0gMCk7
CisgICAgaW50IGZpbmQoU3RyaW5nSW1wbCosIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZl
ID0gdHJ1ZSk7CisKKyAgICBpbnQgcmV2ZXJzZUZpbmQoVUNoYXIsIGludCBpbmRleCk7CisgICAg
aW50IHJldmVyc2VGaW5kKFN0cmluZ0ltcGwqLCBpbnQgaW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IHRydWUpOwogICAgIAotICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsKiBt
X2RhdGEsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIGZpbmQobV9k
YXRhLCAwLCBjYXNlU2Vuc2l0aXZlKSA9PSAwOyB9Ci0gICAgYm9vbCBlbmRzV2l0aChjb25zdCBT
dHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBz
dGFydHNXaXRoKFN0cmluZ0ltcGwqIG1fZGF0YSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkg
eyByZXR1cm4gZmluZChtX2RhdGEsIDAsIGNhc2VTZW5zaXRpdmUpID09IDA7IH0KKyAgICBib29s
IGVuZHNXaXRoKFN0cmluZ0ltcGwqLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKTsKIAotICAg
IC8vIERvZXMgbm90IG1vZGlmeSB0aGUgc3RyaW5nLgotICAgIFN0cmluZ0ltcGwqIHJlcGxhY2Uo
VUNoYXIsIFVDaGFyKSBjb25zdDsKLSAgICBTdHJpbmdJbXBsKiByZXBsYWNlKFVDaGFyLCBjb25z
dCBTdHJpbmdJbXBsKikgY29uc3Q7Ci0gICAgU3RyaW5nSW1wbCogcmVwbGFjZShjb25zdCBTdHJp
bmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0OwotICAgIFN0cmluZ0ltcGwqIHJlcGxh
Y2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgVUNoYXIpOworICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgU3RyaW5nSW1wbCopOworICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCop
OworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5z
aWduZWQgbGVuLCBTdHJpbmdJbXBsKik7CiAKICAgICBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHko
KTsKIAotICAgIFZlY3RvcjxjaGFyPiBhc2NpaSgpIGNvbnN0OworICAgIFZlY3RvcjxjaGFyPiBh
c2NpaSgpOwogCi0gICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJl
Y3Rpb24oKSBjb25zdDsKKyAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkZWZhdWx0V3JpdGlu
Z0RpcmVjdGlvbigpOwogCiAjaWYgUExBVEZPUk0oQ0YpCi0gICAgU3RyaW5nSW1wbChDRlN0cmlu
Z1JlZik7Ci0gICAgQ0ZTdHJpbmdSZWYgY3JlYXRlQ0ZTdHJpbmcoKSBjb25zdDsKKyAgICBDRlN0
cmluZ1JlZiBjcmVhdGVDRlN0cmluZygpOwogI2VuZGlmCiAjaWZkZWYgX19PQkpDX18KLSAgICBT
dHJpbmdJbXBsKE5TU3RyaW5nKik7Ci0gICAgb3BlcmF0b3IgTlNTdHJpbmcqKCkgY29uc3Q7Cisg
ICAgb3BlcmF0b3IgTlNTdHJpbmcqKCk7CiAjZW5kaWYKLSNpZiBQTEFURk9STShTWU1CSUFOKQot
ICAgIFN0cmluZ0ltcGwoY29uc3QgVERlc0MmKTsKLSAgICBUUHRyQyBkZXMoKSBjb25zdDsKLSNl
bmRpZgotCi0gICAgU3RyaW5nSW1wbChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAKIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgVUNoYXIqIG1fZGF0YTsKKyAgICBjb25z
dCBVQ2hhciogbV9kYXRhOwogCiAgICAgZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZzsKICAgICBm
cmllbmQgc3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKQEAgLTE2MCwxMyArMTUzLDEzIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsKIH07CiAK
LWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqKTsKLWJvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IGNoYXIqKTsKLWlubGluZSBib29sIGVxdWFs
KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsKGIsIGEp
OyB9Ci0KLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0
cmluZ0ltcGwqKTsKLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nSW1wbCosIGNv
bnN0IGNoYXIqKTsKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEs
IGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIsIGEpOyB9
Citib29sIGVxdWFsKFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7Citib29sIGVxdWFsKFN0cmlu
Z0ltcGwqLCBjb25zdCBjaGFyKik7CitpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBT
dHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBhKTsgfQorCitib29sIGVxdWFsSWdub3Jp
bmdDYXNlKFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7Citib29sIGVxdWFsSWdub3JpbmdDYXNl
KFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdCBjaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShiLCBhKTsgfQogCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdD
Ri5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0NGLmNw
cAkocmV2aXNpb24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nQ0Yu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFN0cmluZzo6U3RyaW5nKENGU3Ry
aW5nUmVmIHN0cikKICAgICBlbHNlIHsKICAgICAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBidWZm
ZXIoc2l6ZSk7CiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHIsIENGUmFuZ2VNYWtl
KDAsIHNpemUpLCAoVW5pQ2hhciopYnVmZmVyLmRhdGEoKSk7Ci0gICAgICAgIG1faW1wbCA9IG5l
dyBTdHJpbmdJbXBsKGJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICBtX2ltcGwgPSBTdHJp
bmdJbXBsOjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwgc2l6ZSk7CiAgICAgfQogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkocmV2aXNpb24gMjkwODgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsOSArMjcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNGU3RyaW5n
UmVmIFN0cmluZ0ltcGw6OmNyZWF0ZUNGU3RyaW5nKCkgY29uc3QKK0NGU3RyaW5nUmVmIFN0cmlu
Z0ltcGw6OmNyZWF0ZUNGU3RyaW5nKCkKIHsKLSAgICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycyhOVUxMLCAoY29uc3QgVW5pQ2hhciopbV9kYXRhLCBtX2xlbmd0aCk7CisgICAg
cmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tCShyZXZpc2lvbiAyOTA4OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjMsNyArMjMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0cmluZ0lt
cGw6Om9wZXJhdG9yIE5TU3RyaW5nICooKSBjb25zdAorU3RyaW5nSW1wbDo6b3BlcmF0b3IgTlNT
dHJpbmcgKigpCiB7CiAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczpt
X2RhdGEgbGVuZ3RoOm1fbGVuZ3RoXTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvU3RyaW5nTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMv
U3RyaW5nTWFjLm1tCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvU3RyaW5nTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIFN0cmluZzo6
U3RyaW5nKE5TU3RyaW5nKiBzdHIpCiAgICAgZWxzZSB7CiAgICAgICAgIFZlY3RvcjxVQ2hhciwg
MTAyND4gYnVmZmVyKHNpemUpOwogICAgICAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMocmVpbnRl
cnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oc3RyKSwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIGJ1ZmZl
ci5kYXRhKCkpOwotICAgICAgICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChidWZmZXIuZGF0YSgp
LCBzaXplKTsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRh
KCksIHNpemUpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1N0
cmluZ1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvU3RyaW5n
UXQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9xdC9TdHJp
bmdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMwICszNSwxNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBTdHJpbmcgY29udmVyc2lvbnMKIFN0cmluZzo6U3RyaW5nKGNvbnN0IFFTdHJp
bmcmIHFzdHIpCiB7Ci0gICAgaWYgKHFzdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9pbXBsID0g
MDsKKyAgICBpZiAocXN0ci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB1
bnNpZ25lZCBpbnQgbGVuID0gcXN0ci5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogc3RyID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHFzdHIuY29uc3REYXRhKCkpOwotCi0gICAg
aWYgKCFzdHIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobGVuID09IDApCi0gICAg
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2lt
cGwgPSBuZXcgU3RyaW5nSW1wbChzdHIsIGxlbik7CisgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6
Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihxc3RyLmNvbnN0RGF0YSgpKSwg
cXN0ci5sZW5ndGgoKSk7CiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IFFTdHJpbmdSZWYmIHJl
ZikKIHsKICAgICBpZiAoIXJlZi5zdHJpbmcoKSkgCi0gICAgICAgIG1faW1wbCA9IDA7Ci0gICAg
ZWxzZSBpZiAoIXJlZi5sZW5ndGgoKSkgCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVt
cHR5KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHJlZi51bmljb2RlKCkpLCByZWYubGVuZ3RoKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4ocmVmLnVuaWNvZGUoKSksIHJlZi5sZW5ndGgoKSk7CiB9
CiAKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC93eC9TdHJpbmdXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3d4L1N0cmluZ1d4LmNwcAkocmV2aXNp
b24gMjkwODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvd3gvU3RyaW5nV3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZzo6U3RyaW5nKGNvbnN0IHd4U3RyaW5n
JiB3eHN0cikKICAgICAvLyBjb252ZXJzaW9uIHRvIFVURi0xNiBvciBnZXR0aW5nIGludGVybmFs
IGJ1ZmZlciBpc24ndCBzdXBwb3NlZCB0byBmYWlsOgogICAgIHd4QVNTRVJUX01TRyhzdHIgIT0g
TlVMTCwgX1QoImZhaWxlZCBzdHJpbmcgY29udmVyc2lvbj8iKSk7CiAKLSAgICBtX2ltcGwgPSBu
ZXcgU3RyaW5nSW1wbChzdHIsIGxlbik7CisgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
KHN0ciwgbGVuKTsKIH0KIAogU3RyaW5nOjpvcGVyYXRvciB3eFN0cmluZygpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQlIuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJSLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBSZW5kZXJCUjo6UmVuZGVyQlIoTm9kZSogbm9kZSkKLSAgICA6IFJl
bmRlclRleHQobm9kZSwgbmV3IFN0cmluZ0ltcGwoIlxuIikpCisgICAgOiBSZW5kZXJUZXh0KG5v
ZGUsIFN0cmluZ0ltcGw6OmNyZWF0ZSgiXG4iKSkKICAgICAsIG1fbGluZUhlaWdodCgtMSkKIHsK
IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZp
c2lvbiAyOTA4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0No
aWxkT2ZIaWRkZW5Db250YWkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlbmRlclNWR0lubGlu
ZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgU3RyaW5nSW1wbCogc3RyKSAKK1Jl
bmRlclNWR0lubGluZVRleHQ6OlJlbmRlclNWR0lubGluZVRleHQoTm9kZSogbiwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBzdHIpIAogICAgIDogUmVuZGVyVGV4dChuLCBzdHIpCiB7CiB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAyOTA4OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJv
amVjdC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRl
bnQuY2FudGVyYnVyeS5hYy5uej4KLSAqICAgICAgICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0IDogcHVibGljIFJlbmRlclRl
eHQgewogcHVibGljOgotICAgIFJlbmRlclNWR0lubGluZVRleHQoTm9kZSosIFN0cmluZ0ltcGwq
KTsKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KE5vZGUqLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
KTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAi
UmVuZGVyU1ZHSW5saW5lVGV4dCI7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRy
dWUpOwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgeyByZXR1cm4gZmFsc2U7IH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyOTA4OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY29uc3QgU3RyaW5nSW1wbCog
dGV4dCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoU3RyaW5nSW1w
bCogdGV4dCkKIHsKICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSB0ZXh0LT5jaGFyYWN0ZXJzKCk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDI5MDg4KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTAgKzQ3LDEwIEBAIFJlbmRlclRleHRGcmFnbWVudDo6UmVuZGVyVGV4dEZyYWdtZW50KE4KIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyVGV4dEZyYWdtZW50OjpvcmlnaW5hbFRleHQoKSBj
b25zdAogewogICAgIE5vZGUqIGUgPSBlbGVtZW50KCk7Ci0gICAgU3RyaW5nSW1wbCogcmVzdWx0
ID0gKGUgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPnN0cmluZygpIDogY29udGVudFN0cmluZygp
KTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gKGUgPyBzdGF0aWNfY2FzdDxUZXh0
Kj4oZSktPnN0cmluZygpIDogY29udGVudFN0cmluZygpKTsKICAgICBpZiAocmVzdWx0ICYmIChz
dGFydCgpID4gMCB8fCBzdGFydCgpIDwgcmVzdWx0LT5sZW5ndGgoKSkpCiAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdC0+c3Vic3RyaW5nKHN0YXJ0KCksIGVuZCgpKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiB2b2lkIFJlbmRlclRleHRGcmFn
bWVudDo6ZGVzdHJveSgpCg==
</data>
<flag name="review"
          id="7943"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>