<?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>3914</bug_id>
          
          <creation_ts>2005-07-09 00:52:53 -0700</creation_ts>
          <short_desc>Remove all dynamic_cast from KDOM</short_desc>
          <delta_ts>2005-11-20 22:34:55 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>3249</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>14265</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-09 00:52:53 -0700</bug_when>
    <thetext>RTTI support needs to go from WebCore+SVG.  In order to do that, we need to remove all dynamic_cast 
uses throughout kdom/ksvg2, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17793</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-28 02:47:51 -0700</bug_when>
    <thetext>ben is working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20646</commentid>
    <comment_count>2</comment_count>
      <attachid>4056</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-26 19:25:48 -0700</bug_when>
    <thetext>Created attachment 4056
Removes many (but not all) dynamic_casts from kdom/ksvg2

There are 3 more types to remove:
SVGLocateable
SVGTests
DOMBridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20647</commentid>
    <comment_count>3</comment_count>
      <attachid>4056</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-26 19:26:36 -0700</bug_when>
    <thetext>Comment on attachment 4056
Removes many (but not all) dynamic_casts from kdom/ksvg2

Ignore the WebCore.xcodeproj changes, those will be removed before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20651</commentid>
    <comment_count>4</comment_count>
      <attachid>4058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-27 01:03:06 -0700</bug_when>
    <thetext>Created attachment 4058
Removes many (but not all) dynamic_casts from kdom/ksvg2

A couple fixes (including a crasher).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20652</commentid>
    <comment_count>5</comment_count>
      <attachid>4058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-27 01:04:34 -0700</bug_when>
    <thetext>Comment on attachment 4058
Removes many (but not all) dynamic_casts from kdom/ksvg2

Removes 19 use of dynamic_cast from kdom/ksvg2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20706</commentid>
    <comment_count>6</comment_count>
      <attachid>4058</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-27 20:56:50 -0700</bug_when>
    <thetext>Comment on attachment 4058
Removes many (but not all) dynamic_casts from kdom/ksvg2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20714</commentid>
    <comment_count>7</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-09-27 23:46:29 -0700</bug_when>
    <thetext>My first remarks:

          * Element element = document.getElementByID &quot;foobar&quot;);
          * 
-         * DOMString href = element.getAttribute(&quot;href&quot;);
-         * DOMString documentBase = element.baseURI();
+         * DOMStringImpl href = element.getAttribute(&quot;href&quot;);
+         * DOMStringImpl documentBase = element.baseURI();
          *
-         * DOMString theCompleteURL(Helper::BuildURI(documentBase.handle(),
href.handle());
+         * DOMStringImpl theCompleteURL(Helper::BuildURI(documentBase.handle(),
href.handle());

Why is that needed?


RCS file: /cvs/root/SVGSupport/ksvg2/svg/SVGElementImpl.h,v
retrieving revision 1.6
diff -p -u -r1.6 ksvg2/svg/SVGElementImpl.h
--- ksvg2/svg/SVGElementImpl.h	8 Sep 2005 08:03:35 -0000	1.6
+++ ksvg2/svg/SVGElementImpl.h	27 Sep 2005 02:26:43 -0000
@@ -70,12 +70,16 @@ namespace KSVG
         virtual QString adjustViewportClipping() const { return QString::null; }
 
         SVGDocumentImpl *getDocument() const;
+        
+        virtual bool isStyled() const { return false; }
+        virtual bool isSVG() const { return false; }

I think we need better names.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21198</commentid>
    <comment_count>8</comment_count>
      <attachid>4058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-10-02 14:57:41 -0700</bug_when>
    <thetext>Comment on attachment 4058
Removes many (but not all) dynamic_casts from kdom/ksvg2

Removing review+ flag to remove it from the &quot;to commit&quot; queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21623</commentid>
    <comment_count>9</comment_count>
      <attachid>4269</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-09 13:44:18 -0700</bug_when>
    <thetext>Created attachment 4269
Various dynamic_cast fixes

Most of the fixes are because adding two classes:

SVGStyledTransformableElementImpl and
SVGStyledLocatableElementImpl

This works fine for most of the classes, but SVGTextElementImpl inheritance
structure doesnt seem to fit in. In this patch it is not corrected, since it
would mean duplicating code and I&apos;d like to see a better solution thant that.

Finally note that I did not really have the opportunity to do regression
testing on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22382</commentid>
    <comment_count>10</comment_count>
      <attachid>4429</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2005-10-20 13:53:53 -0700</bug_when>
    <thetext>Created attachment 4429
Further dynamic_cast fixes

Hi,

Here is a patch I needed to do after WildFox committed my previous
dynamic_cast fixing patch, since it was work in progress and I advanced some
more. This one and the previous one should give a clear picture of how the
situation now is in ksvg2 svn.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24194</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-17 12:52:00 -0800</bug_when>
    <thetext>There are only 4 left after my most recent work on the DOM merger</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24318</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-20 22:34:55 -0800</bug_when>
    <thetext>This was done as part of 3249

*** This bug has been marked as a duplicate of 3249 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4056</attachid>
            <date>2005-09-26 19:25:48 -0700</date>
            <delta_ts>2005-09-27 01:03:06 -0700</delta_ts>
            <desc>Removes many (but not all) dynamic_casts from kdom/ksvg2</desc>
            <filename>remove_dynamic_cast.patch</filename>
            <type>text/plain</type>
            <size>39779</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2os
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjgKZGlmZiAtcCAtdSAtcjEuMjggV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJMjQgU2VwIDIwMDUgMDU6NDk6MTUgLTAwMDAJMS4yOAorKysgV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCTI3IFNlcCAyMDA1IDAyOjI2OjQyIC0wMDAwCkBAIC0xNTQyLDcgKzE1
NDIsNyBAQAogCQlBODVEN0EzMDA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODVE
N0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCUE4
NUQ3QThFMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBOEMwODc5RUM2NDAwNkE5MTcyIC8q
IEtXUVdNYXRyaXgubW0gKi87IH07CiAJCUE4NUQ3QThGMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FX
TWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODVEN0E4RDA4NzlFQzY0MDA2QTkxNzIgLyogS1dRV01hdHJpeC5oICovOyB9OwotCQlBODYzMzEy
RjA4RTNBQjI1MDA5Q0ZFRjQgLyogQ0RGSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjMzMTJFMDhFM0FCMjQwMDlDRkVGNCAvKiBD
REZJbnRlcmZhY2UuY3BwICovOyB9OworCQlBODYzMzEyRjA4RTNBQjI1MDA5Q0ZFRjQgLyogU1ZH
Q0RGSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4NjMzMTJFMDhFM0FCMjQwMDlDRkVGNCAvKiBTVkdDREZJbnRlcmZhY2UuY3BwICov
OyB9OwogCQlBODcwMEE0ODA4REQ3MzQzMDBDQzVBODYgLyogQ0RGSW50ZXJmYWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGOUZFMDg5NzAx
RjUwMEJBNTExNCAvKiBDREZJbnRlcmZhY2UuY3BwICovOyB9OwogCQlBODk4RjE0NzA4ODEyMUU5
MDA3NUVGQjIgLyogaHRtbGZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUYzNDMzMDg3QjU2M0UwMEJCRjgzMyAvKiBodG1sZmFjdG9yeS5o
ICovOyB9OwogCQlBODk4RjE0ODA4ODEyMUVEMDA3NUVGQjIgLyogaHRtbGZhY3RvcnkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjM0MzIwODdC
NTYzRTAwQkJGODMzIC8qIGh0bWxmYWN0b3J5LmNwcCAqLzsgfTsKQEAgLTMwNDEsNyArMzA0MSw3
IEBACiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIu
ZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKIAkJQTg1RDdBOEMwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXgubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRV01hdHJpeC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8q
IEtXUVdNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUVdNYXRy
aXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTg2MzMxMkUwOEUzQUIyNDAwOUNG
RUY0IC8qIENERkludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDREZJbnRlcmZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODYz
MzEyRTA4RTNBQjI0MDA5Q0ZFRjQgLyogU1ZHQ0RGSW50ZXJmYWNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0NERkludGVyZmFjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4QkMwQkU2MDhEMTlGMTkwMDM3OTkxOCAvKiBBdHRyV3JhcHBl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdHRyV3JhcHBlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QkMwQkU3MDhEMTlGMTkwMDM3OTkx
OCAvKiBBdHRyV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdHRy
V3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEJDMEJFODA4RDE5RjE5
MDAzNzk5MTggLyogQ0RBVEFTZWN0aW9uV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDREFUQVNlY3Rpb25XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM4MjksOCArMzgyOSw4IEBACiAJCUE4QzBGQjhDMDg5NzAxRjgwMEJB
NTExNCAvKiBLQ2FudmFzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
S0NhbnZhc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzBGQjhEMDg5
NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBLQ2FudmFzVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4QzBGQjhFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBOERDNjNFODA4RTBERDBBMDA0NTA3RjcgLyogRWNtYUludGVyZmFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFY21hSW50ZXJmYWNlLmNwcDsg
cGF0aCA9ICJrZG9tL2VjbWEvRWNtYUludGVyZmFjZS5jcHAiOyBzb3VyY2VUcmVlID0gREVSSVZF
RF9GSUxFX0RJUjsgfTsKLQkJQThEQzYzRUIwOEUwREQyQTAwNDUwN0Y3IC8qIEVjbWFJbnRlcmZh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRWNtYUludGVyZmFj
ZS5jcHA7IHBhdGggPSAia3N2ZzIvZWNtYS9FY21hSW50ZXJmYWNlLmNwcCI7IHNvdXJjZVRyZWUg
PSBERVJJVkVEX0ZJTEVfRElSOyB9OworCQlBOERDNjNFODA4RTBERDBBMDA0NTA3RjcgLyogRWNt
YUludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFY21h
SW50ZXJmYWNlLmNwcDsgcGF0aCA9IGtkb20vZWNtYS9FY21hSW50ZXJmYWNlLmNwcDsgc291cmNl
VHJlZSA9IERFUklWRURfRklMRV9ESVI7IH07CisJCUE4REM2M0VCMDhFMEREMkEwMDQ1MDdGNyAv
KiBFY21hSW50ZXJmYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEVjbWFJbnRlcmZhY2UuY3BwOyBwYXRoID0ga3N2ZzIvZWNtYS9FY21hSW50ZXJmYWNlLmNwcDsg
c291cmNlVHJlZSA9IERFUklWRURfRklMRV9ESVI7IH07CiAJCUE4RUE0MzNEMDhFMTRFQUIwMDRC
QzM5NiAvKiB4bWxfa2RvbXRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSB4bWxfa2RvbXRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEVBNDMzRTA4RTE0RUFDMDA0QkMzOTYgLyogeG1sX2tkb210b2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0geG1sX2tkb210b2tlbml6ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEVBNDMzRjA4RTE0RUFDMDA0QkMzOTYgLyogcmVu
ZGVyX2tjYW52YXN3cmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHJl
bmRlcl9rY2FudmFzd3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQx
OCw3ICs1NDE4LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
QThDMEY3RkUwODk3MDFGMzAwQkE1MTE0IC8qIENERkludGVyZmFjZS5oICovLAotCQkJCUE4NjMz
MTJFMDhFM0FCMjQwMDlDRkVGNCAvKiBDREZJbnRlcmZhY2UuY3BwICovLAorCQkJCUE4NjMzMTJF
MDhFM0FCMjQwMDlDRkVGNCAvKiBTVkdDREZJbnRlcmZhY2UuY3BwICovLAogCQkJCUE4QzBGN0ZG
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdBRWxlbWVudEltcGwuY3BwICovLAogCQkJCUE4QzBGODAw
MDg5NzAxRjMwMEJBNTExNCAvKiBTVkdBRWxlbWVudEltcGwuaCAqLywKIAkJCQlBOEMwRjgwMTA4
OTcwMUYzMDBCQTUxMTQgLyogU1ZHQW5nbGVJbXBsLmNwcCAqLywKQEAgLTEwMzcyLDcgKzEwMzcy
LDcgQEAKIAkJCQlBOEVBNDM0ODA4RTE0RUFDMDA0QkMzOTYgLyogcmVuZGVyX2tjYW52YXN3cmFw
cGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE0MzRBMDhFMTRFQUMwMDRCQzM5NiAvKiBk
b21fa2RvbW5vZGV0cmVld3JhcHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBNDM0QzA4
RTE0RUFDMDA0QkMzOTYgLyogZG9tX2tkb21kb2N1bWVudHdyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTg2MzMxMkYwOEUzQUIyNTAwOUNGRUY0IC8qIENERkludGVyZmFjZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBODYzMzEyRjA4RTNBQjI1MDA5Q0ZFRjQgLyogU1ZHQ0RGSW50ZXJm
YWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDoga2RvbS9IZWxwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0hlbHBlci5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrZG9tL0hlbHBlci5oCi0tLSBrZG9tL0hlbHBl
ci5oCTEgU2VwIDIwMDUgMDc6MzI6NTYgLTAwMDAJMS40CisrKyBrZG9tL0hlbHBlci5oCTI3IFNl
cCAyMDA1IDAyOjI2OjQyIC0wMDAwCkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFjZSBLRE9NCiAg
ICAgY2xhc3MgTGVuZ3RoOwogICAgIGNsYXNzIEF0dHJJbXBsOwogICAgIGNsYXNzIE5vZGVJbXBs
OwotICAgIGNsYXNzIERPTVN0cmluZzsKICAgICBjbGFzcyBFbGVtZW50SW1wbDsKICAgICBjbGFz
cyBEb2N1bWVudEltcGw7CiAgICAgY2xhc3MgRE9NU3RyaW5nSW1wbDsKQEAgLTE4MCwxMCArMTc5
LDEwIEBAIG5hbWVzcGFjZSBLRE9NCiAgICAgICAgICAqIFxjb2RlCiAgICAgICAgICAqIEVsZW1l
bnQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlEICJmb29iYXIiKTsKICAgICAgICAg
ICogCi0gICAgICAgICAqIERPTVN0cmluZyBocmVmID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImhy
ZWYiKTsKLSAgICAgICAgICogRE9NU3RyaW5nIGRvY3VtZW50QmFzZSA9IGVsZW1lbnQuYmFzZVVS
SSgpOworICAgICAgICAgKiBET01TdHJpbmdJbXBsIGhyZWYgPSBlbGVtZW50LmdldEF0dHJpYnV0
ZSgiaHJlZiIpOworICAgICAgICAgKiBET01TdHJpbmdJbXBsIGRvY3VtZW50QmFzZSA9IGVsZW1l
bnQuYmFzZVVSSSgpOwogICAgICAgICAgKgotICAgICAgICAgKiBET01TdHJpbmcgdGhlQ29tcGxl
dGVVUkwoSGVscGVyOjpCdWlsZFVSSShkb2N1bWVudEJhc2UuaGFuZGxlKCksIGhyZWYuaGFuZGxl
KCkpOworICAgICAgICAgKiBET01TdHJpbmdJbXBsIHRoZUNvbXBsZXRlVVJMKEhlbHBlcjo6QnVp
bGRVUkkoZG9jdW1lbnRCYXNlLmhhbmRsZSgpLCBocmVmLmhhbmRsZSgpKTsKICAgICAgICAgICog
XGVuZGNvZGUKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGJhc2UgdGhlIGJhc2UgVVJJ
IHRvIHJlc29sdmUgYWdhaW5zdApJbmRleDoga2RvbS9jb3JlL05vZGVJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2NvcmUvTm9kZUltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrZG9tL2NvcmUvTm9k
ZUltcGwuY3BwCi0tLSBrZG9tL2NvcmUvTm9kZUltcGwuY3BwCTggU2VwIDIwMDUgMDg6MDM6MjAg
LTAwMDAJMS42CisrKyBrZG9tL2NvcmUvTm9kZUltcGwuY3BwCTI3IFNlcCAyMDA1IDAyOjI2OjQy
IC0wMDAwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiTm9kZUltcGwuaCIKICNpbmNsdWRl
ICJUZXh0SW1wbC5oIgogI2luY2x1ZGUgImtkb21ldmVudHMuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uSW1wbC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiRWxlbWVudEltcGwuaCIKICNpbmNsdWRl
ICJEb2N1bWVudEltcGwuaCIKQEAgLTExODIsNiArMTE4NCwxNTAgQEAgdm9pZCBOb2RlSW1wbDo6
ZGlzcGF0Y2hFdmVudFRvU3ViVHJlZShObwogICAgIH0KIH0KIAordm9pZCBOb2RlSW1wbDo6YWRk
RXZlbnRMaXN0ZW5lcihET01TdHJpbmdJbXBsICp0eXBlLCBFdmVudExpc3RlbmVySW1wbCAqbGlz
dGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZighbGlzdGVuZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmKHR5cGUpCisgICAgICAgIHR5cGUtPnJlZigpOworCisgICAgLy8gSWYg
dGhlIHJlcXVlc3RlZCBsaXN0ZW5lciBpcyBidWlsdGluIChpZS4gRE9NTk9ERVJFTU9WRURfRVZF
TlQpCisgICAgLy8gd2UnbGwgY2FjaGUgdGhlIHNwZWNpZmljIGVudW1lcmF0aW9uIHZhbHVlIHRv
IHNhdmUgc3BhY2UKKyAgICAvLyBidXQgaW4gY2FzZSBvZiBhIGN1c3RvbSBldmVudCAoaWUuIGFz
IHVzZWQgaW4gdGhlIGRvbTIgZXZlbnRzIHRlc3Qgc3VpdGUpCisgICAgLy8gZm9yIGV4YW1wbGUg
J2ZvbycganVzdCBkb24ndCBjYWNoZSBpdDsga2RvbSBpbnRlcm5hbGx5IHdvbid0IGZpcmUgYW55
CisgICAgLy8gJ2ZvbycgZXZlbnRzLCB3aGljaCBtZWFucyBpdCBkb2Vzbid0IG5lZWQgdG8ga25v
dyBhbnl0aGluZyBhYm91dCBpdC4uLgorCisgICAgaWYoIW1fZXZlbnRMaXN0ZW5lcnMpCisgICAg
eworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzID0gbmV3IFEzUHRyTGlzdDxSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lcj4oKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy0+c2V0QXV0b0RlbGV0ZSh0
cnVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4g
ZXhpc3RpbmcgbGlzdGVuZXIgZm9yZ2V0IHRoaXMgY2FsbC4uLgorICAgICAgICBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciBjb21wYXJlKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsgCisKKyAg
ICAgICAgUTNQdHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KCptX2V2
ZW50TGlzdGVuZXJzKTsKKyAgICAgICAgZm9yKDsgaXQuY3VycmVudCgpOyArK2l0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZigqKGl0LmN1cnJlbnQoKSkgPT0gY29tcGFyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBEb2N1bWVudEltcGwgKmRv
YyA9IChub2RlVHlwZSgpID09IERPQ1VNRU5UX05PREUpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJ
bXBsICo+KHRoaXMpIDogb3duZXJEb2N1bWVudCgpOworICAgIGFkZExpc3RlbmVyVHlwZShkb2Mt
PmFkZExpc3RlbmVyVHlwZSh0eXBlKSk7CisgICAgbV9ldmVudExpc3RlbmVycy0+YXBwZW5kKG5l
dyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpOwor
CisgICAgaWYodHlwZSkKKyAgICAgICAgdHlwZS0+ZGVyZWYoKTsKK30KKwordm9pZCBOb2RlSW1w
bDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihET01TdHJpbmdJbXBsICp0eXBlLCBFdmVudExpc3RlbmVy
SW1wbCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZighbV9ldmVudExpc3Rl
bmVycyB8fCAhbGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50SW1wbCAq
ZG9jID0gKG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfTk9ERSkgPyBzdGF0aWNfY2FzdDxEb2N1bWVu
dEltcGwgKj4odGhpcykgOiBvd25lckRvY3VtZW50KCk7CisgICAgaWYoIWRvYykKKyAgICB7Cisg
ICAgICAgIGtkRXJyb3IoKSA8PCAiQ291bGRuJ3QgcmVtb3ZlIGxpc3RlbmVyIHR5cGUhIE5vIGRv
Y3VtZW50IGF2YWlsYWJsZSEiIDw8IGVuZGw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBjb21wYXJlKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0
dXJlKTsKKworICAgIFEzUHRyTGlzdEl0ZXJhdG9yPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBp
dCgqbV9ldmVudExpc3RlbmVycyk7CisgICAgZm9yKDsgaXQuY3VycmVudCgpOyArK2l0KQorICAg
IHsKKyAgICAgICAgaWYoKCppdC5jdXJyZW50KCkpID09IGNvbXBhcmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMtPnJlbW92ZVJlZihpdC5jdXJyZW50KCkpOworICAg
ICAgICAgICAgcmVtb3ZlTGlzdGVuZXJUeXBlKGRvYy0+cmVtb3ZlTGlzdGVuZXJUeXBlKHR5cGUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBOb2Rl
SW1wbDo6ZGlzcGF0Y2hFdmVudChFdmVudEltcGwgKmV2dCkKK3sKKyAgICBpZighZXZ0IHx8IChl
dnQtPmlkKCkgPT0gVU5LTk9XTl9FVkVOVCAmJiAoIWV2dC0+dHlwZSgpIHx8IGV2dC0+dHlwZSgp
LT5pc0VtcHR5KCkpKSkKKyAgICAgICAgdGhyb3cgbmV3IEV2ZW50RXhjZXB0aW9uSW1wbChVTlNQ
RUNJRklFRF9FVkVOVF9UWVBFX0VSUik7CisKKyAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKKwor
ICAgIC8vIEZpbmQgb3V0LCB3aGVyZSB0byBzZW5kIHRvIC0+IGNvbGxlY3QgcGFyZW50IG5vZGVz
LAorICAgIC8vIGNhc3QgdGhlbSB0byBFdmVudFRhcmdldHMgYW5kIGFkZCB0aGVtIHRvIGxpc3QK
KyAgICBRM1B0ckxpc3Q8RXZlbnRUYXJnZXRJbXBsPiB0YXJnZXRDaGFpbjsKKyAgICBmb3IoTm9k
ZUltcGwgKm4gPSB0aGlzOyBuICE9IDA7IG4gPSBuLT5wYXJlbnROb2RlKCkpCisgICAgICAgIHRh
cmdldENoYWluLnByZXBlbmQobik7CisKKyAgICAvLyBUcmlnZ2VyIGFueSBjYXB0dXJpbmcgZXZl
bnQgaGFuZGxlcnMgb24gb3VyIHdheSBkb3duCisgICAgZXZ0LT5zZXRFdmVudFBoYXNlKENBUFRV
UklOR19QSEFTRSk7CisKKyAgICBRM1B0ckxpc3RJdGVyYXRvcjxFdmVudFRhcmdldEltcGw+IGl0
KHRhcmdldENoYWluKTsKKyAgICBmb3IoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVudCgpICE9
IHRoaXMgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpCisgICAgeworICAgICAg
ICBFdmVudFRhcmdldEltcGwgKmkgPSBpdC5jdXJyZW50KCk7CisgICAgICAgIGV2dC0+c2V0Q3Vy
cmVudFRhcmdldChpKTsKKworICAgICAgICBpZihpKQorICAgICAgICAgICAgaS0+aGFuZGxlTG9j
YWxFdmVudHMoZXZ0LCB0cnVlKTsKKyAgICB9CisKKyAgICAvLyBEaXNwYXRjaCB0byB0aGUgYWN0
dWFsIHRhcmdldCBub2RlCisgICAgaXQudG9MYXN0KCk7CisgICAgaWYoIWV2dC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkpCisgICAgeworICAgICAgICBFdmVudFRhcmdldEltcGwgKmkgPSBpdC5jdXJy
ZW50KCk7CisKKyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGkpOworICAgICAgICBldnQt
PnNldEV2ZW50UGhhc2UoQVRfVEFSR0VUKTsKKworICAgICAgICBpZihpKQorICAgICAgICAgICAg
aS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LCBmYWxzZSk7CisgICAgfQorCisgICAgLS1pdDsKKwor
ICAgIC8vIEJ1YmJsZSB1cCBhZ2FpbgorICAgIGlmKGV2dC0+YnViYmxlcygpKQorICAgIHsKKyAg
ICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEJVQkJMSU5HX1BIQVNFKTsKKyAgICAgICAgZm9yKDsg
aXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpOyAtLWl0KQorICAgICAg
ICB7CisgICAgICAgICAgICBFdmVudFRhcmdldEltcGwgKmkgPSBpdC5jdXJyZW50KCk7CisgICAg
ICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoaSk7CisKKyAgICAgICAgICAgIGlmKGkpCisg
ICAgICAgICAgICAgICAgaS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LCBmYWxzZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CisgICAgZXZ0LT5zZXRF
dmVudFBoYXNlKDApOyAgICAgICAgLy8gSSBndWVzcyB0aGlzIGlzIGNvcnJlY3QsIHRoZSBzcGVj
IGRvZXMgbm90IHNlZW0gdG8gc2F5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFueXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCisgICAgaWYo
ZXZ0LT5idWJibGVzKCkpCisgICAgeworICAgICAgICAvLyBub3cgd2UgY2FsbCBhbGwgZGVmYXVs
dCBldmVudCBoYW5kbGVycyAodGhpcyBpcyBub3QgcGFydCBvZiBET00gLSBpdCBpcyBpbnRlcm5h
bCB0byBraHRtbCkKKyAgICAgICAgaXQudG9MYXN0KCk7CisgICAgICAgIGZvcig7IGl0LmN1cnJl
bnQoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZ0LT5kZWZhdWx0UHJldmVu
dGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKTsgLS1pdCkKKyAgICAgICAgICAgIGl0LmN1
cnJlbnQoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIH0KKworICAgIERvY3VtZW50
SW1wbCAqZG9jID0gKG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfTk9ERSkgPyBzdGF0aWNfY2FzdDxE
b2N1bWVudEltcGwgKj4odGhpcykgOiBvd25lckRvY3VtZW50KCk7CisgICAgZG9jLT51cGRhdGVS
ZW5kZXJpbmcoKTsgLy8gYW55IGNoYW5nZXMgZHVyaW5nIGV2ZW50IGhhbmRsaW5nIG5lZWQgdG8g
YmUgcmVuZGVyZWQKKworLyogRklYTUUKKyAgICBFY21hICplY21hRW5naW5lID0gZG9jLT5lY21h
RW5naW5lKCk7CisgICAgaWYoZWNtYUVuZ2luZSkKKyAgICAgICAgZWNtYUVuZ2luZS0+ZmluaXNo
ZWRXaXRoRXZlbnQoZXZ0KTsKKyovCisgICAgYm9vbCByZXRWYWwgPSAhZXZ0LT5kZWZhdWx0UHJl
dmVudGVkKCk7IC8vIFdoYXQgaWYgZGVmYXVsdFByZXZlbnRlZCB3YXMgY2FsbGVkIGJlZm9yZSBk
aXNwYXRjaEV2ZW50PworICAgIHJldHVybiByZXRWYWw7Cit9CisKIE5vZGVJbXBsICpOb2RlSW1w
bDo6dHJhdmVyc2VOZXh0Tm9kZShOb2RlSW1wbCAqc3RheVdpdGhpbikgY29uc3QKIHsKICAgICBp
ZihmaXJzdENoaWxkKCkgfHwgc3RheVdpdGhpbiA9PSB0aGlzKQpJbmRleDoga2RvbS9jb3JlL05v
ZGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9j
b3JlL05vZGVJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41
IGtkb20vY29yZS9Ob2RlSW1wbC5oCi0tLSBrZG9tL2NvcmUvTm9kZUltcGwuaAkxIFNlcCAyMDA1
IDA5OjM5OjAyIC0wMDAwCTEuNQorKysga2RvbS9jb3JlL05vZGVJbXBsLmgJMjcgU2VwIDIwMDUg
MDI6MjY6NDIgLTAwMDAKQEAgLTE0Nyw2ICsxNDcsMTEgQEAgbmFtZXNwYWNlIEtET00KICAgICAg
ICAgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlSW1wbCAqY2hpbGQpOwogICAg
ICAgICB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRlZEV2ZW50cyhOb2RlSW1wbCAqY2hpbGQpOwog
ICAgICAgICB2b2lkIGRpc3BhdGNoRXZlbnRUb1N1YlRyZWUoTm9kZUltcGwgKm5vZGUsIEV2ZW50
SW1wbCAqZXZlbnQpOworICAgICAgICAKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgYWJzdHJhY3Qg
bWV0aG9kcworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihET01TdHJpbmdJ
bXBsICp0eXBlLCBFdmVudExpc3RlbmVySW1wbCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKERPTVN0cmluZ0ltcGwg
KnR5cGUsIEV2ZW50TGlzdGVuZXJJbXBsICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnRJbXBsICpldnQpOwogCiAgICAg
ICAgIC8vIEludGVybmFsCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7
CkluZGV4OiBrZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL0V2ZW50VGFyZ2V0SW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtkb20vZXZlbnRzL0V2
ZW50VGFyZ2V0SW1wbC5jcHAKLS0tIGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0SW1wbC5jcHAJOCBT
ZXAgMjAwNSAwODowMzoyNyAtMDAwMAkxLjYKKysrIGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0SW1w
bC5jcHAJMjcgU2VwIDIwMDUgMDI6MjY6NDIgLTAwMDAKQEAgLTQ0LDE3NyArNDQsNiBAQCBFdmVu
dFRhcmdldEltcGw6On5FdmVudFRhcmdldEltcGwoKQogICAgIGRlbGV0ZSBtX2V2ZW50TGlzdGVu
ZXJzOwogfQogCi12b2lkIEV2ZW50VGFyZ2V0SW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihET01TdHJp
bmdJbXBsICp0eXBlLCBFdmVudExpc3RlbmVySW1wbCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKLXsKLSAgICBpZighbGlzdGVuZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmKHR5cGUp
Ci0gICAgICAgIHR5cGUtPnJlZigpOwotCi0gICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBsaXN0ZW5l
ciBpcyBidWlsdGluIChpZS4gRE9NTk9ERVJFTU9WRURfRVZFTlQpCi0gICAgLy8gd2UnbGwgY2Fj
aGUgdGhlIHNwZWNpZmljIGVudW1lcmF0aW9uIHZhbHVlIHRvIHNhdmUgc3BhY2UKLSAgICAvLyBi
dXQgaW4gY2FzZSBvZiBhIGN1c3RvbSBldmVudCAoaWUuIGFzIHVzZWQgaW4gdGhlIGRvbTIgZXZl
bnRzIHRlc3Qgc3VpdGUpCi0gICAgLy8gZm9yIGV4YW1wbGUgJ2ZvbycganVzdCBkb24ndCBjYWNo
ZSBpdDsga2RvbSBpbnRlcm5hbGx5IHdvbid0IGZpcmUgYW55Ci0gICAgLy8gJ2ZvbycgZXZlbnRz
LCB3aGljaCBtZWFucyBpdCBkb2Vzbid0IG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCBpdC4u
LgotICAgIE5vZGVJbXBsICpkeW5PYmogPSBjb25zdF9jYXN0PE5vZGVJbXBsICo+KGR5bmFtaWNf
Y2FzdDxjb25zdCBOb2RlSW1wbCAqPih0aGlzKSk7Ci0gICAgaWYoIWR5bk9iaikKLSAgICB7Ci0g
ICAgICAgIGtkRmF0YWwoKSA8PCAiVXBjYXN0IGZhaWxlZCEgVGhlICdpbXBvc3NpYmxlJyBoYXBw
ZW5lZC4uLiEiIDw8IGVuZGw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEb2N1bWVu
dEltcGwgKmRvYyA9IChkeW5PYmotPm5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfTk9ERSkgPyBzdGF0
aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oZHluT2JqKSA6IGR5bk9iai0+b3duZXJEb2N1bWVudCgp
OwotICAgIGlmKCFkb2MpCi0gICAgewotICAgICAgICBrZEVycm9yKCkgPDwgIkNvdWxkbid0IHJl
Z2lzdGVyIGxpc3RlbmVyIHR5cGUhIE5vIGRvY3VtZW50IGF2YWlsYWJsZSEiIDw8IGVuZGw7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZighbV9ldmVudExpc3RlbmVycykKLSAgICB7
Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMgPSBuZXcgUTNQdHJMaXN0PFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyPigpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLT5zZXRBdXRvRGVsZXRlKHRy
dWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBl
eGlzdGluZyBsaXN0ZW5lciBmb3JnZXQgdGhpcyBjYWxsLi4uCi0gICAgICAgIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyIGNvbXBhcmUodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOyAKLQotICAg
ICAgICBRM1B0ckxpc3RJdGVyYXRvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gaXQoKm1fZXZl
bnRMaXN0ZW5lcnMpOwotICAgICAgICBmb3IoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmKCooaXQuY3VycmVudCgpKSA9PSBjb21wYXJlKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGFkZExpc3RlbmVyVHlwZShk
b2MtPmFkZExpc3RlbmVyVHlwZSh0eXBlKSk7Ci0gICAgbV9ldmVudExpc3RlbmVycy0+YXBwZW5k
KG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkp
OwotCi0gICAgaWYodHlwZSkKLSAgICAgICAgdHlwZS0+ZGVyZWYoKTsKLX0KLQotdm9pZCBFdmVu
dFRhcmdldEltcGw6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRE9NU3RyaW5nSW1wbCAqdHlwZSwgRXZl
bnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYoIW1f
ZXZlbnRMaXN0ZW5lcnMgfHwgIWxpc3RlbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOb2Rl
SW1wbCAqZHluT2JqID0gY29uc3RfY2FzdDxOb2RlSW1wbCAqPihkeW5hbWljX2Nhc3Q8Y29uc3Qg
Tm9kZUltcGwgKj4odGhpcykpOwotICAgIGlmKCFkeW5PYmopCi0gICAgewotICAgICAgICBrZEZh
dGFsKCkgPDwgIlVwY2FzdCBmYWlsZWQhIFRoZSAnaW1wb3NzaWJsZScgaGFwcGVuZWQuLi4hIiA8
PCBlbmRsOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRG9jdW1lbnRJbXBsICpkb2Mg
PSAoZHluT2JqLT5ub2RlVHlwZSgpID09IERPQ1VNRU5UX05PREUpID8gc3RhdGljX2Nhc3Q8RG9j
dW1lbnRJbXBsICo+KGR5bk9iaikgOiBkeW5PYmotPm93bmVyRG9jdW1lbnQoKTsKLSAgICBpZigh
ZG9jKQotICAgIHsKLSAgICAgICAga2RFcnJvcigpIDw8ICJDb3VsZG4ndCByZW1vdmUgbGlzdGVu
ZXIgdHlwZSEgTm8gZG9jdW1lbnQgYXZhaWxhYmxlISIgPDwgZW5kbDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIGNvbXBhcmUodHlwZSwgbGlz
dGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgUTNQdHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXI+IGl0KCptX2V2ZW50TGlzdGVuZXJzKTsKLSAgICBmb3IoOyBpdC5jdXJyZW50
KCk7ICsraXQpCi0gICAgewotICAgICAgICBpZigoKml0LmN1cnJlbnQoKSkgPT0gY29tcGFyZSkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9ldmVudExpc3RlbmVycy0+cmVtb3ZlUmVmKGl0LmN1
cnJlbnQoKSk7Ci0gICAgICAgICAgICByZW1vdmVMaXN0ZW5lclR5cGUoZG9jLT5yZW1vdmVMaXN0
ZW5lclR5cGUodHlwZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIEV2ZW50VGFyZ2V0SW1wbDo6ZGlzcGF0Y2hFdmVudChFdmVudEltcGwgKmV2dCkK
LXsKLSAgICBpZighZXZ0IHx8IChldnQtPmlkKCkgPT0gVU5LTk9XTl9FVkVOVCAmJiAoIWV2dC0+
dHlwZSgpIHx8IGV2dC0+dHlwZSgpLT5pc0VtcHR5KCkpKSkKLSAgICAgICAgdGhyb3cgbmV3IEV2
ZW50RXhjZXB0aW9uSW1wbChVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUik7Ci0KLSAgICBldnQt
PnNldFRhcmdldChjb25zdF9jYXN0PEV2ZW50VGFyZ2V0SW1wbCAqPih0aGlzKSk7Ci0KLSAgICAv
LyBGaW5kIG91dCwgd2hlcmUgdG8gc2VuZCB0byAtPiBjb2xsZWN0IHBhcmVudCBub2RlcywKLSAg
ICAvLyBjYXN0IHRoZW0gdG8gRXZlbnRUYXJnZXRzIGFuZCBhZGQgdGhlbSB0byBsaXN0Ci0gICAg
UTNQdHJMaXN0PEV2ZW50VGFyZ2V0SW1wbD4gdGFyZ2V0Q2hhaW47Ci0KLSAgICBOb2RlSW1wbCAq
aSA9IGR5bmFtaWNfY2FzdDxOb2RlSW1wbCAqPih0aGlzKTsKLSAgICBpZighaSkKLSAgICB7Ci0g
ICAgICAgIGtkRXJyb3IoKSA8PCBrX2Z1bmNpbmZvIDw8ICIgRXZlbnRUYXJnZXQgbXVzdCBiZSBp
bmhlcml0ZWQgYnkgTm9kZSEgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiIgPDwgZW5kbDsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvcihOb2RlSW1wbCAqbiA9IGk7IG4g
IT0gMDsgbiA9IG4tPnBhcmVudE5vZGUoKSkKLSAgICAgICAgdGFyZ2V0Q2hhaW4ucHJlcGVuZChu
KTsKLQotICAgIC8vIFRyaWdnZXIgYW55IGNhcHR1cmluZyBldmVudCBoYW5kbGVycyBvbiBvdXIg
d2F5IGRvd24KLSAgICBldnQtPnNldEV2ZW50UGhhc2UoQ0FQVFVSSU5HX1BIQVNFKTsKLQotICAg
IFEzUHRyTGlzdEl0ZXJhdG9yPEV2ZW50VGFyZ2V0SW1wbD4gaXQodGFyZ2V0Q2hhaW4pOwotICAg
IGZvcig7IGl0LmN1cnJlbnQoKSAmJiBpdC5jdXJyZW50KCkgIT0gdGhpcyAmJiAhZXZ0LT5wcm9w
YWdhdGlvblN0b3BwZWQoKTsgKytpdCkKLSAgICB7Ci0gICAgICAgIEV2ZW50VGFyZ2V0SW1wbCAq
aSA9IGl0LmN1cnJlbnQoKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGkpOwotCi0g
ICAgICAgIGlmKGkpCi0gICAgICAgICAgICBpLT5oYW5kbGVMb2NhbEV2ZW50cyhldnQsIHRydWUp
OwotICAgIH0KLQotICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhY3R1YWwgdGFyZ2V0IG5vZGUKLSAg
ICBpdC50b0xhc3QoKTsKLSAgICBpZighZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICB7
Ci0gICAgICAgIEV2ZW50VGFyZ2V0SW1wbCAqaSA9IGl0LmN1cnJlbnQoKTsKLQotICAgICAgICBl
dnQtPnNldEN1cnJlbnRUYXJnZXQoaSk7Ci0gICAgICAgIGV2dC0+c2V0RXZlbnRQaGFzZShBVF9U
QVJHRVQpOwotCi0gICAgICAgIGlmKGkpCi0gICAgICAgICAgICBpLT5oYW5kbGVMb2NhbEV2ZW50
cyhldnQsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAtLWl0OwotCi0gICAgLy8gQnViYmxlIHVwIGFn
YWluCi0gICAgaWYoZXZ0LT5idWJibGVzKCkpCi0gICAgewotICAgICAgICBldnQtPnNldEV2ZW50
UGhhc2UoQlVCQkxJTkdfUEhBU0UpOwotICAgICAgICBmb3IoOyBpdC5jdXJyZW50KCkgJiYgIWV2
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7IC0taXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEV2
ZW50VGFyZ2V0SW1wbCAqaSA9IGl0LmN1cnJlbnQoKTsKLSAgICAgICAgICAgIGV2dC0+c2V0Q3Vy
cmVudFRhcmdldChpKTsKLQotICAgICAgICAgICAgaWYoaSkKLSAgICAgICAgICAgICAgICBpLT5o
YW5kbGVMb2NhbEV2ZW50cyhldnQsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGV2
dC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldnQtPnNldEV2ZW50UGhhc2UoMCk7ICAgICAg
ICAvLyBJIGd1ZXNzIHRoaXMgaXMgY29ycmVjdCwgdGhlIHNwZWMgZG9lcyBub3Qgc2VlbSB0byBz
YXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgYWJvdXQgdGhl
IGRlZmF1bHQgZXZlbnQgaGFuZGxlciBwaGFzZS4KLSAgICBpZihldnQtPmJ1YmJsZXMoKSkKLSAg
ICB7Ci0gICAgICAgIC8vIG5vdyB3ZSBjYWxsIGFsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzICh0
aGlzIGlzIG5vdCBwYXJ0IG9mIERPTSAtIGl0IGlzIGludGVybmFsIHRvIGtodG1sKQotICAgICAg
ICBpdC50b0xhc3QoKTsKLSAgICAgICAgZm9yKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3Bh
Z2F0aW9uU3RvcHBlZCgpICYmICFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZh
dWx0SGFuZGxlZCgpOyAtLWl0KQotICAgICAgICAgICAgaXQuY3VycmVudCgpLT5kZWZhdWx0RXZl
bnRIYW5kbGVyKGV2dCk7Ci0gICAgfQotCi0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSAoaS0+bm9k
ZVR5cGUoKSA9PSBET0NVTUVOVF9OT0RFKSA/IHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCAqPihp
KSA6IGktPm93bmVyRG9jdW1lbnQoKTsKLSAgICBkb2MtPnVwZGF0ZVJlbmRlcmluZygpOyAvLyBh
bnkgY2hhbmdlcyBkdXJpbmcgZXZlbnQgaGFuZGxpbmcgbmVlZCB0byBiZSByZW5kZXJlZAotCi0v
KiBGSVhNRQotICAgIEVjbWEgKmVjbWFFbmdpbmUgPSBkb2MtPmVjbWFFbmdpbmUoKTsKLSAgICBp
ZihlY21hRW5naW5lKQotICAgICAgICBlY21hRW5naW5lLT5maW5pc2hlZFdpdGhFdmVudChldnQp
OwotKi8KLSAgICBib29sIHJldFZhbCA9ICFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsgLy8gV2hh
dCBpZiBkZWZhdWx0UHJldmVudGVkIHdhcyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZlbnQ/Ci0g
ICAgcmV0dXJuIHJldFZhbDsKLX0KLQogdm9pZCBFdmVudFRhcmdldEltcGw6OmhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50SW1wbCAqZXZ0LCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAgaWYoIW1fZXZl
bnRMaXN0ZW5lcnMgfHwgIWV2dCkKSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL0V2
ZW50VGFyZ2V0SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEu
NSBrZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuaAotLS0ga2RvbS9ldmVudHMvRXZlbnRUYXJn
ZXRJbXBsLmgJMiBTZXAgMjAwNSAxMDowMzoxMCAtMDAwMAkxLjUKKysrIGtkb20vZXZlbnRzL0V2
ZW50VGFyZ2V0SW1wbC5oCTI3IFNlcCAyMDA1IDAyOjI2OjQyIC0wMDAwCkBAIC0zOSw5ICszOSw5
IEBAIG5hbWVzcGFjZSBLRE9NCiAgICAgICAgIEV2ZW50VGFyZ2V0SW1wbCgpOwogICAgICAgICB2
aXJ0dWFsIH5FdmVudFRhcmdldEltcGwoKTsKIAotICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoRE9NU3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpOwotICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoRE9NU3RyaW5n
SW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
OwotICAgICAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnRJbXBsICpldnQpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihET01TdHJpbmdJbXBsICp0eXBlLCBFdmVudExp
c3RlbmVySW1wbCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihET01TdHJpbmdJbXBsICp0eXBlLCBFdmVudExp
c3RlbmVySW1wbCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkgPSAwOworICAgICAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudEltcGwgKmV2dCkgPSAwOwogCiAgICAgICAgIHZv
aWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnRJbXBsICpldnQsIGJvb2wgdXNlQ2FwdHVyZSk7CiAK
QEAgLTU1LDEwICs1NSwxMSBAQCBuYW1lc3BhY2UgS0RPTQogICAgICAgICAgKi8KICAgICAgICAg
dmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICopIHt9CiAKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIFEzUHRyTGlzdDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gKm1f
ZXZlbnRMaXN0ZW5lcnM7CisKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9saXN0ZW5lclR5
cGVzOwotCi0gICAgICAgIFEzUHRyTGlzdDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gKm1fZXZl
bnRMaXN0ZW5lcnM7CiAgICAgfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvRE9NSW1wbGVtZW50YXRp
b25MU0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vbHMvRE9NSW1wbGVtZW50YXRpb25MU0ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0RPTUltcGxlbWVudGF0aW9uTFNJbXBsLmNwcAot
LS0ga2RvbS9scy9ET01JbXBsZW1lbnRhdGlvbkxTSW1wbC5jcHAJOCBTZXAgMjAwNSAwODowMzoy
OCAtMDAwMAkxLjEKKysrIGtkb20vbHMvRE9NSW1wbGVtZW50YXRpb25MU0ltcGwuY3BwCTI3IFNl
cCAyMDA1IDAyOjI2OjQzIC0wMDAwCkBAIC00NCw2ICs0NCw3IEBAIERPTUltcGxlbWVudGF0aW9u
TFNJbXBsOjp+RE9NSW1wbGVtZW50YXQKIAogTFNQYXJzZXJJbXBsICpET01JbXBsZW1lbnRhdGlv
bkxTSW1wbDo6Y3JlYXRlTFNQYXJzZXIodW5zaWduZWQgc2hvcnQgbW9kZSwgRE9NU3RyaW5nSW1w
bCAqc2NoZW1hVHlwZUltcGwpIGNvbnN0CiB7CisjaWZuZGVmIEFQUExFX0NPTVBJTEVfSEFDSwog
ICAgIFFTdHJpbmcgc2NoZW1hVHlwZSA9IHNjaGVtYVR5cGVJbXBsID8gc2NoZW1hVHlwZUltcGwt
PnN0cmluZygpIDogUVN0cmluZygpOwogCiAgICAgLy8gTk9UX1NVUFBPUlRFRF9FUlI6IFJhaXNl
ZCBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgb3Igc2NoZW1hIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4K
QEAgLTU0LDYgKzU1LDkgQEAgTFNQYXJzZXJJbXBsICpET01JbXBsZW1lbnRhdGlvbkxTSW1wbDo6
YwogICAgIExTUGFyc2VySW1wbCAqcmV0ID0gbmV3IExTUGFyc2VySW1wbCgpOwogICAgIHJldC0+
c2V0QVN5bmMobW9kZSA9PSBNT0RFX0FTWU5DSFJPTk9VUyk7CiAgICAgcmV0dXJuIHJldDsKKyNl
bHNlCisgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbkltcGwoTk9UX1NVUFBPUlRFRF9FUlIpOwor
I2VuZGlmCiB9CiAKIExTSW5wdXRJbXBsICpET01JbXBsZW1lbnRhdGlvbkxTSW1wbDo6Y3JlYXRl
TFNJbnB1dCgpIGNvbnN0CkluZGV4OiBrc3ZnMi9lY21hL0VjbWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEvRWNtYS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGtzdmcyL2VjbWEvRWNtYS5jcHAKLS0t
IGtzdmcyL2VjbWEvRWNtYS5jcHAJMSBTZXAgMjAwNSAwOTozOToxMyAtMDAwMAkxLjUKKysrIGtz
dmcyL2VjbWEvRWNtYS5jcHAJMjcgU2VwIDIwMDUgMDI6MjY6NDMgLTAwMDAKQEAgLTEwOSwxMiAr
MTA5LDggQEAgRWNtYTo6fkVjbWEoKQogCiB2b2lkIEVjbWE6OnNldHVwRG9jdW1lbnQoS0RPTTo6
RG9jdW1lbnRJbXBsICpkb2N1bWVudCkKIHsKLSAgICBTVkdEb2N1bWVudEltcGwgKnN2Z0RvY3Vt
ZW50ID0gZHluYW1pY19jYXN0PFNWR0RvY3VtZW50SW1wbCAqPihkb2N1bWVudCk7Ci0gICAgaWYo
IXN2Z0RvY3VtZW50KQotICAgIHsgICAgCi0gICAgICAgIGtkRmF0YWwoKSA8PCAiRWNtYTo6c2V0
dXBEb2N1bWVudCAtPiBUaGUgaW1wb3NzaWJsZSBoYXBwZW5lZC4uLiIgPDwgZW5kbDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoS0RPTTo6RE9NU3RyaW5nKGRvY3VtZW50LT5u
YW1lc3BhY2VVUkkoKSkgPT0gTlNfU1ZHKQorICAgIFNWR0RvY3VtZW50SW1wbCAqc3ZnRG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudEltcGwgKj4oZG9jdW1lbnQpOwogICAgIAogICAg
IC8vIENyZWF0ZSBiYXNlIGJyaWRnZSBmb3IgZG9jdW1lbnQKICAgICBTVkdEb2N1bWVudCBkb2NP
Ymooc3ZnRG9jdW1lbnQpOwpJbmRleDoga3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvbWlzYy9LU1ZH
VGltZVNjaGVkdWxlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1y
MS42IGtzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCi0tLSBrc3ZnMi9taXNjL0tTVkdU
aW1lU2NoZWR1bGVyLmNwcAk4IFNlcCAyMDA1IDA4OjAzOjMzIC0wMDAwCTEuNgorKysga3N2ZzIv
bWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHAJMjcgU2VwIDIwMDUgMDI6MjY6NDMgLTAwMDAKQEAg
LTI5NiwxMCArMjk2LDEwIEBAIHZvaWQgU1ZHVGltZXI6Om5vdGlmeUFsbCgpCiAgICAgICAgIC8v
IEhhbmRsZSA8YW5pbWF0ZVRyYW5zZm9ybT4uLi4KICAgICAgICAgaWYodGFyZ2V0VHJhbnNmb3Jt
cykKICAgICAgICAgewotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9
IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0aXQua2V5KCkpOwotICAgICAg
ICAgICAgU1ZHVHJhbnNmb3JtYWJsZUltcGwgKnRyYW5zZm9ybSA9IGR5bmFtaWNfY2FzdDxTVkdU
cmFuc2Zvcm1hYmxlSW1wbCAqPih0aXQua2V5KCkpOworICAgICAgICAgICAgU1ZHRWxlbWVudElt
cGwgKmtleSA9IHRpdC5rZXkoKTsKKyAgICAgICAgICAgIFNWR1RyYW5zZm9ybWFibGVJbXBsICp0
cmFuc2Zvcm0gPSBkeW5hbWljX2Nhc3Q8U1ZHVHJhbnNmb3JtYWJsZUltcGwgKj4oa2V5KTsKIAot
ICAgICAgICAgICAgaWYoc3R5bGVkICYmIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIGlmKGtleS0+
aXNTdHlsZWQoKSAmJiB0cmFuc2Zvcm0pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+c2V0QW5pbVZhbCh0YXJnZXRUcmFuc2Zvcm1zKTsKIApA
QCAtMzA3LDYgKzMwNyw3IEBAIHZvaWQgU1ZHVGltZXI6Om5vdGlmeUFsbCgpCiAgICAgICAgICAg
ICAgICAgdHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9y
bSgpLT5hbmltVmFsKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gLi4uIHVwZGF0ZSBlbGVtZW50
ICYgY2hpbGQgZWxlbWVudHMgLi4uCisgICAgICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudElt
cGwgKnN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KGtleSk7CiAg
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRhdGVTdWJ0cmVlTWF0cmljZXMoc3R5bGVkKTsK
IAogICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgc3dpdGNoIGJhY2sgdG8gYmFzZVZhbCAoYW5k
IGRvIG5vdCB1cGRhdGUhKQpAQCAtMzMxLDkgKzMzMiw5IEBAIHZvaWQgU1ZHVGltZXI6Om5vdGlm
eUFsbCgpCiAgICAgLy8gT3B0aW1pemVkIHVwZGF0ZSBsb2dpYyAodG8gYXZvaWQgNCB1cGRhdGVz
LCBvbiB0aGUgc2FtZSBlbGVtZW50KQogICAgIGZvcih0aXQgPSB0YXJnZXRNYXAuYmVnaW4oKTsg
dGl0ICE9IHRlbmQ7ICsrdGl0KQogICAgIHsKLSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwg
KnN0eWxlZCA9IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0aXQua2V5KCkp
OwotICAgICAgICBpZihzdHlsZWQpCi0gICAgICAgICAgICBzdHlsZWQtPnNldENoYW5nZWQodHJ1
ZSk7CisgICAgICAgIFNWR0VsZW1lbnRJbXBsICprZXkgPSB0aXQua2V5KCk7CisgICAgICAgIGlm
KGtleS0+aXNTdHlsZWQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1l
bnRJbXBsICo+KGtleSktPnNldENoYW5nZWQodHJ1ZSk7CiAgICAgfQogfQogCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50SW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
SW1wbC5jcHAJOCBTZXAgMjAwNSAwODowMzozNCAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50SW1wbC5jcHAJMjcgU2VwIDIwMDUgMDI6MjY6NDMgLTAwMDAKQEAgLTg4
LDkgKzg4LDkgQEAgU1ZHRWxlbWVudEltcGwgKlNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsOgogICAg
IHsKICAgICAgICAgaWYoIW1faHJlZi5pc0VtcHR5KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEtET006OkVsZW1lbnRJbXBsICplbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50
QnlJZChLRE9NOjpET01TdHJpbmcoU1ZHVVJJUmVmZXJlbmNlSW1wbDo6Z2V0VGFyZ2V0KG1faHJl
ZikpLmhhbmRsZSgpKTsKLSAgICAgICAgICAgIGlmKGVsZW1lbnQpCi0gICAgICAgICAgICAgICAg
bV90YXJnZXRFbGVtZW50ID0gZHluYW1pY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KGVsZW1lbnQp
OworICAgICAgICAgICAgS0RPTTo6RE9NU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNl
SW1wbDo6Z2V0VGFyZ2V0KG1faHJlZik7CisgICAgICAgICAgICBLRE9NOjpFbGVtZW50SW1wbCAq
ZWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaGFuZGxl
KCkpOworICAgICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0gc3ZnX2R5bmFtaWNfY2FzdChlbGVt
ZW50KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKHBhcmVudE5vZGUoKSkKICAgICAgICAg
ewpAQCAtNDk4LDcgKzQ5OCwxMCBAQCBLRE9NOjpET01TdHJpbmdJbXBsICpTVkdBbmltYXRpb25F
bGVtZW50CiAgICAgaWYoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IGR5bmFtaWNfY2FzdDxTVkdTdHls
ZWRFbGVtZW50SW1wbCAqPih0YXJnZXRFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnRJbXBsICp0
YXJnZXQgPSB0YXJnZXRFbGVtZW50KCk7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxl
ZCA9IE5VTEw7CisgICAgaWYgKHRhcmdldC0+aXNTdHlsZWQoKSkKKyAgICAgICAgc3R5bGVkID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4odGFyZ2V0KTsKICAgICBLRE9NOjpD
REZJbnRlcmZhY2UgKmludGVyZmFjZSA9IChzdHlsZWQgPyBzdHlsZWQtPm93bmVyRG9jdW1lbnQo
KS0+aW1wbGVtZW50YXRpb24oKS0+Y2RmSW50ZXJmYWNlKCkgOiAwKTsKICAgICAKICAgICBLRE9N
OjpET01TdHJpbmdJbXBsICpyZXQgPSAwOwpAQCAtNTQ1LDcgKzU0OCw5IEBAIHZvaWQgU1ZHQW5p
bWF0aW9uRWxlbWVudEltcGw6OnNldFRhcmdldEEKICAgICBpZighdGFyZ2V0IHx8ICFuYW1lIHx8
ICF2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBs
ICpzdHlsZWQgPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4odGFyZ2V0KTsK
KyAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5bGVkID0gTlVMTDsKKyAgICBpZiAodGFyZ2V0
LT5pc1N0eWxlZCgpKQorICAgICAgICBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50SW1wbCAqPih0YXJnZXQpOwogICAgIEtET006OkNERkludGVyZmFjZSAqaW50ZXJmYWNlID0g
KHN0eWxlZCA/IHN0eWxlZC0+b3duZXJEb2N1bWVudCgpLT5pbXBsZW1lbnRhdGlvbigpLT5jZGZJ
bnRlcmZhY2UoKSA6IDApOwogCiAgICAgRUF0dHJpYnV0ZVR5cGUgYXR0cmlidXRlVHlwZSA9IHR5
cGU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJ
bXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5oCTggU2VwIDIwMDUgMDg6MDM6MzUg
LTAwMDAJMS42CisrKyBrc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuaAkyNyBTZXAgMjAwNSAwMjoy
Njo0MyAtMDAwMApAQCAtNzAsMTIgKzcwLDE2IEBAIG5hbWVzcGFjZSBLU1ZHCiAgICAgICAgIHZp
cnR1YWwgUVN0cmluZyBhZGp1c3RWaWV3cG9ydENsaXBwaW5nKCkgY29uc3QgeyByZXR1cm4gUVN0
cmluZzo6bnVsbDsgfQogCiAgICAgICAgIFNWR0RvY3VtZW50SW1wbCAqZ2V0RG9jdW1lbnQoKSBj
b25zdDsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWRygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICBwcml2YXRlOgogI2lmIDAKICAgICAgICAgdm9pZCBhZGRTVkdF
dmVudExpc3RlbmVyKEtET006OkVjbWEgKmVjbWFFbmdpbmUsIGNvbnN0IEtET006OkRPTVN0cmlu
ZyAmdHlwZSwgY29uc3QgS0RPTTo6RE9NU3RyaW5nICZ2YWx1ZSk7CiAjZW5kaWYKICAgICB9Owor
ICAgIAogfTsKIAogLy8gU2FtZSBsaWtlIEtET01fSU1QTF9EVE9SX0FTU0lHTl9PUCwganVzdCB1
c2VzICdpbXBsJyBpbnN0ZWFkIG9mICdkJy4KQEAgLTkyLDYgKzk2LDI0IEBAIGJvb2wgVDo6b3Bl
cmF0b3IhPShjb25zdCBUICZvdGhlcikgY29uc3QKICAgICByZXR1cm4gIW9wZXJhdG9yPT0ob3Ro
ZXIpOyBcCiB9IFwKIAorCisvLyBIZWxwZXIgZm9yIERPTU5vZGUgLT4gU1ZHRWxlbWVudCBjb252
ZXJzaW9uCisjaW5jbHVkZSA8a2RvbS9rZG9tLmg+CisjaW5jbHVkZSA8a2RvbS9OYW1lc3BhY2Uu
aD4KKyNpbmNsdWRlIDxrZG9tL0RPTVN0cmluZy5oPgorCituYW1lc3BhY2UgS1NWRyB7CisgICAg
c3RhdGljIGlubGluZSBTVkdFbGVtZW50SW1wbCAqc3ZnX2R5bmFtaWNfY2FzdChLRE9NOjpOb2Rl
SW1wbCAqbm9kZSkgeworICAgICAgICBTVkdFbGVtZW50SW1wbCAqc3ZnRWxlbWVudCA9IE5VTEw7
CisgICAgICAgIGlmIChub2RlICYmIChub2RlLT5ub2RlVHlwZSgpID09IEtET006OkVMRU1FTlRf
Tk9ERSkpIHsKKyAgICAgICAgICAgIEtET006OkVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8S0RPTTo6RWxlbWVudEltcGwgKj4obm9kZSk7CisgICAgICAgICAgICBpZiAoZWxlbWVu
dCAmJiAoS0RPTTo6RE9NU3RyaW5nKGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpKSA9PSBLRE9NOjpO
U19TVkcpKQorICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50SW1wbCAqPihlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3ZnRWxlbWVu
dDsKKyAgICB9Cit9OworCiAjZW5kaWYKIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlc0ltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzSW1wbC5jcHAJMSBTZXAgMjAwNSAwOTozOToxNSAtMDAwMAkxLjUKKysrIGtzdmcy
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmNwcAkyNyBTZXAg
MjAwNSAwMjoyNjo0MyAtMDAwMApAQCAtNTksMjQgKzU5LDIxIEBAIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwKIFNWR0FuaW1hdGVkTGVuZ3RoSW1wbCAqU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6eCgpIGNvbnN0CiB7CiAgICAgLy8gU3Bl
YyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBp
ZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudElt
cGwgKj4odGhpcyk7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoSW1w
bD4obV94LCBjb250ZXh0LCBMTV9XSURUSCk7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoSW1wbD4obV94LCB0aGlzLCBMTV9XSURUSCk7CiB9CiAKIFNWR0FuaW1hdGVk
TGVuZ3RoSW1wbCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6eSgp
IGNvbnN0CiB7CiAgICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmll
ZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0g
ICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29u
c3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKj4odGhpcyk7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTGVuZ3RoSW1wbD4obV95LCBjb250ZXh0LCBMTV9IRUlHSFQpOworICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aEltcGw+KG1feSwgdGhpcywgTE1fSEVJ
R0hUKTsKIH0KIAogU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXNJbXBsOjp3aWR0aCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudEltcGwgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKj4odGhpcyk7CiAgICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNp
ZmllZC4KICAgICBpZighbV93aWR0aCkKICAgICB7Ci0gICAgICAgICBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aEltcGw+KG1fd2lkdGgsIGNvbnRleHQsIExNX1dJRFRIKTsKKyAgICAgICAg
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPihtX3dpZHRoLCB0aGlzLCBMTV9XSURU
SCk7CiAgICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhLRE9NOjpE
T01TdHJpbmcoIjEwMCUiKS5oYW5kbGUoKSk7CiAgICAgICAgIHJldHVybiBtX3dpZHRoOwogICAg
IH0KQEAgLTg2LDExICs4MywxMCBAQCBTVkdBbmltYXRlZExlbmd0aEltcGwgKlNWR0ZpbHRlclBy
aW1pdGl2CiAKIFNWR0FuaW1hdGVkTGVuZ3RoSW1wbCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzSW1wbDo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50SW1wbCAqY29udGV4dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
SW1wbCAqPih0aGlzKTsKICAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdlcmUgc3BlY2lm
aWVkLgogICAgIGlmKCFtX2hlaWdodCkKICAgICB7Ci0gICAgICAgICBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aEltcGw+KG1faGVpZ2h0LCBjb250ZXh0LCBMTV9IRUlHSFQpOworICAgICAg
ICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aEltcGw+KG1faGVpZ2h0LCB0aGlzLCBMTV9I
RUlHSFQpOwogICAgICAgICBtX2hlaWdodC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKEtE
T006OkRPTVN0cmluZygiMTAwJSIpLmhhbmRsZSgpKTsKICAgICAgICAgcmV0dXJuIG1faGVpZ2h0
OwogICAgIH0KQEAgLTEwMCw4ICs5Niw3IEBAIFNWR0FuaW1hdGVkTGVuZ3RoSW1wbCAqU1ZHRmls
dGVyUHJpbWl0aXYKIAogU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXNJbXBsOjpyZXN1bHQoKSBjb25zdAogewotICAgIGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICo+KHRoaXMpOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0
cmluZ0ltcGw+KG1fcmVzdWx0LCBjb250ZXh0KTsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRTdHJpbmdJbXBsPihtX3Jlc3VsdCwgdGhpcyk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbDo6cGFyc2VBdHRyaWJ1dGUoS0RPTTo6QXR0
cmlidXRlSW1wbCAqYXR0cikKSW5kZXg6IGtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdIZWxwZXIuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBrc3ZnMi9zdmcvU1ZH
SGVscGVyLmNwcAotLS0ga3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAJOCBTZXAgMjAwNSAwODowMzoz
NSAtMDAwMAkxLjUKKysrIGtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCTI3IFNlcCAyMDA1IDAyOjI2
OjQzIC0wMDAwCkBAIC00MSw5ICs0MSw5IEBAIGZsb2F0IFNWR0hlbHBlcjo6UGVyY2VudGFnZU9m
Vmlld3BvcnQoZmwKICAgICBpZighdmlld3BvcnRFbGVtZW50KQogICAgICAgICByZXR1cm4gMC4w
OwogIAotICAgIGNvbnN0IFNWR1NWR0VsZW1lbnRJbXBsICpzdmcgPSBkeW5hbWljX2Nhc3Q8Y29u
c3QgU1ZHU1ZHRWxlbWVudEltcGwgKj4odmlld3BvcnRFbGVtZW50KTsKLSAgICBpZihzdmcpCisg
ICAgaWYodmlld3BvcnRFbGVtZW50LT5pc1NWRygpKQogICAgIHsKKyAgICAgICAgY29uc3QgU1ZH
U1ZHRWxlbWVudEltcGwgKnN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1lbnRJbXBs
ICo+KHZpZXdwb3J0RWxlbWVudCk7CiAgICAgICAgIEtET006OkRPTVN0cmluZyB2aWV3Qm94KCJ2
aWV3Qm94Iik7CiAgICAgICAgIGlmKHN2Zy0+aGFzQXR0cmlidXRlKHZpZXdCb3guaGFuZGxlKCkp
KQogICAgICAgICB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTG9jYXRhYmxlSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR0xvY2F0YWJs
ZUltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrc3Zn
Mi9zdmcvU1ZHTG9jYXRhYmxlSW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdMb2NhdGFibGVJbXBs
LmNwcAkxIFNlcCAyMDA1IDA3OjM1OjQ0IC0wMDAwCTEuNAorKysga3N2ZzIvc3ZnL1NWR0xvY2F0
YWJsZUltcGwuY3BwCTI3IFNlcCAyMDA1IDAyOjI2OjQzIC0wMDAwCkBAIC0xMDQsMTAgKzEwNCw5
IEBAIFNWR01hdHJpeEltcGwgKlNWR0xvY2F0YWJsZUltcGw6OmdldENUTSgKIAogICAgIFNWR01h
dHJpeEltcGwgKmN0bSA9IFNWR1NWR0VsZW1lbnRJbXBsOjpjcmVhdGVTVkdNYXRyaXgoKTsKIAot
ICAgIEtET006Ok5vZGVJbXBsICpwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAg
aWYocGFyZW50ICYmIHBhcmVudC0+bm9kZVR5cGUoKSA9PSBLRE9NOjpFTEVNRU5UX05PREUpCisg
ICAgU1ZHRWxlbWVudEltcGwgKnBhcmVudEVsZW1lbnQgPSBzdmdfZHluYW1pY19jYXN0KGVsZW1l
bnQtPnBhcmVudE5vZGUoKSk7CisgICAgaWYocGFyZW50RWxlbWVudCkKICAgICB7Ci0gICAgICAg
IFNWR0VsZW1lbnRJbXBsICpwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudElt
cGwgKj4ocGFyZW50KTsKICAgICAgICAgU1ZHTG9jYXRhYmxlSW1wbCAqcGFyZW50TG9jYXRhYmxl
ID0gZHluYW1pY19jYXN0PFNWR0xvY2F0YWJsZUltcGwgKj4ocGFyZW50RWxlbWVudCk7CiAgICAg
ICAgIGlmKHBhcmVudExvY2F0YWJsZSkKICAgICAgICAgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1Bh
dHRlcm5FbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudElt
cGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnRJbXBsLmNwcAk4IFNlcCAyMDA1
IDA4OjAzOjM2IC0wMDAwCTEuNgorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1wbC5j
cHAJMjcgU2VwIDIwMDUgMDI6MjY6NDMgLTAwMDAKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFNW
R1BhdHRlcm5FbGVtZW50SW1wbDo6bm90aWZ5QXR0cmliCiAgICAgLy8gRmluZCBmaXJzdCBwYXR0
ZXJuIGRlZiB0aGF0IGhhcyBjaGlsZHJlbgogICAgIGNvbnN0IEtET006OkVsZW1lbnRJbXBsICp0
YXJnZXQgPSB0aGlzOwogCi0gICAgY29uc3QgS0RPTTo6Tm9kZUltcGwgKnRlc3QgPSBzdGF0aWNf
Y2FzdDxjb25zdCBLRE9NOjpOb2RlSW1wbCAqPih0YXJnZXQpOworICAgIGNvbnN0IEtET006Ok5v
ZGVJbXBsICp0ZXN0ID0gdGhpczsKICAgICB3aGlsZSh0ZXN0ICYmICF0ZXN0LT5oYXNDaGlsZE5v
ZGVzKCkpCiAgICAgewogICAgICAgICBRU3RyaW5nIHJlZiA9IEtET006OkRPTVN0cmluZyhocmVm
KCktPmJhc2VWYWwoKSkuc3RyaW5nKCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcv
U1ZHU1ZHRWxlbWVudEltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUg
LXIxLjYga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdTVkdF
bGVtZW50SW1wbC5oCTggU2VwIDIwMDUgMDg6MDM6MzYgLTAwMDAJMS42CisrKyBrc3ZnMi9zdmcv
U1ZHU1ZHRWxlbWVudEltcGwuaAkyNyBTZXAgMjAwNSAwMjoyNjo0MyAtMDAwMApAQCAtNjQsNiAr
NjQsOCBAQCBuYW1lc3BhY2UgS1NWRwogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHU1ZHRWxlbWVu
dEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9N
OjpET01TdHJpbmdJbXBsICpwcmVmaXgpOwogICAgICAgICB2aXJ0dWFsIH5TVkdTVkdFbGVtZW50
SW1wbCgpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTVkdFbGVtZW50JyBmdW5jdGlvbnMKICAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsICp4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50
SW1wbC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5jcHAJOCBTZXAgMjAw
NSAwODowMzozNyAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5j
cHAJMjcgU2VwIDIwMDUgMDI6MjY6NDMgLTAwMDAKQEAgLTIxNywyMiArMjE3LDIzIEBAIHZvaWQg
U1ZHU3R5bGVkRWxlbWVudEltcGw6OmF0dGFjaCgpCiAgICAgICAgICAgICBmaW5hbGl6ZVN0eWxl
KHJlbmRlcmluZ1N0eWxlKTsKIAogICAgICAgICAgICAgLy8gQXBwbHkgdHJhbnNmb3JtYXRpb25z
IGlmIHBvc3NpYmxlLi4uCi0gICAgICAgICAgICBTVkdMb2NhdGFibGVJbXBsICp0cmFuc2Zvcm1h
YmxlID0gZHluYW1pY19jYXN0PFNWR0xvY2F0YWJsZUltcGwgKj4odGhpcyk7Ci0gICAgICAgICAg
ICBpZih0cmFuc2Zvcm1hYmxlKQorICAgICAgICAgICAgU1ZHTG9jYXRhYmxlSW1wbCAqbG9jYXRh
YmxlID0gZHluYW1pY19jYXN0PFNWR0xvY2F0YWJsZUltcGwgKj4odGhpcyk7CisgICAgICAgICAg
ICBpZihsb2NhdGFibGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU1ZHTWF0cml4
SW1wbCAqY3RtID0gdHJhbnNmb3JtYWJsZS0+Z2V0U2NyZWVuQ1RNKCk7CisgICAgICAgICAgICAg
ICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gbG9jYXRhYmxlLT5nZXRTY3JlZW5DVE0oKTsKICAgICAg
ICAgICAgICAgICByZW5kZXJpbmdTdHlsZS0+c2V0T2JqZWN0TWF0cml4KEtDYW52YXNNYXRyaXgo
Y3RtLT5xbWF0cml4KCkpKTsKICAgICAgICAgICAgICAgICBjdG0tPmRlcmVmKCk7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpwYXJlbnQgPSBkeW5h
bWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4ocGFyZW50Tm9kZSgpKTsKLSAgICAgICAg
ICAgIGlmKHBhcmVudCAmJiBwYXJlbnQtPmNhbnZhc0l0ZW0oKSAmJiBwYXJlbnQtPmFsbG93QXR0
YWNoQ2hpbGRyZW4odGhpcykpCi0gICAgICAgICAgICAgICAgcGFyZW50LT5jYW52YXNJdGVtKCkt
PmFwcGVuZEl0ZW0obV9jYW52YXNJdGVtKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudCkg
eworICAgICAgICAgICAgU1ZHRWxlbWVudEltcGwgKnBhcmVudEVsZW1lbnQgPSBzdmdfZHluYW1p
Y19jYXN0KHBhcmVudE5vZGUoKSk7CisgICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAq
c3R5bGVkUGFyZW50ID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBh
cmVudEVsZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlZFBhcmVu
dCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHBhcmVudEVsZW1lbnQpOwor
ICAgICAgICAgICAgaWYoc3R5bGVkUGFyZW50ICYmIHN0eWxlZFBhcmVudC0+Y2FudmFzSXRlbSgp
ICYmIHN0eWxlZFBhcmVudC0+YWxsb3dBdHRhY2hDaGlsZHJlbih0aGlzKSkKKyAgICAgICAgICAg
ICAgICBzdHlsZWRQYXJlbnQtPmNhbnZhc0l0ZW0oKS0+YXBwZW5kSXRlbShtX2NhbnZhc0l0ZW0p
OworICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVkUGFyZW50KSB7CiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZXhpc3RzIHVudGlsIHdlIGNhbiBmaW5kIGEgYmV0dGVyIHdheSB0byBj
cmVhdGUgdGhlIHJvb3Qgbm9kZS4gLS0gZWNzIDgvNy8wNQogICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRkFJTEVEIENBTlZBUyBJTlNFUlRJT046IDwlcz4sIGxlYWtpbmcgJXBcbiIs
IEtET006OkRPTVN0cmluZyhub2RlTmFtZSgpKS5zdHJpbmcoKS5hc2NpaSgpLCB0aGlzKTsKLSAg
ICAgICAgICAgICAgICAvL2RlbGV0ZSBtX2NhbnZhc0l0ZW07IC8vIEZJWE1FIGxlYWtpbmcgaXRl
bXMgaGVyZSwgdW50aWwgd2UgZmluZCBhIGZpeCBmb3IgcGF0dGVybnMuCi0gICAgICAgICAgICAg
ICAgLy9tX2NhbnZhc0l0ZW0gPSBOVUxMOwogICAgICAgICAgICAgfQogCiAjaWZuZGVmIEFQUExF
X0NPTVBJTEVfSEFDSwpAQCAtMjYxLDkgKzI2MiwxMyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsOjpkZXRhY2goKQogCiAgICAgaWYobV9jYW52YXNJdGVtKQogICAgIHsKLSAgICAgICAgU1ZH
U3R5bGVkRWxlbWVudEltcGwgKnBhcmVudCA9IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50
SW1wbCAqPihwYXJlbnROb2RlKCkpOwotICAgICAgICBpZihwYXJlbnQgJiYgcGFyZW50LT5jYW52
YXNJdGVtKCkpCi0gICAgICAgICAgICBwYXJlbnQtPmNhbnZhc0l0ZW0oKS0+cmVtb3ZlSXRlbSht
X2NhbnZhc0l0ZW0pOworICAgICAgICBTVkdFbGVtZW50SW1wbCAqcGFyZW50ID0gc3ZnX2R5bmFt
aWNfY2FzdChwYXJlbnROb2RlKCkpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5
bGVkID0gTlVMTDsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzU3R5bGVkKCkpCisg
ICAgICAgICAgICBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPihw
YXJlbnQpOworICAgICAgICAgCisgICAgICAgIGlmKHN0eWxlZCAmJiBzdHlsZWQtPmNhbnZhc0l0
ZW0oKSkKKyAgICAgICAgICAgIHN0eWxlZC0+Y2FudmFzSXRlbSgpLT5yZW1vdmVJdGVtKG1fY2Fu
dmFzSXRlbSk7CiAgICAgfQogCiAgICAga2REZWJ1ZygyNjAwMikgPDwgIltTVkdTdHlsZWRFbGVt
ZW50SW1wbDo6ZGV0YWNoXSBEZXRhY2hlZCBjYW52YXMgaXRlbTogIiA8PCBtX2NhbnZhc0l0ZW0g
PDwgZW5kbDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50SW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBrc3Zn
Mi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1l
bnRJbXBsLmgJMSBTZXAgMjAwNSAwOTozOToxNyAtMDAwMAkxLjUKKysrIGtzdmcyL3N2Zy9TVkdT
dHlsZWRFbGVtZW50SW1wbC5oCTI3IFNlcCAyMDA1IDAyOjI2OjQzIC0wMDAwCkBAIC00Niw2ICs0
Niw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAgICAgcHVibGljOgogICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtE
T006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CiAgICAgICAgIHZpcnR1YWwgflNWR1N0eWxlZEVs
ZW1lbnRJbXBsKCk7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgLy8gJ1NWR1N0eWxhYmxlJyBmdW5jdGlv
bnMKICAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKmNsYXNzTmFtZSgpIGNv
bnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudEltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBrc3ZnMi9zdmcv
U1ZHVXNlRWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudEltcGwuY3Bw
CTEgU2VwIDIwMDUgMDk6Mzk6MTcgLTAwMDAJMS41CisrKyBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVu
dEltcGwuY3BwCTI3IFNlcCAyMDA1IDAyOjI2OjQzIC0wMDAwCkBAIC0xMjQsOSArMTI0LDEwIEBA
IHZvaWQgU1ZHVXNlRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRlKEsKIHZvaWQgU1ZHVXNlRWxl
bWVudEltcGw6OmNsb3NlKCkKIHsKICAgICBRU3RyaW5nIHJlZiA9IEtET006OkRPTVN0cmluZyho
cmVmKCktPmJhc2VWYWwoKSkuc3RyaW5nKCk7Ci0gICAgUVN0cmluZyB0YXJnZXRJZCA9IFNWR1VS
SVJlZmVyZW5jZUltcGw6OmdldFRhcmdldChyZWYpOwotICAgIFNWR0VsZW1lbnRJbXBsICp0YXJn
ZXQgPSBkeW5hbWljX2Nhc3Q8U1ZHRWxlbWVudEltcGwgKj4ob3duZXJEb2N1bWVudCgpLT5nZXRF
bGVtZW50QnlJZChLRE9NOjpET01TdHJpbmcodGFyZ2V0SWQpLmhhbmRsZSgpKSk7Ci0gICAgaWYo
IXRhcmdldCkKKyAgICBLRE9NOjpET01TdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2VJ
bXBsOjpnZXRUYXJnZXQocmVmKTsKKyAgICBLRE9NOjpFbGVtZW50SW1wbCAqdGFyZ2V0Tm9kZSA9
IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaGFuZGxlKCkpOworICAg
IFNWR0VsZW1lbnRJbXBsICp0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldE5vZGUpOwor
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCBfeCA9IHgoKS0+
YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4058</attachid>
            <date>2005-09-27 01:03:06 -0700</date>
            <delta_ts>2005-10-02 14:57:41 -0700</delta_ts>
            <desc>Removes many (but not all) dynamic_casts from kdom/ksvg2</desc>
            <filename>remove_dynamic_cast.patch</filename>
            <type>text/plain</type>
            <size>34467</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkb20vSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9IZWxwZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUg
LXIxLjQga2RvbS9IZWxwZXIuaAotLS0ga2RvbS9IZWxwZXIuaAkxIFNlcCAyMDA1IDA3OjMyOjU2
IC0wMDAwCTEuNAorKysga2RvbS9IZWxwZXIuaAkyNyBTZXAgMjAwNSAwODowMTo1NyAtMDAwMApA
QCAtMzIsNyArMzIsNiBAQCBuYW1lc3BhY2UgS0RPTQogICAgIGNsYXNzIExlbmd0aDsKICAgICBj
bGFzcyBBdHRySW1wbDsKICAgICBjbGFzcyBOb2RlSW1wbDsKLSAgICBjbGFzcyBET01TdHJpbmc7
CiAgICAgY2xhc3MgRWxlbWVudEltcGw7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwogICAgIGNs
YXNzIERPTVN0cmluZ0ltcGw7CkBAIC0xODAsMTAgKzE3OSwxMCBAQCBuYW1lc3BhY2UgS0RPTQog
ICAgICAgICAgKiBcY29kZQogICAgICAgICAgKiBFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJRCAiZm9vYmFyIik7CiAgICAgICAgICAqIAotICAgICAgICAgKiBET01TdHJp
bmcgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJocmVmIik7Ci0gICAgICAgICAqIERPTVN0
cmluZyBkb2N1bWVudEJhc2UgPSBlbGVtZW50LmJhc2VVUkkoKTsKKyAgICAgICAgICogRE9NU3Ry
aW5nSW1wbCBocmVmID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKKyAgICAgICAgICog
RE9NU3RyaW5nSW1wbCBkb2N1bWVudEJhc2UgPSBlbGVtZW50LmJhc2VVUkkoKTsKICAgICAgICAg
ICoKLSAgICAgICAgICogRE9NU3RyaW5nIHRoZUNvbXBsZXRlVVJMKEhlbHBlcjo6QnVpbGRVUkko
ZG9jdW1lbnRCYXNlLmhhbmRsZSgpLCBocmVmLmhhbmRsZSgpKTsKKyAgICAgICAgICogRE9NU3Ry
aW5nSW1wbCB0aGVDb21wbGV0ZVVSTChIZWxwZXI6OkJ1aWxkVVJJKGRvY3VtZW50QmFzZS5oYW5k
bGUoKSwgaHJlZi5oYW5kbGUoKSk7CiAgICAgICAgICAqIFxlbmRjb2RlCiAgICAgICAgICAqCiAg
ICAgICAgICAqIEBwYXJhbSBiYXNlIHRoZSBiYXNlIFVSSSB0byByZXNvbHZlIGFnYWluc3QKSW5k
ZXg6IGtkb20vY29yZS9Ob2RlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9jb3JlL05vZGVJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42CmRpZmYgLXAgLXUgLXIxLjYga2RvbS9jb3JlL05vZGVJbXBsLmNwcAotLS0ga2RvbS9jb3Jl
L05vZGVJbXBsLmNwcAk4IFNlcCAyMDA1IDA4OjAzOjIwIC0wMDAwCTEuNgorKysga2RvbS9jb3Jl
L05vZGVJbXBsLmNwcAkyNyBTZXAgMjAwNSAwODowMTo1OCAtMDAwMApAQCAtMzEsNiArMzEsOCBA
QAogI2luY2x1ZGUgIk5vZGVJbXBsLmgiCiAjaW5jbHVkZSAiVGV4dEltcGwuaCIKICNpbmNsdWRl
ICJrZG9tZXZlbnRzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlICJFdmVudEV4Y2VwdGlvbkltcGwuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIkVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgiCkBAIC0x
MTgyLDYgKzExODQsMTUwIEBAIHZvaWQgTm9kZUltcGw6OmRpc3BhdGNoRXZlbnRUb1N1YlRyZWUo
Tm8KICAgICB9CiB9CiAKK3ZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoRE9NU3RyaW5n
SW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
Cit7CisgICAgaWYoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZih0eXBlKQor
ICAgICAgICB0eXBlLT5yZWYoKTsKKworICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgbGlzdGVuZXIg
aXMgYnVpbHRpbiAoaWUuIERPTU5PREVSRU1PVkVEX0VWRU5UKQorICAgIC8vIHdlJ2xsIGNhY2hl
IHRoZSBzcGVjaWZpYyBlbnVtZXJhdGlvbiB2YWx1ZSB0byBzYXZlIHNwYWNlCisgICAgLy8gYnV0
IGluIGNhc2Ugb2YgYSBjdXN0b20gZXZlbnQgKGllLiBhcyB1c2VkIGluIHRoZSBkb20yIGV2ZW50
cyB0ZXN0IHN1aXRlKQorICAgIC8vIGZvciBleGFtcGxlICdmb28nIGp1c3QgZG9uJ3QgY2FjaGUg
aXQ7IGtkb20gaW50ZXJuYWxseSB3b24ndCBmaXJlIGFueQorICAgIC8vICdmb28nIGV2ZW50cywg
d2hpY2ggbWVhbnMgaXQgZG9lc24ndCBuZWVkIHRvIGtub3cgYW55dGhpbmcgYWJvdXQgaXQuLi4K
KworICAgIGlmKCFtX2V2ZW50TGlzdGVuZXJzKQorICAgIHsKKyAgICAgICAgbV9ldmVudExpc3Rl
bmVycyA9IG5ldyBRM1B0ckxpc3Q8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+KCk7CisgICAgICAg
IG1fZXZlbnRMaXN0ZW5lcnMtPnNldEF1dG9EZWxldGUodHJ1ZSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGxpc3RlbmVyIGZvcmdl
dCB0aGlzIGNhbGwuLi4KKyAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgY29tcGFyZSh0
eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7IAorCisgICAgICAgIFEzUHRyTGlzdEl0ZXJhdG9y
PFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBpdCgqbV9ldmVudExpc3RlbmVycyk7CisgICAgICAg
IGZvcig7IGl0LmN1cnJlbnQoKTsgKytpdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKihp
dC5jdXJyZW50KCkpID09IGNvbXBhcmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSAobm9kZVR5cGUoKSA9PSBET0NV
TUVOVF9OT0RFKSA/IHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCAqPih0aGlzKSA6IG93bmVyRG9j
dW1lbnQoKTsKKyAgICBhZGRMaXN0ZW5lclR5cGUoZG9jLT5hZGRMaXN0ZW5lclR5cGUodHlwZSkp
OworICAgIG1fZXZlbnRMaXN0ZW5lcnMtPmFwcGVuZChuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKTsKKworICAgIGlmKHR5cGUpCisgICAgICAg
IHR5cGUtPmRlcmVmKCk7Cit9CisKK3ZvaWQgTm9kZUltcGw6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
RE9NU3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpCit7CisgICAgaWYoIW1fZXZlbnRMaXN0ZW5lcnMgfHwgIWxpc3RlbmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudEltcGwgKmRvYyA9IChub2RlVHlwZSgpID09IERP
Q1VNRU5UX05PREUpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+KHRoaXMpIDogb3duZXJE
b2N1bWVudCgpOworICAgIGlmKCFkb2MpCisgICAgeworICAgICAgICBrZEVycm9yKCkgPDwgIkNv
dWxkbid0IHJlbW92ZSBsaXN0ZW5lciB0eXBlISBObyBkb2N1bWVudCBhdmFpbGFibGUhIiA8PCBl
bmRsOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIgY29tcGFyZSh0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisKKyAgICBRM1B0ckxpc3RJ
dGVyYXRvcjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gaXQoKm1fZXZlbnRMaXN0ZW5lcnMpOwor
ICAgIGZvcig7IGl0LmN1cnJlbnQoKTsgKytpdCkKKyAgICB7CisgICAgICAgIGlmKCgqaXQuY3Vy
cmVudCgpKSA9PSBjb21wYXJlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V2ZW50TGlzdGVu
ZXJzLT5yZW1vdmVSZWYoaXQuY3VycmVudCgpKTsKKyAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVy
VHlwZShkb2MtPnJlbW92ZUxpc3RlbmVyVHlwZSh0eXBlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTm9kZUltcGw6OmRpc3BhdGNoRXZlbnQoRXZl
bnRJbXBsICpldnQpCit7CisgICAgaWYoIWV2dCB8fCAoZXZ0LT5pZCgpID09IFVOS05PV05fRVZF
TlQgJiYgKCFldnQtPnR5cGUoKSB8fCBldnQtPnR5cGUoKS0+aXNFbXB0eSgpKSkpCisgICAgICAg
IHRocm93IG5ldyBFdmVudEV4Y2VwdGlvbkltcGwoVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIp
OworCisgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CisKKyAgICAvLyBGaW5kIG91dCwgd2hlcmUg
dG8gc2VuZCB0byAtPiBjb2xsZWN0IHBhcmVudCBub2RlcywKKyAgICAvLyBjYXN0IHRoZW0gdG8g
RXZlbnRUYXJnZXRzIGFuZCBhZGQgdGhlbSB0byBsaXN0CisgICAgUTNQdHJMaXN0PEV2ZW50VGFy
Z2V0SW1wbD4gdGFyZ2V0Q2hhaW47CisgICAgZm9yKE5vZGVJbXBsICpuID0gdGhpczsgbiAhPSAw
OyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAgICB0YXJnZXRDaGFpbi5wcmVwZW5kKG4pOwor
CisgICAgLy8gVHJpZ2dlciBhbnkgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkg
ZG93bgorICAgIGV2dC0+c2V0RXZlbnRQaGFzZShDQVBUVVJJTkdfUEhBU0UpOworCisgICAgUTNQ
dHJMaXN0SXRlcmF0b3I8RXZlbnRUYXJnZXRJbXBsPiBpdCh0YXJnZXRDaGFpbik7CisgICAgZm9y
KDsgaXQuY3VycmVudCgpICYmIGl0LmN1cnJlbnQoKSAhPSB0aGlzICYmICFldnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpOyArK2l0KQorICAgIHsKKyAgICAgICAgRXZlbnRUYXJnZXRJbXBsICppID0g
aXQuY3VycmVudCgpOworICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoaSk7CisKKyAgICAg
ICAgaWYoaSkKKyAgICAgICAgICAgIGktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dCwgdHJ1ZSk7Cisg
ICAgfQorCisgICAgLy8gRGlzcGF0Y2ggdG8gdGhlIGFjdHVhbCB0YXJnZXQgbm9kZQorICAgIGl0
LnRvTGFzdCgpOworICAgIGlmKCFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgIHsKKyAg
ICAgICAgRXZlbnRUYXJnZXRJbXBsICppID0gaXQuY3VycmVudCgpOworCisgICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldChpKTsKKyAgICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEFUX1RBUkdF
VCk7CisKKyAgICAgICAgaWYoaSkKKyAgICAgICAgICAgIGktPmhhbmRsZUxvY2FsRXZlbnRzKGV2
dCwgZmFsc2UpOworICAgIH0KKworICAgIC0taXQ7CisKKyAgICAvLyBCdWJibGUgdXAgYWdhaW4K
KyAgICBpZihldnQtPmJ1YmJsZXMoKSkKKyAgICB7CisgICAgICAgIGV2dC0+c2V0RXZlbnRQaGFz
ZShCVUJCTElOR19QSEFTRSk7CisgICAgICAgIGZvcig7IGl0LmN1cnJlbnQoKSAmJiAhZXZ0LT5w
cm9wYWdhdGlvblN0b3BwZWQoKTsgLS1pdCkKKyAgICAgICAgeworICAgICAgICAgICAgRXZlbnRU
YXJnZXRJbXBsICppID0gaXQuY3VycmVudCgpOworICAgICAgICAgICAgZXZ0LT5zZXRDdXJyZW50
VGFyZ2V0KGkpOworCisgICAgICAgICAgICBpZihpKQorICAgICAgICAgICAgICAgIGktPmhhbmRs
ZUxvY2FsRXZlbnRzKGV2dCwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgZXZ0LT5z
ZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2dC0+c2V0RXZlbnRQaGFzZSgwKTsgICAgICAgIC8v
IEkgZ3Vlc3MgdGhpcyBpcyBjb3JyZWN0LCB0aGUgc3BlYyBkb2VzIG5vdCBzZWVtIHRvIHNheQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbnl0aGluZyBhYm91dCB0aGUgZGVm
YXVsdCBldmVudCBoYW5kbGVyIHBoYXNlLgorICAgIGlmKGV2dC0+YnViYmxlcygpKQorICAgIHsK
KyAgICAgICAgLy8gbm93IHdlIGNhbGwgYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMg
aXMgbm90IHBhcnQgb2YgRE9NIC0gaXQgaXMgaW50ZXJuYWwgdG8ga2h0bWwpCisgICAgICAgIGl0
LnRvTGFzdCgpOworICAgICAgICBmb3IoOyBpdC5jdXJyZW50KCkgJiYgIWV2dC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkgJiYgIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQtPmRlZmF1bHRI
YW5kbGVkKCk7IC0taXQpCisgICAgICAgICAgICBpdC5jdXJyZW50KCktPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZ0KTsKKyAgICB9CisKKyAgICBEb2N1bWVudEltcGwgKmRvYyA9IChub2RlVHlwZSgp
ID09IERPQ1VNRU5UX05PREUpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+KHRoaXMpIDog
b3duZXJEb2N1bWVudCgpOworICAgIGRvYy0+dXBkYXRlUmVuZGVyaW5nKCk7IC8vIGFueSBjaGFu
Z2VzIGR1cmluZyBldmVudCBoYW5kbGluZyBuZWVkIHRvIGJlIHJlbmRlcmVkCisKKy8qIEZJWE1F
CisgICAgRWNtYSAqZWNtYUVuZ2luZSA9IGRvYy0+ZWNtYUVuZ2luZSgpOworICAgIGlmKGVjbWFF
bmdpbmUpCisgICAgICAgIGVjbWFFbmdpbmUtPmZpbmlzaGVkV2l0aEV2ZW50KGV2dCk7CisqLwor
ICAgIGJvb2wgcmV0VmFsID0gIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyBXaGF0IGlmIGRl
ZmF1bHRQcmV2ZW50ZWQgd2FzIGNhbGxlZCBiZWZvcmUgZGlzcGF0Y2hFdmVudD8KKyAgICByZXR1
cm4gcmV0VmFsOworfQorCiBOb2RlSW1wbCAqTm9kZUltcGw6OnRyYXZlcnNlTmV4dE5vZGUoTm9k
ZUltcGwgKnN0YXlXaXRoaW4pIGNvbnN0CiB7CiAgICAgaWYoZmlyc3RDaGlsZCgpIHx8IHN0YXlX
aXRoaW4gPT0gdGhpcykKSW5kZXg6IGtkb20vY29yZS9Ob2RlSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY29yZS9Ob2RlSW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBrZG9tL2NvcmUvTm9kZUltcGwuaAot
LS0ga2RvbS9jb3JlL05vZGVJbXBsLmgJMSBTZXAgMjAwNSAwOTozOTowMiAtMDAwMAkxLjUKKysr
IGtkb20vY29yZS9Ob2RlSW1wbC5oCTI3IFNlcCAyMDA1IDA4OjAxOjU4IC0wMDAwCkBAIC0xNDcs
NiArMTQ3LDExIEBAIG5hbWVzcGFjZSBLRE9NCiAgICAgICAgIHZvaWQgZGlzcGF0Y2hDaGlsZFJl
bW92YWxFdmVudHMoTm9kZUltcGwgKmNoaWxkKTsKICAgICAgICAgdm9pZCBkaXNwYXRjaENoaWxk
SW5zZXJ0ZWRFdmVudHMoTm9kZUltcGwgKmNoaWxkKTsKICAgICAgICAgdm9pZCBkaXNwYXRjaEV2
ZW50VG9TdWJUcmVlKE5vZGVJbXBsICpub2RlLCBFdmVudEltcGwgKmV2ZW50KTsKKyAgICAgICAg
CisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGFic3RyYWN0IG1ldGhvZHMKKyAgICAgICAgdmlydHVh
bCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoRE9NU3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5l
ckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihET01TdHJpbmdJbXBsICp0eXBlLCBFdmVudExpc3RlbmVySW1w
bCAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNw
YXRjaEV2ZW50KEV2ZW50SW1wbCAqZXZ0KTsKIAogICAgICAgICAvLyBJbnRlcm5hbAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OwpAQCAtMjY4LDcgKzI3Myw5IEBAIG5h
bWVzcGFjZSBLRE9NCiAKICAgICAgICAgYm9vbCBpbkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9pbkRvY3VtZW50OyB9CiAgICAgICAgIHZvaWQgc2V0SW5Eb2N1bWVudChib29sIGIgPSB0cnVl
KSB7IG1faW5Eb2N1bWVudCA9IGI7IH0KLQorI2lmIEFQUExFX0NIQU5HRVMKKyAgICAgICAgdmly
dHVhbCBib29sIGlzU1ZHRWxlbWVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIC8vIEhlbHBlciBtZXRob2RzIChUaGV5IHdpbGwgZXZlbnR1YWxs
eSB0aHJvdyBleGNlcHRpb25zISkKICAgICAgICAgYm9vbCBpc0FuY2VzdG9yKE5vZGVJbXBsICpj
dXJyZW50LCBOb2RlSW1wbCAqb3RoZXIpOwpJbmRleDoga2RvbS9ldmVudHMvRXZlbnRUYXJnZXRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2
ZW50cy9FdmVudFRhcmdldEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAt
cCAtdSAtcjEuNiBrZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuY3BwCi0tLSBrZG9tL2V2ZW50
cy9FdmVudFRhcmdldEltcGwuY3BwCTggU2VwIDIwMDUgMDg6MDM6MjcgLTAwMDAJMS42CisrKyBr
ZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuY3BwCTI3IFNlcCAyMDA1IDA4OjAxOjU4IC0wMDAw
CkBAIC00NCwxNzcgKzQ0LDYgQEAgRXZlbnRUYXJnZXRJbXBsOjp+RXZlbnRUYXJnZXRJbXBsKCkK
ICAgICBkZWxldGUgbV9ldmVudExpc3RlbmVyczsKIH0KIAotdm9pZCBFdmVudFRhcmdldEltcGw6
OmFkZEV2ZW50TGlzdGVuZXIoRE9NU3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwg
Kmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYoIWxpc3RlbmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZih0eXBlKQotICAgICAgICB0eXBlLT5yZWYoKTsKLQotICAgIC8v
IElmIHRoZSByZXF1ZXN0ZWQgbGlzdGVuZXIgaXMgYnVpbHRpbiAoaWUuIERPTU5PREVSRU1PVkVE
X0VWRU5UKQotICAgIC8vIHdlJ2xsIGNhY2hlIHRoZSBzcGVjaWZpYyBlbnVtZXJhdGlvbiB2YWx1
ZSB0byBzYXZlIHNwYWNlCi0gICAgLy8gYnV0IGluIGNhc2Ugb2YgYSBjdXN0b20gZXZlbnQgKGll
LiBhcyB1c2VkIGluIHRoZSBkb20yIGV2ZW50cyB0ZXN0IHN1aXRlKQotICAgIC8vIGZvciBleGFt
cGxlICdmb28nIGp1c3QgZG9uJ3QgY2FjaGUgaXQ7IGtkb20gaW50ZXJuYWxseSB3b24ndCBmaXJl
IGFueQotICAgIC8vICdmb28nIGV2ZW50cywgd2hpY2ggbWVhbnMgaXQgZG9lc24ndCBuZWVkIHRv
IGtub3cgYW55dGhpbmcgYWJvdXQgaXQuLi4KLSAgICBOb2RlSW1wbCAqZHluT2JqID0gY29uc3Rf
Y2FzdDxOb2RlSW1wbCAqPihkeW5hbWljX2Nhc3Q8Y29uc3QgTm9kZUltcGwgKj4odGhpcykpOwot
ICAgIGlmKCFkeW5PYmopCi0gICAgewotICAgICAgICBrZEZhdGFsKCkgPDwgIlVwY2FzdCBmYWls
ZWQhIFRoZSAnaW1wb3NzaWJsZScgaGFwcGVuZWQuLi4hIiA8PCBlbmRsOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSAoZHluT2JqLT5ub2RlVHlwZSgp
ID09IERPQ1VNRU5UX05PREUpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+KGR5bk9iaikg
OiBkeW5PYmotPm93bmVyRG9jdW1lbnQoKTsKLSAgICBpZighZG9jKQotICAgIHsKLSAgICAgICAg
a2RFcnJvcigpIDw8ICJDb3VsZG4ndCByZWdpc3RlciBsaXN0ZW5lciB0eXBlISBObyBkb2N1bWVu
dCBhdmFpbGFibGUhIiA8PCBlbmRsOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYo
IW1fZXZlbnRMaXN0ZW5lcnMpCi0gICAgewotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzID0gbmV3
IFEzUHRyTGlzdDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4oKTsKLSAgICAgICAgbV9ldmVudExp
c3RlbmVycy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbGlzdGVuZXIgZm9yZ2V0IHRoaXMgY2Fs
bC4uLgotICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBjb21wYXJlKHR5cGUsIGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsgCi0KLSAgICAgICAgUTNQdHJMaXN0SXRlcmF0b3I8UmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI+IGl0KCptX2V2ZW50TGlzdGVuZXJzKTsKLSAgICAgICAgZm9yKDsgaXQu
Y3VycmVudCgpOyArK2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZigqKGl0LmN1cnJlbnQo
KSkgPT0gY29tcGFyZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBhZGRMaXN0ZW5lclR5cGUoZG9jLT5hZGRMaXN0ZW5lclR5cGUodHlwZSkpOwotICAg
IG1fZXZlbnRMaXN0ZW5lcnMtPmFwcGVuZChuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIodHlw
ZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKTsKLQotICAgIGlmKHR5cGUpCi0gICAgICAgIHR5cGUt
PmRlcmVmKCk7Ci19Ci0KLXZvaWQgRXZlbnRUYXJnZXRJbXBsOjpyZW1vdmVFdmVudExpc3RlbmVy
KERPTVN0cmluZ0ltcGwgKnR5cGUsIEV2ZW50TGlzdGVuZXJJbXBsICpsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKQotewotICAgIGlmKCFtX2V2ZW50TGlzdGVuZXJzIHx8ICFsaXN0ZW5lcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTm9kZUltcGwgKmR5bk9iaiA9IGNvbnN0X2Nhc3Q8Tm9kZUlt
cGwgKj4oZHluYW1pY19jYXN0PGNvbnN0IE5vZGVJbXBsICo+KHRoaXMpKTsKLSAgICBpZighZHlu
T2JqKQotICAgIHsKLSAgICAgICAga2RGYXRhbCgpIDw8ICJVcGNhc3QgZmFpbGVkISBUaGUgJ2lt
cG9zc2libGUnIGhhcHBlbmVkLi4uISIgPDwgZW5kbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIERvY3VtZW50SW1wbCAqZG9jID0gKGR5bk9iai0+bm9kZVR5cGUoKSA9PSBET0NVTUVO
VF9OT0RFKSA/IHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCAqPihkeW5PYmopIDogZHluT2JqLT5v
d25lckRvY3VtZW50KCk7Ci0gICAgaWYoIWRvYykKLSAgICB7Ci0gICAgICAgIGtkRXJyb3IoKSA8
PCAiQ291bGRuJ3QgcmVtb3ZlIGxpc3RlbmVyIHR5cGUhIE5vIGRvY3VtZW50IGF2YWlsYWJsZSEi
IDw8IGVuZGw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciBjb21wYXJlKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgIFEzUHRy
TGlzdEl0ZXJhdG9yPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiBpdCgqbV9ldmVudExpc3RlbmVy
cyk7Ci0gICAgZm9yKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgIHsKLSAgICAgICAgaWYoKCpp
dC5jdXJyZW50KCkpID09IGNvbXBhcmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZXZlbnRM
aXN0ZW5lcnMtPnJlbW92ZVJlZihpdC5jdXJyZW50KCkpOwotICAgICAgICAgICAgcmVtb3ZlTGlz
dGVuZXJUeXBlKGRvYy0+cmVtb3ZlTGlzdGVuZXJUeXBlKHR5cGUpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBFdmVudFRhcmdldEltcGw6OmRpc3Bh
dGNoRXZlbnQoRXZlbnRJbXBsICpldnQpCi17Ci0gICAgaWYoIWV2dCB8fCAoZXZ0LT5pZCgpID09
IFVOS05PV05fRVZFTlQgJiYgKCFldnQtPnR5cGUoKSB8fCBldnQtPnR5cGUoKS0+aXNFbXB0eSgp
KSkpCi0gICAgICAgIHRocm93IG5ldyBFdmVudEV4Y2VwdGlvbkltcGwoVU5TUEVDSUZJRURfRVZF
TlRfVFlQRV9FUlIpOwotCi0gICAgZXZ0LT5zZXRUYXJnZXQoY29uc3RfY2FzdDxFdmVudFRhcmdl
dEltcGwgKj4odGhpcykpOwotCi0gICAgLy8gRmluZCBvdXQsIHdoZXJlIHRvIHNlbmQgdG8gLT4g
Y29sbGVjdCBwYXJlbnQgbm9kZXMsCi0gICAgLy8gY2FzdCB0aGVtIHRvIEV2ZW50VGFyZ2V0cyBh
bmQgYWRkIHRoZW0gdG8gbGlzdAotICAgIFEzUHRyTGlzdDxFdmVudFRhcmdldEltcGw+IHRhcmdl
dENoYWluOwotCi0gICAgTm9kZUltcGwgKmkgPSBkeW5hbWljX2Nhc3Q8Tm9kZUltcGwgKj4odGhp
cyk7Ci0gICAgaWYoIWkpCi0gICAgewotICAgICAgICBrZEVycm9yKCkgPDwga19mdW5jaW5mbyA8
PCAiIEV2ZW50VGFyZ2V0IG11c3QgYmUgaW5oZXJpdGVkIGJ5IE5vZGUhIFRoaXMgc2hvdWxkIG5l
dmVyIGhhcHBlbi4iIDw8IGVuZGw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBmb3IoTm9kZUltcGwgKm4gPSBpOyBuICE9IDA7IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAg
ICAgIHRhcmdldENoYWluLnByZXBlbmQobik7Ci0KLSAgICAvLyBUcmlnZ2VyIGFueSBjYXB0dXJp
bmcgZXZlbnQgaGFuZGxlcnMgb24gb3VyIHdheSBkb3duCi0gICAgZXZ0LT5zZXRFdmVudFBoYXNl
KENBUFRVUklOR19QSEFTRSk7Ci0KLSAgICBRM1B0ckxpc3RJdGVyYXRvcjxFdmVudFRhcmdldElt
cGw+IGl0KHRhcmdldENoYWluKTsKLSAgICBmb3IoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVu
dCgpICE9IHRoaXMgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpCi0gICAgewot
ICAgICAgICBFdmVudFRhcmdldEltcGwgKmkgPSBpdC5jdXJyZW50KCk7Ci0gICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldChpKTsKLQotICAgICAgICBpZihpKQotICAgICAgICAgICAgaS0+aGFu
ZGxlTG9jYWxFdmVudHMoZXZ0LCB0cnVlKTsKLSAgICB9Ci0KLSAgICAvLyBEaXNwYXRjaCB0byB0
aGUgYWN0dWFsIHRhcmdldCBub2RlCi0gICAgaXQudG9MYXN0KCk7Ci0gICAgaWYoIWV2dC0+cHJv
cGFnYXRpb25TdG9wcGVkKCkpCi0gICAgewotICAgICAgICBFdmVudFRhcmdldEltcGwgKmkgPSBp
dC5jdXJyZW50KCk7Ci0KLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGkpOwotICAgICAg
ICBldnQtPnNldEV2ZW50UGhhc2UoQVRfVEFSR0VUKTsKLQotICAgICAgICBpZihpKQotICAgICAg
ICAgICAgaS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLS1p
dDsKLQotICAgIC8vIEJ1YmJsZSB1cCBhZ2FpbgotICAgIGlmKGV2dC0+YnViYmxlcygpKQotICAg
IHsKLSAgICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEJVQkJMSU5HX1BIQVNFKTsKLSAgICAgICAg
Zm9yKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpOyAtLWl0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBFdmVudFRhcmdldEltcGwgKmkgPSBpdC5jdXJyZW50KCk7
Ci0gICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoaSk7Ci0KLSAgICAgICAgICAgIGlm
KGkpCi0gICAgICAgICAgICAgICAgaS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LCBmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAgZXZ0
LT5zZXRFdmVudFBoYXNlKDApOyAgICAgICAgLy8gSSBndWVzcyB0aGlzIGlzIGNvcnJlY3QsIHRo
ZSBzcGVjIGRvZXMgbm90IHNlZW0gdG8gc2F5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFueXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCi0g
ICAgaWYoZXZ0LT5idWJibGVzKCkpCi0gICAgewotICAgICAgICAvLyBub3cgd2UgY2FsbCBhbGwg
ZGVmYXVsdCBldmVudCBoYW5kbGVycyAodGhpcyBpcyBub3QgcGFydCBvZiBET00gLSBpdCBpcyBp
bnRlcm5hbCB0byBraHRtbCkKLSAgICAgICAgaXQudG9MYXN0KCk7Ci0gICAgICAgIGZvcig7IGl0
LmN1cnJlbnQoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZ0LT5kZWZhdWx0
UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKTsgLS1pdCkKLSAgICAgICAgICAg
IGl0LmN1cnJlbnQoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwotICAgIH0KLQotICAgIERv
Y3VtZW50SW1wbCAqZG9jID0gKGktPm5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfTk9ERSkgPyBzdGF0
aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oaSkgOiBpLT5vd25lckRvY3VtZW50KCk7Ci0gICAgZG9j
LT51cGRhdGVSZW5kZXJpbmcoKTsgLy8gYW55IGNoYW5nZXMgZHVyaW5nIGV2ZW50IGhhbmRsaW5n
IG5lZWQgdG8gYmUgcmVuZGVyZWQKLQotLyogRklYTUUKLSAgICBFY21hICplY21hRW5naW5lID0g
ZG9jLT5lY21hRW5naW5lKCk7Ci0gICAgaWYoZWNtYUVuZ2luZSkKLSAgICAgICAgZWNtYUVuZ2lu
ZS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZ0KTsKLSovCi0gICAgYm9vbCByZXRWYWwgPSAhZXZ0LT5k
ZWZhdWx0UHJldmVudGVkKCk7IC8vIFdoYXQgaWYgZGVmYXVsdFByZXZlbnRlZCB3YXMgY2FsbGVk
IGJlZm9yZSBkaXNwYXRjaEV2ZW50PwotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KIHZvaWQgRXZl
bnRUYXJnZXRJbXBsOjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudEltcGwgKmV2dCwgYm9vbCB1c2VD
YXB0dXJlKQogewogICAgIGlmKCFtX2V2ZW50TGlzdGVuZXJzIHx8ICFldnQpCkluZGV4OiBrZG9t
L2V2ZW50cy9FdmVudFRhcmdldEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga2RvbS9ldmVudHMvRXZlbnRUYXJnZXRJbXBsLmgK
LS0tIGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0SW1wbC5oCTIgU2VwIDIwMDUgMTA6MDM6MTAgLTAw
MDAJMS41CisrKyBrZG9tL2V2ZW50cy9FdmVudFRhcmdldEltcGwuaAkyNyBTZXAgMjAwNSAwODow
MTo1OCAtMDAwMApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgS0RPTQogICAgICAgICBFdmVu
dFRhcmdldEltcGwoKTsKICAgICAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXRJbXBsKCk7CiAKLSAg
ICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKERPTVN0cmluZ0ltcGwgKnR5cGUsIEV2ZW50TGlz
dGVuZXJJbXBsICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKERPTVN0cmluZ0ltcGwgKnR5cGUsIEV2ZW50TGlzdGVuZXJJbXBsICps
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50SW1wbCAqZXZ0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoRE9N
U3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoRE9N
U3RyaW5nSW1wbCAqdHlwZSwgRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnRJbXBs
ICpldnQpID0gMDsKIAogICAgICAgICB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50SW1wbCAq
ZXZ0LCBib29sIHVzZUNhcHR1cmUpOwogCkBAIC01NSwxMCArNTUsMTEgQEAgbmFtZXNwYWNlIEtE
T00KICAgICAgICAgICovCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50SW1wbCAqKSB7fQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBRM1B0ckxpc3Q8UmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXI+ICptX2V2ZW50TGlzdGVuZXJzOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgaW50IG1fbGlzdGVuZXJUeXBlczsKLQotICAgICAgICBRM1B0ckxpc3Q8UmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXI+ICptX2V2ZW50TGlzdGVuZXJzOwogICAgIH07CiB9OwogCkluZGV4
OiBrZG9tL2xzL0RPTUltcGxlbWVudGF0aW9uTFNJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0RPTUltcGxlbWVudGF0aW9uTFNJbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9ET01J
bXBsZW1lbnRhdGlvbkxTSW1wbC5jcHAKLS0tIGtkb20vbHMvRE9NSW1wbGVtZW50YXRpb25MU0lt
cGwuY3BwCTggU2VwIDIwMDUgMDg6MDM6MjggLTAwMDAJMS4xCisrKyBrZG9tL2xzL0RPTUltcGxl
bWVudGF0aW9uTFNJbXBsLmNwcAkyNyBTZXAgMjAwNSAwODowMTo1OCAtMDAwMApAQCAtNDQsNiAr
NDQsNyBAQCBET01JbXBsZW1lbnRhdGlvbkxTSW1wbDo6fkRPTUltcGxlbWVudGF0CiAKIExTUGFy
c2VySW1wbCAqRE9NSW1wbGVtZW50YXRpb25MU0ltcGw6OmNyZWF0ZUxTUGFyc2VyKHVuc2lnbmVk
IHNob3J0IG1vZGUsIERPTVN0cmluZ0ltcGwgKnNjaGVtYVR5cGVJbXBsKSBjb25zdAogeworI2lm
bmRlZiBBUFBMRV9DT01QSUxFX0hBQ0sKICAgICBRU3RyaW5nIHNjaGVtYVR5cGUgPSBzY2hlbWFU
eXBlSW1wbCA/IHNjaGVtYVR5cGVJbXBsLT5zdHJpbmcoKSA6IFFTdHJpbmcoKTsKIAogICAgIC8v
IE5PVF9TVVBQT1JURURfRVJSOiBSYWlzZWQgaWYgdGhlIHJlcXVlc3RlZCBtb2RlIG9yIHNjaGVt
YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuCkBAIC01NCw2ICs1NSw5IEBAIExTUGFyc2VySW1wbCAq
RE9NSW1wbGVtZW50YXRpb25MU0ltcGw6OmMKICAgICBMU1BhcnNlckltcGwgKnJldCA9IG5ldyBM
U1BhcnNlckltcGwoKTsKICAgICByZXQtPnNldEFTeW5jKG1vZGUgPT0gTU9ERV9BU1lOQ0hST05P
VVMpOwogICAgIHJldHVybiByZXQ7CisjZWxzZQorICAgIHRocm93IG5ldyBET01FeGNlcHRpb25J
bXBsKE5PVF9TVVBQT1JURURfRVJSKTsKKyNlbmRpZgogfQogCiBMU0lucHV0SW1wbCAqRE9NSW1w
bGVtZW50YXRpb25MU0ltcGw6OmNyZWF0ZUxTSW5wdXQoKSBjb25zdApJbmRleDoga3N2ZzIvZWNt
YS9FY21hLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9lY21hL0VjbWEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEu
NSBrc3ZnMi9lY21hL0VjbWEuY3BwCi0tLSBrc3ZnMi9lY21hL0VjbWEuY3BwCTEgU2VwIDIwMDUg
MDk6Mzk6MTMgLTAwMDAJMS41CisrKyBrc3ZnMi9lY21hL0VjbWEuY3BwCTI3IFNlcCAyMDA1IDA4
OjAyOjAwIC0wMDAwCkBAIC0xMDksMTIgKzEwOSw4IEBAIEVjbWE6On5FY21hKCkKIAogdm9pZCBF
Y21hOjpzZXR1cERvY3VtZW50KEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQpCiB7Ci0gICAg
U1ZHRG9jdW1lbnRJbXBsICpzdmdEb2N1bWVudCA9IGR5bmFtaWNfY2FzdDxTVkdEb2N1bWVudElt
cGwgKj4oZG9jdW1lbnQpOwotICAgIGlmKCFzdmdEb2N1bWVudCkKLSAgICB7ICAgIAotICAgICAg
ICBrZEZhdGFsKCkgPDwgIkVjbWE6OnNldHVwRG9jdW1lbnQgLT4gVGhlIGltcG9zc2libGUgaGFw
cGVuZWQuLi4iIDw8IGVuZGw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKEtE
T006OkRPTVN0cmluZyhkb2N1bWVudC0+bmFtZXNwYWNlVVJJKCkpID09IE5TX1NWRykKKyAgICBT
VkdEb2N1bWVudEltcGwgKnN2Z0RvY3VtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnRJbXBs
ICo+KGRvY3VtZW50KTsKICAgICAKICAgICAvLyBDcmVhdGUgYmFzZSBicmlkZ2UgZm9yIGRvY3Vt
ZW50CiAgICAgU1ZHRG9jdW1lbnQgZG9jT2JqKHN2Z0RvY3VtZW50KTsKSW5kZXg6IGtzdmcyL21p
c2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrc3ZnMi9taXNjL0tTVkdUaW1lU2NoZWR1bGVy
LmNwcAotLS0ga3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHAJOCBTZXAgMjAwNSAwODow
MzozMyAtMDAwMAkxLjYKKysrIGtzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCTI3IFNl
cCAyMDA1IDA4OjAyOjAwIC0wMDAwCkBAIC0yOTYsMTAgKzI5NiwxMCBAQCB2b2lkIFNWR1RpbWVy
Ojpub3RpZnlBbGwoKQogICAgICAgICAvLyBIYW5kbGUgPGFuaW1hdGVUcmFuc2Zvcm0+Li4uCiAg
ICAgICAgIGlmKHRhcmdldFRyYW5zZm9ybXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNWR1N0
eWxlZEVsZW1lbnRJbXBsICpzdHlsZWQgPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudElt
cGwgKj4odGl0LmtleSgpKTsKLSAgICAgICAgICAgIFNWR1RyYW5zZm9ybWFibGVJbXBsICp0cmFu
c2Zvcm0gPSBkeW5hbWljX2Nhc3Q8U1ZHVHJhbnNmb3JtYWJsZUltcGwgKj4odGl0LmtleSgpKTsK
KyAgICAgICAgICAgIFNWR0VsZW1lbnRJbXBsICprZXkgPSB0aXQua2V5KCk7CisgICAgICAgICAg
ICBTVkdUcmFuc2Zvcm1hYmxlSW1wbCAqdHJhbnNmb3JtID0gZHluYW1pY19jYXN0PFNWR1RyYW5z
Zm9ybWFibGVJbXBsICo+KGtleSk7CiAKLSAgICAgICAgICAgIGlmKHN0eWxlZCAmJiB0cmFuc2Zv
cm0pCisgICAgICAgICAgICBpZihrZXkgJiYga2V5LT5pc1N0eWxlZCgpICYmIHRyYW5zZm9ybSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5z
ZXRBbmltVmFsKHRhcmdldFRyYW5zZm9ybXMpOwogCkBAIC0zMDcsNiArMzA3LDcgQEAgdm9pZCBT
VkdUaW1lcjo6bm90aWZ5QWxsKCkKICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxv
Y2FsVHJhbnNmb3JtKHRyYW5zZm9ybS0+dHJhbnNmb3JtKCktPmFuaW1WYWwoKSk7CiAKICAgICAg
ICAgICAgICAgICAvLyAuLi4gdXBkYXRlIGVsZW1lbnQgJiBjaGlsZCBlbGVtZW50cyAuLi4KKyAg
ICAgICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4oa2V5KTsKICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0t
PnVwZGF0ZVN1YnRyZWVNYXRyaWNlcyhzdHlsZWQpOwogCiAgICAgICAgICAgICAgICAgLy8gLi4u
IGFuZCBzd2l0Y2ggYmFjayB0byBiYXNlVmFsIChhbmQgZG8gbm90IHVwZGF0ZSEpCkBAIC0zMzEs
OSArMzMyLDkgQEAgdm9pZCBTVkdUaW1lcjo6bm90aWZ5QWxsKCkKICAgICAvLyBPcHRpbWl6ZWQg
dXBkYXRlIGxvZ2ljICh0byBhdm9pZCA0IHVwZGF0ZXMsIG9uIHRoZSBzYW1lIGVsZW1lbnQpCiAg
ICAgZm9yKHRpdCA9IHRhcmdldE1hcC5iZWdpbigpOyB0aXQgIT0gdGVuZDsgKyt0aXQpCiAgICAg
ewotICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5bGVkID0gZHluYW1pY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnRJbXBsICo+KHRpdC5rZXkoKSk7Ci0gICAgICAgIGlmKHN0eWxlZCkKLSAg
ICAgICAgICAgIHN0eWxlZC0+c2V0Q2hhbmdlZCh0cnVlKTsKKyAgICAgICAgU1ZHRWxlbWVudElt
cGwgKmtleSA9IHRpdC5rZXkoKTsKKyAgICAgICAgaWYoa2V5ICYmIGtleS0+aXNTdHlsZWQoKSkK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KGtleSktPnNl
dENoYW5nZWQodHJ1ZSk7CiAgICAgfQogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50SW1w
bC5jcHAKLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50SW1wbC5jcHAJOCBTZXAgMjAw
NSAwODowMzozNCAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50SW1w
bC5jcHAJMjcgU2VwIDIwMDUgMDg6MDI6MDAgLTAwMDAKQEAgLTg4LDkgKzg4LDkgQEAgU1ZHRWxl
bWVudEltcGwgKlNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsOgogICAgIHsKICAgICAgICAgaWYoIW1f
aHJlZi5pc0VtcHR5KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEtET006OkVsZW1lbnRJbXBs
ICplbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChLRE9NOjpET01TdHJp
bmcoU1ZHVVJJUmVmZXJlbmNlSW1wbDo6Z2V0VGFyZ2V0KG1faHJlZikpLmhhbmRsZSgpKTsKLSAg
ICAgICAgICAgIGlmKGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV90YXJnZXRFbGVtZW50ID0g
ZHluYW1pY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KGVsZW1lbnQpOworICAgICAgICAgICAgS0RP
TTo6RE9NU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlSW1wbDo6Z2V0VGFyZ2V0KG1f
aHJlZik7CisgICAgICAgICAgICBLRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCA9IG93bmVyRG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaGFuZGxlKCkpOworICAgICAgICAgICAg
bV90YXJnZXRFbGVtZW50ID0gc3ZnX2R5bmFtaWNfY2FzdChlbGVtZW50KTsKICAgICAgICAgfQog
ICAgICAgICBlbHNlIGlmKHBhcmVudE5vZGUoKSkKICAgICAgICAgewpAQCAtNDk4LDcgKzQ5OCwx
MCBAQCBLRE9NOjpET01TdHJpbmdJbXBsICpTVkdBbmltYXRpb25FbGVtZW50CiAgICAgaWYoIXRh
cmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgU1ZHU3R5bGVkRWxl
bWVudEltcGwgKnN0eWxlZCA9IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0
YXJnZXRFbGVtZW50KCkpOworICAgIFNWR0VsZW1lbnRJbXBsICp0YXJnZXQgPSB0YXJnZXRFbGVt
ZW50KCk7CisgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IE5VTEw7CisgICAgaWYg
KHRhcmdldCAmJiB0YXJnZXQtPmlzU3R5bGVkKCkpCisgICAgICAgIHN0eWxlZCA9IHN0YXRpY19j
YXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHRhcmdldCk7CiAgICAgS0RPTTo6Q0RGSW50ZXJm
YWNlICppbnRlcmZhY2UgPSAoc3R5bGVkID8gc3R5bGVkLT5vd25lckRvY3VtZW50KCktPmltcGxl
bWVudGF0aW9uKCktPmNkZkludGVyZmFjZSgpIDogMCk7CiAgICAgCiAgICAgS0RPTTo6RE9NU3Ry
aW5nSW1wbCAqcmV0ID0gMDsKQEAgLTU0NSw3ICs1NDgsOSBAQCB2b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnRJbXBsOjpzZXRUYXJnZXRBCiAgICAgaWYoIXRhcmdldCB8fCAhbmFtZSB8fCAhdmFsdWUp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5bGVk
ID0gZHluYW1pY19jYXN0PFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHRhcmdldCk7CisgICAgU1ZH
U3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IE5VTEw7CisgICAgaWYgKHRhcmdldCAmJiB0YXJn
ZXQtPmlzU3R5bGVkKCkpCisgICAgICAgIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICo+KHRhcmdldCk7CiAgICAgS0RPTTo6Q0RGSW50ZXJmYWNlICppbnRlcmZhY2Ug
PSAoc3R5bGVkID8gc3R5bGVkLT5vd25lckRvY3VtZW50KCktPmltcGxlbWVudGF0aW9uKCktPmNk
ZkludGVyZmFjZSgpIDogMCk7CiAKICAgICBFQXR0cmlidXRlVHlwZSBhdHRyaWJ1dGVUeXBlID0g
dHlwZTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBrc3ZnMi9zdmcvU1ZHRWxlbWVu
dEltcGwuaAotLS0ga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmgJOCBTZXAgMjAwNSAwODowMzoz
NSAtMDAwMAkxLjYKKysrIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5oCTI3IFNlcCAyMDA1IDA4
OjAyOjAxIC0wMDAwCkBAIC00NCw3ICs0NCw5IEBAIG5hbWVzcGFjZSBLU1ZHCiAgICAgcHVibGlj
OgogICAgICAgICBTVkdFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpO
b2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CiAgICAgICAgIHZp
cnR1YWwgflNWR0VsZW1lbnRJbXBsKCk7Ci0KKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1NWR0VsZW1lbnQoKSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKICAgICAg
ICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkKEtET006OkRPTVN0cmluZ0ltcGwgKmZlYXR1cmUs
IEtET006OkRPTVN0cmluZ0ltcGwgKnZlcnNpb24pIGNvbnN0OwogCiAgICAgICAgIC8vICdTVkdF
bGVtZW50JyBmdW5jdGlvbnMKQEAgLTcwLDYgKzcyLDkgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAg
ICAgdmlydHVhbCBRU3RyaW5nIGFkanVzdFZpZXdwb3J0Q2xpcHBpbmcoKSBjb25zdCB7IHJldHVy
biBRU3RyaW5nOjpudWxsOyB9CiAKICAgICAgICAgU1ZHRG9jdW1lbnRJbXBsICpnZXREb2N1bWVu
dCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHByaXZhdGU6CiAjaWYgMApAQCAtOTIsNiArOTcsMjkg
QEAgYm9vbCBUOjpvcGVyYXRvciE9KGNvbnN0IFQgJm90aGVyKSBjb25zdAogICAgIHJldHVybiAh
b3BlcmF0b3I9PShvdGhlcik7IFwKIH0gXAogCisKKy8vIEhlbHBlciBmb3IgRE9NTm9kZSAtPiBT
VkdFbGVtZW50IGNvbnZlcnNpb24KKyNpbmNsdWRlIDxrZG9tL2tkb20uaD4KKyNpbmNsdWRlIDxr
ZG9tL05hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGtkb20vRE9NU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBLU1ZHIHsKKyAgICBzdGF0aWMgaW5saW5lIFNWR0VsZW1lbnRJbXBsICpzdmdfZHluYW1pY19j
YXN0KEtET006Ok5vZGVJbXBsICpub2RlKSB7CisgICAgICAgIFNWR0VsZW1lbnRJbXBsICpzdmdF
bGVtZW50ID0gTlVMTDsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgICAgIGlmIChub2RlICYmIG5v
ZGUtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICAgICAgc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnRJbXBsICo+KG5vZGUpOworI2Vsc2UKKyAgICAgICAgaWYgKG5vZGUgJiYgKG5v
ZGUtPm5vZGVUeXBlKCkgPT0gS0RPTTo6RUxFTUVOVF9OT0RFKSkgeworICAgICAgICAgICAgS0RP
TTo6RWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxLRE9NOjpFbGVtZW50SW1wbCAq
Pihub2RlKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIChLRE9NOjpET01TdHJpbmcoZWxl
bWVudC0+bmFtZXNwYWNlVVJJKCkpID09IEtET006Ok5TX1NWRykpCisgICAgICAgICAgICAgICAg
c3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KGVsZW1lbnQpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN2Z0VsZW1lbnQ7CisgICAgfQorfTsKKwog
I2VuZGlmCiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzSW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41
IGtzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJbXBsLmNwcAot
LS0ga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwuY3Bw
CTEgU2VwIDIwMDUgMDk6Mzk6MTUgLTAwMDAJMS41CisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbC5jcHAJMjcgU2VwIDIwMDUgMDg6MDI6MDEgLTAw
MDAKQEAgLTU5LDI0ICs1OSwyMSBAQCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXNJbXBsCiBTVkdBbmltYXRlZExlbmd0aEltcGwgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlc0ltcGw6OngoKSBjb25zdAogewogICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUi
IHdlcmUgc3BlY2lmaWVkLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250ZXh0
ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHRoaXMpOwotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aEltcGw+KG1feCwgY29udGV4dCwg
TE1fV0lEVEgpOworICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aEltcGw+
KG1feCwgdGhpcywgTE1fV0lEVEgpOwogfQogCiBTVkdBbmltYXRlZExlbmd0aEltcGwgKlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6OnkoKSBjb25zdAogewogICAgIC8v
IFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMg
YXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGNvbnN0IFNWR1N0eWxl
ZEVsZW1lbnRJbXBsICpjb250ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnRJbXBsICo+KHRoaXMpOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aEltcGw+KG1feSwgY29udGV4dCwgTE1fSEVJR0hUKTsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPihtX3ksIHRoaXMsIExNX0hFSUdIVCk7CiB9CiAKIFNWR0Fu
aW1hdGVkTGVuZ3RoSW1wbCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1w
bDo6d2lkdGgoKSBjb25zdAogewotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpjb250
ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHRoaXMpOwog
ICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZl
Y3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiAgICAgaWYoIW1f
d2lkdGgpCiAgICAgewotICAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBs
PihtX3dpZHRoLCBjb250ZXh0LCBMTV9XSURUSCk7CisgICAgICAgIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoSW1wbD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgpOwogICAgICAgICBtX3dp
ZHRoLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcoS0RPTTo6RE9NU3RyaW5nKCIxMDAlIiku
aGFuZGxlKCkpOwogICAgICAgICByZXR1cm4gbV93aWR0aDsKICAgICB9CkBAIC04NiwxMSArODMs
MTAgQEAgU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsICpTVkdGaWx0ZXJQcmltaXRpdgogCiBTVkdBbmlt
YXRlZExlbmd0aEltcGwgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGw6
OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRl
eHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKj4odGhpcyk7CiAg
ICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVj
dCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KICAgICBpZighbV9o
ZWlnaHQpCiAgICAgewotICAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBs
PihtX2hlaWdodCwgY29udGV4dCwgTE1fSEVJR0hUKTsKKyAgICAgICAgbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRMZW5ndGhJbXBsPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hUKTsKICAgICAgICAg
bV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhLRE9NOjpET01TdHJpbmcoIjEw
MCUiKS5oYW5kbGUoKSk7CiAgICAgICAgIHJldHVybiBtX2hlaWdodDsKICAgICB9CkBAIC0xMDAs
OCArOTYsNyBAQCBTVkdBbmltYXRlZExlbmd0aEltcGwgKlNWR0ZpbHRlclByaW1pdGl2CiAKIFNW
R0FuaW1hdGVkU3RyaW5nSW1wbCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
SW1wbDo6cmVzdWx0KCkgY29uc3QKIHsKLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAq
Y29udGV4dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0aGlz
KTsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsPihtX3Jlc3Vs
dCwgY29udGV4dCk7CisgICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nSW1w
bD4obV9yZXN1bHQsIHRoaXMpOwogfQogCiB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlc0ltcGw6OnBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIp
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKLS0tIGtz
dmcyL3N2Zy9TVkdIZWxwZXIuY3BwCTggU2VwIDIwMDUgMDg6MDM6MzUgLTAwMDAJMS41CisrKyBr
c3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAkyNyBTZXAgMjAwNSAwODowMjowMSAtMDAwMApAQCAtNDEs
OSArNDEsOSBAQCBmbG9hdCBTVkdIZWxwZXI6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KGZsCiAgICAg
aWYoIXZpZXdwb3J0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIDAuMDsKICAKLSAgICBjb25zdCBT
VkdTVkdFbGVtZW50SW1wbCAqc3ZnID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1lbnRJ
bXBsICo+KHZpZXdwb3J0RWxlbWVudCk7Ci0gICAgaWYoc3ZnKQorICAgIGlmKHZpZXdwb3J0RWxl
bWVudC0+aXNTVkcoKSkKICAgICB7CisgICAgICAgIGNvbnN0IFNWR1NWR0VsZW1lbnRJbXBsICpz
dmcgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdTVkdFbGVtZW50SW1wbCAqPih2aWV3cG9ydEVsZW1l
bnQpOwogICAgICAgICBLRE9NOjpET01TdHJpbmcgdmlld0JveCgidmlld0JveCIpOwogICAgICAg
ICBpZihzdmctPmhhc0F0dHJpYnV0ZSh2aWV3Qm94LmhhbmRsZSgpKSkKICAgICAgICAgewpJbmRl
eDoga3N2ZzIvc3ZnL1NWR0xvY2F0YWJsZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9TVkdMb2NhdGFibGVJbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQga3N2ZzIvc3ZnL1NWR0xvY2F0YWJs
ZUltcGwuY3BwCi0tLSBrc3ZnMi9zdmcvU1ZHTG9jYXRhYmxlSW1wbC5jcHAJMSBTZXAgMjAwNSAw
NzozNTo0NCAtMDAwMAkxLjQKKysrIGtzdmcyL3N2Zy9TVkdMb2NhdGFibGVJbXBsLmNwcAkyNyBT
ZXAgMjAwNSAwODowMjowMSAtMDAwMApAQCAtMTA0LDEwICsxMDQsOSBAQCBTVkdNYXRyaXhJbXBs
ICpTVkdMb2NhdGFibGVJbXBsOjpnZXRDVE0oCiAKICAgICBTVkdNYXRyaXhJbXBsICpjdG0gPSBT
VkdTVkdFbGVtZW50SW1wbDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAKLSAgICBLRE9NOjpOb2RlSW1w
bCAqcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgIGlmKHBhcmVudCAmJiBwYXJl
bnQtPm5vZGVUeXBlKCkgPT0gS0RPTTo6RUxFTUVOVF9OT0RFKQorICAgIFNWR0VsZW1lbnRJbXBs
ICpwYXJlbnRFbGVtZW50ID0gc3ZnX2R5bmFtaWNfY2FzdChlbGVtZW50LT5wYXJlbnROb2RlKCkp
OworICAgIGlmKHBhcmVudEVsZW1lbnQpCiAgICAgewotICAgICAgICBTVkdFbGVtZW50SW1wbCAq
cGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KHBhcmVudCk7CiAg
ICAgICAgIFNWR0xvY2F0YWJsZUltcGwgKnBhcmVudExvY2F0YWJsZSA9IGR5bmFtaWNfY2FzdDxT
VkdMb2NhdGFibGVJbXBsICo+KHBhcmVudEVsZW1lbnQpOwogICAgICAgICBpZihwYXJlbnRMb2Nh
dGFibGUpCiAgICAgICAgIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL3N2Zy9T
VkdQYXR0ZXJuRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAt
cCAtdSAtcjEuNiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnRJbXBsLmNwcAotLS0ga3N2ZzIv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1wbC5jcHAJOCBTZXAgMjAwNSAwODowMzozNiAtMDAwMAkx
LjYKKysrIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudEltcGwuY3BwCTI3IFNlcCAyMDA1IDA4
OjAyOjAyIC0wMDAwCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudElt
cGw6Om5vdGlmeUF0dHJpYgogICAgIC8vIEZpbmQgZmlyc3QgcGF0dGVybiBkZWYgdGhhdCBoYXMg
Y2hpbGRyZW4KICAgICBjb25zdCBLRE9NOjpFbGVtZW50SW1wbCAqdGFyZ2V0ID0gdGhpczsKIAot
ICAgIGNvbnN0IEtET006Ok5vZGVJbXBsICp0ZXN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0RPTTo6
Tm9kZUltcGwgKj4odGFyZ2V0KTsKKyAgICBjb25zdCBLRE9NOjpOb2RlSW1wbCAqdGVzdCA9IHRo
aXM7CiAgICAgd2hpbGUodGVzdCAmJiAhdGVzdC0+aGFzQ2hpbGROb2RlcygpKQogICAgIHsKICAg
ICAgICAgUVN0cmluZyByZWYgPSBLRE9NOjpET01TdHJpbmcoaHJlZigpLT5iYXNlVmFsKCkpLnN0
cmluZygpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtzdmcyL3N2Zy9T
VkdTVkdFbGVtZW50SW1wbC5oCi0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudEltcGwuaAk4IFNl
cCAyMDA1IDA4OjAzOjM2IC0wMDAwCTEuNgorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnRJbXBs
LmgJMjcgU2VwIDIwMDUgMDg6MDI6MDIgLTAwMDAKQEAgLTY0LDYgKzY0LDggQEAgbmFtZXNwYWNl
IEtTVkcKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR1NWR0VsZW1lbnRJbXBsKEtET006OkRvY3Vt
ZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAq
cHJlZml4KTsKICAgICAgICAgdmlydHVhbCB+U1ZHU1ZHRWxlbWVudEltcGwoKTsKKyAgICAgICAg
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWRygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgICAgICAvLyAnU1ZHU1ZHRWxlbWVudCcgZnVuY3Rpb25zCiAgICAgICAgIFNWR0FuaW1hdGVk
TGVuZ3RoSW1wbCAqeCgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9z
dmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtcCAtdSAtcjEuNiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCi0tLSBrc3Zn
Mi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCTggU2VwIDIwMDUgMDg6MDM6MzcgLTAwMDAJ
MS42CisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuY3BwCTI3IFNlcCAyMDA1IDA4
OjAyOjAyIC0wMDAwCkBAIC0yMTcsMjIgKzIxNywyMyBAQCB2b2lkIFNWR1N0eWxlZEVsZW1lbnRJ
bXBsOjphdHRhY2goKQogICAgICAgICAgICAgZmluYWxpemVTdHlsZShyZW5kZXJpbmdTdHlsZSk7
CiAKICAgICAgICAgICAgIC8vIEFwcGx5IHRyYW5zZm9ybWF0aW9ucyBpZiBwb3NzaWJsZS4uLgot
ICAgICAgICAgICAgU1ZHTG9jYXRhYmxlSW1wbCAqdHJhbnNmb3JtYWJsZSA9IGR5bmFtaWNfY2Fz
dDxTVkdMb2NhdGFibGVJbXBsICo+KHRoaXMpOwotICAgICAgICAgICAgaWYodHJhbnNmb3JtYWJs
ZSkKKyAgICAgICAgICAgIFNWR0xvY2F0YWJsZUltcGwgKmxvY2F0YWJsZSA9IGR5bmFtaWNfY2Fz
dDxTVkdMb2NhdGFibGVJbXBsICo+KHRoaXMpOworICAgICAgICAgICAgaWYobG9jYXRhYmxlKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNWR01hdHJpeEltcGwgKmN0bSA9IHRyYW5z
Zm9ybWFibGUtPmdldFNjcmVlbkNUTSgpOworICAgICAgICAgICAgICAgIFNWR01hdHJpeEltcGwg
KmN0bSA9IGxvY2F0YWJsZS0+Z2V0U2NyZWVuQ1RNKCk7CiAgICAgICAgICAgICAgICAgcmVuZGVy
aW5nU3R5bGUtPnNldE9iamVjdE1hdHJpeChLQ2FudmFzTWF0cml4KGN0bS0+cW1hdHJpeCgpKSk7
CiAgICAgICAgICAgICAgICAgY3RtLT5kZXJlZigpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqcGFyZW50ID0gZHluYW1pY19jYXN0PFNWR1N0eWxl
ZEVsZW1lbnRJbXBsICo+KHBhcmVudE5vZGUoKSk7Ci0gICAgICAgICAgICBpZihwYXJlbnQgJiYg
cGFyZW50LT5jYW52YXNJdGVtKCkgJiYgcGFyZW50LT5hbGxvd0F0dGFjaENoaWxkcmVuKHRoaXMp
KQotICAgICAgICAgICAgICAgIHBhcmVudC0+Y2FudmFzSXRlbSgpLT5hcHBlbmRJdGVtKG1fY2Fu
dmFzSXRlbSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwYXJlbnQpIHsKKyAgICAgICAgICAgIFNW
R0VsZW1lbnRJbXBsICpwYXJlbnRFbGVtZW50ID0gc3ZnX2R5bmFtaWNfY2FzdChwYXJlbnROb2Rl
KCkpOworICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZFBhcmVudCA9IE5V
TEw7CisgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5pc1N0
eWxlZCgpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZWRQYXJlbnQgPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRFbGVtZW50SW1wbCAqPihwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgICAgIGlmKHN0
eWxlZFBhcmVudCAmJiBzdHlsZWRQYXJlbnQtPmNhbnZhc0l0ZW0oKSAmJiBzdHlsZWRQYXJlbnQt
PmFsbG93QXR0YWNoQ2hpbGRyZW4odGhpcykpCisgICAgICAgICAgICAgICAgc3R5bGVkUGFyZW50
LT5jYW52YXNJdGVtKCktPmFwcGVuZEl0ZW0obV9jYW52YXNJdGVtKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHN0eWxlZFBhcmVudCkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGV4
aXN0cyB1bnRpbCB3ZSBjYW4gZmluZCBhIGJldHRlciB3YXkgdG8gY3JlYXRlIHRoZSByb290IG5v
ZGUuIC0tIGVjcyA4LzcvMDUKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBSUxF
RCBDQU5WQVMgSU5TRVJUSU9OOiA8JXM+LCBsZWFraW5nICVwXG4iLCBLRE9NOjpET01TdHJpbmco
bm9kZU5hbWUoKSkuc3RyaW5nKCkuYXNjaWkoKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgLy9k
ZWxldGUgbV9jYW52YXNJdGVtOyAvLyBGSVhNRSBsZWFraW5nIGl0ZW1zIGhlcmUsIHVudGlsIHdl
IGZpbmQgYSBmaXggZm9yIHBhdHRlcm5zLgotICAgICAgICAgICAgICAgIC8vbV9jYW52YXNJdGVt
ID0gTlVMTDsKICAgICAgICAgICAgIH0KIAogI2lmbmRlZiBBUFBMRV9DT01QSUxFX0hBQ0sKQEAg
LTI2MSw5ICsyNjIsMTMgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50SW1wbDo6ZGV0YWNoKCkKIAog
ICAgIGlmKG1fY2FudmFzSXRlbSkKICAgICB7Ci0gICAgICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBs
ICpwYXJlbnQgPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4ocGFyZW50Tm9k
ZSgpKTsKLSAgICAgICAgaWYocGFyZW50ICYmIHBhcmVudC0+Y2FudmFzSXRlbSgpKQotICAgICAg
ICAgICAgcGFyZW50LT5jYW52YXNJdGVtKCktPnJlbW92ZUl0ZW0obV9jYW52YXNJdGVtKTsKKyAg
ICAgICAgU1ZHRWxlbWVudEltcGwgKnBhcmVudCA9IHN2Z19keW5hbWljX2Nhc3QocGFyZW50Tm9k
ZSgpKTsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IE5VTEw7CisgICAg
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1N0eWxlZCgpKQorICAgICAgICAgICAgc3R5bGVk
ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4ocGFyZW50KTsKKyAgICAgICAg
IAorICAgICAgICBpZihzdHlsZWQgJiYgc3R5bGVkLT5jYW52YXNJdGVtKCkpCisgICAgICAgICAg
ICBzdHlsZWQtPmNhbnZhc0l0ZW0oKS0+cmVtb3ZlSXRlbShtX2NhbnZhc0l0ZW0pOwogICAgIH0K
IAogICAgIGtkRGVidWcoMjYwMDIpIDw8ICJbU1ZHU3R5bGVkRWxlbWVudEltcGw6OmRldGFjaF0g
RGV0YWNoZWQgY2FudmFzIGl0ZW06ICIgPDwgbV9jYW52YXNJdGVtIDw8IGVuZGw7CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnRJbXBsLmgKLS0tIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCTEgU2VwIDIw
MDUgMDk6Mzk6MTcgLTAwMDAJMS41CisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudEltcGwu
aAkyNyBTZXAgMjAwNSAwODowMjowMiAtMDAwMApAQCAtNDYsNiArNDYsOCBAQCBuYW1lc3BhY2Ug
S1NWRwogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwoS0RPTTo6RG9j
dW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBs
ICpwcmVmaXgpOwogICAgICAgICB2aXJ0dWFsIH5TVkdTdHlsZWRFbGVtZW50SW1wbCgpOworICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdHlsYWJsZScgZnVuY3Rpb25zCiAgICAgICAgIHZpcnR1
YWwgU1ZHQW5pbWF0ZWRTdHJpbmdJbXBsICpjbGFzc05hbWUoKSBjb25zdDsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdVc2VFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnRJbXBs
LmNwcAotLS0ga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcAkxIFNlcCAyMDA1IDA5OjM5
OjE3IC0wMDAwCTEuNQorKysga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcAkyNyBTZXAg
MjAwNSAwODowMjowMiAtMDAwMApAQCAtMTI0LDkgKzEyNCwxMCBAQCB2b2lkIFNWR1VzZUVsZW1l
bnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShLCiB2b2lkIFNWR1VzZUVsZW1lbnRJbXBsOjpjbG9zZSgp
CiB7CiAgICAgUVN0cmluZyByZWYgPSBLRE9NOjpET01TdHJpbmcoaHJlZigpLT5iYXNlVmFsKCkp
LnN0cmluZygpOwotICAgIFFTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2VJbXBsOjpn
ZXRUYXJnZXQocmVmKTsKLSAgICBTVkdFbGVtZW50SW1wbCAqdGFyZ2V0ID0gZHluYW1pY19jYXN0
PFNWR0VsZW1lbnRJbXBsICo+KG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoS0RPTTo6
RE9NU3RyaW5nKHRhcmdldElkKS5oYW5kbGUoKSkpOwotICAgIGlmKCF0YXJnZXQpCisgICAgS0RP
TTo6RE9NU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlSW1wbDo6Z2V0VGFyZ2V0KHJl
Zik7CisgICAgS0RPTTo6RWxlbWVudEltcGwgKnRhcmdldEVsZW1lbnQgPSBvd25lckRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmhhbmRsZSgpKTsKKyAgICBTVkdFbGVtZW50SW1w
bCAqdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKKyAgICBpZiAoIXRh
cmdldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+
dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4269</attachid>
            <date>2005-10-09 13:44:18 -0700</date>
            <delta_ts>2005-10-09 13:44:18 -0700</delta_ts>
            <desc>Various dynamic_cast fixes</desc>
            <filename>dynamic_cast_fixes.diff</filename>
            <type>text/plain</type>
            <size>81083</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IG1pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1pc2MvS1NW
R1RpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBtaXNjL0tTVkdUaW1lU2No
ZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIlNW
R0RvY3VtZW50SW1wbC5oIgogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLm1vYyIKICNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1hYmxlSW1wbC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnRJ
bXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgiCiAj
aW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb25JbXBsLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJ
bXBsLmgiCkBAIC0yOTYsMTAgKzI5Niw5IEBACiAgICAgICAgIC8vIEhhbmRsZSA8YW5pbWF0ZVRy
YW5zZm9ybT4uLi4KICAgICAgICAgaWYodGFyZ2V0VHJhbnNmb3JtcykKICAgICAgICAgewotICAg
ICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IGR5bmFtaWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50SW1wbCAqPih0aXQua2V5KCkpOwotICAgICAgICAgICAgU1ZHVHJhbnNmb3Jt
YWJsZUltcGwgKnRyYW5zZm9ybSA9IGR5bmFtaWNfY2FzdDxTVkdUcmFuc2Zvcm1hYmxlSW1wbCAq
Pih0aXQua2V5KCkpOworICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJ
bXBsICp0cmFuc2Zvcm0gPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnRJbXBsICo+KHRpdC5rZXkoKSk7CiAKLSAgICAgICAgICAgIGlmKHN0eWxlZCAmJiB0cmFuc2Zv
cm0pCisgICAgICAgICAgICBpZih0cmFuc2Zvcm0pCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgdHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+c2V0QW5pbVZhbCh0YXJnZXRUcmFuc2Zvcm1z
KTsKIApAQCAtMzA3LDcgKzMwNiw3IEBACiAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRh
dGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5hbmltVmFsKCkpOwogCiAg
ICAgICAgICAgICAgICAgLy8gLi4uIHVwZGF0ZSBlbGVtZW50ICYgY2hpbGQgZWxlbWVudHMgLi4u
Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRhdGVTdWJ0cmVlTWF0cmljZXMoc3R5bGVk
KTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnVwZGF0ZVN1YnRyZWVNYXRyaWNlcyh0cmFu
c2Zvcm0pOwogCiAgICAgICAgICAgICAgICAgLy8gLi4uIGFuZCBzd2l0Y2ggYmFjayB0byBiYXNl
VmFsIChhbmQgZG8gbm90IHVwZGF0ZSEpCiAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRh
dGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5iYXNlVmFsKCkpOwpJbmRl
eDogc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBzdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSA8a2RlYnVnLmg+CisjaW5jbHVkZSA8cXJlZ2V4
cC5oPgorI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CisKKyNpbmNsdWRlIDxrZG9tL2NvcmUvQXR0
ckltcGwuaD4KKworI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhcy5oPgorI2luY2x1ZGUgPGtjYW52
YXMvS0NhbnZhc0l0ZW0uaD4KKworI2luY2x1ZGUgInN2Z2F0dHJzLmgiCisjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHTWF0cml4SW1wbC5oIgorI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50SW1wbC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRE9NSW1w
bGVtZW50YXRpb25JbXBsLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0SW1w
bC5oIgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnRJbXBsOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoS0RPTTo6RG9jdW1l
bnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpw
cmVmaXgpCis6IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1RyYW5z
Zm9ybWFibGVJbXBsKCkKK3sKKyAgICBtX3RyYW5zZm9ybSA9IDA7CisgICAgbV9sb2NhbE1hdHJp
eCA9IDA7Cit9CisKK1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6flNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbCgpCit7CisgICAgaWYobV90cmFuc2Zvcm0pCisgICAg
ICAgIG1fdHJhbnNmb3JtLT5kZXJlZigpOworICAgIGlmKG1fbG9jYWxNYXRyaXgpCisgICAgICAg
IG1fbG9jYWxNYXRyaXgtPmRlcmVmKCk7Cit9CisKK1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdElt
cGwgKlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6dHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0SW1wbD4o
bV90cmFuc2Zvcm0sIHRoaXMpOworfQorCitTVkdNYXRyaXhJbXBsICpTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudEltcGw6OmxvY2FsTWF0cml4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHTWF0cml4SW1wbD4obV9sb2NhbE1hdHJpeCk7Cit9CisKK1NWR01hdHJpeElt
cGwgKlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6Z2V0Q1RNKCkgY29uc3QKK3sK
KyAgICBTVkdNYXRyaXhJbXBsICpjdG0gPSBTVkdMb2NhdGFibGVJbXBsOjpnZXRDVE0odGhpcyk7
CisKKyAgICBpZihtX2xvY2FsTWF0cml4KQorICAgICAgICBjdG0tPm11bHRpcGx5KG1fbG9jYWxN
YXRyaXgpOworCisgICAgcmV0dXJuIGN0bTsKK30KKworU1ZHTWF0cml4SW1wbCAqU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsOjpnZXRTY3JlZW5DVE0oKSBjb25zdAoreworICAgIFNW
R01hdHJpeEltcGwgKmN0bSA9IFNWR0xvY2F0YWJsZUltcGw6OmdldFNjcmVlbkNUTSh0aGlzKTsK
KworICAgIGlmKG1fbG9jYWxNYXRyaXgpCisgICAgICAgIGN0bS0+bXVsdGlwbHkobV9sb2NhbE1h
dHJpeCk7CisKKyAgICByZXR1cm4gY3RtOworfQorCit2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50SW1wbDo6dXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdEltcGwg
KmxvY2FsVHJhbnNmb3JtcykKK3sKKyAgICAvLyBVcGRhdGUgY2FjaGVkIGxvY2FsIG1hdHJpeAor
ICAgIFNWR1RyYW5zZm9ybUltcGwgKmxvY2FsVHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm1zLT5j
b25jYXRlbmF0ZSgpOworICAgIGlmKGxvY2FsVHJhbnNmb3JtKQorICAgIHsKKyAgICAgICAgbG9j
YWxUcmFuc2Zvcm0tPnJlZigpOworICAgICAgICAKKyAgICAgICAgS0RPTV9TQUZFX1NFVChtX2xv
Y2FsTWF0cml4LCBsb2NhbFRyYW5zZm9ybS0+bWF0cml4KCkpOworCisgICAgICAgIGxvY2FsVHJh
bnNmb3JtLT5kZXJlZigpOworICAgIH0KK30KKwordm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudEltcGw6OnVwZGF0ZVN1YnRyZWVNYXRyaWNlcyhLRE9NOjpOb2RlSW1wbCAqbm9kZSkK
K3sKKyAgICBpZighbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRmlyc3QgdXBkYXRl
IGxvY2FsIG1hdHJpeC4uLgorICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsICpzdHlsZWQgPSBkeW5h
bWljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudEltcGwgKj4obm9kZSk7CisgICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnRJbXBsICp0cmFuc2Zvcm0gPSBkeW5hbWljX2Nhc3Q8U1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsICo+KG5vZGUpOworCisgICAgaWYoc3R5bGVkICYmIHRy
YW5zZm9ybSAmJiB0cmFuc2Zvcm0tPmxvY2FsTWF0cml4KCkpCisgICAgeworICAgICAgICBRTWF0
cml4IHVzZU1hdHJpeCA9IHRyYW5zZm9ybS0+bG9jYWxNYXRyaXgoKS0+cW1hdHJpeCgpOworCisg
ICAgICAgIEtET006Ok5vZGVJbXBsICpwYXJlbnRFbGVtZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICBpZihwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQtPmlkKCkgPT0gSURf
RykKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gdHJhbnNmb3Jt
LT5nZXRDVE0oKTsKKyAgICAgICAgICAgIGN0bS0+cmVmKCk7CisKKyAgICAgICAgICAgIHVzZU1h
dHJpeCAqPSBjdG0tPnFtYXRyaXgoKTsKKworICAgICAgICAgICAgY3RtLT5kZXJlZigpOworICAg
ICAgICB9CisKKyAgICAgICAgc3R5bGVkLT51cGRhdGVDVE0odXNlTWF0cml4KTsKKyAgICB9CisK
KyAgICAvLyAuLi4gdGhlbiB1cGRhdGUgdGhlIHdob2xlIHN1YnRyZWUsIGlmIHBvc3NpYmxlLgor
ICAgIGZvcihLRE9NOjpOb2RlSW1wbCAqbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBu
ID0gbi0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlU3VidHJlZU1hdHJpY2VzKG4pOwor
fQorCit2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1
dGUoS0RPTTo6QXR0cmlidXRlSW1wbCAqYXR0cikKK3sKKyAgICBpbnQgaWQgPSAoYXR0ci0+aWQo
KSAmIE5vZGVJbXBsX0lkTG9jYWxNYXNrKTsKKyAgICBpZihpZCA9PSBBVFRSX1RSQU5TRk9STSkK
KyAgICB7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3RJbXBsICpsb2NhbFRyYW5zZm9ybXMgPSB0
cmFuc2Zvcm0oKS0+YmFzZVZhbCgpOworCisgICAgICAgIGxvY2FsVHJhbnNmb3Jtcy0+Y2xlYXIo
KTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsOjpwYXJzZVRyYW5z
Zm9ybUF0dHJpYnV0ZShsb2NhbFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkpOworCisgICAgICAg
IC8vIFVwZGF0ZSBjYWNoZWQgbG9jYWwgbWF0cml4CisgICAgICAgIHVwZGF0ZUxvY2FsVHJhbnNm
b3JtKGxvY2FsVHJhbnNmb3Jtcyk7CisKKyAgICAgICAgdXBkYXRlU3VidHJlZU1hdHJpY2VzKHRo
aXMpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIFNWR1N0eWxlZEVsZW1lbnRJbXBsOjpwYXJz
ZUF0dHJpYnV0ZShhdHRyKTsKK30KKworU1ZHRWxlbWVudEltcGwgKlNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50SW1wbDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybWFibGVJbXBsOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMp
OworfQorCitTVkdFbGVtZW50SW1wbCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBs
OjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNWR1RyYW5z
Zm9ybWFibGVJbXBsOjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCh0aGlzKTsKK30KKworU1ZHUmVj
dEltcGwgKlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6Z2V0QkJveCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGVJbXBsOjpnZXRCQm94KHRoaXMpOworfQor
CitTVkdNYXRyaXhJbXBsICpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGw6OmdldFRy
YW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogc3ZnL1NWR0dFbGVtZW50SW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdHRWxlbWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYy
KQorKysgc3ZnL1NWR0dFbGVtZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxOSArMjMs
MTcgQEAKICNpZm5kZWYgS1NWR19TVkdHRWxlbWVudEltcGxfSAogI2RlZmluZSBLU1ZHX1NWR0dF
bGVtZW50SW1wbF9ICiAKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIlNWR1Rl
c3RzSW1wbC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZUltcGwuaCIKICNpbmNsdWRlICJTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFi
bGVJbXBsLmgiCiAKIG5hbWVzcGFjZSBLU1ZHCiB7Ci0gICAgY2xhc3MgU1ZHR0VsZW1lbnRJbXBs
IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnRJbXBsLAorICAgIGNsYXNzIFNWR0dFbGVtZW50SW1w
bCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzSW1wbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlSW1wbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGVJbXBsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJ
bXBsCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHR0VsZW1lbnRJbXBsKEtET006OkRv
Y3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1w
bCAqcHJlZml4KTsKSW5kZXg6IHN2Zy9TVkdSZWN0RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBzdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdS
ZWN0RWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTggKzI1LDE2IEBACiAKICNp
bmNsdWRlICJTVkdUZXN0c0ltcGwuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2VJbXBsLmgiCi0j
aW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudEltcGwuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlSW1wbC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5o
IgogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLmgiCiAKIG5hbWVz
cGFjZSBLU1ZHCiB7CiAgICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsOwotICAgIGNsYXNz
IFNWR1JlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwKKyAgICBj
bGFzcyBTVkdSZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0
c0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFj
ZUltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdUcmFuc2Zvcm1hYmxlSW1wbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbAogICAgIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFNWR1JlY3RFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBL
RE9NOjpOb2RlSW1wbDo6SWQgaWQsICBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOwpJbmRl
eDogc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2
Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysg
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsMTIgKzEyNywxMiBAQAogewogICAgIFFTdHJpbmcgcmVmID0gS0RPTTo6RE9NU3RyaW5nKGhy
ZWYoKS0+YmFzZVZhbCgpKS5zdHJpbmcoKTsKICAgICBib29sIGJib3ggPSAoZ3JhZGllbnRVbml0
cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7Ci0gICAg
CisgCiAgICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgeTEo
KS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgeDIoKS0+YmFzZVZhbCgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVs
YXRpdmUoYmJveCk7Ci0gICAgCisgCiAgICAgZmxvYXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3gyID0g
eDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7
CiAKSW5kZXg6IHN2Zy9TVkdUcmFuc2Zvcm1hYmxlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlSW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHVHJhbnNm
b3JtYWJsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5jbHVk
ZSAiU1ZHTG9jYXRhYmxlSW1wbC5oIgogCi1jbGFzcyBRTWF0cml4OwotCiBuYW1lc3BhY2UgS0RP
TQogewogICAgIGNsYXNzIE5vZGVJbXBsOwpAQCAtNDYsMjQgKzQ0LDEwIEBACiAgICAgICAgIHZp
cnR1YWwgflNWR1RyYW5zZm9ybWFibGVJbXBsKCk7CiAKICAgICAgICAgLy8gJ1NWR1RyYW5zZm9y
bWFibGUnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsICp0
cmFuc2Zvcm0oKSBjb25zdDsKLSAgICAgICAgU1ZHTWF0cml4SW1wbCAqbG9jYWxNYXRyaXgoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsICp0cmFu
c2Zvcm0oKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4SW1wbCAqbG9jYWxN
YXRyaXgoKSBjb25zdCA9IDA7CiAKLSAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnU1ZHTG9jYXRh
YmxlJwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldENUTSgpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFNjcmVlbkNUTSgpIGNvbnN0OwotCi0gICAg
ICAgIC8vIFNwZWNpYWwgcGFyc2VBdHRyaWJ1dGUgZnVuY3Rpb24sIHJldHVybmluZyBhIGJvb2ws
Ci0gICAgICAgIC8vIHdoZXRoZXIgaXQgY291bGQgaGFuZGxlIHRoZSBwYXNzZWQgYXR0cmlidXRl
IG9yIG5vdC4KLSAgICAgICAgYm9vbCBwYXJzZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBs
ICphdHRyKTsKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoU1ZH
VHJhbnNmb3JtTGlzdEltcGwgKmxpc3QsIEtET006OkRPTVN0cmluZ0ltcGwgKnRyYW5zZm9ybSk7
Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVTdWJ0cmVlTWF0cmljZXMoS0RPTTo6Tm9kZUltcGwgKm5v
ZGUpOwotICAgICAgICB2b2lkIHVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNWR1RyYW5zZm9ybUxpc3RJ
bXBsICpsb2NhbFRyYW5zZm9ybXMpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxl
IFNWR01hdHJpeEltcGwgKm1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUgU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0SW1wbCAqbV90cmFuc2Zvcm07CiAgICAgfTsKIH07CiAKSW5kZXg6IHN2
Zy9TVkdQYXRoRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdQYXRoRWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHUGF0aEVsZW1lbnRJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiAKIFNWR1BhdGhFbGVtZW50SW1wbDo6U1ZHUGF0aEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50
UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJl
Zml4KQotOiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0c0lt
cGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1w
bCgpLCBTVkdUcmFuc2Zvcm1hYmxlSW1wbCgpLCBTVkdQYXRoUGFyc2VyKCkKKzogU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1Rlc3RzSW1wbCgp
LCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsKCks
IFNWR1BhdGhQYXJzZXIoKQogewogICAgIG1fcGF0aExlbmd0aCA9IDA7CiAgICAgbV9wYXRoU2Vn
TGlzdCA9IDA7CkBAIC0zNjQsOSArMzY0LDggQEAKICAgICAgICAgICAgIGlmKFNWR1Rlc3RzSW1w
bDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKICAgICAgICAgICAgIGlmKFNWR0xhbmdT
cGFjZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAgICBpZihT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJl
dHVybjsKLSAgICAgICAgICAgIGlmKFNWR1RyYW5zZm9ybWFibGVJbXBsOjpwYXJzZUF0dHJpYnV0
ZShhdHRyKSkgcmV0dXJuOwogCi0gICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFy
c2VBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOwogICAgICAgICB9CiAgICAgfTsKIH0KSW5k
ZXg6IHN2Zy9TVkdTd2l0Y2hFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTd2l0
Y2hFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHU3dpdGNoRWxlbWVu
dEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDE1IEBACiAKICNpbmNsdWRlICJT
VkdUZXN0c0ltcGwuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2VJbXBsLmgiCi0jaW5jbHVkZSAi
U1ZHU3R5bGVkRWxlbWVudEltcGwuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlSW1wbC5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5oIgogI2luY2x1
ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLmgiCiAKIG5hbWVzcGFjZSBLU1ZH
CiB7Ci0gICAgY2xhc3MgU1ZHU3dpdGNoRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkRWxl
bWVudEltcGwsCisgICAgY2xhc3MgU1ZHU3dpdGNoRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdMYW5nU3BhY2VJbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGVJbXBsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEltcGwKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdTd2l0Y2hFbGVtZW50
SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsICBLRE9N
OjpET01TdHJpbmdJbXBsICpwcmVmaXgpOwpJbmRleDogc3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1wbC5jcHAJKHJldmlz
aW9uIDQ2ODkyMSkKKysrIHN2Zy9TVkdQYXR0ZXJuRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCi1TVkdQYXR0
ZXJuRWxlbWVudEltcGw6OlNWR1BhdHRlcm5FbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAq
ZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkg
OiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdVUklSZWZlcmVuY2VJ
bXBsKCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWRJbXBsKCksIFNWR0ZpdFRvVmlld0JveEltcGwoKSwgS0NhbnZhc1Jlc291
cmNlTGlzdGVuZXIoKQorU1ZHUGF0dGVybkVsZW1lbnRJbXBsOjpTVkdQYXR0ZXJuRWxlbWVudElt
cGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpE
T01TdHJpbmdJbXBsICpwcmVmaXgpIDogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwoZG9j
LCBpZCwgcHJlZml4KSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCh0aGlzKSwgU1ZHVGVzdHNJbXBsKCks
IFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKSwg
U1ZHRml0VG9WaWV3Qm94SW1wbCgpLCBLQ2FudmFzUmVzb3VyY2VMaXN0ZW5lcigpCiB7CiAgICAg
bV9wYXR0ZXJuVW5pdHMgPSAwOwogICAgIG1fcGF0dGVyblRyYW5zZm9ybSA9IDA7CkBAIC0zMzMs
NyArMzMzLDcgQEAKICAgICAgICAgICAgICAgICBTVkdNYXRyaXhJbXBsICpzdmdDVE0gPSBzdmdF
bGVtZW50LT5nZXRDVE0oKTsKICAgICAgICAgICAgICAgICBzdmdDVE0tPnJlZigpOwogCi0gICAg
ICAgICAgICAgICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gU1ZHTG9jYXRhYmxlSW1wbDo6Z2V0Q1RN
KCk7CisgICAgICAgICAgICAgICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gU1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudEltcGw6OmdldENUTSgpOwogICAgICAgICAgICAgICAgIGN0bS0+cmVmKCk7CiAK
ICAgICAgICAgICAgICAgICBLQ2FudmFzTWF0cml4IG5ld01hdHJpeChzdmdDVE0tPnFtYXRyaXgo
KSk7CkluZGV4OiBzdmcvU1ZHRGVmc0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcv
U1ZHRGVmc0VsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0RlZnNF
bGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDggQEAKIAogdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiAKLVNWR0RlZnNFbGVtZW50SW1wbDo6U1ZHRGVmc0VsZW1lbnRJbXBs
KEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9N
U3RyaW5nSW1wbCAqcHJlZml4KSA6IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZp
eCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWRJbXBsKCksIFNWR1RyYW5zZm9ybWFibGVJbXBsKCkKK1NWR0RlZnNFbGVtZW50
SW1wbDo6U1ZHRGVmc0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5v
ZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQorOiBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVGVzdHNJbXBsKCks
IFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQog
ewogfQogCkluZGV4OiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnRJbXBsLmNwcAko
cmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQAogICAgICAgICAgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEFscGhhRnVuY3Rpb24oZnVuYyk7CiAgICAgICAgIH0KICAgICB9CisK
KyAgICBTVkdFbGVtZW50SW1wbDo6Y2xvc2UoKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1RleHRF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdUZXh0RWxlbWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyNCArMjAsMjI5IEBACiAgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCiAqLwogCi0vLyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgPGtkb20va2RvbS5oPgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50SW1wbC5oIgorI2lu
Y2x1ZGUgIlNWR1RTcGFuRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0
aExpc3RJbXBsLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRlIDxrZG9tL2Nzcy9SZW5kZXJTdHlsZS5oPgog
CisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgorCisjaW5jbHVkZSA8cXZlY3Rv
ci5oPgorCisjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzVGV4dEl0ZW0uaD4KKwogdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiAKIFNWR1RleHRFbGVtZW50SW1wbDo6U1ZHVGV4dEVsZW1lbnRJbXBsKEtE
T006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3Ry
aW5nSW1wbCAqcHJlZml4KQogOiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50SW1wbChkb2MsIGlk
LCBwcmVmaXgpLCBTVkdUcmFuc2Zvcm1hYmxlSW1wbCgpCiB7CisgICAgbV90cmFuc2Zvcm0gPSAw
OworICAgIG1fbG9jYWxNYXRyaXggPSAwOwogfQogCiBTVkdUZXh0RWxlbWVudEltcGw6On5TVkdU
ZXh0RWxlbWVudEltcGwoKQogeworIC8vICAgaWYobV90cmFuc2Zvcm0pCisgLy8gICAgICAgbV90
cmFuc2Zvcm0tPmRlcmVmKCk7CisgLy8gICBpZihtX2xvY2FsTWF0cml4KQorIC8vICAgICAgIG1f
bG9jYWxNYXRyaXgtPmRlcmVmKCk7CiB9CiAKIHZvaWQgU1ZHVGV4dEVsZW1lbnRJbXBsOjpwYXJz
ZUF0dHJpYnV0ZShLRE9NOjpBdHRyaWJ1dGVJbXBsICphdHRyKQogewotICAgIGlmKFNWR1RyYW5z
Zm9ybWFibGVJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogICAgIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKIH0KIAorS0NhbnZh
c0l0ZW0gKlNWR1RleHRFbGVtZW50SW1wbDo6Y3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpjYW52
YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0Cit7CisgICAgS0NhbnZhc1RleHRJdGVt
ICppdGVtID0gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlVGV4dEl0ZW0oY2FudmFzLCBR
U3RyaW5nKCksIHN0eWxlKTsKKyAgICAvLyBBc3NvY2lhdGUgJ0tDYW52YXNJdGVtJyB3aXRoICdT
VkdTdHlsZWRFbGVtZW50SW1wbCcKKyAgICBpdGVtLT5zZXRVc2VyRGF0YShjb25zdF9jYXN0PFNW
R1RleHRFbGVtZW50SW1wbCAqPih0aGlzKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwordm9p
ZCB0cnlBZGRDaGFyYWN0ZXIoYm9vbCByZXBsYWNlLCBRU3RyaW5nICZzdHIsIFFDaGFyIGNoLCB1
bnNpZ25lZCBpbnQgJmluZGV4KQoreworCWlmKHJlcGxhY2UpCisJeworCQlpZihjaC51bmljb2Rl
KCkgPT0gMHgwQSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQyB8fCBjaC51bmljb2RlKCkgPT0gMHgw
OSkgY2ggPSAnICc7CisJfQorCWVsc2UKKwl7CisJCWtkRGVidWcoKSA8PCAiRGVhbGluZyB3aXRo
IDogIiA8PCBjaC51bmljb2RlKCkgPDwgIigiIDw8IGNoIDw8ICIpIiA8PCBlbmRsOworCQlpZihj
aC51bmljb2RlKCkgPT0gMHgwQSB8fCBjaC51bmljb2RlKCkgPT0gMHgwQykgcmV0dXJuOworCQll
bHNlIGlmKGNoLnVuaWNvZGUoKSA9PSAweDA5KSBjaCA9ICcgJzsKKwkJaWYoY2guaXNTcGFjZSgp
ICYmIChpbmRleCA9PSAwIHx8IHN0ci5lbmRzV2l0aCgnICcpKSkgcmV0dXJuOworICAgIH0KKwor
ICAgIHN0ciArPSBjaDsKKyAgICBpbmRleCsrOworfQorCit2b2lkIFNWR1RleHRFbGVtZW50SW1w
bDo6Y2xvc2UoKQoreworCWlmKCFtX2NhbnZhc0l0ZW0gfHwgIW1fY2FudmFzSXRlbS0+c3R5bGUo
KSkKKwkJcmV0dXJuOworCisgICAgaW50IGxlbiA9IHRleHRDb250ZW50KCktPmxlbmd0aCgpOwor
ICAgIGlmKGxlbiA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWNfY2FzdDxLQ2Fu
dmFzVGV4dEl0ZW0gKj4obV9jYW52YXNJdGVtKS0+Y2xlYXIoKTsKKworICAgIC8vIDEuIHhtbDpz
cGFjZQorICAgIGJvb2wgcmVwbGFjZSA9IEtET006OkRPTVN0cmluZyh4bWxzcGFjZSgpKS5zdHJp
bmcoKSA9PSAicHJlc2VydmUiOworICAgIGtkRGVidWcoKSA8PCAiUFJFU0VSVkUgOiAiIDw8IEtE
T006OkRPTVN0cmluZyh4bWxzcGFjZSgpKS5zdHJpbmcoKSA8PCBlbmRsOworCisgICAgdW5zaWdu
ZWQgaW50IGluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgeGNvdW50ID0geCgpLT5iYXNlVmFs
KCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25lZCBpbnQgeWNvdW50ID0geSgpLT5iYXNl
VmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICB1bnNpZ25lZCBpbnQgZHhjb3VudCA9IGR4KCkt
PmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgIHVuc2lnbmVkIGludCBkeWNvdW50ID0g
ZHkoKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCk7CisgICAgUVZlY3RvcjxmbG9hdD4gX3go
bGVuKTsKKyAgICBRVmVjdG9yPGZsb2F0PiBfeShsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+IF9k
eChsZW4pOworICAgIFFWZWN0b3I8ZmxvYXQ+IF9keShsZW4pOworICAgIGZsb2F0IGN1cnggPSAw
LiwgY3VyeSA9IDAuLCBjdXJkeCA9IDAuLCBjdXJkeSA9IDAuOworICAgIGN1cmR4ID0gMDsKKyAg
ICBjdXJkeSA9IDA7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwgeGNvdW50O2krKykK
KyAgICAgICAgX3hbaV0gPSB4KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAg
ICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB5Y291bnQ7aSsrKQorICAgICAgICBfeVtpXSA9
IHkoKS0+YmFzZVZhbCgpLT5nZXRJdGVtKGkpLT52YWx1ZSgpOworICAgIGZvcih1bnNpZ25lZCBp
bnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAgICBfZHhbaV0gPSBkeCgpLT5iYXNlVmFs
KCktPmdldEl0ZW0oaSktPnZhbHVlKCk7CisgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwg
ZHljb3VudDtpKyspCisgICAgICAgIF9keVtpXSA9IGR5KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShp
KS0+dmFsdWUoKTsKKyAgICBjdXJ4ID0gX3hbMF07CisgICAgY3VyeSA9IF95WzBdOworICAgIFFT
dHJpbmcgc3RyOworICAgIGJvb2wgYWJzb2x1dGUgPSB0cnVlOworICAgIGZvcihLRE9NOjpOb2Rl
SW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKKyAg
ICB7CisgICAgICAgIGlmKG4tPm5vZGVUeXBlKCkgPT0gS0RPTTo6VEVYVF9OT0RFKQorICAgICAg
ICB7CisgICAgICAgICAgICBLRE9NOjpET01TdHJpbmcgdGV4dChuLT50ZXh0Q29udGVudCgpKTsK
KyAgICAgICAgICAgIC8vdGV4dCA9IHRleHQuc3RyaW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7
CisgICAgICAgICAgICBrZERlYnVnKCkgPDwgInRleHQgOiAiIDw8IHRleHQuc3RyaW5nKCkgPDwg
ZW5kbDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IHRleHQubGVuZ3Ro
KCk7aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgeGNvdW50
IHx8IGluZGV4IDwgeWNvdW50IHx8IGluZGV4IDwgZHhjb3VudCB8fCBpbmRleCA8IGR5Y291bnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZighc3RyLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtDYW52YXNUZXh0SXRlbSAq
PihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1bmsoYWJzb2x1dGUgPyBRUG9pbnRGKGN1cngsIGN1
cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1cmR4LCBjdXJkeSksIHN0ciwgbV9jYW52YXNJdGVt
LT5zdHlsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoaSA8IHhjb3VudCB8fCBpIDwgeWNv
dW50KSBhYnNvbHV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgeGNv
dW50KQorICAgICAgICAgICAgICAgICAgICAgICAgY3VyeCA9IF94W2luZGV4XTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYoaW5kZXggPCB5Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IGR4Y291bnQp
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJkeCA9IF9keFtpbmRleF07CisgICAgICAgICAg
ICAgICAgICAgIGlmKGluZGV4IDwgZHljb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cmR5ID0gX2R5W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgc3RyID0gIiI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeUFkZENoYXJhY3RlcihyZXBsYWNlLCBzdHIs
IHRleHRbaV0sIGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiYWRkaW5nIHRleHQgOiAiIDw8ICIgeCA6ICIgPDwgY3VyeCA8PCAiIHkgOiAiIDw8IGN1cnkg
PDwgc3RyIDw8IGVuZGw7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ2FudmFzVGV4dEl0ZW0g
Kj4obV9jYW52YXNJdGVtKS0+YWRkVGV4dENodW5rKGFic29sdXRlID8gUVBvaW50RihjdXJ4LCBj
dXJ5KSA6IFFQb2ludEYoKSwgUVBvaW50RihjdXJkeCwgY3VyZHkpLCBzdHIsIG1fY2FudmFzSXRl
bS0+c3R5bGUoKSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAgICAg
c3RyID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihuLT5pZCgpID09IElEX1RTUEFO
IHx8IG4tPmlkKCkgPT0gSURfVFJFRikKKyAgICAgICAgeworICAgICAgICAgICAgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudEltcGwgKnRlbGVtID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudEltcGwgKj4obik7CisgICAgICAgICAgICBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5
bGUgPSBzdGF0aWNfY2FzdDxTVkdSZW5kZXJTdHlsZSAqPihzdGF0aWNfY2FzdDxTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50SW1wbCAqPihuKS0+cmVuZGVyU3R5bGUoKSk7CisgICAgICAgICAgICBL
Q2FudmFzUmVuZGVyaW5nU3R5bGUgKnJlbmRlcmluZ1N0eWxlID0gbmV3IEtDYW52YXNSZW5kZXJp
bmdTdHlsZShjYW52YXMoKSwgc3ZnU3R5bGUpOworICAgICAgICAgICAgcmVuZGVyaW5nU3R5bGUt
PnVwZGF0ZVN0eWxlKHN2Z1N0eWxlLCBjYW52YXNJdGVtKCkpOworICAgICAgICAgICAgcmVuZGVy
aW5nU3R5bGUtPnNldE9iamVjdE1hdHJpeChtX2NhbnZhc0l0ZW0tPnN0eWxlKCktPm9iamVjdE1h
dHJpeCgpKTsKKyAgICAgICAgICAgIEtET006OkRPTVN0cmluZyB0ZXh0KG4tPnRleHRDb250ZW50
KCkpOworICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJ0ZXh0MiA6ICIgPDwgdGV4dC5zdHJpbmco
KSA8PCBlbmRsOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHhjb3VudCA9IHRlbGVtLT54KCkt
PmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHlj
b3VudCA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpOworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IGR4Y291bnQgPSB0ZWxlbS0+ZHgoKS0+YmFzZVZhbCgpLT5udW1iZXJP
Zkl0ZW1zKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZHljb3VudCA9IHRlbGVtLT5keSgp
LT5iYXNlVmFsKCktPm51bWJlck9mSXRlbXMoKTsKKyAgICAgICAgICAgIGN1cmR4ID0gMDsKKyAg
ICAgICAgICAgIGN1cmR5ID0gMDsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7
aSA8IHhjb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3hbaW5kZXggKyBpXSA9IHRlbGVtLT54
KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1bnNp
Z25lZCBpbnQgaSA9IDA7aSA8IHljb3VudDtpKyspCisgICAgICAgICAgICAgICAgX3lbaW5kZXgg
KyBpXSA9IHRlbGVtLT55KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAg
ICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR4Y291bnQ7aSsrKQorICAgICAgICAg
ICAgICAgIF9keFtpbmRleCArIGldID0gdGVsZW0tPmR4KCktPmJhc2VWYWwoKS0+Z2V0SXRlbShp
KS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IGR5Y291
bnQ7aSsrKQorICAgICAgICAgICAgICAgIF9keVtpbmRleCArIGldID0gdGVsZW0tPmR5KCktPmJh
c2VWYWwoKS0+Z2V0SXRlbShpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGlmKHhjb3VudCA+IDAp
IGN1cnggPSBfeFtpbmRleF07CisgICAgICAgICAgICBpZih5Y291bnQgPiAwKSBjdXJ5ID0gX3lb
aW5kZXhdOworICAgICAgICAgICAgaWYoZHhjb3VudCA+IDApIGN1cmR4ID0gX2R4W2luZGV4XTsK
KyAgICAgICAgICAgIGlmKGR5Y291bnQgPiAwKSBjdXJkeSA9IF9keVtpbmRleF07CisgICAgICAg
ICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCB0ZXh0Lmxlbmd0aCgpO2krKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihpIDwgeGNvdW50IHx8IGkgPCB5Y291bnQgfHwg
aSA8IGR4Y291bnQgfHwgaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZighc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEtDYW52YXNUZXh0SXRlbSAqPihtX2NhbnZhc0l0ZW0pLT5hZGRUZXh0Q2h1bmso
YWJzb2x1dGUgPyBRUG9pbnRGKGN1cngsIGN1cnkpIDogUVBvaW50RigpLCBRUG9pbnRGKGN1cmR4
LCBjdXJkeSksIHN0ciwgcmVuZGVyaW5nU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBpZihp
IDwgeGNvdW50IHx8IGkgPCB5Y291bnQpIGFic29sdXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYoaSA8IHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnggPSBfeFtp
bmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPCB5Y291bnQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJ5ID0gX3lbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZihpIDwg
ZHhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmR4ID0gX2R4W2luZGV4XTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYoaSA8IGR5Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJkeSA9IF9keVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIHN0ciA9ICIiOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cnlBZGRDaGFyYWN0ZXIocmVwbGFjZSwg
c3RyLCB0ZXh0W2ldLCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrZERlYnVn
KCkgPDwgImFkZGluZyB0ZXh0IDogIiA8PCAiIHggOiAiIDw8IGN1cnggPDwgIiB5IDogIiA8PCBj
dXJ5IDw8IHN0ciA8PCBlbmRsOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0NhbnZhc1RleHRJ
dGVtICo+KG1fY2FudmFzSXRlbSktPmFkZFRleHRDaHVuayhhYnNvbHV0ZSA/IFFQb2ludEYoY3Vy
eCwgY3VyeSkgOiBRUG9pbnRGKCksIFFQb2ludEYoY3VyZHgsIGN1cmR5KSwgc3RyLCByZW5kZXJp
bmdTdHlsZSk7CisgICAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlOworICAgICAgICAgICAgc3Ry
ID0gIiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTVkdFbGVtZW50SW1wbDo6Y2xvc2UoKTsK
K30KKwordm9pZCBTVkdUZXh0RWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbmdlZCgpCit7CisgICAg
Y2xvc2UoKTsKK30KKwordm9pZCBTVkdUZXh0RWxlbWVudEltcGw6OmF0dGFjaCgpCit7CisgICAg
U1ZHU3R5bGVkRWxlbWVudEltcGw6OmF0dGFjaCgpOworICAgIGNsb3NlKCk7Cit9CisKK1NWR0Vs
ZW1lbnRJbXBsICpTVkdUZXh0RWxlbWVudEltcGw6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBj
b25zdAoreworICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6bmVhcmVzdFZpZXdwb3J0
RWxlbWVudCh0aGlzKTsKK30KKworU1ZHRWxlbWVudEltcGwgKlNWR1RleHRFbGVtZW50SW1wbDo6
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBTVkdUcmFuc2Zv
cm1hYmxlSW1wbDo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7Cit9CisKK1NWR1JlY3RJ
bXBsICpTVkdUZXh0RWxlbWVudEltcGw6OmdldEJCb3goKSBjb25zdAoreworICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1hYmxlSW1wbDo6Z2V0QkJveCh0aGlzKTsKK30KKworU1ZHTWF0cml4SW1wbCAq
U1ZHVGV4dEVsZW1lbnRJbXBsOjpnZXRTY3JlZW5DVE0oKSBjb25zdAoreworICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1hYmxlSW1wbDo6Z2V0U2NyZWVuQ1RNKHRoaXMpOworfQorCitTVkdNYXRyaXhJ
bXBsICpTVkdUZXh0RWxlbWVudEltcGw6OmdldENUTSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybWFibGVJbXBsOjpnZXRTY3JlZW5DVE0odGhpcyk7Cit9CisKIC8vIHZpbTp0cz00
Om5vZXQKSW5kZXg6IHN2Zy9TVkdBRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZH
QUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdBRWxlbWVudEltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTkgKzI2LDE3IEBACiAjaW5jbHVkZSAiU1ZHVGVzdHNJ
bXBsLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5oIgogI2luY2x1ZGUgIlNWR1VSSVJl
ZmVyZW5jZUltcGwuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgotI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybWFibGVJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZEltcGwuaCIKIAogbmFtZXNwYWNlIEtTVkcKIHsKICAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmlu
Z0ltcGw7Ci0gICAgY2xhc3MgU1ZHQUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZEVsZW1l
bnRJbXBsLAorICAgIGNsYXNzIFNWR0FFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudEltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1VSSVJlZmVyZW5jZUltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1Rlc3RzSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFu
Z1NwYWNlSW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR1RyYW5zZm9ybWFibGVJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsCiAgICAgewogICAgIHB1YmxpYzoK
ICAgICAgICAgU1ZHQUVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5v
ZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KTsKSW5kZXg6IHN2Zy9T
VkdGRUltYWdlRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGRUltYWdlRWxl
bWVudEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHRkVJbWFnZUVsZW1lbnRJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQAogdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiAKIFNWR0ZFSW1hZ2VFbGVtZW50SW1wbDo6U1ZHRkVJbWFnZUVsZW1lbnRJbXBsKEtE
T006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3Ry
aW5nSW1wbCAqcHJlZml4KQotOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXNJ
bXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1VSSVJlZmVyZW5jZUltcGwoKSwgU1ZHTGFuZ1NwYWNl
SW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCgpCis6IFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlc0ltcGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVVJJUmVm
ZXJlbmNlSW1wbCh0aGlzKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkSW1wbCgpCiB7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvID0gMDsKICAgICBt
X2NhY2hlZEltYWdlID0gMDsKSW5kZXg6IHN2Zy9TVkdVc2VFbGVtZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHN2Zy9TVkdVc2VFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcv
U1ZHVXNlRWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTkgKzI2LDE3IEBACiAj
aW5jbHVkZSAiU1ZHVGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5oIgog
I2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZUltcGwuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVt
ZW50SW1wbC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGVJbXBsLmgiCisjaW5jbHVkZSAi
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuaCIKIAogbmFtZXNwYWNlIEtTVkcKIHsKICAgICAvL2Ns
YXNzIFNWR0VsZW1lbnRJbnN0YW5jZUltcGw7CiAgICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGhJ
bXBsOwotICAgIGNsYXNzIFNWR1VzZUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZEVsZW1l
bnRJbXBsLAorICAgIGNsYXNzIFNWR1VzZUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdUZXN0c0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHTGFuZ1NwYWNlSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdUcmFuc2Zvcm1hYmxlSW1wbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2VJbXBsCiAgICAgewogICAgIHB1YmxpYzoK
SW5kZXg6IHN2Zy9TVkdDaXJjbGVFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdD
aXJjbGVFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHQ2lyY2xlRWxl
bWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTggKzI1LDE2IEBACiAKICNpbmNsdWRl
ICJTVkdUZXN0c0ltcGwuaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2VJbXBsLmgiCi0jaW5jbHVk
ZSAiU1ZHU3R5bGVkRWxlbWVudEltcGwuaCIKLSNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlSW1w
bC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5oIgogI2lu
Y2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLmgiCiAKIG5hbWVzcGFjZSBL
U1ZHCiB7CiAgICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsOwotICAgIGNsYXNzIFNWR0Np
cmNsZUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnRJbXBsLAorICAgIGNsYXNz
IFNWR0NpcmNsZUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0
c0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1Nw
YWNlSW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGVJbXBsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwKICAgICB7
CiAgICAgcHVibGljOgogICAgICAgICBTVkdDaXJjbGVFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVu
dFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnBy
ZWZpeCk7CkluZGV4OiBzdmcvU1ZHTWFya2VyRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHN2Zy9TVkdNYXJrZXJFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9T
VkdNYXJrZXJFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOCBA
QAogCiAgICAgbV9tYXJrZXItPnNldFJlZlgocmVmWCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOwog
ICAgIG1fbWFya2VyLT5zZXRSZWZZKHJlZlkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKworICAg
IFNWR0VsZW1lbnRJbXBsOjpjbG9zZSgpOwogfQogCiBLQ2FudmFzSXRlbSAqU1ZHTWFya2VyRWxl
bWVudEltcGw6OmNyZWF0ZUNhbnZhc0l0ZW0oS0NhbnZhcyAqY2FudmFzLCBLUmVuZGVyaW5nU3R5
bGUgKnN0eWxlKSBjb25zdApJbmRleDogc3ZnL1NWR0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3ZnL1NWR0VsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdFbGVt
ZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBACiAKICAgICAgICAgU1ZH
RG9jdW1lbnRJbXBsICpnZXREb2N1bWVudCgpIGNvbnN0OwogCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKSBjb25zdCB7fQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBhZGRTVkdFdmVudExpc3RlbmVyKEtET006OkVjbWEgKmVjbWFFbmdpbmUsIEtET006
OkRPTVN0cmluZ0ltcGwgKnR5cGUsIEtET006OkRPTVN0cmluZ0ltcGwgKnZhbHVlKTsKICAgICB9
OwpJbmRleDogc3ZnL1NWR0xpbmVFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdM
aW5lRWxlbWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0xpbmVFbGVtZW50
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxOCArMjUsMTYgQEAKIAogI2luY2x1ZGUgIlNW
R1Rlc3RzSW1wbC5oIgogI2luY2x1ZGUgIlNWR0xhbmdTcGFjZUltcGwuaCIKLSNpbmNsdWRlICJT
VkdTdHlsZWRFbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFibGVJbXBsLmgi
CisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVk
ZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuaCIKIAogbmFtZXNwYWNlIEtTVkcK
IHsKICAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aEltcGw7Ci0gICAgY2xhc3MgU1ZHTGluZUVs
ZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnRJbXBsLAorICAgIGNsYXNzIFNWR0xp
bmVFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzSW1wbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlSW1wbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Ry
YW5zZm9ybWFibGVJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsCiAgICAgewogICAgIHB1YmxpYzoKICAgICAg
ICAgU1ZHTGluZUVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJ
bXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KTsKSW5kZXg6IHN2Zy9TVkdU
UmVmRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdUUmVmRWxlbWVudEltcGwu
Y3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHVFJlZkVsZW1lbnRJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIFNW
R1RSZWZFbGVtZW50SW1wbDo6U1ZHVFJlZkVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpk
b2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQot
OiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdVUklS
ZWZlcmVuY2VJbXBsKCkKKzogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudEltcGwoZG9jLCBpZCwg
cHJlZml4KSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCh0aGlzKQogewogfQogCkluZGV4OiBzdmcvU1ZH
VVJJUmVmZXJlbmNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdVUklSZWZlcmVuY2VJbXBs
LmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdVUklSZWZlcmVuY2VJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDExICszMSwxMiBAQAogbmFtZXNwYWNlIEtTVkcKIHsKICAgICBjbGFz
cyBTVkdBbmltYXRlZFN0cmluZ0ltcGw7CisgICAgY2xhc3MgU1ZHU3R5bGVkRWxlbWVudEltcGw7
CiAKICAgICBjbGFzcyBTVkdVUklSZWZlcmVuY2VJbXBsCiAgICAgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgU1ZHVVJJUmVmZXJlbmNlSW1wbCgpOworICAgICAgICBTVkdVUklSZWZlcmVuY2VJbXBs
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICopOwogICAgICAgICB2aXJ0dWFsIH5TVkdVUklS
ZWZlcmVuY2VJbXBsKCk7CiAKICAgICAgICAgLy8gJ1NWR1VSSVJlZmVyZW5jZScgZnVuY3Rpb25z
CkBAIC00Niw4ICs0Nyw5IEBACiAgICAgICAgIC8vIEhlbHBlcnMKICAgICAgICAgc3RhdGljIFFT
dHJpbmcgZ2V0VGFyZ2V0KGNvbnN0IFFTdHJpbmcgJnVybCk7CiAKLSAgICBwcml2YXRlOgorICAg
IHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZSBTVkdBbmltYXRlZFN0cmluZ0ltcGwgKm1faHJl
ZjsKKyAgICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKm1fY29udGV4dDsKICAgICB9
OwogfTsKIApJbmRleDogc3ZnL01ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9NYWtlZmls
ZS5hbQkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNywxMyArMTcsMTMgQEAKIFNWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcCBTVkdTdHlsZWRF
bGVtZW50SW1wbC5jcHAgU1ZHR0VsZW1lbnRJbXBsLmNwcCBTVkdFbGxpcHNlRWxlbWVudEltcGwu
Y3BwIFwKIFNWR0RvY3VtZW50SW1wbC5jcHAgU1ZHSGVscGVyLmNwcCBTVkdDb2xvckltcGwuY3Bw
IFNWR1BhaW50SW1wbC5jcHAgXAogU1ZHVVJJUmVmZXJlbmNlSW1wbC5jcHAgU1ZHTGFuZ1NwYWNl
SW1wbC5jcHAgU1ZHUmVjdEltcGwuY3BwIFNWR01hdHJpeEltcGwuY3BwIFwKLVNWR0FuZ2xlSW1w
bC5jcHAgU1ZHTG9jYXRhYmxlSW1wbC5jcHAgU1ZHRXhjZXB0aW9uSW1wbC5jcHAgU1ZHUG9pbnRJ
bXBsLmNwcCBcCitTVkdBbmdsZUltcGwuY3BwIFNWR0xvY2F0YWJsZUltcGwuY3BwIFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnRJbXBsLmNwcCBTVkdFeGNlcHRpb25JbXBsLmNwcCBTVkdQb2ludElt
cGwuY3BwIFwKIFNWR1BvbHlFbGVtZW50SW1wbC5jcHAgXAogU1ZHUG9seWxpbmVFbGVtZW50SW1w
bC5jcHAgU1ZHUG9pbnRMaXN0SW1wbC5jcHAgU1ZHQW5pbWF0ZWRQb2ludHNJbXBsLmNwcCBcCiBT
VkdQb2x5Z29uRWxlbWVudEltcGwuY3BwIHN2Z3BhdGhwYXJzZXIuY3BwIFNWR1N0cmluZ0xpc3RJ
bXBsLmNwcCBcCiBTVkdUZXN0c0ltcGwuY3BwIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJ
bXBsLmNwcCBcCiBTVkdBbmltYXRlZEJvb2xlYW5JbXBsLmNwcCBTVkdUcmFuc2Zvcm1JbXBsLmNw
cCBTVkdUcmFuc2Zvcm1MaXN0SW1wbC5jcHAgXAotU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0SW1w
bC5jcHAgU1ZHVHJhbnNmb3JtYWJsZUltcGwuY3BwIFwKK1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dEltcGwuY3BwIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbC5jcHAgU1ZHVHJhbnNm
b3JtYWJsZUltcGwuY3BwIFwKIFNWR051bWJlckltcGwuY3BwIFNWR0FuaW1hdGVkTnVtYmVySW1w
bC5jcHAgU1ZHRGVmc0VsZW1lbnRJbXBsLmNwcCBcCiBTVkdTdG9wRWxlbWVudEltcGwuY3BwIFNW
R0FuaW1hdGVkRW51bWVyYXRpb25JbXBsLmNwcCBcCiBTVkdHcmFkaWVudEVsZW1lbnRJbXBsLmNw
cCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnRJbXBsLmNwcCBcCkBAIC01OSw1ICs1OSw3IEBACiBT
VkdUZXh0RWxlbWVudEltcGwuY3BwIFNWR1RTcGFuRWxlbWVudEltcGwuY3BwIFwKIFNWR1RleHRD
b250ZW50RWxlbWVudEltcGwuY3BwIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnRJbXBsLmNwcCBc
CiBTVkdOdW1iZXJMaXN0SW1wbC5jcHAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0SW1wbC5jcHAgU1ZH
Q3Vyc29yRWxlbWVudEltcGwuY3BwCisjU1ZHRm9udEVsZW1lbnRJbXBsLmNwcCBTVkdGb250RmFj
ZUVsZW1lbnRJbXBsLmNwcCBcCisjU1ZHR2x5cGhFbGVtZW50SW1wbC5jcHAgU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudEltcGwuY3BwCiAKIGxpYmtzdmdkb21pbXBsX2xhX0xERkxBR1MgPSAkKGFsbF9s
aWJyYXJpZXMpCkluZGV4OiBzdmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3ZnL1NWR0ltYWdlRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcv
U1ZHSW1hZ2VFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAK
IHVzaW5nIG5hbWVzcGFjZSBraHRtbEltTG9hZDsKIAogU1ZHSW1hZ2VFbGVtZW50SW1wbDo6U1ZH
SW1hZ2VFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6
SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkKLTogU1ZHU3R5bGVkRWxlbWVudElt
cGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKSwgU1ZHVHJhbnNmb3JtYWJsZUltcGwo
KSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCgpLCBLRE9NOjpDYWNoZWRPYmplY3RDbGllbnQoKQorOiBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVGVz
dHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZEltcGwoKSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCh0aGlzKSwgS0RPTTo6Q2FjaGVkT2JqZWN0Q2xp
ZW50KCkKIHsKICAgICBtX3ggPSBtX3kgPSBtX3dpZHRoID0gbV9oZWlnaHQgPSAwOwogICAgIG1f
cHJlc2VydmVBc3BlY3RSYXRpbyA9IDA7CkBAIC0xNTEsMTAgKzE1MSw5IEBACiAgICAgICAgICAg
ICBpZihTVkdUZXN0c0ltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAg
ICAgICBpZihTVkdMYW5nU3BhY2VJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwog
ICAgICAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGw6OnBhcnNlQXR0
cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgICAgICBpZihTVkdUcmFuc2Zvcm1hYmxlSW1w
bDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKICAgICAgICAgICAgIGlmKFNWR1VSSVJl
ZmVyZW5jZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAKLSAgICAgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7
CiAgICAgICAgIH0KICAgICB9OwogfQpJbmRleDogc3ZnL1NWR0ZpbHRlckVsZW1lbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHRmlsdGVyRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiA0
Njg1NjIpCisrKyBzdmcvU1ZHRmlsdGVyRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBACiB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogU1ZHRmlsdGVyRWxlbWVu
dEltcGw6OlNWR0ZpbHRlckVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006
Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQotOiBTVkdTdHls
ZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdVUklSZWZlcmVuY2VJbXBsKCksIFNW
R0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQorOiBT
VkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdVUklSZWZlcmVuY2VJbXBs
KHRoaXMpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJ
bXBsKCkKIHsKICAgICBtX2ZpbHRlclVuaXRzID0gbV9wcmltaXRpdmVVbml0cyA9IDA7CiAgICAg
bV94ID0gbV95ID0gbV93aWR0aCA9IG1faGVpZ2h0ID0gMDsKQEAgLTI0OSw2ICsyNDksOCBAQAog
ICAgICAgICAgICAgbV9maWx0ZXItPmFkZEZpbHRlckVmZmVjdChmZS0+ZmlsdGVyRWZmZWN0KCkp
OwogICAgICAgICB9CiAgICAgfQorCisgICAgU1ZHRWxlbWVudEltcGw6OmNsb3NlKCk7CiB9CiAK
IC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHN2Zy9TVkdMaW5lRWxlbWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHN2Zy9TVkdMaW5lRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisr
KyBzdmcvU1ZHTGluZUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIFNWR0xpbmVFbGVtZW50SW1wbDo6U1ZHTGlu
ZUVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBp
ZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQotOiBTVkdTdHlsZWRFbGVtZW50SW1wbChk
b2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCgpLCBTVkdUcmFuc2Zvcm1hYmxlSW1wbCgpCis6
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdU
ZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkSW1wbCgpCiB7CiAgICAgbV94MSA9IG1feTEgPSBtX3gyID0gbV95MiA9IDA7CiB9CkBAIC0x
MDEsOSArMTAxLDggQEAKICAgICAgICAgICAgIGlmKFNWR1Rlc3RzSW1wbDo6cGFyc2VBdHRyaWJ1
dGUoYXR0cikpIHJldHVybjsKICAgICAgICAgICAgIGlmKFNWR0xhbmdTcGFjZUltcGw6OnBhcnNl
QXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAg
ICAgIGlmKFNWR1RyYW5zZm9ybWFibGVJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFyc2VB
dHRyaWJ1dGUoYXR0cik7CisKKyAgICAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIH0KICAgICB9OwogfQpJbmRl
eDogc3ZnL1NWR0dyYWRpZW50RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdH
cmFkaWVudEVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogCi1TVkdHcmFkaWVudEVsZW1lbnRJbXBsOjpTVkdHcmFkaWVu
dEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBp
ZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRv
YywgaWQsIHByZWZpeCksIFNWR1VSSVJlZmVyZW5jZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZEltcGwoKQorU1ZHR3JhZGllbnRFbGVtZW50SW1wbDo6U1ZHR3JhZGllbnRFbGVt
ZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtE
T006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkgOiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlk
LCBwcmVmaXgpLCBTVkdVUklSZWZlcmVuY2VJbXBsKHRoaXMpLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkSW1wbCgpCiB7CiAgICAgbV9zcHJlYWRNZXRob2QgPSAwOwogICAgIG1fZ3JhZGll
bnRVbml0cyA9IDA7CkluZGV4OiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBzdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQor
Kysgc3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBTVkdFbGxpcHNlRWxlbWVudEltcGw6
OlNWR0VsbGlwc2VFbGVtZW50SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2Rl
SW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmluZ0ltcGwgKnByZWZpeCkKLTogU1ZHU3R5bGVkRWxl
bWVudEltcGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUlt
cGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKSwgU1ZHVHJhbnNmb3JtYWJs
ZUltcGwoKQorOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwgcHJl
Zml4KSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZEltcGwoKQogewogICAgIG1fY3ggPSBtX2N5ID0gbV9yeCA9IG1fcnkgPSAw
OwogfQpAQCAtMTAxLDkgKzEwMSw4IEBACiAgICAgICAgICAgICBpZihTVkdUZXN0c0ltcGw6OnBh
cnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAgICBpZihTVkdMYW5nU3BhY2VJ
bXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogICAgICAgICAgICAgaWYoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47
Ci0gICAgICAgICAgICBpZihTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0
cikpIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudElt
cGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOworCisgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOwogICAgICAgICB9CiAgICAg
fTsKIH0KSW5kZXg6IHN2Zy9TVkdDbGlwUGF0aEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c3ZnL1NWR0NsaXBQYXRoRWxlbWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NW
R0NsaXBQYXRoRWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNyBAQAog
CiAjaW5jbHVkZSAiU1ZHVGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5o
IgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnRJbXBsLmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtYWJsZUltcGwuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudElt
cGwuaCIKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oIgogCiBj
bGFzcyBLQ2FudmFzQ2xpcHBlcjsKQEAgLTM0LDExICszMywxMCBAQAogbmFtZXNwYWNlIEtTVkcK
IHsKICAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1wbDsKLSAgICBjbGFzcyBTVkdD
bGlwUGF0aEVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnRJbXBsLAorICAgIGNs
YXNzIFNWR0NsaXBQYXRoRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHVGVzdHNJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHTGFuZ1NwYWNlSW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZUltcGwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWRJbXBsCiAgICAgewogICAgIHB1YmxpYzoKICAgICAgICAgU1ZHQ2xpcFBhdGhFbGVtZW50SW1w
bChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsICBLRE9NOjpE
T01TdHJpbmdJbXBsICpwcmVmaXgpOwpJbmRleDogc3ZnL1NWR0FFbGVtZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3ZnL1NWR0FFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysr
IHN2Zy9TVkdBRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
CiB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogU1ZHQUVsZW1lbnRJbXBsOjpTVkdBRWxlbWVudElt
cGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpE
T01TdHJpbmdJbXBsICpwcmVmaXgpCi06IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRvYywgaWQsIHBy
ZWZpeCksIFNWR1VSSVJlZmVyZW5jZUltcGwoKSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFj
ZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKSwgU1ZHVHJhbnNmb3Jt
YWJsZUltcGwoKQorOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwg
cHJlZml4KSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCh0aGlzKSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xh
bmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQogewogICAg
IG1fdGFyZ2V0ID0gMDsKIH0KQEAgLTc2LDkgKzc2LDggQEAKICAgICAgICAgICAgIGlmKFNWR1Rl
c3RzSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKICAgICAgICAgICAgIGlmKFNW
R0xhbmdTcGFjZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAg
ICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0
cikpIHJldHVybjsKLSAgICAgICAgICAgIGlmKFNWR1RyYW5zZm9ybWFibGVJbXBsOjpwYXJzZUF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTVkdTdHls
ZWRFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CisKKyAgICAgICAgICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CiAgICAg
ICAgIH0KICAgICB9OwogfQpJbmRleDogc3ZnL1NWR0xvY2F0YWJsZUltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzdmcvU1ZHTG9jYXRhYmxlSW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZH
TG9jYXRhYmxlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAgICAgY2xh
c3MgU1ZHUmVjdEltcGw7CiAgICAgY2xhc3MgU1ZHTWF0cml4SW1wbDsKICAgICBjbGFzcyBTVkdF
bGVtZW50SW1wbDsKKyAgICBjbGFzcyBTVkdTdHlsZWRFbGVtZW50SW1wbDsKICAgICBjbGFzcyBT
VkdMb2NhdGFibGVJbXBsCiAgICAgewogICAgIHB1YmxpYzoKQEAgLTM1LDEzICszNiwyMCBAQAog
ICAgICAgICB2aXJ0dWFsIH5TVkdMb2NhdGFibGVJbXBsKCk7CiAKICAgICAgICAgLy8gJ1NWR0xv
Y2F0YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIFNWR0VsZW1lbnRJbXBsICpuZWFyZXN0Vmlld3Bv
cnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0VsZW1lbnRJbXBsICpmYXJ0aGVzdFZpZXdw
b3J0RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnRJbXBsICpuZWFy
ZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR0VsZW1l
bnRJbXBsICpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0ID0gMDsKIAotICAgICAgICBT
VkdSZWN0SW1wbCAqZ2V0QkJveCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeElt
cGwgKmdldENUTSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFNj
cmVlbkNUTSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFRyYW5z
Zm9ybVRvRWxlbWVudChTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgU1ZHUmVjdEltcGwgKmdldEJCb3goKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
U1ZHTWF0cml4SW1wbCAqZ2V0Q1RNKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR01h
dHJpeEltcGwgKmdldFNjcmVlbkNUTSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTVkdN
YXRyaXhJbXBsICpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQp
IGNvbnN0ID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgc3RhdGljIFNWR0VsZW1lbnRJ
bXBsICpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICpl
bGVtZW50KTsKKyAgICAgICAgc3RhdGljIFNWR0VsZW1lbnRJbXBsICpmYXJ0aGVzdFZpZXdwb3J0
RWxlbWVudChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZWxlbWVudCk7CisgICAgICAgIHN0
YXRpYyBTVkdSZWN0SW1wbCAqZ2V0QkJveChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZWxl
bWVudCk7CisgICAgICAgIHN0YXRpYyBTVkdNYXRyaXhJbXBsICpnZXRDVE0oY29uc3QgU1ZHRWxl
bWVudEltcGwgKmVsZW1lbnQpOworICAgICAgICBzdGF0aWMgU1ZHTWF0cml4SW1wbCAqZ2V0U2Ny
ZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnRJbXBsICplbGVtZW50KTsKICAgICB9OwogfTsKIApJbmRl
eDogc3ZnL1NWR1BhdHRlcm5FbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdQYXR0
ZXJuRWxlbWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsOSBAQAogCiAjaW5jbHVkZSAi
U1ZHVGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5oIgotI2luY2x1ZGUg
IlNWR0xvY2F0YWJsZUltcGwuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2VJbXBsLmgiCiAj
aW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94SW1wbC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1l
bnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwuaCIKICNp
bmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oIgogCiAjaW5jbHVkZSA8
a2NhbnZhcy9LQ2FudmFzVHlwZXMuaD4KQEAgLTQ1LDEzICs0NCwxMyBAQAogICAgIGNsYXNzIFNW
R1BhdHRlcm5FbGVtZW50SW1wbDsKICAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uSW1w
bDsKICAgICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsOwotICAgIGNsYXNzIFNW
R1BhdHRlcm5FbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwKKyAgICBj
bGFzcyBTVkdQYXR0ZXJuRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudEltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VS
SVJlZmVyZW5jZUltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR1Rlc3RzSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHTGFuZ1NwYWNlSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0ZpdFRvVmlld0JveEltcGwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xvY2F0YWJsZUltcGwsIC8vIFRPRE8gOiBy
ZWFsbHkgbmVlZGVkPworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlj
IFNWR0xvY2F0YWJsZUltcGwsIC8vIFRPRE8gOiByZWFsbHkgbmVlZGVkPwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBLQ2FudmFzUmVzb3VyY2VMaXN0ZW5lcgogICAg
IHsKICAgICBwdWJsaWM6CkluZGV4OiBzdmcvU1ZHRGVmc0VsZW1lbnRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc3ZnL1NWR0RlZnNFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcv
U1ZHRGVmc0VsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE5ICsyMywxNyBAQAog
I2lmbmRlZiBLU1ZHX1NWR0RlZnNFbGVtZW50SW1wbF9ICiAjZGVmaW5lIEtTVkdfU1ZHRGVmc0Vs
ZW1lbnRJbXBsX0gKIAotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnRJbXBsLmgiCisjaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHVGVz
dHNJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5oIgogI2luY2x1ZGUgIlNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLmgiCi0jaW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJs
ZUltcGwuaCIKIAogbmFtZXNwYWNlIEtTVkcKIHsKLSAgICBjbGFzcyBTVkdEZWZzRWxlbWVudElt
cGwgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudEltcGwsCisgICAgY2xhc3MgU1ZHRGVmc0VsZW1l
bnRJbXBsIDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHNJbXBsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2VJbXBsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
SW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3Jt
YWJsZUltcGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdE
ZWZzRWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6Oklk
IGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOwpJbmRleDogc3ZnL1NWR0ltYWdlRWxl
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5oCShyZXZp
c2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHSW1hZ2VFbGVtZW50SW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSAiU1ZHVGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAi
U1ZHTGFuZ1NwYWNlSW1wbC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZUltcGwuaCIKLSNp
bmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgIlNWR1RyYW5zZm9ybWFi
bGVJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgi
CiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuaCIKICNpbmNsdWRl
IDxrZG9tL2NhY2hlL0tET01DYWNoZWRJbWFnZS5oPgogI2luY2x1ZGUgPGtkb20vY2FjaGUvS0RP
TUNhY2hlZERvY3VtZW50Lmg+CkBAIC0zOSwxMSArMzgsMTAgQEAKICAgICBjbGFzcyBTVkdBbmlt
YXRlZExlbmd0aEltcGw7CiAgICAgY2xhc3MgU1ZHRG9jdW1lbnRJbXBsOwogCi0gICAgY2xhc3Mg
U1ZHSW1hZ2VFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwKKyAgICBj
bGFzcyBTVkdJbWFnZUVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rl
c3RzSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZUltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1RyYW5zZm9ybWFibGVJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlSW1wbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIEtET006OkNhY2hlZE9iamVjdENsaWVudAogICAgIHsKSW5kZXg6
IHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
dmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBz
dmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisqLworCisjaWZuZGVmIEtTVkdfU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBs
X0gKKyNkZWZpbmUgS1NWR19TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGxfSAorCisj
aW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlSW1wbC5oIgorCitjbGFzcyBRTWF0cml4OworCituYW1lc3BhY2UgS0RPTQoreworICAgIGNs
YXNzIE5vZGVJbXBsOworICAgIGNsYXNzIERPTVN0cmluZ0ltcGw7CisgICAgY2xhc3MgQXR0cmli
dXRlSW1wbDsKK307CisKK25hbWVzcGFjZSBLU1ZHCit7CisgICAgY2xhc3MgU1ZHTWF0cml4SW1w
bDsKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0SW1wbDsKKyAgICBjbGFzcyBTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3RJbXBsOworICAgIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwgcHVibGljIFNWR1RyYW5zZm9y
bWFibGVJbXBsCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJ
ZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KTsKKyAgICAgICAgdmlydHVhbCB+U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsKCk7CisKKyAgICAgICAgLy8gJ1NWR1RyYW5z
Zm9ybWFibGUnIGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdEltcGwgKnRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeElt
cGwgKmxvY2FsTWF0cml4KCkgY29uc3Q7CisKKyAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnU1ZH
TG9jYXRhYmxlJworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldENUTSgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFNjcmVlbkNUTSgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnRJbXBsICpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudEltcGwgKmZhcnRoZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBTVkdSZWN0SW1wbCAqZ2V0QkJveCgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFRyYW5zZm9ybVRvRWxl
bWVudChTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0dHIpOworCisgICAgICAg
IHZvaWQgdXBkYXRlU3VidHJlZU1hdHJpY2VzKEtET006Ok5vZGVJbXBsICpub2RlKTsKKyAgICAg
ICAgdm9pZCB1cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0SW1wbCAqbG9jYWxU
cmFuc2Zvcm1zKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgbXV0YWJsZSBTVkdNYXRyaXhJ
bXBsICptX2xvY2FsTWF0cml4OworICAgICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdEltcGwgKm1fdHJhbnNmb3JtOworICAgIH07Cit9OworCisjZW5kaWYKKworLy8gdmltOnRz
PTQ6bm9ldApJbmRleDogc3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
dmcvU1ZHVXNlRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHVXNl
RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIAogU1ZHVXNlRWxlbWVudEltcGw6OlNWR1VzZUVsZW1lbnRJbXBsKEtE
T006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3Ry
aW5nSW1wbCAqcHJlZml4KQotOiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgp
LCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkSW1wbCgpLCBTVkdUcmFuc2Zvcm1hYmxlSW1wbCgpLCBTVkdVUklSZWZlcmVuY2VJ
bXBsKCkKKzogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZp
eCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWRJbXBsKCksIFNWR1VSSVJlZmVyZW5jZUltcGwodGhpcykKIHsKICAgICBtX3gg
PSBtX3kgPSBtX3dpZHRoID0gbV9oZWlnaHQgPSAwOwogfQpAQCAtMTEzLDEwICsxMTMsOSBAQAog
ICAgICAgICAgICAgaWYoU1ZHVGVzdHNJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJu
OwogICAgICAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikp
IHJldHVybjsKICAgICAgICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBs
OjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICAgICAgaWYoU1ZHVHJhbnNm
b3JtYWJsZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAgICBp
ZihTVkdVUklSZWZlcmVuY2VJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogCi0g
ICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGw6OnBhcnNlQXR0cmli
dXRlKGF0dHIpOwogICAgICAgICB9CiAgICAgfTsKIH0KSW5kZXg6IHN2Zy9TVkdSZWN0RWxlbWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdSZWN0RWxlbWVudEltcGwuY3BwCShyZXZp
c2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHUmVjdEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIFNWR1JlY3RFbGVt
ZW50SW1wbDo6U1ZHUmVjdEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006
Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQotOiBTVkdTdHls
ZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1Nw
YWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCgpLCBTVkdUcmFuc2Zv
cm1hYmxlSW1wbCgpCis6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbChkb2MsIGlk
LCBwcmVmaXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkSW1wbCgpCiB7CiAgICAgbV94ID0gbV95ID0gbV9yeCA9IG1fcnkg
PSBtX3dpZHRoID0gbV9oZWlnaHQgPSAwOwogfQpAQCAtMTMwLDkgKzEzMCw4IEBACiAgICAgICAg
ICAgICBpZihTVkdUZXN0c0ltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAg
ICAgICAgICBpZihTVkdMYW5nU3BhY2VJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJu
OwogICAgICAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGw6OnBhcnNl
QXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgICAgICBpZihTVkdUcmFuc2Zvcm1hYmxl
SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpOworCisgICAg
ICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGw6OnBhcnNlQXR0cmlidXRl
KGF0dHIpOwogICAgICAgICB9CiAgICAgfTsKIH0KSW5kZXg6IHN2Zy9TVkdTY3JpcHRFbGVtZW50
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAkocmV2
aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAotU1ZHU2Ny
aXB0RWxlbWVudEltcGw6OlNWR1NjcmlwdEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpk
b2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6
IFNWR0VsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1VSSVJlZmVyZW5jZUltcGwoKSwg
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQorU1ZHU2NyaXB0RWxlbWVudEltcGw6
OlNWR1NjcmlwdEVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJ
bXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IFNWR0VsZW1lbnRJbXBs
KGRvYywgaWQsIHByZWZpeCksIFNWR1VSSVJlZmVyZW5jZUltcGwoMCksIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWRJbXBsKCkKIHsKICAgICBtX3R5cGUgPSAwOwogfQpJbmRleDogc3ZnL1NW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBzdmcvU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudEltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYg
S1NWR19TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudEltcGxfSAorCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudElt
cGwuaCIKKyNpbmNsdWRlICJTVkdMb2NhdGFibGVJbXBsLmgiCisKK25hbWVzcGFjZSBLU1ZHCit7
CisgICAgY2xhc3MgU1ZHUmVjdEltcGw7CisgICAgY2xhc3MgU1ZHTWF0cml4SW1wbDsKKyAgICBj
bGFzcyBTVkdFbGVtZW50SW1wbDsKKyAgICBjbGFzcyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwgcHVibGljIFNWR0xvY2F0YWJsZUlt
cGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
SW1wbChLRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006
OkRPTVN0cmluZ0ltcGwgKnByZWZpeCk7CisgICAgICAgIHZpcnR1YWwgflNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnRJbXBsKCk7CisKKyAgICAgICAgLy8gJ1NWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQnIGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIFNWR0VsZW1lbnRJbXBsICpuZWFyZXN0Vmll
d3BvcnRFbGVtZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudEltcGwgKmZh
cnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBTVkdSZWN0
SW1wbCAqZ2V0QkJveCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdl
dENUTSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFNjcmVlbkNU
TSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeEltcGwgKmdldFRyYW5zZm9ybVRv
RWxlbWVudChTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkgY29uc3Q7CisgICAgfTsKK307CisKKyNl
bmRpZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBzdmcvU1ZHVHJhbnNmb3JtYWJsZUltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlSW1wbC5jcHAJKHJldmlzaW9u
IDQ2ODU2MikKKysrIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDExOSArNDEsMTIgQEAKIAogU1ZHVHJhbnNmb3JtYWJsZUltcGw6OlNWR1RyYW5zZm9y
bWFibGVJbXBsKCkgOiBTVkdMb2NhdGFibGVJbXBsKCkKIHsKLSAgICBtX3RyYW5zZm9ybSA9IDA7
Ci0gICAgbV9sb2NhbE1hdHJpeCA9IDA7CiB9CiAKIFNWR1RyYW5zZm9ybWFibGVJbXBsOjp+U1ZH
VHJhbnNmb3JtYWJsZUltcGwoKQogewotICAgIGlmKG1fdHJhbnNmb3JtKQotICAgICAgICBtX3Ry
YW5zZm9ybS0+ZGVyZWYoKTsKLSAgICBpZihtX2xvY2FsTWF0cml4KQotICAgICAgICBtX2xvY2Fs
TWF0cml4LT5kZXJlZigpOwogfQogCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RJbXBsICpTVkdU
cmFuc2Zvcm1hYmxlSW1wbDo6dHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBjb25zdCBTVkdTdHls
ZWRFbGVtZW50SW1wbCAqY29udGV4dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVt
ZW50SW1wbCAqPih0aGlzKTsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0SW1wbD4obV90cmFuc2Zvcm0sIGNvbnRleHQpOwotfQotCi1TVkdNYXRyaXhJbXBs
ICpTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6bG9jYWxNYXRyaXgoKSBjb25zdAotewotICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdNYXRyaXhJbXBsPihtX2xvY2FsTWF0cml4KTsKLX0KLQotU1ZHTWF0
cml4SW1wbCAqU1ZHVHJhbnNmb3JtYWJsZUltcGw6OmdldENUTSgpIGNvbnN0Ci17Ci0gICAgU1ZH
TWF0cml4SW1wbCAqY3RtID0gU1ZHTG9jYXRhYmxlSW1wbDo6Z2V0Q1RNKCk7Ci0KLSAgICBpZiht
X2xvY2FsTWF0cml4KQotICAgICAgICBjdG0tPm11bHRpcGx5KG1fbG9jYWxNYXRyaXgpOwotCi0g
ICAgcmV0dXJuIGN0bTsKLX0KLQotU1ZHTWF0cml4SW1wbCAqU1ZHVHJhbnNmb3JtYWJsZUltcGw6
OmdldFNjcmVlbkNUTSgpIGNvbnN0Ci17Ci0gICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gU1ZHTG9j
YXRhYmxlSW1wbDo6Z2V0U2NyZWVuQ1RNKCk7Ci0KLSAgICBpZihtX2xvY2FsTWF0cml4KQotICAg
ICAgICBjdG0tPm11bHRpcGx5KG1fbG9jYWxNYXRyaXgpOwotCi0gICAgcmV0dXJuIGN0bTsKLX0K
LQotdm9pZCBTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6dXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJh
bnNmb3JtTGlzdEltcGwgKmxvY2FsVHJhbnNmb3JtcykKLXsKLSAgICAvLyBVcGRhdGUgY2FjaGVk
IGxvY2FsIG1hdHJpeAotICAgIFNWR1RyYW5zZm9ybUltcGwgKmxvY2FsVHJhbnNmb3JtID0gbG9j
YWxUcmFuc2Zvcm1zLT5jb25jYXRlbmF0ZSgpOwotICAgIGlmKGxvY2FsVHJhbnNmb3JtKQotICAg
IHsKLSAgICAgICAgbG9jYWxUcmFuc2Zvcm0tPnJlZigpOwotICAgICAgICAKLSAgICAgICAgS0RP
TV9TQUZFX1NFVChtX2xvY2FsTWF0cml4LCBsb2NhbFRyYW5zZm9ybS0+bWF0cml4KCkpOwotCi0g
ICAgICAgIGxvY2FsVHJhbnNmb3JtLT5kZXJlZigpOwotICAgIH0KLX0KLQotdm9pZCBTVkdUcmFu
c2Zvcm1hYmxlSW1wbDo6dXBkYXRlU3VidHJlZU1hdHJpY2VzKEtET006Ok5vZGVJbXBsICpub2Rl
KQotewotICAgIGlmKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXJzdCB1cGRh
dGUgbG9jYWwgbWF0cml4Li4uCi0gICAgU1ZHU3R5bGVkRWxlbWVudEltcGwgKnN0eWxlZCA9IGR5
bmFtaWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICBTVkdUcmFuc2Zv
cm1hYmxlSW1wbCAqdHJhbnNmb3JtID0gZHluYW1pY19jYXN0PFNWR1RyYW5zZm9ybWFibGVJbXBs
ICo+KG5vZGUpOwotCi0gICAgaWYoc3R5bGVkICYmIHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0tPmxv
Y2FsTWF0cml4KCkpCi0gICAgewotICAgICAgICBRTWF0cml4IHVzZU1hdHJpeCA9IHRyYW5zZm9y
bS0+bG9jYWxNYXRyaXgoKS0+cW1hdHJpeCgpOwotICAgIAotICAgICAgICBLRE9NOjpOb2RlSW1w
bCAqcGFyZW50RWxlbWVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYocGFyZW50
RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5pZCgpID09IElEX0cpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFNWR01hdHJpeEltcGwgKmN0bSA9IHRyYW5zZm9ybS0+Z2V0Q1RNKCk7Ci0gICAgICAg
ICAgICBjdG0tPnJlZigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdXNlTWF0cml4
ICo9IGN0bS0+cW1hdHJpeCgpOwotCi0gICAgICAgICAgICBjdG0tPmRlcmVmKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdHlsZWQtPnVwZGF0ZUNUTSh1c2VNYXRyaXgpOwotICAgIH0KLQotICAg
IC8vIC4uLiB0aGVuIHVwZGF0ZSB0aGUgd2hvbGUgc3VidHJlZSwgaWYgcG9zc2libGUuCi0gICAg
Zm9yKEtET006Ok5vZGVJbXBsICpuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBu
LT5uZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVTdWJ0cmVlTWF0cmljZXMobik7Ci19Ci0K
LWJvb2wgU1ZHVHJhbnNmb3JtYWJsZUltcGw6OnBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0
ZUltcGwgKmF0dHIpCi17Ci0gICAgaW50IGlkID0gKGF0dHItPmlkKCkgJiBOb2RlSW1wbF9JZExv
Y2FsTWFzayk7Ci0gICAgaWYoaWQgPT0gQVRUUl9UUkFOU0ZPUk0pCi0gICAgewotICAgICAgICBT
VkdUcmFuc2Zvcm1MaXN0SW1wbCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtKCktPmJhc2VW
YWwoKTsKLSAgICAgICAgCi0gICAgICAgIGxvY2FsVHJhbnNmb3Jtcy0+Y2xlYXIoKTsKLSAgICAg
ICAgU1ZHVHJhbnNmb3JtYWJsZUltcGw6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKGxvY2FsVHJh
bnNmb3JtcywgYXR0ci0+dmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIGNhY2hlZCBsb2Nh
bCBtYXRyaXgKLSAgICAgICAgdXBkYXRlTG9jYWxUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm1zKTsK
LQotICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbCAqc3R5bGVkRWxlbWVudCA9IGR5bmFtaWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0aGlzKTsKLSAgICAgICAgaWYoIXN0eWxlZEVs
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAg
dXBkYXRlU3VidHJlZU1hdHJpY2VzKHN0eWxlZEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHVHJhbnNmb3JtYWJs
ZUltcGw6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKFNWR1RyYW5zZm9ybUxpc3RJbXBsICpsaXN0
LCBLRE9NOjpET01TdHJpbmdJbXBsICp0cmFuc2Zvcm0pCiB7CiAgICAgaWYoIXRyYW5zZm9ybSkK
SW5kZXg6IHN2Zy9TVkdQb2x5RWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHUG9s
eUVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdQb2x5RWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDE2IEBACiAjaW5jbHVkZSAiU1ZHVGVz
dHNJbXBsLmgiCiAjaW5jbHVkZSAic3ZncGF0aHBhcnNlci5oIgogI2luY2x1ZGUgIlNWR0xhbmdT
cGFjZUltcGwuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgotI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybWFibGVJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQb2ludHNJbXBsLmgiCiAjaW5j
bHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuaCIKIAogbmFtZXNwYWNlIEtT
VkcKIHsKLSAgICBjbGFzcyBTVkdQb2x5RWxlbWVudEltcGwgOiAgcHVibGljIFNWR1N0eWxlZEVs
ZW1lbnRJbXBsLAorICAgIGNsYXNzIFNWR1BvbHlFbGVtZW50SW1wbCA6ICBwdWJsaWMgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHVGVzdHNJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHTGFuZ1NwYWNlSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZUltcGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdBbmltYXRlZFBvaW50c0ltcGws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdQb2x5UGFyc2VyCiAg
ICAgewpJbmRleDogc3ZnL1NWR1BhdGhFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9T
VkdQYXRoRWxlbWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR1BhdGhFbGVt
ZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSAiU1ZH
VGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAic3ZncGF0aHBhcnNlci5oIgogI2luY2x1ZGUgIlNWR0xh
bmdTcGFjZUltcGwuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgotI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybWFibGVJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQYXRoRGF0YUltcGwuaCIK
ICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbC5oIgogCkBAIC01NSwx
MSArNTQsMTAgQEAKICAgICBjbGFzcyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsSW1w
bDsKICAgICBjbGFzcyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFic0ltcGw7CiAg
ICAgY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxJbXBsOwotICAgIGNs
YXNzIFNWR1BhdGhFbGVtZW50SW1wbCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50SW1wbCwKKyAg
ICBjbGFzcyBTVkdQYXRoRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnRJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdU
ZXN0c0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZUltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdUcmFuc2Zvcm1hYmxlSW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHQW5pbWF0ZWRQYXRoRGF0YUltcGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1BhdGhQYXJzZXIKICAgICB7CkluZGV4OiBzdmcvU1ZHU3dp
dGNoRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTd2l0Y2hFbGVtZW50SW1w
bC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdTd2l0Y2hFbGVtZW50SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
CiBTVkdTd2l0Y2hFbGVtZW50SW1wbDo6U1ZHU3dpdGNoRWxlbWVudEltcGwoS0RPTTo6RG9jdW1l
bnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpw
cmVmaXgpCi06IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1Rlc3Rz
SW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJ
bXBsKCksIFNWR1RyYW5zZm9ybWFibGVJbXBsKCkKKzogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJ
bXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsKCkKIHsKIH0KIApJbmRleDog
c3ZnL1NWR1NWR0VsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1NWR0VsZW1lbnRJ
bXBsLmgJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9TVkdTVkdFbGVtZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMCArMjksOSBAQAogCiAjaW5jbHVkZSAiU1ZHVGVzdHNJbXBsLmgi
CiAjaW5jbHVkZSAiU1ZHTGFuZ1NwYWNlSW1wbC5oIgotI2luY2x1ZGUgIlNWR0xvY2F0YWJsZUlt
cGwuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3hJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHWm9v
bUFuZFBhbkltcGwuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50SW1wbC5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwuaCIKIAogbmFtZXNwYWNlIEtET00KQEAgLTUyLDExICs1
MSwxMCBAQAogICAgIGNsYXNzIFNWR01hdHJpeEltcGw7CiAgICAgY2xhc3MgU1ZHVHJhbnNmb3Jt
SW1wbDsKICAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aEltcGw7Ci0gICAgY2xhc3MgU1ZHU1ZH
RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudEltcGwsCisgICAgY2xhc3MgU1ZH
U1ZHRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHNJbXBsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZUltcGwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZEltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTG9jYXRhYmxl
SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdGaXRUb1ZpZXdC
b3hJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1pvb21BbmRQ
YW5JbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEtET006OkRvY3Vt
ZW50RXZlbnRJbXBsCkluZGV4OiBzdmcvU1ZHVVJJUmVmZXJlbmNlSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc3ZnL1NWR1VSSVJlZmVyZW5jZUltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBz
dmcvU1ZHVVJJUmVmZXJlbmNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEw
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCi1TVkdVUklSZWZlcmVuY2VJbXBsOjpTVkdV
UklSZWZlcmVuY2VJbXBsKCkKK1NWR1VSSVJlZmVyZW5jZUltcGw6OlNWR1VSSVJlZmVyZW5jZUlt
cGwoY29uc3QgU1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQpCiB7CiAgICAgbV9ocmVmID0g
MDsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OwogfQogCiBTVkdVUklSZWZlcmVuY2VJbXBsOjp+
U1ZHVVJJUmVmZXJlbmNlSW1wbCgpCkBAIC00NCw4ICs0NSw3IEBACiAKIFNWR0FuaW1hdGVkU3Ry
aW5nSW1wbCAqU1ZHVVJJUmVmZXJlbmNlSW1wbDo6aHJlZigpIGNvbnN0CiB7Ci0gICAgY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudEltcGwgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5
bGVkRWxlbWVudEltcGwgKj4odGhpcyk7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkU3RyaW5nSW1wbD4obV9ocmVmLCBjb250ZXh0KTsKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRTdHJpbmdJbXBsPihtX2hyZWYsIG1fY29udGV4dCk7CiB9CiAKIGJvb2wgU1ZH
VVJJUmVmZXJlbmNlSW1wbDo6cGFyc2VBdHRyaWJ1dGUoS0RPTTo6QXR0cmlidXRlSW1wbCAqYXR0
cikKSW5kZXg6IHN2Zy9TVkdTdHlsZWRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9T
VkdTdHlsZWRFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHU3R5bGVk
RWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQAogICAgICAgICBm
cmllbmQgY2xhc3MgU1ZHTGVuZ3RoSW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4u
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTVkdEb2N1bWVudEltcGw7IC8vIE5lZWRzIHJlbmRlclN0
eWxlIGFjY2Vzcy4uLgogICAgICAgICBmcmllbmQgY2xhc3MgU1ZHQ2xpcFBhdGhFbGVtZW50SW1w
bDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KKyAgICAgICAgZnJpZW5kIGNsYXNzIFNW
R1RleHRFbGVtZW50SW1wbDsgLy8gTmVlZHMgcmVuZGVyU3R5bGUgYWNjZXNzLi4KIAogICAgICAg
ICBLQ2FudmFzICpjYW52YXMoKSBjb25zdDsKICAgICAgICAgS0NhbnZhc1ZpZXcgKmNhbnZhc1Zp
ZXcoKSBjb25zdDsKSW5kZXg6IHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsLmNwcAkocmV2
aXNpb24gMCkKKysrIHN2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1ZGUgPGtkb20va2RvbS5oPgorI2luY2x1ZGUg
IlNWR1JlY3RJbXBsLmgiCisjaW5jbHVkZSAiU1ZHTWF0cml4SW1wbC5oIgorI2luY2x1ZGUgIlNW
R0VsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGwu
aCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50SW1wbC5oIgorCisjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzSXRlbS5oPgorCit1c2luZyBuYW1lc3BhY2UgS1NWRzsKKworU1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudEltcGw6OlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsKEtET006OkRvY3Vt
ZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAq
cHJlZml4KQorOiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdMb2Nh
dGFibGVJbXBsKCkKK3sKK30KKworU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGw6On5TVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbCgpCit7Cit9CisKK1NWR0VsZW1lbnRJbXBsICpTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbDo6bmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFNWR0xvY2F0YWJsZUltcGw6Om5lYXJlc3RWaWV3cG9ydEVsZW1lbnQo
dGhpcyk7Cit9CisKK1NWR0VsZW1lbnRJbXBsICpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1w
bDo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBTVkdMb2Nh
dGFibGVJbXBsOjpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCh0aGlzKTsKK30KKworU1ZHUmVjdElt
cGwgKlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRCQm94KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gU1ZHTG9jYXRhYmxlSW1wbDo6Z2V0QkJveCh0aGlzKTsKK30KKworU1ZHTWF0cml4
SW1wbCAqU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGw6OmdldENUTSgpIGNvbnN0Cit7Cisg
ICAgU1ZHTWF0cml4SW1wbCAqY3RtID0gU1ZHU1ZHRWxlbWVudEltcGw6OmNyZWF0ZVNWR01hdHJp
eCgpOworCisgICAgS0RPTTo6Tm9kZUltcGwgKnBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICBp
ZihwYXJlbnQgJiYgcGFyZW50LT5ub2RlVHlwZSgpID09IEtET006OkVMRU1FTlRfTk9ERSkKKyAg
ICB7CisgICAgICAgIFNWR0VsZW1lbnRJbXBsICpwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudEltcGwgKj4ocGFyZW50KTsKKyAgICAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudEltcGwgKnBhcmVudExvY2F0YWJsZSA9IGR5bmFtaWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFi
bGVFbGVtZW50SW1wbCAqPihwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgaWYocGFyZW50TG9jYXRh
YmxlKQorICAgICAgICB7CisgICAgICAgICAgICBTVkdNYXRyaXhJbXBsICpwYXJlbnRDVE0gPSBw
YXJlbnRMb2NhdGFibGUtPmdldENUTSgpOworICAgICAgICAgICAgcGFyZW50Q1RNLT5yZWYoKTsK
KyAgICAgICAgICAgIGN0bS0+bXVsdGlwbHkocGFyZW50Q1RNKTsKKyAgICAgICAgICAgIHBhcmVu
dENUTS0+ZGVyZWYoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjdG07Cit9CisK
K1NWR01hdHJpeEltcGwgKlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRTY3JlZW5D
VE0oKSBjb25zdAoreworICAgIFNWR01hdHJpeEltcGwgKmN0bSA9IFNWR1NWR0VsZW1lbnRJbXBs
OjpjcmVhdGVTVkdNYXRyaXgoKTsKKworICAgIEtET006Ok5vZGVJbXBsICpwYXJlbnQgPSBwYXJl
bnROb2RlKCk7CisgICAgaWYocGFyZW50ICYmIHBhcmVudC0+bm9kZVR5cGUoKSA9PSBLRE9NOjpF
TEVNRU5UX05PREUpCisgICAgeworICAgICAgICBTVkdFbGVtZW50SW1wbCAqcGFyZW50RWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KHBhcmVudCk7CisgICAgICAgIFNWR0xv
Y2F0YWJsZUltcGwgKnBhcmVudExvY2F0YWJsZSA9IGR5bmFtaWNfY2FzdDxTVkdMb2NhdGFibGVJ
bXBsICo+KHBhcmVudEVsZW1lbnQpOworICAgICAgICBpZihwYXJlbnRMb2NhdGFibGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNWR01hdHJpeEltcGwgKnBhcmVudENUTSA9IHBhcmVudExvY2F0
YWJsZS0+Z2V0U2NyZWVuQ1RNKCk7CisgICAgICAgICAgICBwYXJlbnRDVE0tPnJlZigpOworICAg
ICAgICAgICAgY3RtLT5tdWx0aXBseShwYXJlbnRDVE0pOworICAgICAgICAgICAgcGFyZW50Q1RN
LT5kZXJlZigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGN0bTsKK30KKworU1ZH
TWF0cml4SW1wbCAqU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudEltcGw6OmdldFRyYW5zZm9ybVRv
RWxlbWVudChTVkdFbGVtZW50SW1wbCAqKSBjb25zdAoreworICAgIC8vIFRPRE8hCisgICAgcmV0
dXJuIDA7Cit9CisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IHN2Zy9TVkdIZWxwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHN2Zy9TVkdIZWxwZXIuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcv
U1ZHSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQAogICAgIGlmKCF2
aWV3cG9ydEVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwLjA7CiAgCi0gICAgY29uc3QgU1ZHU1ZH
RWxlbWVudEltcGwgKnN2ZyA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTVkdFbGVtZW50SW1wbCAq
Pih2aWV3cG9ydEVsZW1lbnQpOwotICAgIGlmKHN2ZykKKyAgICBpZih2aWV3cG9ydEVsZW1lbnQg
JiYgdmlld3BvcnRFbGVtZW50LT5pZCgpID09IElEX1NWRykKICAgICB7CisgICAgICAgIGNvbnN0
IFNWR1NWR0VsZW1lbnRJbXBsICpzdmcgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdTVkdFbGVtZW50
SW1wbCAqPih2aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBLRE9NOjpET01TdHJpbmcgdmlld0Jv
eCgidmlld0JveCIpOwogICAgICAgICBpZihzdmctPmhhc0F0dHJpYnV0ZSh2aWV3Qm94LmhhbmRs
ZSgpKSkKICAgICAgICAgewpJbmRleDogc3ZnL1NWR1BvbHlFbGVtZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gc3ZnL1NWR1BvbHlFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysr
IHN2Zy9TVkdQb2x5RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBACiB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogU1ZHUG9seUVsZW1lbnRJbXBsOjpTVkdQb2x5
RWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlk
LCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpCi06IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRv
YywgaWQsIHByZWZpeCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsKCksIFNWR1RyYW5zZm9ybWFibGVJbXBsKCksIFNW
R0FuaW1hdGVkUG9pbnRzSW1wbCgpLCBTVkdQb2x5UGFyc2VyKCkKKzogU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdM
YW5nU3BhY2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsKCksIFNWR0Fu
aW1hdGVkUG9pbnRzSW1wbCgpLCBTVkdQb2x5UGFyc2VyKCkKIHsKICAgICBtX3BvaW50cyA9IDA7
CiB9CkBAIC02OSw5ICs2OSw4IEBACiAgICAgICAgICAgICBpZihTVkdUZXN0c0ltcGw6OnBhcnNl
QXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgICAgICBpZihTVkdMYW5nU3BhY2VJbXBs
OjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogICAgICAgICAgICAgaWYoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0g
ICAgICAgICAgICBpZihTVkdUcmFuc2Zvcm1hYmxlSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikp
IHJldHVybjsKIAotICAgICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudEltcGw6OnBhcnNlQXR0cmli
dXRlKGF0dHIpOworICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBs
OjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgfQogICAgIH07CiB9CkluZGV4OiBzdmcv
U1ZHR0VsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHR0VsZW1lbnRJbXBsLmNw
cAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0dFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKLVNWR0dF
bGVtZW50SW1wbDo6U1ZHR0VsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006
Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KSA6IFNWR1N0eWxl
ZEVsZW1lbnRJbXBsKGRvYywgaWQsIHByZWZpeCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3Bh
Y2VJbXBsKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsKCksIFNWR1RyYW5zZm9y
bWFibGVJbXBsKCkKK1NWR0dFbGVtZW50SW1wbDo6U1ZHR0VsZW1lbnRJbXBsKEtET006OkRvY3Vt
ZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAq
cHJlZml4KQorOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwgcHJl
Zml4KSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZEltcGwoKQogewogfQogCkBAIC00Miw5ICs0Myw4IEBACiAgICAgaWYoU1ZH
VGVzdHNJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogICAgIGlmKFNWR0xhbmdT
cGFjZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgaWYoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0g
ICAgaWYoU1ZHVHJhbnNmb3JtYWJsZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47
CiAKLSAgICBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cik7CisgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsK
IH0KIAogdm9pZCBTVkdHRWxlbWVudEltcGw6OnNldENoYW5nZWQoYm9vbCBiLCBib29sKQpJbmRl
eDogc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdUZXh0RWxl
bWVudEltcGwuaAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMzUgQEAKIAogbmFtZXNwYWNlIEtTVkcKIHsK
LSAgICBjbGFzcyBTVkdUZXh0RWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudEltcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Ry
YW5zZm9ybWFibGVJbXBsCisgICAgY2xhc3MgU1ZHVGV4dEVsZW1lbnRJbXBsIDogcHVibGljIFNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnRJbXBsLCBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJsZUltcGwK
ICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdUZXh0RWxlbWVudEltcGwoS0RPTTo6RG9j
dW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCAgS0RPTTo6RE9NU3RyaW5nSW1w
bCAqcHJlZml4KTsKICAgICAgICAgdmlydHVhbCB+U1ZHVGV4dEVsZW1lbnRJbXBsKCk7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKEtET006OkF0dHJpYnV0ZUltcGwgKmF0
dHIpOworCiAgICAgICAgIC8vICdTVkdUZXh0RWxlbWVudCcgZnVuY3Rpb25zCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FudmFzSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICAgICAgdmlydHVhbCBLQ2FudmFzSXRlbSAqY3JlYXRlQ2FudmFzSXRlbShLQ2FudmFzICpj
YW52YXMsIEtSZW5kZXJpbmdTdHlsZSAqc3R5bGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisKKyAgICAgICAgdmlydHVhbCBTVkdFbGVtZW50
SW1wbCAqbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNW
R0VsZW1lbnRJbXBsICpmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgU1ZHUmVjdEltcGwgKmdldEJCb3goKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBT
VkdNYXRyaXhJbXBsICpnZXRDVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJ
bXBsICpnZXRTY3JlZW5DVE0oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTVkdNYXRyaXhJbXBs
ICpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdElt
cGwgKnRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCBTVkdN
YXRyaXhJbXBsICpsb2NhbE1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgbXV0YWJsZSBTVkdNYXRyaXhJbXBsICptX2xvY2FsTWF0cml4OworICAg
ICAgICBtdXRhYmxlIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdEltcGwgKm1fdHJhbnNmb3JtOwog
ICAgIH07CiB9OwogCkluZGV4OiBzdmcvU1ZHU1ZHRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHN2Zy9TVkdTVkdFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikKKysrIHN2Zy9T
VkdTVkdFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAKIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBTVkdTVkdFbGVtZW50SW1wbDo6U1ZHU1ZHRWxlbWVudElt
cGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6OklkIGlkLCBLRE9NOjpE
T01TdHJpbmdJbXBsICpwcmVmaXgpCi06IFNWR1N0eWxlZEVsZW1lbnRJbXBsKGRvYywgaWQsIHBy
ZWZpeCksIFNWR1Rlc3RzSW1wbCgpLCBTVkdMYW5nU3BhY2VJbXBsKCksCi0gIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWRJbXBsKCksIFNWR0xvY2F0YWJsZUltcGwoKSwgU1ZHRml0VG9WaWV3
Qm94SW1wbCgpLAorOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVm
aXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLAorICBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkSW1wbCgpLCBTVkdGaXRUb1ZpZXdCb3hJbXBsKCksCiAgIFNWR1pvb21B
bmRQYW5JbXBsKCksIEtET006OkRvY3VtZW50RXZlbnRJbXBsKCkKIHsKICAgICBtX2NsaXBwZXIg
PSAwOwpAQCAtMzU2LDExICszNTYsNyBAQAogYm9vbCBTVkdTVkdFbGVtZW50SW1wbDo6Y2hlY2tJ
bnRlcnNlY3Rpb24oU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQsIFNWR1JlY3RJbXBsICpyZWN0KQog
ewogICAgIC8vIFRPRE8gOiB0YWtlIGludG8gYWNjb3VudCBwb2ludGVyLWV2ZW50cz8KLSAgICBT
VkdMb2NhdGFibGVJbXBsICplID0gZHluYW1pY19jYXN0PFNWR0xvY2F0YWJsZUltcGwgKj4oZWxl
bWVudCk7Ci0gICAgaWYoIWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNWR1JlY3RJ
bXBsICpiYm94ID0gZS0+Z2V0QkJveCgpOworICAgIFNWR1JlY3RJbXBsICpiYm94ID0gZ2V0QkJv
eCgpOwogICAgIGJib3gtPnJlZigpOwogCiAgICAgUVJlY3QgcihpbnQocmVjdC0+eCgpKSwgaW50
KHJlY3QtPnkoKSksIGludChyZWN0LT53aWR0aCgpKSwgaW50KHJlY3QtPmhlaWdodCgpKSk7CkBA
IC0zNzMsMTEgKzM2OSw3IEBACiBib29sIFNWR1NWR0VsZW1lbnRJbXBsOjpjaGVja0VuY2xvc3Vy
ZShTVkdFbGVtZW50SW1wbCAqZWxlbWVudCwgU1ZHUmVjdEltcGwgKnJlY3QpCiB7CiAgICAgLy8g
VE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZlbnRzPwotICAgIFNWR0xvY2F0YWJs
ZUltcGwgKmUgPSBkeW5hbWljX2Nhc3Q8U1ZHTG9jYXRhYmxlSW1wbCAqPihlbGVtZW50KTsKLSAg
ICBpZighZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFNWR1JlY3RJbXBsICpi
Ym94ID0gZS0+Z2V0QkJveCgpOworICAgIFNWR1JlY3RJbXBsICpiYm94ID0gZ2V0QkJveCgpOwog
ICAgIGJib3gtPnJlZigpOwogICAgICAgICAKICAgICBRUmVjdCByKGludChyZWN0LT54KCkpLCBp
bnQocmVjdC0+eSgpKSwgaW50KHJlY3QtPndpZHRoKCkpLCBpbnQocmVjdC0+aGVpZ2h0KCkpKTsK
QEAgLTQ1OCw3ICs0NTAsNyBAQAogCiBTVkdNYXRyaXhJbXBsICpTVkdTVkdFbGVtZW50SW1wbDo6
Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsKLSAgICBTVkdNYXRyaXhJbXBsICptYXQgPSBTVkdMb2Nh
dGFibGVJbXBsOjpnZXRTY3JlZW5DVE0oKTsKKyAgICBTVkdNYXRyaXhJbXBsICptYXQgPSBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAgaWYobWF0KQog
ICAgIHsKICAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHko
KS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKQEAgLTUwNiw3ICs0OTgsNyBAQAogCiAgICAgLy8gV2Ug
aGF2ZSB0byBhcHBseSB0aGUgbWF0cml4IHRyYW5zZm9ybWF0aW9uIGhlcmUsIGFzIHRoaXMgPHN2
Zz4gbWF5IGJlIHNvbWUKICAgICAvLyBpbm5lciB2aWV3cG9ydCwgd2hpY2ggaGFzIGEgY2VydGFp
biAnY3RtIG1hdHJpeCcsIHRoYXQgd2UgaGF2ZSB0byByZXNwZWN0LgotICAgIFNWR01hdHJpeElt
cGwgKmN0bSA9IFNWR0xvY2F0YWJsZUltcGw6OmdldFNjcmVlbkNUTSgpOworICAgIFNWR01hdHJp
eEltcGwgKmN0bSA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRTY3JlZW5DVE0o
KTsKIAogICAgIEtDYW52YXNNYXRyaXggbWF0cml4ID0gY3RtLT5xbWF0cml4KCk7CiAgICAgS0NQ
YXRoRGF0YUxpc3QgcGF0aERhdGEgPSBtYXRyaXgubWFwKEtDYW52YXNDcmVhdG9yOjpzZWxmKCkt
PmNyZWF0ZVJlY3RhbmdsZShfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwpJbmRleDogc3ZnL1NW
R0NpcmNsZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHQ2lyY2xlRWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiA0Njg1NjIpCisrKyBzdmcvU1ZHQ2lyY2xlRWxlbWVudEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIAogU1ZHQ2lyY2xlRWxlbWVudEltcGw6OlNWR0NpcmNsZUVsZW1lbnRJbXBsKEtET006OkRv
Y3VtZW50UHRyICpkb2MsIEtET006Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1w
bCAqcHJlZml4KQotOiBTVkdTdHlsZWRFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdU
ZXN0c0ltcGwoKSwgU1ZHTGFuZ1NwYWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkSW1wbCgpLCBTVkdUcmFuc2Zvcm1hYmxlSW1wbCgpCis6IFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHTGFuZ1Nw
YWNlSW1wbCgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCgpCiB7CiAgICAgbV9j
eCA9IG1fY3kgPSBtX3IgPSAwOwogfQpAQCAtODksOSArODksOCBAQAogICAgICAgICAgICAgaWYo
U1ZHVGVzdHNJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwogICAgICAgICAgICAg
aWYoU1ZHTGFuZ1NwYWNlSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKICAgICAg
ICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRJbXBsOjpwYXJzZUF0dHJpYnV0
ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICAgICAgaWYoU1ZHVHJhbnNmb3JtYWJsZUltcGw6OnBh
cnNlQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsKKworICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnRJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKTsK
ICAgICAgICAgfQogICAgIH07CiB9CkluZGV4OiBzdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3ZnL1NWR0VsbGlwc2VFbGVtZW50SW1wbC5oCShyZXZpc2lvbiA0Njg1
NjIpCisrKyBzdmcvU1ZHRWxsaXBzZUVsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE4ICsyNSwxNiBAQAogCiAjaW5jbHVkZSAiU1ZHVGVzdHNJbXBsLmgiCiAjaW5jbHVkZSAiU1ZH
TGFuZ1NwYWNlSW1wbC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnRJbXBsLmgiCi0jaW5j
bHVkZSAiU1ZHVHJhbnNmb3JtYWJsZUltcGwuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkSW1wbC5oIgogCiBuYW1lc3BhY2UgS1NWRwogewogICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVu
Z3RoSW1wbDsKLSAgICBjbGFzcyBTVkdFbGxpcHNlRWxlbWVudEltcGwgOiBwdWJsaWMgU1ZHU3R5
bGVkRWxlbWVudEltcGwsCisgICAgY2xhc3MgU1ZHRWxsaXBzZUVsZW1lbnRJbXBsIDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHNJbXBsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2VJbXBsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVHJhbnNmb3JtYWJs
ZUltcGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdF
bGxpcHNlRWxlbWVudEltcGwoS0RPTTo6RG9jdW1lbnRQdHIgKmRvYywgS0RPTTo6Tm9kZUltcGw6
OklkIGlkLCBLRE9NOjpET01TdHJpbmdJbXBsICpwcmVmaXgpOwpJbmRleDogc3ZnL1NWR0NsaXBQ
YXRoRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdDbGlwUGF0aEVsZW1lbnRJ
bXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0NsaXBQYXRoRWxlbWVudEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIAogU1ZHQ2xpcFBhdGhFbGVtZW50SW1wbDo6U1ZHQ2xpcFBhdGhFbGVtZW50SW1wbChLRE9N
OjpEb2N1bWVudFB0ciAqZG9jLCBLRE9NOjpOb2RlSW1wbDo6SWQgaWQsIEtET006OkRPTVN0cmlu
Z0ltcGwgKnByZWZpeCkKLTogU1ZHU3R5bGVkRWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KSwg
U1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEltcGwoKSwgU1ZHVHJhbnNmb3JtYWJsZUltcGwoKQorOiBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudEltcGwoZG9jLCBpZCwgcHJlZml4KSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xh
bmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQogewogICAg
IG1fY2xpcFBhdGhVbml0cyA9IDA7CiAgICAgbV9jbGlwcGVyID0gMDsKQEAgLTgwLDkgKzgwLDgg
QEAKICAgICAgICAgICAgIGlmKFNWR1Rlc3RzSW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJl
dHVybjsKICAgICAgICAgICAgIGlmKFNWR0xhbmdTcGFjZUltcGw6OnBhcnNlQXR0cmlidXRlKGF0
dHIpKSByZXR1cm47CiAgICAgICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgICAgIGlmKFNWR1Ry
YW5zZm9ybWFibGVJbXBsOjpwYXJzZUF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTVkdTdHlsZWRFbGVtZW50SW1wbDo6cGFyc2VBdHRyaWJ1dGUoYXR0
cik7CisKKyAgICAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1wbDo6cGFy
c2VBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIH0KICAgICB9OwogfQpAQCAtMTEzLDYgKzExMiw4
IEBACiAgICAgICAgICAgICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKGUtPnRvUGF0aERhdGEoKSwg
KEtDV2luZFJ1bGUpIHJlbmRlclN0eWxlLT5jbGlwUnVsZSgpLCBiYm94KTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIFNWR0VsZW1lbnRJbXBsOjpjbG9zZSgpOwogfQogCiAvLyB2aW06dHM9NDpu
b2V0CkluZGV4OiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
dmcvU1ZHRkVNZXJnZUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAK
IAogICAgIGlmKG1fZmlsdGVyRWZmZWN0KSAvLyB3ZSBtYXkgbm90IGJlIGF0dGFjaGVkLi4uCiAg
ICAgICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRNZXJnZUlucHV0cyhtZXJnZUlucHV0cyk7CisKKyAg
ICBTVkdFbGVtZW50SW1wbDo6Y2xvc2UoKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
c3ZnL1NWR0xvY2F0YWJsZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdMb2NhdGFibGVJ
bXBsLmNwcAkocmV2aXNpb24gNDY4NTYyKQorKysgc3ZnL1NWR0xvY2F0YWJsZUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw4IEBACiB7CiB9CiAKLVNWR0VsZW1lbnRJbXBsICpT
VkdMb2NhdGFibGVJbXBsOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3QKK1NWR0VsZW1l
bnRJbXBsICpTVkdMb2NhdGFibGVJbXBsOjpuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnRJbXBsICplKQogewotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBs
ICplID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnRJbXBsICo+KHRoaXMpOwog
ICAgIEtET006Ok5vZGVJbXBsICpuID0gZS0+cGFyZW50Tm9kZSgpOwogICAgIHdoaWxlKG4gJiYg
bi0+bm9kZVR5cGUoKSAhPSBLRE9NOjpET0NVTUVOVF9OT0RFKQogICAgIHsKQEAgLTU2LDE0ICs1
NSwxMyBAQAogICAgIHJldHVybiAwOwogfQogCi1TVkdFbGVtZW50SW1wbCAqU1ZHTG9jYXRhYmxl
SW1wbDo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdAorU1ZHRWxlbWVudEltcGwgKlNW
R0xvY2F0YWJsZUltcGw6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnRJbXBsICplKQogewogICAgIC8vIEZJWE1FIDogbGlrZWx5IHRoaXMgd2lsbCBiZSBhbHdh
eXMgdGhlIDxzdmc+IGZhcnRoZXN0IGF3YXkuCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGRpZmZlcmVu
dCBpbXBsZW1lbnRhdGlvbiBvZiBkb2N1bWVudEVsZW1lbnQoKSwgb25lCiAgICAgLy8gdGhhdCBn
aXZlIHRoZSBkb2N1bWVudEVsZW1lbnQoKSBvZiB0aGUgc3ZnIGZyYWdtZW50LCBpdCBjb3VsZCBi
ZQogICAgIC8vIHVzZWQgaW5zdGVhZC4gVGhpcyBkZXBlbmRzIG9uIGNkZiBkZW1hbmRzIHRob3Vn
aChSb2IuKQogICAgIFNWR0VsZW1lbnRJbXBsICpmYXJ0aGVzdCA9IDA7Ci0gICAgY29uc3QgU1ZH
U3R5bGVkRWxlbWVudEltcGwgKmUgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVu
dEltcGwgKj4odGhpcyk7CiAgICAgS0RPTTo6Tm9kZUltcGwgKm4gPSBlLT5wYXJlbnROb2RlKCk7
CiAgICAgd2hpbGUobiAmJiBuLT5ub2RlVHlwZSgpICE9IEtET006OkRPQ1VNRU5UX05PREUpCiAg
ICAgewpAQCAtNzYsMTEgKzc0LDEwIEBACiAgICAgcmV0dXJuIGZhcnRoZXN0OwogfQogCi1TVkdS
ZWN0SW1wbCAqU1ZHTG9jYXRhYmxlSW1wbDo6Z2V0QkJveCgpIGNvbnN0CitTVkdSZWN0SW1wbCAq
U1ZHTG9jYXRhYmxlSW1wbDo6Z2V0QkJveChjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqZSkK
IHsKICAgICBTVkdSZWN0SW1wbCAqcmVjdCA9IDA7CiAKLSAgICBjb25zdCBTVkdTdHlsZWRFbGVt
ZW50SW1wbCAqZSA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50SW1wbCAqPih0
aGlzKTsKICAgICBpZihlICYmIGUtPmNhbnZhc0l0ZW0oKSkKICAgICB7CiAgICAgICAgIFFSZWN0
IGJib3hSZWN0ID0gZS0+Y2FudmFzSXRlbSgpLT5iYm94KGZhbHNlKTsKQEAgLTk0LDkgKzkxLDgg
QEAKICAgICByZXR1cm4gcmVjdDsKIH0KIAotU1ZHTWF0cml4SW1wbCAqU1ZHTG9jYXRhYmxlSW1w
bDo6Z2V0Q1RNKCkgY29uc3QKK1NWR01hdHJpeEltcGwgKlNWR0xvY2F0YWJsZUltcGw6OmdldENU
TShjb25zdCBTVkdFbGVtZW50SW1wbCAqZWxlbWVudCkKIHsKLSAgICBjb25zdCBTVkdFbGVtZW50
SW1wbCAqZWxlbWVudCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdFbGVtZW50SW1wbCAqPih0aGlz
KTsKICAgICBpZighZWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExOSw5ICsxMTUs
OCBAQAogICAgIHJldHVybiBjdG07CiB9CiAKLVNWR01hdHJpeEltcGwgKlNWR0xvY2F0YWJsZUlt
cGw6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitTVkdNYXRyaXhJbXBsICpTVkdMb2NhdGFibGVJbXBs
OjpnZXRTY3JlZW5DVE0oY29uc3QgU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQpCiB7Ci0gICAgY29u
c3QgU1ZHRWxlbWVudEltcGwgKmVsZW1lbnQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHRWxlbWVu
dEltcGwgKj4odGhpcyk7CiAgICAgaWYoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwogCkBA
IC0xNDMsMTEgKzEzOCwxMSBAQAogCiAgICAgcmV0dXJuIGN0bTsKIH0KLQorLyoKIFNWR01hdHJp
eEltcGwgKlNWR0xvY2F0YWJsZUltcGw6OmdldFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50
SW1wbCAqKSBjb25zdAogewogICAgIC8vIFRPRE8hCiAgICAgcmV0dXJuIDA7CiB9Ci0KKyovCiAv
LyB2aW06dHM9NDpub2V0CkluZGV4OiBzdmcvU1ZHQ3Vyc29yRWxlbWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHN2Zy9TVkdDdXJzb3JFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDQ2ODU2MikK
KysrIHN2Zy9TVkdDdXJzb3JFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBraHRtbEltTG9hZDsKIAogU1ZHQ3Vyc29yRWxlbWVu
dEltcGw6OlNWR0N1cnNvckVsZW1lbnRJbXBsKEtET006OkRvY3VtZW50UHRyICpkb2MsIEtET006
Ok5vZGVJbXBsOjpJZCBpZCwgS0RPTTo6RE9NU3RyaW5nSW1wbCAqcHJlZml4KQotOiBTVkdFbGVt
ZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0c0ltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZEltcGwoKSwgU1ZHVVJJUmVmZXJlbmNlSW1wbCgpLCBLRE9NOjpDYWNoZWRP
YmplY3RDbGllbnQoKQorOiBTVkdFbGVtZW50SW1wbChkb2MsIGlkLCBwcmVmaXgpLCBTVkdUZXN0
c0ltcGwoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKSwgU1ZHVVJJUmVmZXJl
bmNlSW1wbCgwKSwgS0RPTTo6Q2FjaGVkT2JqZWN0Q2xpZW50KCkKIHsKICAgICBtX3ggPSBtX3kg
PSAwOwogICAgIG1fY2FjaGVkSW1hZ2UgPSAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4429</attachid>
            <date>2005-10-20 13:53:53 -0700</date>
            <delta_ts>2005-10-20 13:53:53 -0700</delta_ts>
            <desc>Further dynamic_cast fixes</desc>
            <filename>dynamic_cast2.diff</filename>
            <type>text/plain</type>
            <size>2474</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">LS0tIC90cnVuay9rZGVub25iZXRhL2tzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwICAgMjAwNS8xMC8x
NCAxMDoyMDoyOSAgICAgNDcwNTUzCisrKyB0cnVuay9rZGVub25iZXRhL2tzdmcyL3N2Zy9TVkdI
ZWxwZXIuY3BwICAgIDIwMDUvMTAvMTQgMTA6MjE6MTkgICAgIDQ3MDU1NApAQCAtNDEsOSArNDEs
OSBAQAogICAgIGlmKCF2aWV3cG9ydEVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwLjA7CiAgCi0g
ICAgY29uc3QgU1ZHU1ZHRWxlbWVudEltcGwgKnN2ZyA9IGR5bmFtaWNfY2FzdCh2aWV3cG9ydEVs
ZW1lbnQpOwotICAgIGlmKHN2ZykKKyAgICBpZih2aWV3cG9ydEVsZW1lbnQgJiYgdmlld3BvcnRF
bGVtZW50LT5pZCgpID09IElEX1NWRykKICAgICB7CisgICAgICAgIGNvbnN0IFNWR1NWR0VsZW1l
bnRJbXBsICpzdmcgPSBzdGF0aWNfY2FzdCh2aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBLRE9N
OjpET01TdHJpbmcgdmlld0JveCgidmlld0JveCIpOwogICAgICAgICBpZihzdmctPmhhc0F0dHJp
YnV0ZSh2aWV3Qm94LmhhbmRsZSgpKSkKICAgICAgICAgewoKLS0tIC90cnVuay9rZGVub25iZXRh
L2tzdmcyL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHAgICAgICAgMjAwNS8x
MC8xNCAxMDoyMDoyOSAgICAgNDcwNTUzCisrKyB0cnVuay9rZGVub25iZXRhL2tzdmcyL3N2Zy9T
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50SW1wbC5jcHAgICAgICAgIDIwMDUvMTAvMTQgMTA6MjE6
MTkgICAgIDQ3MDU1NApAQCAtNTcsNTIgKzU3LDEyIEBACiAKIFNWR01hdHJpeEltcGwgKlNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRDVE0oKSBjb25zdAogewotICAgIGNvbnN0IFNW
R0VsZW1lbnRJbXBsICplbGVtZW50ID0gZHluYW1pY19jYXN0KHRoaXMpOwotICAgIGlmKCFlbGVt
ZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNWR01hdHJpeEltcGwgKmN0bSA9IFNWR1NW
R0VsZW1lbnRJbXBsOjpjcmVhdGVTVkdNYXRyaXgoKTsKLQotICAgIEtET006Ok5vZGVJbXBsICpw
YXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYocGFyZW50ICYmIHBhcmVudC0+
bm9kZVR5cGUoKSA9PSBLRE9NOjpFTEVNRU5UX05PREUpCi0gICAgewotICAgICAgICBTVkdFbGVt
ZW50SW1wbCAqcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0KHBhcmVudCk7Ci0gICAgICAgIFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsICpwYXJlbnRMb2NhdGFibGUgPSBkeW5hbWljX2Nh
c3QocGFyZW50RWxlbWVudCk7Ci0gICAgICAgIGlmKHBhcmVudExvY2F0YWJsZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgU1ZHTWF0cml4SW1wbCAqcGFyZW50Q1RNID0gcGFyZW50TG9jYXRhYmxl
LT5nZXRDVE0oKTsKLSAgICAgICAgICAgIHBhcmVudENUTS0+cmVmKCk7Ci0gICAgICAgICAgICBj
dG0tPm11bHRpcGx5KHBhcmVudENUTSk7Ci0gICAgICAgICAgICBwYXJlbnRDVE0tPmRlcmVmKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY3RtOworICAgIHJldHVybiBTVkdMb2Nh
dGFibGVJbXBsOjpnZXRDVE0odGhpcyk7CiB9CiAKIFNWR01hdHJpeEltcGwgKlNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRTY3JlZW5DVE0oKSBjb25zdAogewotICAgIGNvbnN0IFNW
R0VsZW1lbnRJbXBsICplbGVtZW50ID0gZHluYW1pY19jYXN0KHRoaXMpOwotICAgIGlmKCFlbGVt
ZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNWR01hdHJpeEltcGwgKmN0bSA9IFNWR1NW
R0VsZW1lbnRJbXBsOjpjcmVhdGVTVkdNYXRyaXgoKTsKLQotICAgIEtET006Ok5vZGVJbXBsICpw
YXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYocGFyZW50ICYmIHBhcmVudC0+
bm9kZVR5cGUoKSA9PSBLRE9NOjpFTEVNRU5UX05PREUpCi0gICAgewotICAgICAgICBTVkdFbGVt
ZW50SW1wbCAqcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0KHBhcmVudCk7Ci0gICAgICAgIFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsICpwYXJlbnRMb2NhdGFibGUgPSBkeW5hbWljX2Nh
c3QocGFyZW50RWxlbWVudCk7Ci0gICAgICAgIGlmKHBhcmVudExvY2F0YWJsZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgU1ZHTWF0cml4SW1wbCAqcGFyZW50Q1RNID0gcGFyZW50TG9jYXRhYmxl
LT5nZXRTY3JlZW5DVE0oKTsKLSAgICAgICAgICAgIHBhcmVudENUTS0+cmVmKCk7Ci0gICAgICAg
ICAgICBjdG0tPm11bHRpcGx5KHBhcmVudENUTSk7Ci0gICAgICAgICAgICBwYXJlbnRDVE0tPmRl
cmVmKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY3RtOworICAgIHJldHVybiBT
VkdMb2NhdGFibGVJbXBsOjpnZXRTY3JlZW5DVE0odGhpcyk7CiB9CiAKIFNWR01hdHJpeEltcGwg
KlNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnRJbXBsOjpnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZH
RWxlbWVudEltcGwgKikgY29uc3QKCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>