<?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>33677</bug_id>
          
          <creation_ts>2010-01-14 09:38:38 -0800</creation_ts>
          <short_desc>[V8] Standardize V8 generated and custom bindings on a single toNative() conversion method</short_desc>
          <delta_ts>2010-01-14 14:09:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>32563</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180745</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 09:38:38 -0800</bug_when>
    <thetext>Currently, we&apos;ve got multiple functions doing essentially the same work.  Make it stop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180772</commentid>
    <comment_count>1</comment_count>
      <attachid>46583</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 10:16:58 -0800</bug_when>
    <thetext>Created attachment 46583
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180774</commentid>
    <comment_count>2</comment_count>
      <attachid>46583</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-14 10:25:17 -0800</bug_when>
    <thetext>Comment on attachment 46583
patch

This is freaky-good. Nate++.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180841</commentid>
    <comment_count>3</comment_count>
      <attachid>46583</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 12:10:38 -0800</bug_when>
    <thetext>Comment on attachment 46583
patch

http://trac.webkit.org/changeset/53271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180842</commentid>
    <comment_count>4</comment_count>
      <attachid>46593</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 12:11:10 -0800</bug_when>
    <thetext>Created attachment 46593
the rest

This will break the chromium canaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180848</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-14 12:15:57 -0800</bug_when>
    <thetext>Attachment 46593 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/187587</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180850</commentid>
    <comment_count>6</comment_count>
      <attachid>46595</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 12:24:08 -0800</bug_when>
    <thetext>Created attachment 46595
the rest - compile fixed

Removing a function that I forgot to update because it isn&apos;t called anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180902</commentid>
    <comment_count>7</comment_count>
      <attachid>46595</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-14 13:48:09 -0800</bug_when>
    <thetext>Comment on attachment 46595
the rest - compile fixed

Even betterrer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180916</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-14 14:09:36 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/53290</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46583</attachid>
            <date>2010-01-14 10:16:58 -0800</date>
            <delta_ts>2010-01-14 12:10:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>143524</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzI2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDEtMTQgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
d2l0Y2ggdGhlIGN1c3RvbSBWOCBiaW5kaW5ncyB0byB1c2UgY2xhc3MgdG9OYXRpdmUoKSBmdW5j
dGlvbnMuCisKKyAgICAgICAgUmVmYWN0b3JpbmcsIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20u
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJRnJhbWVFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJ
dGVyYXRvckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxp
c3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlv
bkNlbnRlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3Rh
dGVFdmVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVz
dWx0U2V0Um93TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhTVkdNYXRyaXhDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0
b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hl
ZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fs
a2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5
Q3VzdG9tLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2Nr
ZXRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0VXBs
b2FkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vz
c29yQ3VzdG9tLmNwcDoKKwogMjAxMC0wMS0xNCAgTWFydGluIFJvYmluc29uICA8bWFydGluLmph
bWVzLnJvYmluc29uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXou
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9N
QXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NQXBw
bGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLmFkZEV2ZW50
TGlzdGVuZXIoKSIpOwotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRpb25DYWNoZT4oVjhDbGFz
c0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBhcmdzLkhvbGRlcigpKTsKKyAgICBET01BcHBs
aWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4RE9NQXBwbGljYXRpb25DYWNoZTo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBW
OERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGZhbHNlLCBM
aXN0ZW5lckZpbmRPckNyZWF0ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkBAIC02NCw3ICs2NCw3
IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVF
dmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJ
Q0FUSU9OQ0FDSEUsIGFyZ3MuSG9sZGVyKCkpOworICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFw
cGNhY2hlID0gVjhET01BcHBsaWNhdGlvbkNhY2hlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0
RXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9ubHkp
OwogICAgIGlmIChsaXN0ZW5lcikgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
NTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgCiAgICAgLy8gRmluYWxseSwgbG9v
ayB1cCBhIGNvbHVtbiBieSBuYW1lLgotICAgIERhdGFHcmlkQ29sdW1uTGlzdCogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGF0YUdyaWRDb2x1bW5MaXN0PihWOENs
YXNzSW5kZXg6OkRBVEFHUklEQ09MVU1OTElTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgRGF0YUdy
aWRDb2x1bW5MaXN0KiBpbXAgPSBWOERhdGFHcmlkQ29sdW1uTGlzdDo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CiAgICAgRGF0YUdyaWRDb2x1bW4qIHJlc3VsdCA9IGltcC0+aXRlbVdpdGhOYW1l
KHRvV2ViQ29yZVN0cmluZyhuYW1lKSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lRWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogdm9pZCBWOEhU
TUxGcmFtZUVsZW1lbnQ6OnNyY0FjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKLSAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7Cisg
ICAgSFRNTEZyYW1lRWxlbWVudCogZnJhbWUgPSBWOEhUTUxGcmFtZUVsZW1lbnQ6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBzcmNWYWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2sodmFsdWUpOwogCiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6YWxsb3dT
ZXR0aW5nRnJhbWVTcmNUb0phdmFzY3JpcHRVcmwoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJh
bWUsIHNyY1ZhbHVlKSkKQEAgLTU1LDcgKzU1LDcgQEAKIAogdm9pZCBWOEhUTUxGcmFtZUVsZW1l
bnQ6OmxvY2F0aW9uQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewotICAgIEhUTUxGcmFtZUVsZW1lbnQqIGZyYW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxIVE1MRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1M
RnJhbWVFbGVtZW50KiBmcmFtZSA9IFY4SFRNTEZyYW1lRWxlbWVudDo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CiAgICAgU3RyaW5nIGxvY2F0aW9uVmFsdWUgPSB0b1dlYkNvcmVTdHJpbmdXaXRo
TnVsbENoZWNrKHZhbHVlKTsKIAogICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmFsbG93U2V0
dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGZyYW1l
LCBsb2NhdGlvblZhbHVlKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TElucHV0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00u
SFRNTElucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydC5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTElucHV0RWxl
bWVudD4oaG9sZGVyKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbXAgPSBWOEhUTUxJbnB1dEVs
ZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAKICAgICBpZiAoIWltcC0+Y2FuSGF2ZVNlbGVjdGlv
bigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWNjZXNzaW5nIHNlbGVjdGlvblN0YXJ0
IG9uIGFuIGlucHV0IGVsZW1lbnQgdGhhdCBjYW5ub3QgaGF2ZSBhIHNlbGVjdGlvbi4iKTsKQEAg
LTU2LDcgKzU2LDcgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MSW5wdXRFbGVtZW50LnNl
bGVjdGlvblN0YXJ0Ll9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9
IGluZm8uSG9sZGVyKCk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOworICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4SFRNTElucHV0RWxlbWVudDo6dG9OYXRpdmUoaG9s
ZGVyKTsKIAogICAgIGlmICghaW1wLT5jYW5IYXZlU2VsZWN0aW9uKCkpIHsKICAgICAgICAgdGhy
b3dFcnJvcigiQWNjZXNzaW5nIHNlbGVjdGlvblN0YXJ0IG9uIGFuIGlucHV0IGVsZW1lbnQgdGhh
dCBjYW5ub3QgaGF2ZSBhIHNlbGVjdGlvbi4iKTsKQEAgLTY5LDcgKzY5LDcgQEAKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5IVE1MSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZC5fZ2V0Iik7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
SFRNTElucHV0RWxlbWVudD4oaG9sZGVyKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbXAgPSBW
OEhUTUxJbnB1dEVsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAKICAgICBpZiAoIWltcC0+Y2Fu
SGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWNjZXNzaW5nIHNl
bGVjdGlvbkVuZCBvbiBhbiBpbnB1dCBlbGVtZW50IHRoYXQgY2Fubm90IGhhdmUgYSBzZWxlY3Rp
b24uIik7CkBAIC04Miw3ICs4Miw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTElucHV0
RWxlbWVudC5zZWxlY3Rpb25FbmQuX3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
aG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRl
cik7CisgICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhIVE1MSW5wdXRFbGVtZW50Ojp0b05h
dGl2ZShob2xkZXIpOwogCiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkgewogICAg
ICAgICB0aHJvd0Vycm9yKCJBY2Nlc3Npbmcgc2VsZWN0aW9uRW5kIG9uIGFuIGlucHV0IGVsZW1l
bnQgdGhhdCBjYW5ub3QgaGF2ZSBhIHNlbGVjdGlvbi4iKTsKQEAgLTk2LDcgKzk2LDcgQEAKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MSW5wdXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlIik7
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTElucHV0RWxlbWVudD4oaG9sZGVyKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bXAgPSBWOEhUTUxJbnB1dEVsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAKICAgICBpZiAoIWlt
cC0+Y2FuSGF2ZVNlbGVjdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ2FsbGlu
ZyBzZXRTZWxlY3Rpb25SYW5nZSBvbiBhbiBpbnB1dCBlbGVtZW50IHRoYXQgY2Fubm90IGhhdmUg
YSBzZWxlY3Rpb24uIik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxG
b3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRN
TEZvcm1FbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEZvcm1F
bGVtZW50LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZvcm1FbGVtZW50
PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBWOEhUTUxGb3Jt
RWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8Tm9kZT4gZm9y
bUVsZW1lbnQgPSBmb3JtLT5lbGVtZW50cygpLT5pdGVtKGluZGV4KTsKICAgICBpZiAoIWZvcm1F
bGVtZW50KQpAQCAtNTQsNyArNTQsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEZv
cm1FbGVtZW50OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhU
TUxGb3JtRWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTEZvcm1FbGVtZW50
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxGb3JtRWxl
bWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTEZvcm1FbGVtZW50KiBpbXAgPSBWOEhUTUxG
b3JtRWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgQXRvbWljU3RyaW5nIHYg
PSB2OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0cmluZyhuYW1lKTsKIAogICAgIC8vIENhbGwgZ2V0
TmFtZWRFbGVtZW50cyB0d2ljZSwgZmlyc3QgdGltZSBjaGVjayBpZiBpdCBoYXMgYSB2YWx1ZQpA
QCAtODMsNyArODMsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEZvcm1FbGVtZW50
OjpzdWJtaXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxGb3JtRWxlbWVudC5zdWJtaXQoKSIpOwotICAgIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxIVE1MRm9y
bUVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IFY4
SFRNTEZvcm1FbGVtZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBGcmFtZSogZnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw4ICsxMTUsNyBAQAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKICAgICB9CiAKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQotICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPSBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAg
ICAgYm9vbCBvazsKICAgICBpbnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CiAgICAg
aWYgKCFvaykgewpAQCAtMTMzLDcgKzEzMiw3IEBACiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uQ29kZTsKICAgICAgICAgY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIHVz
YWdlLCBleGNlcHRpb25Db2RlKTsKICAgICB9IGVsc2UgaWYgKFY4V2ViR0xBcnJheTo6SGFzSW5z
dGFuY2UoYXJnc1sxXSkpIHsKLSAgICAgICAgV2ViR0xBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEFycmF5PihWOENsYXNzSW5kZXg6OldFQkdM
QVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBXZWJHTEFycmF5KiBhcnJheSA9
IFY4V2ViR0xBcnJheTo6dG9OYXRpdmUoYXJnc1sxXS0+VG9PYmplY3QoKSk7CiAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZXhjZXB0aW9uQ29kZTsKICAgICAgICAgY29udGV4dC0+YnVmZmVyRGF0YSh0
YXJnZXQsIGFycmF5LCB1c2FnZSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgfSBlbHNlIHsKQEAgLTE1
NCw4ICsxNTMsNyBAQAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
ICAgICB9CiAKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQotICAgICAgICBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250
ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQg
PSBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAg
Ym9vbCBvazsKICAgICBpbnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CiAgICAgaWYg
KCFvaykgewpAQCAtMTcxLDcgKzE2OSw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7CiAgICAgfQotICAgIFdlYkdMQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8V2ViR0xBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTEFSUkFZLCBhcmdz
WzJdLT5Ub09iamVjdCgpKTsKKyAgICBXZWJHTEFycmF5KiBhcnJheSA9IFY4V2ViR0xBcnJheTo6
dG9OYXRpdmUoYXJnc1syXS0+VG9PYmplY3QoKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRp
b25Db2RlOwogICAgIGNvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5
LCBleGNlcHRpb25Db2RlKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtMjI4LDgg
KzIyNiw3IEBACiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGJvb2wgb2s7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CiAgICAgaWYgKCFvaykgewpAQCAtMjcy
LDggKzI2OSw3IEBACiAgICAgb2sgPSBmYWxzZTsKICAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24gPSAwOwogICAgIGlmIChWOFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpIYXNJbnN0YW5j
ZSh2YWx1ZSkpIHsKLSAgICAgICAgbG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4oCi0gICAgICAgICAgICBWOENsYXNzSW5k
ZXg6OldFQkdMVU5JRk9STUxPQ0FUSU9OLCB2YWx1ZS0+VG9PYmplY3QoKSk7CisgICAgICAgIGxv
Y2F0aW9uID0gVjhXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9OYXRpdmUodmFsdWUtPlRvT2JqZWN0
KCkpOwogICAgICAgICBvayA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBsb2NhdGlvbjsKQEAg
LTI5OSw4ICsyOTUsNyBAQAogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9s
ZGVyKCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IFY4V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBib29sIG9rOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IHRvSW50MzIoYXJnc1swXSwgb2spOwogICAgIGlmICghb2spIHsK
QEAgLTMzNSw4ICszMzAsNyBAQAogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3Mu
SG9sZGVyKCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IFY4V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBib29sIG9rOwog
ICAgIHVuc2lnbmVkIHBuYW1lID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CiAgICAgaWYgKCFvaykg
ewpAQCAtMzYxLDggKzM1NSw3IEBACiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KLSAgICAgICAgVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJn
cy5Ib2xkZXIoKSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gVjhXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSA9IFY4V2ViR0xQcm9ncmFtOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4
V2ViR0xQcm9ncmFtOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
MF0pKSA6IDA7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHRvSW50MzIoYXJn
c1sxXSwgb2spOwpAQCAtMzk0LDggKzM4Nyw3IEBACiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KLSAgICAgICAg
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAg
IFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBWOFdlYkdMU2hhZGVyOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSA/IFY4V2ViR0xTaGFkZXI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSkpIDogMDsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIHBuYW1lID0gdG9JbnQz
MihhcmdzWzFdLCBvayk7CkBAIC00MjcsOCArNDE5LDcgQEAKICAgICB9CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQotICAg
ICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
CiAgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNl
KGFyZ3NbMF0pID8gVjhXZWJHTFByb2dyYW06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoYXJnc1swXSkpIDogMDsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKQEAgLTQ3Nyw4
ICs0NjgsNyBAQAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAg
ICB9CiAKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQotICAgICAgICBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBW
OFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgYm9v
bCBvazsKICAgICBpbnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CiAgICAgaWYgKCFv
aykgewpAQCAtNTA0LDE2ICs0OTQsMTYgQEAKIAogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gYXJnID0gYXJnc1syXTsKICAgICAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5z
dGFuY2UoYXJnKSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGVsZW1lbnQgPSBWOEhUTUxJbWFnZUVsZW1lbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CiAgICAgICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGVsZW1lbnQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoVjhIVE1MQ2FudmFzRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkg
ewotICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxDYW52YXNFbGVtZW50Pih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZykpOworICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGVs
ZW1lbnQgPSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZykpOwogICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBlbGVtZW50LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogICAgICAgICB9
IGVsc2UgaWYoVjhJbWFnZURhdGE6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAgICAgIElt
YWdlRGF0YSogaW1hZ2VfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05hdGl2ZTxJbWFnZURhdGE+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlX2VsZW1l
bnQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgICAgICAgICBJbWFnZURhdGEq
IGltYWdlRWxlbWVudCA9IFY4SW1hZ2VEYXRhOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZykpOworICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbWFnZUVsZW1lbnQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoVjhIVE1MVmlkZW9FbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0g
ICAgICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MVmlkZW9FbGVtZW50Pih2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZykpOworICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogZWxlbWVudCA9
IFY4SFRNTFZpZGVvRWxlbWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmcpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
ZWxlbWVudCwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsKICAgICAgICAgfQogICAgICAg
ICBlbHNlIHsKQEAgLTU2Nyw3ICs1NTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYyk7CiAgICAgIGVsc2Ug
aWYgKFY4V2ViR0xBcnJheTo6SGFzSW5zdGFuY2UoYXJnKSkgewotICAgICAgICAgICAgV2ViR0xB
cnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEFy
cmF5PihWOENsYXNzSW5kZXg6OldFQkdMQVJSQVksIGFyZy0+VG9PYmplY3QoKSk7CisgICAgICAg
ICAgICBXZWJHTEFycmF5KiBhcnJheSA9IFY4V2ViR0xBcnJheTo6dG9OYXRpdmUoYXJnLT5Ub09i
amVjdCgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQsCkBAIC02MjAsOCArNjEwLDcgQEAKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCi0gICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0ID0KLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGJvb2wgb2s7CiAgICAgaW50IHRhcmdldCA9
IHRvSW50MzIoYXJnc1swXSwgb2spOwogICAgIGlmICghb2spIHsKQEAgLTY1NywxNiArNjQ2LDE2
IEBACiAKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbNF07CiAgICAg
ICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3QoYXJnKSk7CisgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlbGVtZW50ID0gVjhIVE1M
SW1hZ2VFbGVtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZykp
OwogICAgICAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
LCB5b2ZmLCBlbGVtZW50LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogICAgICAgICB9
IGVsc2UgaWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAg
ICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChhcmcpKTsKKyAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50ID0g
VjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmcpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZiwgeW9mZiwgZWxlbWVudCwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsKICAg
ICAgICAgfSBlbHNlIGlmKFY4SW1hZ2VEYXRhOjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAg
ICAgICBJbWFnZURhdGEqIGltYWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9OYXRpdmU8SW1hZ2VEYXRhPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
ZykpOwotICAgICAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2ZmLCB5b2ZmLCBpbWFnZV9lbGVtZW50LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwor
ICAgICAgICAgICAgSW1hZ2VEYXRhKiBpbWFnZUVsZW1lbnQgPSBWOEltYWdlRGF0YTo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgaW1hZ2VFbGVtZW50
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogICAgICAgICB9IGVsc2UgaWYgKFY4SFRN
TFZpZGVvRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkgewotICAgICAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
SFRNTFZpZGVvRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKKyAg
ICAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQqIGVsZW1lbnQgPSBWOEhUTUxWaWRlb0VsZW1lbnQ6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIGVsZW1l
bnQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZSB7CkBAIC03MTAsNyArNjk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWMpOwogICAgICBlbHNl
IGlmIChWOFdlYkdMQXJyYXk6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAgICAgIFdlYkdM
QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xB
cnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTEFSUkFZLCBhcmctPlRvT2JqZWN0KCkpOworICAgICAg
ICAgICAgV2ViR0xBcnJheSogYXJyYXkgPSBWOFdlYkdMQXJyYXk6OnRvTmF0aXZlKGFyZy0+VG9P
YmplY3QoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhvZmYsCkBAIC03OTEsMTYgKzc4MCwxNCBAQAogICAgIGVsc2UK
ICAgICAgICAgbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3NbMF0sIG9rKTsK
IAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFy
Z3MuSG9sZGVyKCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IFY4V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmICgh
b2spIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAg
ICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAgICAgaWYgKFY4
V2ViR0xGbG9hdEFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgewotICAgICAgICBXZWJHTEZs
b2F0QXJyYXkqIGFycmF5ID0gCi0gICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTEZsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xGTE9BVEFSUkFZ
LCBhcmdzWzFdLT5Ub09iamVjdCgpKTsKKyAgICAgICAgV2ViR0xGbG9hdEFycmF5KiBhcnJheSA9
IFY4V2ViR0xGbG9hdEFycmF5Ojp0b05hdGl2ZShhcmdzWzFdLT5Ub09iamVjdCgpKTsKICAgICAg
ICAgQVNTRVJUKGFycmF5ICE9IE5VTEwpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAgICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgewpAQCAtODY3LDggKzg1NCw3IEBACiAg
ICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVy
KCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IFY4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBib29sIG9rID0gZmFsc2U7
CiAgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gdG9XZWJHTFVuaWZvcm1Mb2Nh
dGlvbihhcmdzWzBdLCBvayk7CiAKQEAgLTg3Nyw4ICs4NjMsNyBAQAogICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAgICAgaWYgKFY4V2ViR0xJbnRBcnJh
eTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpIHsKLSAgICAgICAgV2ViR0xJbnRBcnJheSogYXJyYXkg
PSAKLSAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdM
SW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xJTlRBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3Qo
KSk7CisgICAgICAgIFdlYkdMSW50QXJyYXkqIGFycmF5ID0gVjhXZWJHTEludEFycmF5Ojp0b05h
dGl2ZShhcmdzWzFdLT5Ub09iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKGFycmF5ICE9IE5VTEwp
OwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgc3dpdGNoIChmdW5jdGlv
blRvQ2FsbCkgewpAQCAtOTg1LDggKzk3MCw3IEBACiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCA9IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3NbMF0sIG9rKTsKQEAg
LTk5Nyw4ICs5ODEsNyBAQAogICAgIH0KICAgICBib29sIHRyYW5zcG9zZSA9IGFyZ3NbMV0tPkJv
b2xlYW5WYWx1ZSgpOwogICAgIGlmIChWOFdlYkdMRmxvYXRBcnJheTo6SGFzSW5zdGFuY2UoYXJn
c1syXSkpIHsKLSAgICAgICAgV2ViR0xGbG9hdEFycmF5KiBhcnJheSA9IAotICAgICAgICAgICAg
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xGbG9hdEFycmF5PihWOENs
YXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWSwgYXJnc1syXS0+VG9PYmplY3QoKSk7CisgICAgICAg
IFdlYkdMRmxvYXRBcnJheSogYXJyYXkgPSBWOFdlYkdMRmxvYXRBcnJheTo6dG9OYXRpdmUoYXJn
c1syXS0+VG9PYmplY3QoKSk7CiAgICAgICAgIEFTU0VSVChhcnJheSAhPSBOVUxMKTsKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHN3aXRjaCAobWF0cml4U2l6ZSkgewpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3Bw
CShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFn
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIC8vIEdldCBhbiBh
cnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBpbmRleGVkIHByb3BlcnRpZXMgaW4gYSBjb2xs
ZWN0aW9uLgogdjg6OkhhbmRsZTx2ODo6QXJyYXk+IFY4U3RvcmFnZTo6bmFtZWRQcm9wZXJ0eUVu
dW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBTdG9yYWdlKiBz
dG9yYWdlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhD
bGFzc0luZGV4OjpTVE9SQUdFLCBpbmZvLkhvbGRlcigpKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdl
ID0gVjhTdG9yYWdlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICB1bnNpZ25lZCBpbnQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHBy
b3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTU4LDcgKzU4LDcgQEAKIAogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2
OE5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgU3RvcmFnZSogc3Rv
cmFnZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0b3JhZ2U+KFY4Q2xh
c3NJbmRleDo6U1RPUkFHRSwgaW5mby5Ib2xkZXIoKSk7CisgICAgU3RvcmFnZSogc3RvcmFnZSA9
IFY4U3RvcmFnZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0
b1dlYkNvcmVTdHJpbmcodjhOYW1lKTsKIAogICAgIGlmIChzdG9yYWdlLT5jb250YWlucyhuYW1l
KSAmJiBuYW1lICE9ICJsZW5ndGgiKQpAQCAtODIsNyArODIsNyBAQAogCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHN0b3JhZ2VTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmFt
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKLSAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBpbmZvLkhvbGRlcigp
KTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhTdG9yYWdlOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OE5hbWUpOwogICAgIFN0
cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyh2OFZhbHVlKTsKIApAQCAtMTE3LDcgKzExNyw3
IEBACiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBzdG9yYWdlRGVsZXRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gdjhOYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewotICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOworICAg
IFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwog
ICAgIFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7CiAgICAgCiAgICAgaWYg
KHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUpKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQAogICAgIGlmICghKGFyZ3NbMF0tPklzU3RyaW5nKCkgJiYgYXJn
c1sxXS0+SXNTdHJpbmcoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUaGUgb2xkIGFu
ZCBuZXcgdmVyc2lvbnMgbXVzdCBiZSBzdHJpbmdzLiIpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGF0YWJhc2U+KFY4Q2xh
c3NJbmRleDo6REFUQUJBU0UsIGFyZ3MuSG9sZGVyKCkpOworICAgIERhdGFiYXNlKiBkYXRhYmFz
ZSA9IFY4RGF0YWJhc2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRnJhbWUqIGZy
YW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7CiAgICAgaWYg
KCFmcmFtZSkKQEAgLTk2LDcgKzk2LDcgQEAKICAgICBpZiAoIWFyZ3NbMF0tPklzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUcmFuc2FjdGlvbiBjYWxsYmFjayBtdXN0IGJl
IG9mIHZhbGlkIHR5cGUuIik7CiAKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxEYXRhYmFzZT4oVjhDbGFzc0luZGV4OjpEQVRBQkFT
RSwgYXJncy5Ib2xkZXIoKSk7CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhEYXRhYmFzZTo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKICAgICBpZiAoIWZyYW1lKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgIGlmIChh
cmd1bWVudENvdW50ID49IDIpCiAgICAgICAgIHRpbWVvdXQgPSBhcmdzWzFdLT5JbnQzMlZhbHVl
KCk7CiAKLSAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkp
OworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogCiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5k
aW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgIGlmIChob2xkZXIuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgRnJhbWUqIGZyYW1l
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKS0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBW
OERPTVdpbmRvdzo6dG9OYXRpdmUoaG9sZGVyKS0+ZnJhbWUoKTsKICAgICBpZiAoIVY4QmluZGlu
Z1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFtZSwg
dHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKQEAgLTE5NSw3ICsxOTUs
NyBAQAogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBG
cmFtZSogZnJhbWUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpLT5mcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZShob2xkZXIpLT5mcmFtZSgpOwogICAgIGlm
ICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5
KCksIGZyYW1lLCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTUsMTQgKzIxNSwxNCBA
QAogCiB2b2lkIFY4RE9NV2luZG93Ojpsb2NhdGlvbkFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGluZm8uSG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XaW5kb3c6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFY4RE9NV2luZG93U2hlbGw6OnNldExvY2F0aW9uKGlt
cCwgdG9XZWJDb3JlU3RyaW5nKHZhbHVlKSk7CiB9CiAKIAogdm9pZCBWOERPTVdpbmRvdzo6b3Bl
bmVyQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIERP
TVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2lu
ZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7CisgICAgRE9NV2lu
ZG93KiBpbXAgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAKICAgICBp
ZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm47CkBAIC0yNDgsNyArMjQ4
LDcgQEAKIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpBdWRpb0FjY2Vzc29y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewotICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5I
b2xkZXIoKSk7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
VjhDbGFzc0luZGV4OjpBVURJTywgd2luZG93KTsKIH0KIApAQCAtMzI4LDEzICszMjgsMTMgQEAK
IAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpJbWFnZUFjY2Vzc29yR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewotICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIo
KSk7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFz
c0luZGV4OjpJTUFHRSwgd2luZG93KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9N
V2luZG93OjpPcHRpb25BY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGluZm8uSG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogd2luZG93ID0g
VjhET01XaW5kb3c6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6T1BUSU9OLCB3aW5kb3cpOwogfQog
CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pOwogICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1
ZSgpOwogCi0gICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigp
KTsKKyAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKIAogICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4Qmlu
ZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CkBAIC0zNzgsNyArMzc4LDcgQEAKICAgICBTdHJpbmcgZXZlbnRUeXBl
ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3Nb
Ml0tPkJvb2xlYW5WYWx1ZSgpOwogCi0gICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBhcmdzLkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV2luZG93Ojp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFj
Y2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC00MDUsNyArNDA1LDcgQEAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5wb3N0
TWVzc2FnZSgpIik7Ci0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdz
LkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9NV2luZG93Ojp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIERPTVdpbmRvdyogc291cmNlID0gVjhQcm94eTo6cmV0
cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCktPmRvbVdpbmRvdygpOwogICAgIEFTU0VSVChz
b3VyY2UtPmZyYW1lKCkpOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgICAgICAgIHJldHVybiB2OFN0
cmluZygiIik7CiAgICAgU3RyaW5nIHN0ciA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKIAot
ICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAg
RE9NV2luZG93KiBpbXAgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAK
ICAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0
ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAgICAgICAgIHJldHVybiB2OFN0cmluZygiIik7
CiAgICAgU3RyaW5nIHN0ciA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKIAotICAgIERPTVdp
bmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93
KiBpbXAgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAo
IVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgp
LCBpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtNTU2LDggKzU1Niw3IEBACiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGlhbG9nQXJncyA9
IGFyZ3NbMV07CiAgICAgU3RyaW5nIGZlYXR1cmVBcmdzID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51
bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOwogCi0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KAotICAgICAgICBW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93KiB3
aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRnJhbWUq
IGZyYW1lID0gd2luZG93LT5mcmFtZSgpOwogCiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6
Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQpAQCAt
NjQ1LDcgKzY0NCw3IEBACiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKICAgICBBdG9taWNTdHJpbmcgZnJhbWVO
YW1lID0gKGFyZ3NbMV0tPklzVW5kZWZpbmVkKCkgfHwgYXJnc1sxXS0+SXNOdWxsKCkpID8gIl9i
bGFuayIgOiBBdG9taWNTdHJpbmcodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pKTsKIAotICAgIERP
TVdpbmRvdyogcGFyZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9N
V2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAgRE9N
V2luZG93KiBwYXJlbnQgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAg
ICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwogCiAgICAgaWYgKCFWOEJpbmRpbmdT
ZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgZnJhbWUsIHRy
dWUpKQpAQCAtNzY5LDcgKzc2OCw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93
LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwogCi0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9N
V2luZG93Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBpZiAoIXdpbmRvdykKICAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKQEAgLTc4OSw4ICs3ODgsNyBA
QAogewogICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5OYW1lZFByb3BlcnR5R2V0dGVyIik7
CiAKLSAgICAvLyBUT0RPKGFudG9ubSk6IGludmVzdGlnYXRlIHdoYXQgY29udmVydFRvTmF0aXZl
T2JqZWN0IGRvZXMgZm9yIHRoZSBjYXNlIG9mIERPTVdJTkRPVy4KLSAgICBET01XaW5kb3cqIHdp
bmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uSG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogd2lu
ZG93ID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIGlmICghd2lu
ZG93KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIApAQCAtODQ3
LDcgKzg0NSw3IEBACiAgICAgaW50IGhhbmRsZSA9IHRvSW50MzIoYXJnc1swXSk7CiAKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgRE9NV2lu
ZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1wID0g
VjhET01XaW5kb3c6OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0
eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0
cnVlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4oaW1wLT5kb2N1bWVudCgp
KTsKQEAgLTg3OCw3ICs4NzYsNyBAQAogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7ICAvLyB0aGUgZnJhbWUgaXMgZ29uZS4KIAotICAgIERPTVdpbmRvdyog
dGFyZ2V0V2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2lu
ZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKKyAgICBET01XaW5kb3cqIHRh
cmdldFdpbmRvdyA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZSh3aW5kb3cpOwogCiAgICAgQVNTRVJU
KHRhcmdldFdpbmRvdyk7CiAKQEAgLTkwNCw3ICs5MDIsNyBAQAogICAgIGlmICh3aW5kb3cuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBET01XaW5kb3cqIHRhcmdldFdp
bmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvdyk7CisgICAgRE9NV2luZG93KiB0YXJnZXRXaW5k
b3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUod2luZG93KTsKIAogICAgIEFTU0VSVCh0YXJnZXRX
aW5kb3cpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
dXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyOjpwb3N0TWVzc2FnZUNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV29ya2VyLnBvc3RNZXNz
YWdlIik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAg
ICBXb3JrZXIqIHdvcmtlciA9IFY4V29ya2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKICAgICBNZXNzYWdlUG9y
dEFycmF5IHBvcnRBcnJheTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niwy
MSArODYsMjEgQEAKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAg
ICAgLy8gRmluYWxseSwgc2VhcmNoIHRoZSBET00gc3RydWN0dXJlLgotICAgIEhUTUxBbGxDb2xs
ZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MQWxs
Q29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQUxMQ09MTEVDVElPTiwgaW5mby5Ib2xkZXIo
KSk7CisgICAgSFRNTEFsbENvbGxlY3Rpb24qIGltcCA9IFY4SFRNTEFsbENvbGxlY3Rpb246OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGltcCwgdjhT
dHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcobmFtZSkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFsbENvbGxlY3Rpb24uaXRlbSgp
Iik7Ci0gICAgSFRNTEFsbENvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PEhUTUxBbGxDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6OkhUTUxBTExDT0xM
RUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MQWxsQ29sbGVjdGlvbiogaW1wID0gVjhI
VE1MQWxsQ29sbGVjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIGdl
dEl0ZW0oaW1wLCBhcmdzWzBdKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFs
bENvbGxlY3Rpb246Om5hbWVkSXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFsbENvbGxlY3Rpb24ubmFtZWRJdGVtKCkiKTsK
LSAgICBIVE1MQWxsQ29sbGVjdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8SFRNTEFsbENvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTEFMTENPTExFQ1RJ
T04sIGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxB
bGxDb2xsZWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gcmVzdWx0ID0gZ2V0TmFtZWRJdGVtcyhpbXAsIHRvV2ViQ29yZVN0cmluZyhhcmdz
WzBdKSk7CiAKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkKQEAgLTExNSw3ICsxMTUsNyBAQAog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIAotICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxIVE1MQWxsQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQUxMQ09M
TEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTEFsbENvbGxlY3Rpb24qIGltcCA9IFY4
SFRNTEFsbENvbGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIGdldEl0ZW0oaW1wLCBhcmdzWzBdKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTENhbnZhc0VsZW1l
bnQuY29udGV4dCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oaG9sZGVyKTsKKyAgICBIVE1M
Q2FudmFzRWxlbWVudCogaW1wID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUoaG9sZGVy
KTsKICAgICBTdHJpbmcgY29udGV4dElkID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAg
IFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5BQkxFKDNEX0NB
TlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRp
bmF0ZXNDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29vcmRpbmF0ZXMuYWx0aXR1ZGUuX2dldCIp
OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAg
ICBDb29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMsIGhvbGRlcik7CisgICAgQ29v
cmRpbmF0ZXMqIGltcCA9IFY4Q29vcmRpbmF0ZXM6OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYg
KCFpbXAtPmNhblByb3ZpZGVBbHRpdHVkZSgpKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
ICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC0+YWx0aXR1ZGUoKSk7CkBAIC00Nyw3ICs0
Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29vcmRpbmF0ZXMuYWx0aXR1ZGVBY2N1cmFj
eS5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRl
cigpOwotICAgIENvb3JkaW5hdGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDb29yZGluYXRlcz4oVjhDbGFzc0luZGV4OjpDT09SRElOQVRFUywgaG9sZGVyKTsK
KyAgICBDb29yZGluYXRlcyogaW1wID0gVjhDb29yZGluYXRlczo6dG9OYXRpdmUoaG9sZGVyKTsK
ICAgICBpZiAoIWltcC0+Y2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3koKSkKICAgICAgICAgcmV0
dXJuIHY4OjpOdWxsKCk7CiAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPmFsdGl0dWRl
QWNjdXJhY3koKSk7CkBAIC01Nyw3ICs1Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29v
cmRpbmF0ZXMuaGVhZGluZy5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIENvb3JkaW5hdGVzKiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb29yZGluYXRlcz4oVjhDbGFzc0luZGV4OjpDT09SRElO
QVRFUywgaG9sZGVyKTsKKyAgICBDb29yZGluYXRlcyogaW1wID0gVjhDb29yZGluYXRlczo6dG9O
YXRpdmUoaG9sZGVyKTsKICAgICBpZiAoIWltcC0+Y2FuUHJvdmlkZUhlYWRpbmcoKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPmhl
YWRpbmcoKSk7CkBAIC02Nyw3ICs2Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29vcmRp
bmF0ZXMuc3BlZWQuX2dldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0g
aW5mby5Ib2xkZXIoKTsKLSAgICBDb29yZGluYXRlcyogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8Q29vcmRpbmF0ZXM+KFY4Q2xhc3NJbmRleDo6Q09PUkRJTkFURVMs
IGhvbGRlcik7CisgICAgQ29vcmRpbmF0ZXMqIGltcCA9IFY4Q29vcmRpbmF0ZXM6OnRvTmF0aXZl
KGhvbGRlcik7CiAgICAgaWYgKCFpbXAtPmNhblByb3ZpZGVTcGVlZCgpKQogICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC0+c3BlZWQoKSk7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDEyIEBACiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uRG9jdW1lbnQuZXZhbHVhdGUoKSIpOwogCi0gICAgUmVmUHRyPERv
Y3VtZW50PiBkb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
RG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBWOERvY3VtZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBTdHJpbmcgZXhwcmVzc2lvbiA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKICAgICBSZWZQdHI8Tm9kZT4gY29udGV4dE5vZGU7CiAgICAgaWYgKFY4Tm9kZTo6SGFzSW5z
dGFuY2UoYXJnc1sxXSkpCi0gICAgICAgIGNvbnRleHROb2RlID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFy
Z3NbMV0pKTsKKyAgICAgICAgY29udGV4dE5vZGUgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOwogCiAgICAgUmVmUHRyPFhQYXRoTlNSZXNv
bHZlcj4gcmVzb2x2ZXIgPSBWOERPTVdyYXBwZXI6OmdldFhQYXRoTlNSZXNvbHZlcihhcmdzWzJd
LCBWOFByb3h5OjpyZXRyaWV2ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRl
eHQoKSkpOwogICAgIGlmICghcmVzb2x2ZXIgJiYgIWFyZ3NbMl0tPklzTnVsbCgpICYmICFhcmdz
WzJdLT5Jc1VuZGVmaW5lZCgpKQpAQCAtNjksNyArNjksNyBAQAogICAgIGludCB0eXBlID0gdG9J
bnQzMihhcmdzWzNdKTsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IGluUmVzdWx0OwogICAgIGlm
IChWOFhQYXRoUmVzdWx0OjpIYXNJbnN0YW5jZShhcmdzWzRdKSkKLSAgICAgICAgaW5SZXN1bHQg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFz
c0luZGV4OjpYUEFUSFJFU1VMVCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRd
KSk7CisgICAgICAgIGluUmVzdWx0ID0gVjhYUGF0aFJlc3VsdDo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzRdKSk7CiAKICAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0
aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9IGRvY3VtZW50LT5l
dmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZS5nZXQoKSwgcmVzb2x2ZXIuZ2V0KCksIHR5
cGUsIGluUmVzdWx0LmdldCgpLCBlYyk7CkBAIC04Niw3ICs4Niw3IEBACiB7CiAgICAgSU5DX1NU
QVRTKCJET00uRG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCIpOwogICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBEb2N1bWVudCogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxEb2N1bWVudD4oaG9sZGVyKTsK
KyAgICBEb2N1bWVudCogaW1wID0gVjhEb2N1bWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICBT
dHJpbmcgY29udGV4dElkID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyBu
YW1lID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOwogICAgIGludCB3aWR0aCA9IHRvSW50MzIo
YXJnc1syXSk7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0
aW9uOwogCiAgICAgLy8gR2VuZXJhdGUgYSB3cmFwcGVyLgotICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxEb2N1bWVudD4oaW5m
by5Ib2xkZXIoKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhEb2N1bWVudDo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoZG9jdW1lbnQt
PmltcGxlbWVudGF0aW9uKCkpOwogCiAgICAgLy8gU3RvcmUgdGhlIHdyYXBwZXIgaW4gdGhlIGlu
dGVybmFsIGZpZWxkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDcgKzY0LDcgQEAKIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNldFRpbWVvdXRP
ckludGVydmFsKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsIGJvb2wgc2luZ2xlU2hvdCkKIHsK
LSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlPFdvcmtlckNvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwogCiAgICAgaW50IGFyZ3VtZW50Q291bnQgPSBhcmdzLkxlbmd0aCgpOwog
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICB1
cmxzLmFwcGVuZCh0b1dlYkNvcmVTdHJpbmcoc2NyaXB0VXJsKSk7CiAgICAgfQogCi0gICAgV29y
a2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHdvcmtlckNvbnRleHQtPmlt
cG9ydFNjcmlwdHModXJscywgY2FsbGVyVVJMLCBjYWxsZXJMaW5lLCBlYyk7CkBAIC0xNDUsNyAr
MTQ1LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50
TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19T
VEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8V29ya2VyQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IFY4V29ya2VyQ29udGV4dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6
OmdldEV2ZW50TGlzdGVuZXIod29ya2VyQ29udGV4dCwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVy
RmluZE9yQ3JlYXRlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTE2MSw3ICsxNjEsNyBAQAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlckNvbnRleHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxXb3JrZXJDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0
RXZlbnRMaXN0ZW5lcih3b3JrZXJDb250ZXh0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5k
T25seSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMy
NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjEgKzg1LDIxIEBACiAgICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIC8vIEZpbmFsbHksIHNlYXJjaCB0aGUgRE9N
IHN0cnVjdHVyZS4KLSAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTENPTExF
Q1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxD
b2xsZWN0aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4gZ2V0TmFtZWRJ
dGVtcyhpbXAsIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxlY3Rpb246Oml0ZW1DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxDb2xsZWN0aW9u
Lml0ZW0oKSIpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxIVE1MQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVD
VElPTiwgYXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4SFRNTENv
bGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIHJldHVybiBnZXRJdGVtKGlt
cCwgYXJnc1swXSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0aW9u
OjpuYW1lZEl0ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElO
Q19TVEFUUygiRE9NLkhUTUxDb2xsZWN0aW9uLm5hbWVkSXRlbSgpIik7Ci0gICAgSFRNTENvbGxl
Y3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxDb2xs
ZWN0aW9uPihWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAg
ICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhIVE1MQ29sbGVjdGlvbjo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGdldE5hbWVkSXRl
bXMoaW1wLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogCiAgICAgaWYgKHJlc3VsdC5Jc0Vt
cHR5KCkpCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4
Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxDb2xs
ZWN0aW9uKiBpbXAgPSBWOEhUTUxDb2xsZWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAogICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDEpCiAgICAgICAgIHJldHVybiBnZXRJdGVtKGlt
cCwgYXJnc1swXSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTMgKzQzLDEzIEBACiAK
IHZvaWQgVjhFdmVudDo6dmFsdWVBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBFdmVudCogZXZlbnQgPSBW
OEV2ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBldmVudC0+c2V0RGVmYXVsdFBy
ZXZlbnRlZCghdmFsdWUtPkJvb2xlYW5WYWx1ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RXZlbnQ6OmRhdGFUcmFuc2ZlckFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIEV2ZW50KiBl
dmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5m
by5Ib2xkZXIoKSk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CiAKICAgICBpZiAoZXZlbnQtPmlzRHJhZ0V2ZW50KCkpCiAgICAgICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJE
LCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7CkBAIC01OSw3
ICs1OSw3IEBACiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEV2ZW50OjpjbGlwYm9hcmREYXRh
QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBFdmVudCog
ZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIGlmIChldmVu
dC0+aXNDbGlwYm9hcmRFdmVudCgpKQogICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgc3RhdGljX2Nhc3Q8Q2xpcGJv
YXJkRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lv
biA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgLy8gU2VhcmNoIHN0eWxlIHNoZWV0
LgotICAgIFN0eWxlU2hlZXRMaXN0KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxTdHlsZVNoZWV0TGlzdD4oVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVUTElTVCwgaW5m
by5Ib2xkZXIoKSk7CisgICAgU3R5bGVTaGVldExpc3QqIGltcCA9IFY4U3R5bGVTaGVldExpc3Q6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIEhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBp
bXAtPmdldE5hbWVkSXRlbSh0b1dlYkNvcmVTdHJpbmcobmFtZSkpOwogICAgIGlmICghaXRlbSkK
ICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZTo6YWRk
RXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uTm9kZS5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBOb2RlKiBub2Rl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzLkhvbGRl
cigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0
RXZlbnRMaXN0ZW5lcihub2RlLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUp
OwogICAgIGlmIChsaXN0ZW5lcikgewpAQCAtNjMsNyArNjMsNyBAQAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZS5yZW1vdmVFdmVudExpc3Rl
bmVyKCkiKTsKLSAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxOb2RlPihhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIC8vIEl0IGlzIHBvc3NiaWxlIHRoYXQgdGhl
IG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2RlIGlzIGRldGFjaGVkCiAgICAgLy8gZnJvbSB0aGUg
ZnJhbWUuCkBAIC04NCwxMCArODQsMTAgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLmlu
c2VydEJlZm9yZSIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKLSAgICBOb2RlKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPE5vZGU+KGhvbGRlcik7CisgICAgTm9kZSogaW1wID0gVjhOb2RlOjp0b05hdGl2ZSho
b2xkZXIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0NoaWxkID0g
VjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkg
OiAwOwotICAgIE5vZGUqIHJlZkNoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkgOiAwOworICAgIE5vZGUqIG5ld0NoaWxkID0gVjhO
b2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIE5vZGUqIHJlZkNoaWxkID0gVjhO
b2RlOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkgOiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGltcC0+
aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCwgZWMsIHRydWUpOwogICAgIGlmIChlYykg
ewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwpAQCAtMTAzLDEwICsxMDMs
MTAgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLnJlcGxhY2VDaGlsZCIpOwogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBOb2RlKiBp
bXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7
CisgICAgTm9kZSogaW1wID0gVjhOb2RlOjp0b05hdGl2ZShob2xkZXIpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShh
cmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwotICAgIE5vZGUqIG9sZENo
aWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzFdKSkgOiAwOworICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdz
WzBdKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzBdKSkgOiAwOworICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdz
WzFdKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzFdKSkgOiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGltcC0+cmVwbGFjZUNoaWxkKG5ld0NoaWxk
LCBvbGRDaGlsZCwgZWMsIHRydWUpOwogICAgIGlmIChlYykgewogICAgICAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oZWMpOwpAQCAtMTIxLDkgKzEyMSw5IEBACiB7CiAgICAgSU5DX1NUQVRT
KCJET00uTm9kZS5yZW1vdmVDaGlsZCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBOb2RlKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7CisgICAgTm9kZSogaW1wID0gVjhOb2Rl
Ojp0b05hdGl2ZShob2xkZXIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUq
IG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzBdKSkgOiAwOworICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5j
ZShhcmdzWzBdKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzBdKSkgOiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGltcC0+cmVtb3ZlQ2hpbGQob2xk
Q2hpbGQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKQEAgLTEzOSw5ICsxMzksOSBAQAogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUu
YXBwZW5kQ2hpbGQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7Ci0gICAgTm9kZSogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxOb2RlPihob2xkZXIpOworICAgIE5vZGUqIGltcCA9IFY4Tm9kZTo6dG9OYXRpdmUo
aG9sZGVyKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBOb2RlKiBuZXdDaGlsZCA9
IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkp
IDogMDsKKyAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkg
PyBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkp
IDogMDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbXAtPmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYywg
dHJ1ZSApOwogICAgIGlmIChlYykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE1lc3NhZ2VFdmVudDo6cG9ydHNBY2Nl
c3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlRXZlbnQucG9ydHMiKTsK
LSAgICBNZXNzYWdlRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8TWVzc2FnZUV2ZW50PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VFVkVOVCwgaW5mby5Ib2xk
ZXIoKSk7CisgICAgTWVzc2FnZUV2ZW50KiBldmVudCA9IFY4TWVzc2FnZUV2ZW50Ojp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzID0gZXZlbnQt
PnBvcnRzKCk7CiAgICAgaWYgKCFwb3J0cyB8fCBwb3J0cy0+aXNFbXB0eSgpKQpAQCAtNjEsMTQg
KzYxLDE0IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhNZXNzYWdlRXZlbnQ6OmluaXRNZXNz
YWdlRXZlbnRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19T
VEFUUygiRE9NLk1lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50Iik7Ci0gICAgTWVzc2FnZUV2
ZW50KiBldmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VF
dmVudD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFRVZFTlQsIGFyZ3MuSG9sZGVyKCkpOworICAgIE1l
c3NhZ2VFdmVudCogZXZlbnQgPSBWOE1lc3NhZ2VFdmVudDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAgICAgU3RyaW5nIHR5cGVBcmcgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0p
OwogICAgIGJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YUFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSkpOwogICAgIFN0cmluZyBvcmln
aW5BcmcgPSB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFyZ3NbNF0pOwogICAgIFN0cmluZyBsYXN0
RXZlbnRJZEFyZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoYXJnc1s1XSk7Ci0gICAgRE9NV2lu
ZG93KiBzb3VyY2VBcmcgPSBWOERPTVdpbmRvdzo6SGFzSW5zdGFuY2UoYXJnc1s2XSkgPyBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbNl0pKSA6IDA7Cisg
ICAgRE9NV2luZG93KiBzb3VyY2VBcmcgPSBWOERPTVdpbmRvdzo6SGFzSW5zdGFuY2UoYXJnc1s2
XSkgPyBWOERPTVdpbmRvdzo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmdzWzZdKSkgOiAwOwogICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0QXJyYXk7CiAK
ICAgICBpZiAoIWlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbN10pKSB7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZp
c2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFw
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4TmFtZWROb2RlTWFwOjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3Qg
aW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uTmFtZWROb2RlTWFwLkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIE5hbWVkTm9kZU1h
cCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFw
PihWOENsYXNzSW5kZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CisgICAgTmFtZWRO
b2RlTWFwKiBpbXAgPSBWOE5hbWVkTm9kZU1hcDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAg
ICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGltcC0+aXRlbShpbmRleCk7CiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpAQCAtNjQsNyAr
NjQsNyBAQAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAogICAg
IC8vIEZpbmFsbHksIHNlYXJjaCB0aGUgRE9NLgotICAgIE5hbWVkTm9kZU1hcCogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFwPihWOENsYXNzSW5k
ZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CisgICAgTmFtZWROb2RlTWFwKiBpbXAg
PSBWOE5hbWVkTm9kZU1hcDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IGltcC0+Z2V0TmFtZWRJdGVtKHRvV2ViQ29yZVN0cmluZyhuYW1lKSk7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKICAgICB9CiAKLSAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dMaXN0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U1FMUmVzdWx0U2V0Um93TGlzdD4oVjhDbGFzc0lu
ZGV4OjpTUUxSRVNVTFRTRVRST1dMSVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBTUUxSZXN1bHRT
ZXRSb3dMaXN0KiByb3dMaXN0ID0gVjhTUUxSZXN1bHRTZXRSb3dMaXN0Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT5JbnRlZ2Vy
VmFsdWUoKTsKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHJvd0xpc3QtPmxlbmd0aCgp
KSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRl
cmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
Tm9kZUl0ZXJhdG9yLm5leHROb2RlKCkiKTsKLSAgICBOb2RlSXRlcmF0b3IqIG5vZGVJdGVyYXRv
ciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vZGVJdGVyYXRvcj4oVjhD
bGFzc0luZGV4OjpOT0RFSVRFUkFUT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIE5vZGVJdGVyYXRv
ciogbm9kZUl0ZXJhdG9yID0gVjhOb2RlSXRlcmF0b3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CkBA
IC03MSw3ICs3MSw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlSXRlcmF0b3I6OnBy
ZXZpb3VzTm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uTm9kZUl0ZXJhdG9yLnByZXZpb3VzTm9kZSgpIik7Ci0gICAgTm9kZUl0ZXJh
dG9yKiBub2RlSXRlcmF0b3IgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxO
b2RlSXRlcmF0b3I+KFY4Q2xhc3NJbmRleDo6Tk9ERUlURVJBVE9SLCBhcmdzLkhvbGRlcigpKTsK
KyAgICBOb2RlSXRlcmF0b3IqIG5vZGVJdGVyYXRvciA9IFY4Tm9kZUl0ZXJhdG9yOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNjcmlw
dFN0YXRlIHN0YXRlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdMZW5n
dGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNWR0xlbmd0aDo6dmFsdWVBY2Nlc3Nv
ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdMZW5ndGgudmFsdWUiKTsKLSAgICBW
OFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4gPihWOENs
YXNzSW5kZXg6OlNWR0xFTkdUSCwgaW5mby5Ib2xkZXIoKSk7CisgICAgVjhTVkdQT0RUeXBlV3Jh
cHBlcjxTVkdMZW5ndGg+KiB3cmFwcGVyID0gVjhTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTVkdMZW5ndGggaW1wID0gKndyYXBwZXI7
CiAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAudmFsdWUoVjhQcm94eTo6c3ZnQ29udGV4
dCh3cmFwcGVyKSkpOwogfQpAQCAtNTIsNyArNTIsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4U1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0c0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uU1ZHTGVuZ3RoLmNvbnZlcnRU
b1NwZWNpZmllZFVuaXRzIik7Ci0gICAgVjhTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+KiB3
cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBl
V3JhcHBlcjxTVkdMZW5ndGg+ID4oVjhDbGFzc0luZGV4OjpTVkdMRU5HVEgsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiogd3JhcHBlciA9IFY4U1ZH
UE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAg
U1ZHTGVuZ3RoIGltcCA9ICp3cmFwcGVyOwogICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBWOFBy
b3h5OjpzdmdDb250ZXh0KHdyYXBwZXIpOwogICAgIGltcC5jb252ZXJ0VG9TcGVjaWZpZWRVbml0
cyh0b0ludDMyKGFyZ3NbMF0pLCBjb250ZXh0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgfQogCi0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7
CisgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1bWVudDo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7CiAKICAgICAvLyBGYXN0IGNhc2UgZm9yIG5hbWVkIGVsZW1lbnRz
IHRoYXQgYXJlIG5vdCB0aGVyZS4KICAgICBpZiAoIWh0bWxEb2N1bWVudC0+aGFzTmFtZWRJdGVt
KGtleS5pbXBsKCkpICYmICFodG1sRG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKGtleS5pbXBs
KCkpKQpAQCAtMTE2LDcgKzExNiw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9j
dW1lbnQ6OndyaXRlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQud3JpdGUoKSIpOwotICAgIEhUTUxEb2N1bWVudCog
aHRtbERvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1M
RG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50
ID0gVjhIVE1MRG9jdW1lbnQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEZyYW1lKiBm
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwogICAgIGh0
bWxEb2N1bWVudC0+d3JpdGUod3JpdGVIZWxwZXJHZXRTdHJpbmcoYXJncyksIGZyYW1lID8gZnJh
bWUtPmRvY3VtZW50KCkgOiBOVUxMKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAt
MTI1LDcgKzEyNSw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9jdW1lbnQ6Ondy
aXRlbG5DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFU
UygiRE9NLkhUTUxEb2N1bWVudC53cml0ZWxuKCkiKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxE
b2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTERvY3Vt
ZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4
SFRNTERvY3VtZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBGcmFtZSogZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRleHQoKTsKICAgICBodG1sRG9j
dW1lbnQtPndyaXRlbG4od3JpdGVIZWxwZXJHZXRTdHJpbmcoYXJncyksIGZyYW1lID8gZnJhbWUt
PmRvY3VtZW50KCkgOiBOVUxMKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtMTM0
LDcgKzEzNCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9jdW1lbnQ6Om9wZW5D
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9N
LkhUTUxEb2N1bWVudC5vcGVuKCkiKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50Pihhcmdz
LkhvbGRlcigpKTsKKyAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4SFRNTERvY3Vt
ZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MikgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaHRtbERvY3VtZW50LT5mcmFtZSgpKSB7
CkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuYWxs
Ll9nZXQiKTsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxEb2N1bWVudCogaHRtbERv
Y3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1l
bnQ+KGhvbGRlcik7CisgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1
bWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBodG1sRG9jdW1lbnQtPmFs
bCgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5
Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TEFycmF5Q3VzdG9tLmgJKHJldmlzaW9uIDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDcg
QEAKICAgICAgICAgaWYgKGFyZ0xlbiA+IDMpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBuZXcgV2ViR0w8VD5BcnJheShXZWJHTEFy
cmF5QnVmZmVyLCBpbnQsIGludCkiKTsKIAotICAgICAgICBXZWJHTEFycmF5QnVmZmVyKiBidWYg
PQotICAgICAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdl
YkdMQXJyYXlCdWZmZXI+KFY4Q2xhc3NJbmRleDo6V0VCR0xBUlJBWUJVRkZFUiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzWzBdLT5Ub09iamVjdCgpKTsKKyAgICAgICAgV2ViR0xBcnJheUJ1ZmZlciogYnVm
ID0gVjhXZWJHTEFycmF5QnVmZmVyOjp0b05hdGl2ZShhcmdzWzBdLT5Ub09iamVjdCgpKTsKICAg
ICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNv
dWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDAgdG8gYSBXZWJHTEFycmF5QnVmZmVyIik7CiAgICAg
ICAgIGJvb2wgb2s7CkBAIC0xNTUsNyArMTUzLDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKICAgICB9Ci0gICAgVCogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxUPih3cmFwcGVyVHlwZSwgYXJncy5Ib2xkZXIoKSk7CisgICAgVCogYXJyYXkg
PSByZWludGVycHJldF9jYXN0PFQqPihhcmdzLkhvbGRlcigpLT5HZXRQb2ludGVyRnJvbUludGVy
bmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICBpZiAoaW5kZXggPj0gYXJy
YXktPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIEVsZW1l
bnRUeXBlIHJlc3VsdDsKQEAgLTE5Myw3ICsxOTEsNyBAQAogICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAKLSAgICBDUGx1c1BsdXNBcnJheVR5cGUqIGFy
cmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q1BsdXNQbHVzQXJyYXlU
eXBlPih3cmFwcGVyVHlwZSwgYXJncy5Ib2xkZXIoKSk7CisgICAgQ1BsdXNQbHVzQXJyYXlUeXBl
KiBhcnJheSA9IEphdmFTY3JpcHRXcmFwcGVyQXJyYXlUeXBlOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDIgJiYgYXJnc1swXS0+SXNJbnQzMigp
KSB7CiAgICAgICAgIC8vIHZvaWQgc2V0KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHtsb25n
fGZsb2F0fSB2YWx1ZSk7CkBAIC0yMDQsNyArMjAyLDcgQEAKIAogICAgIGlmIChKYXZhU2NyaXB0
V3JhcHBlckFycmF5VHlwZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkpIHsKICAgICAgICAgLy8gdm9p
ZCBzZXQoaW4gV2ViR0w8VD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgICAgIENQbHVzUGx1c0FycmF5VHlwZSogc3JjID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q1BsdXNQbHVzQXJyYXlUeXBlPih3cmFwcGVyVHlwZSwg
YXJnc1swXS0+VG9PYmplY3QoKSk7CisgICAgICAgIENQbHVzUGx1c0FycmF5VHlwZSogc3JjID0g
SmF2YVNjcmlwdFdyYXBwZXJBcnJheVR5cGU6OnRvTmF0aXZlKGFyZ3NbMF0tPlRvT2JqZWN0KCkp
OwogICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSAwOwogICAgICAgICBpZiAoYXJncy5MZW5ndGgo
KSA9PSAyKQogICAgICAgICAgICAgb2Zmc2V0ID0gdG9JbnQzMihhcmdzWzFdKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiVjhIVE1MQ2FudmFzRWxl
bWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4SFRN
TFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NiwzNSArNjcsMzUgQEAKICAgICAg
ICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUodG9XZWJDb3JlU3RyaW5nKHZhbHVlKSk7CiAK
ICAgICBpZiAoVjhDYW52YXNHcmFkaWVudDo6SGFzSW5zdGFuY2UodmFsdWUpKQotICAgICAgICBy
ZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFs
dWUpKSk7CisgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4Q2FudmFzR3JhZGll
bnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSk7CiAKICAg
ICBpZiAoVjhDYW52YXNQYXR0ZXJuOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJldHVy
biBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxDYW52YXNQYXR0ZXJuPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkp
OworICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOENhbnZhc1BhdHRlcm46OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSk7CiAKICAgICByZXR1
cm4gMDsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzdHJva2VTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogaW1wbCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8uSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4gdG9WOChpbXBsLT5zdHJva2VTdHlsZSgpKTsK
IH0KIAogdm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGVBY2Nlc3Nv
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKiBpbXBsID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oaW5mby5Ib2xkZXIoKSk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIGltcGwtPnNldFN0cm9rZVN0eWxlKHRvQ2FudmFz
U3R5bGUodmFsdWUpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihpbmZvLkhvbGRlcigpKTsKKyAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC0+ZmlsbFN0eWxl
KCkpOwogfQogCiB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nl
c3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oaW5mby5Ib2xkZXIoKSk7CisgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIGltcGwtPnNldEZpbGxTdHlsZSh0b0NhbnZh
c1N0eWxlKHZhbHVlKSk7CiB9CiAKQEAgLTEwMyw3ICsxMDQsNyBAQAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELnNldFN0cm9rZUNvbG9yKCkiKTsKLSAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5H
Q09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CiAgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7CiAgICAgY2FzZSAxOgogICAgICAg
ICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKQEAgLTEzMyw3ICsxMzQsNyBAQAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5zZXRGaWxsQ29sb3IoKSIpOwotICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJ
TkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogY29udGV4dCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKICAgICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAg
ICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygpKQpAQCAtMTYzLDcgKzE2NCw3IEBACiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3RDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5zdHJva2VSZWN0KCkiKTsKLSAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5H
Q09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gNSkKICAgICAgICAgY29udGV4dC0+c3Ry
b2tlUmVjdCh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3Nb
Ml0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsKICAgICBlbHNlIGlmIChh
cmdzLkxlbmd0aCgpID09IDQpCkBAIC0xNzgsNyArMTc5LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93Q2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuc2V0U2hhZG93KCkiKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBh
cmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBW
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAg
ICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDM6CkBAIC0yMTMsMjYgKzIxNCwy
NiBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5kcmF3SW1hZ2UoKSIpOwotICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5W
QVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogY29udGV4dCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcgPSBhcmdz
WzBdOwogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkgewog
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRN
TEltYWdlRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKKyAgICAg
ICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gVjhIVE1MSW1hZ2VFbGVtZW50Ojp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZykpOwogICAgICAgICBzd2l0
Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlX2VsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJn
c1syXSkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlRWxlbWVudCwgdG9G
bG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlX2VsZW1l
bnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSks
IHRvRmxvYXQoYXJnc1s0XSksIGVjKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShp
bWFnZUVsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQo
YXJnc1szXSksIHRvRmxvYXQoYXJnc1s0XSksIGVjKTsKICAgICAgICAgICAgIGlmIChlYyAhPSAw
KSB7CiAgICAgICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VfZWxlbWVudCwgCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2VFbGVtZW50LCAKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QodG9GbG9hdChh
cmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9hdChhcmdzWzNdKSwgdG9GbG9hdChhcmdz
WzRdKSksIAogICAgICAgICAgICAgICAgIEZsb2F0UmVjdCh0b0Zsb2F0KGFyZ3NbNV0pLCB0b0Zs
b2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFyZ3NbOF0pKSwKICAgICAg
ICAgICAgICAgICBlYyk7CkBAIC0yNTAsMjAgKzI1MSwyMCBAQAogICAgIC8vIEhUTUxDYW52YXNF
bGVtZW50CiAgICAgaWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsK
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXNfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
SFRNTENhbnZhc0VsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7Cisg
ICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNFbGVtZW50ID0gVjhIVE1MQ2FudmFzRWxl
bWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKICAgICAg
ICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXNfZWxlbWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9G
bG9hdChhcmdzWzJdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoY2FudmFzRWxl
bWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNh
bnZhc19lbGVtZW50LCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0
KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pLCBlYyk7CisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2UoY2FudmFzRWxlbWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJd
KSwgdG9GbG9hdChhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSwgZWMpOwogICAgICAgICAgICAg
aWYgKGVjICE9IDApIHsKICAgICAgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOwogICAgICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgOToKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShjYW52YXNfZWxlbWVudCwKKyAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZShjYW52YXNFbGVtZW50LAogICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCh0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0
b0Zsb2F0KGFyZ3NbNF0pKSwKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QodG9GbG9hdChhcmdz
WzVdKSwgdG9GbG9hdChhcmdzWzZdKSwgdG9GbG9hdChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhd
KSksCiAgICAgICAgICAgICAgICAgZWMpOwpAQCAtMjgyLDIwICsyODMsMjAgQEAKICAgICAvLyBI
VE1MVmlkZW9FbGVtZW50CiAgICAgaWYgKFY4SFRNTFZpZGVvRWxlbWVudDo6SGFzSW5zdGFuY2Uo
YXJnKSkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9fZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTFZpZGVvRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcp
KTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50ID0gVjhIVE1MVmlkZW9F
bGVtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZykpOwogICAg
ICAgICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAzOgotICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvX2VsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRv
RmxvYXQoYXJnc1syXSkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZpZGVvRWxl
bWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHZp
ZGVvX2VsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQo
YXJnc1szXSksIHRvRmxvYXQoYXJnc1s0XSksIGVjKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdJbWFnZSh2aWRlb0VsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSks
IHRvRmxvYXQoYXJnc1szXSksIHRvRmxvYXQoYXJnc1s0XSksIGVjKTsKICAgICAgICAgICAgIGlm
IChlYyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVj
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDk6Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UodmlkZW9fZWxlbWVudCwKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSh2aWRlb0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KHRv
RmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSksIHRvRmxv
YXQoYXJnc1s0XSkpLAogICAgICAgICAgICAgICAgIEZsb2F0UmVjdCh0b0Zsb2F0KGFyZ3NbNV0p
LCB0b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFyZ3NbOF0pKSwK
ICAgICAgICAgICAgICAgICBlYyk7CkBAIC0zMTksMTMgKzMyMCwxMyBAQAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmRyYXdJbWFnZUZyb21SZWN0KCkiKTsKLSAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
UkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQqIGNvbnRleHQgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1sw
XTsKIAogICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAg
ICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmcpKTsKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJlY3QoaW1h
Z2VfZWxlbWVudCwgIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQo
YXJnc1szXSksIHRvRmxvYXQoYXJnc1s0XSksIHRvRmxvYXQoYXJnc1s1XSksIHRvRmxvYXQoYXJn
c1s2XSksIHRvRmxvYXQoYXJnc1s3XSksIHRvRmxvYXQoYXJnc1s4XSksIHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzldKSk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IFY4
SFRNTEltYWdlRWxlbWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmcpKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJlY3QoaW1hZ2VFbGVtZW50LCAg
dG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9hdChhcmdzWzNdKSwgdG9G
bG9hdChhcmdzWzRdKSwgdG9GbG9hdChhcmdzWzVdKSwgdG9GbG9hdChhcmdzWzZdKSwgdG9GbG9h
dChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhdKSwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbOV0pKTsK
ICAgICB9IGVsc2UKICAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJvcihWOFByb3h5OjpUeXBlRXJy
b3IsICJkcmF3SW1hZ2VGcm9tUmVjdDogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50cyIpOwogCkBA
IC0zMzUsMTQgKzMzNiwxNCBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Jl
YXRlUGF0dGVybigpIik7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIo
KSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMF07CiAKICAgICBpZiAoVjhIVE1MSW1hZ2VFbGVtZW50
OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2Vs
ZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVs
ZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CisgICAgICAgIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IFY4SFRNTEltYWdlRWxlbWVudDo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4
dC0+Y3JlYXRlUGF0dGVybihpbWFnZV9lbGVtZW50LCB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENo
ZWNrKGFyZ3NbMV0pLCBlYyk7CisgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJu
ID0gY29udGV4dC0+Y3JlYXRlUGF0dGVybihpbWFnZUVsZW1lbnQsIHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKICAgICAgICAgaWYgKGVjICE9IDApIHsKICAgICAg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTM1MSw5ICszNTIsOSBAQAogICAgIH0KIAog
ICAgIGlmIChWOEhUTUxDYW52YXNFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAg
IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoYXJnKSk7CisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNFbGVtZW50
ID0gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmcpKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJlZlB0
cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNf
ZWxlbWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKSwgZWMpOworICAg
ICAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQtPmNyZWF0ZVBhdHRl
cm4oY2FudmFzRWxlbWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKSwg
ZWMpOwogICAgICAgICBpZiAoZWMgIT0gMCkgewogICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwpAQCAtMzY5LDcgKzM3MCw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmZpbGxUZXh0KCkiKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhU
MkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4
dCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
IAogICAgIC8vIFR3byBmb3JtczoKICAgICAvLyAqIGZpbGxUZXh0KHRleHQsIHgsIHkpCkBAIC0z
OTUsNyArMzk2LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c3Ryb2tlVGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnN0cm9rZVRleHQo
KSIpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFz
c0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIC8vIFR3byBmb3JtczoKICAgICAv
LyAqIHN0cm9rZVRleHQodGV4dCwgeCwgeSkKQEAgLTQzMCwxNiArNDMxLDE2IEBACiAgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5E
RVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogY29udGV4dCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIAogICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gMDsKIAogICAgIC8vIE5l
ZWQgdG8gY2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSwgc2lu
Y2UKLSAgICAvLyBjb252ZXJ0VG9OYXRpdmVPYmplY3QoKSBleHBlY3RzIGl0IHRvIGJlIGNvcnJl
Y3QuIElmIHRoZSBhcmd1bWVudCB3YXMgaW5jb3JyZWN0CisgICAgLy8gdG9OYXRpdmUoKSBleHBl
Y3RzIGl0IHRvIGJlIGNvcnJlY3QuIElmIHRoZSBhcmd1bWVudCB3YXMgaW5jb3JyZWN0CiAgICAg
Ly8gd2UgbGVhdmUgaXQgbnVsbCwgYW5kIHB1dEltYWdlRGF0YSgpIHdpbGwgdGhyb3cgdGhlIGNv
cnJlY3QgZXhjZXB0aW9uCiAgICAgLy8gKFRZUEVfTUlTTUFUQ0hfRVJSKS4KICAgICBpZiAoVjhE
T01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUoYXJnc1swXSwgVjhDbGFzc0luZGV4OjpJTUFHRURB
VEEpKQotICAgICAgICBpbWFnZURhdGEgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICAgICAgaW1hZ2VEYXRhID0gVjhJbWFnZURhdGE6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsMTQgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHRBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5yZXNwb25zZXRleHQuX2dldCIpOwotICAgIFhN
TEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBp
bmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFhN
TEh0dHBSZXF1ZXN0Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4geG1sSHR0
cFJlcXVlc3QtPnJlc3BvbnNlVGV4dCgpLnY4U3RyaW5nT3JOdWxsKCk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRw
UmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVx
dWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAg
WE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhYTUxIdHRwUmVxdWVzdDo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoeG1sSHR0cFJlcXVlc3QsIGFyZ3NbMV0s
IGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkBAIC03
MSw3ICs3MSw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVxdWVzdDo6cmVt
b3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7
Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVz
dCA9IFY4WE1MSHR0cFJlcXVlc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3Rl
bmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT25seSk7CiAg
ICAgaWYgKGxpc3RlbmVyKSB7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMi
LCBWOFByb3h5OjpTeW50YXhFcnJvcik7CiAKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1M
SHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhYTUxIdHRwUmVxdWVzdDo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbWV0aG9kID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwogICAgIFN0cmluZyB1cmxzdHJpbmcgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7
CkBAIC0xMzcsNyArMTM3LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1
ZXN0OjpzZW5kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5zZW5kKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxI
dHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7
CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhYTUxIdHRwUmVxdWVzdDo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1swXTsKICAgICAgICAgaWYgKElzRG9jdW1l
bnRUeXBlKGFyZykpIHsKICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpOwotICAgICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxEb2N1
bWVudD4ob2JqZWN0KTsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4RG9jdW1l
bnQ6OnRvTmF0aXZlKG9iamVjdCk7CiAgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAg
ICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNlbmQoZG9jdW1lbnQsIGVjKTsKICAgICAgICAgfSBl
bHNlIGlmIChWOEZpbGU6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcp
OwotICAgICAgICAgICAgRmlsZSogZmlsZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxGaWxlPihvYmplY3QpOworICAgICAgICAgICAgRmlsZSogZmlsZSA9IFY4Rmls
ZTo6dG9OYXRpdmUob2JqZWN0KTsKICAgICAgICAgICAgIEFTU0VSVChmaWxlKTsKICAgICAgICAg
ICAgIHhtbEh0dHBSZXF1ZXN0LT5zZW5kKGZpbGUsIGVjKTsKICAgICAgICAgfSBlbHNlCkBAIC0x
NzAsNyArMTcwLDcgQEAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9y
KTsKIAotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSBWOFhNTEh0dHBSZXF1ZXN0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgaGVhZGVyID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFN0cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsK
QEAgLTE4Niw3ICsxODYsNyBAQAogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4
RXJyb3IpOwogCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxI
dHRwUmVxdWVzdCA9IFY4WE1MSHR0cFJlcXVlc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0cmluZyBoZWFkZXIgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIHJlc3VsdCA9IHhtbEh0dHBSZXF1ZXN0LT5nZXRS
ZXNwb25zZUhlYWRlcihoZWFkZXIsIGVjKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2gg
YXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCi0gICAgWE1MSHR0cFJlcXVlc3Qq
IHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1M
SHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkp
OworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4WE1MSHR0cFJlcXVlc3Q6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIFN0cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKICAgICB4bWxIdHRwUmVxdWVzdC0+b3ZlcnJpZGVNaW1lVHlwZSh2YWx1
ZSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsOCArMTYxLDcg
QEAKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKICAgICAvLyBT
ZWFyY2ggdGhlIHN0eWxlIGRlY2xhcmF0aW9uLgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlt
cCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENTU1N0eWxl
RGVjbGFyYXRpb24+KFY4Q2xhc3NJbmRleDo6Q1NTU1RZTEVERUNMQVJBVElPTiwgaW5mby5Ib2xk
ZXIoKSk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW1wID0gVjhDU1NTdHlsZURlY2xhcmF0
aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBDU1NQcm9wZXJ0eUluZm8qIHByb3BJ
bmZvID0gY3NzUHJvcGVydHlJbmZvKG5hbWUpOwogCiAgICAgLy8gRG8gbm90IGhhbmRsZSBub24t
cHJvcGVydHkgbmFtZXMuCkBAIC0xOTUsOSArMTk0LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkNTU1N0eWxlRGVjbGFyYXRp
b24uTmFtZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGltcCA9
Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENTU1N0eWxlRGVj
bGFyYXRpb24+KAotICAgICAgICAgICAgVjhDbGFzc0luZGV4OjpDU1NTVFlMRURFQ0xBUkFUSU9O
LCBpbmZvLkhvbGRlcigpKTsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBpbXAgPSBWOENTU1N0
eWxlRGVjbGFyYXRpb246OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIENTU1Byb3BlcnR5
SW5mbyogcHJvcEluZm8gPSBjc3NQcm9wZXJ0eUluZm8obmFtZSk7CiAgICAgaWYgKCFwcm9wSW5m
bykKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwCShyZXZp
c2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQAogICAgIGlmICghVjhTVkdN
YXRyaXg6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
c2Vjb25kTWF0cml4IGFyZ3VtZW50IHdhcyBub3QgYSBTVkdNYXRyaXgiKTsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG0xID0gKlY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4oVjhDbGFzc0luZGV4
OjpTVkdNQVRSSVgsIGFyZ3MuSG9sZGVyKCkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0y
ID0gKlY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBw
ZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4oVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtMiA9ICpWOFNW
R1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CiAKICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNWR01BVFJJWCwgVjhTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVmdCht
MikpKTsKIH0KQEAgLTYyLDcgKzYyLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNWR01h
dHJpeDo6aW52ZXJzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uU1ZHTWF0cml4LmludmVyc2UoKSIpOwotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeCA9ICpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNW
R1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PiA+KFY4Q2xhc3NJbmRleDo6U1ZH
TUFUUklYLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgg
PSAqVjhTVkdQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlc3VsdCA9IG1hdHJpeC5pbnZlcnNlKCk7CiAKQEAgLTgwLDcgKzgwLDcgQEAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uU1ZH
TWF0cml4LnJvdGF0ZUZyb21WZWN0b3IoKSIpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeCA9ICpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVX
cmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PiA+KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBh
cmdzLkhvbGRlcigpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSAqVjhTVkdQ
T0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGZsb2F0IHggPSB0b0Zsb2F0KGFy
Z3NbMF0pOwogICAgIGZsb2F0IHkgPSB0b0Zsb2F0KGFyZ3NbMV0pOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2
OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEVs
ZW1lbnQ6OnNldEF0dHJpYnV0ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uRWxlbWVudC5zZXRBdHRyaWJ1dGUoKSIpOwotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1l
bnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOEVsZW1lbnQ6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFN0cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsK
IApAQCAtNzQsOCArNzQsOCBAQAogICAgIGlmICghVjhBdHRyOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAg
QXR0ciogbmV3QXR0ciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0
cj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7Ci0gICAgRWxlbWVudCog
ZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4o
YXJncy5Ib2xkZXIoKSk7CisgICAgQXR0ciogbmV3QXR0ciA9IFY4QXR0cjo6dG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgRWxlbWVudCogZWxlbWVu
dCA9IFY4RWxlbWVudDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoIVY4Qmlu
ZGluZ1NlY3VyaXR5OjphbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoVjhCaW5kaW5nU3Rh
dGU6Ok9ubHkoKSwgZWxlbWVudCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTkxLDcgKzkxLDcgQEAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5FbGVtZW50LnNldEF0
dHJpYnV0ZU5TKCkiKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gVjhFbGVtZW50Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdHJp
bmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsK
ICAgICBTdHJpbmcgcXVhbGlmaWVkTmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKICAg
ICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1syXSk7CkBAIC0xMTMsOCArMTEz
LDggQEAKICAgICBpZiAoIVY4QXR0cjo6SGFzSW5zdGFuY2UoYXJnc1swXSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAgIEF0dHIqIG5ld0F0dHIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkp
OworICAgIEF0dHIqIG5ld0F0dHIgPSBWOEF0dHI6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOEVsZW1lbnQ6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6
YWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGVs
ZW1lbnQsIG5ld0F0dHItPm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCiAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpyZW1vdmVDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPcHRp
b25zQ29sbGVjdGlvbi5yZW1vdmUoKSIpOwotICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uPihWOENsYXNzSW5kZXg6OkhUTUxPUFRJT05TQ09MTEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7
CisgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxPcHRpb25zQ29sbGVjdGlv
bjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIGJhc2Ug
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGltcC0+YmFzZSgpKTsKICAgICByZXR1
cm4gcmVtb3ZlRWxlbWVudChiYXNlLCBhcmdzKTsKIH0KQEAgLTU5LDggKzU5LDggQEAKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9u
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBhcmdzLkhvbGRl
cigpKTsKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSk7CisgICAgSFRNTE9w
dGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IFY4SFRNTE9w
dGlvbkVsZW1lbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4odjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQpAQCAtODgsNyArODgsNyBAQAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpsZW5ndGhBY2Nlc3NvckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ubGVuZ3RoLl9n
ZXQiKTsKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpI
VE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbiogaW1wID0gVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwogICAgIGludCB2ID0gaW1wLT5sZW5ndGgoKTsKICAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyh2KTsKIH0KQEAgLTk2LDcgKzk2LDcgQEAKIHZvaWQgVjhIVE1MT3B0aW9uc0NvbGxl
Y3Rpb246Omxlbmd0aEFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ubGVuZ3RoLl9zZXQi
KTsKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1M
T1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25zQ29sbGVj
dGlvbiogaW1wID0gVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwogICAgIGRvdWJsZSB2ID0gdmFsdWUtPk51bWJlclZhbHVlKCk7CiAgICAgdW5zaWduZWQg
bmV3TGVuZ3RoID0gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTExNyw3ICsxMTcs
NyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRl
eGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTE9wdGlvbnNDb2xsZWN0aW9uLkluZGV4
ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29sbGVjdGlv
biA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVj
dGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkp
OworICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4SFRNTE9wdGlvbnND
b2xsZWN0aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIFJlZlB0cjxOb2RlPiBy
ZXN1bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTEy
OSw3ICsxMjksNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxPcHRpb25zQ29sbGVjdGlvbi5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsK
LSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6
SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KGNvbGxlY3Rpb24tPmJhc2UoKSk7CiAgICAgcmV0dXJuIHRv
T3B0aW9uc0NvbGxlY3Rpb25TZXR0ZXIoaW5kZXgsIHZhbHVlLCBiYXNlKTsKIH0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBACiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6OnR5cGVzQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uQ2xpcGJvYXJkLnR5cGVzKCkiKTsKLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENsaXBib2FyZD4oVjhDbGFzc0lu
ZGV4OjpDTElQQk9BUkQsIGluZm8uSG9sZGVyKCkpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJk
ID0gVjhDbGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCiAgICAgSGFzaFNldDxT
dHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOwogICAgIGlmICh0eXBlcy5pc0VtcHR5
KCkpCkBAIC02Niw3ICs2Niw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6
OmNsZWFyRGF0YUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uQ2xpcGJvYXJkLmNsZWFyRGF0YSgpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4
Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDbGlwYm9hcmQqIGNs
aXBib2FyZCA9IFY4Q2xpcGJvYXJkOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlm
ICghYXJncy5MZW5ndGgoKSkgewogICAgICAgICBjbGlwYm9hcmQtPmNsZWFyQWxsRGF0YSgpOwpA
QCAtODQsNyArODQsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2xpcGJvYXJkOjpnZXRE
YXRhQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5DbGlwYm9hcmQuZ2V0RGF0YSgpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4Q2xhc3NJbmRl
eDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IFY4Q2xpcGJvYXJkOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxl
bmd0aCgpICE9IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJnZXREYXRhOiBJbnZhbGlk
IG51bWJlciBvZiBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CkBAIC0xMDAsNyAr
MTAwLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6c2V0RGF0YUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2xp
cGJvYXJkLnNldERhdGEoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBC
T0FSRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOENsaXBi
b2FyZDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAh
PSAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigic2V0RGF0YTogSW52YWxpZCBudW1iZXIg
b2YgYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwpAQCAtMTEzLDcgKzExMyw3IEBA
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6OnNldERyYWdJbWFnZUNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2xpcGJv
YXJkLnNldERyYWdJbWFnZSgpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4Q2xhc3NJbmRleDo6Q0xJ
UEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4Q2xp
cGJvYXJkOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmICghY2xpcGJvYXJkLT5p
c0ZvckRyYWdnaW5nKCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0xMjYs
NyArMTI2LDcgQEAKIAogICAgIE5vZGUqIG5vZGUgPSAwOwogICAgIGlmIChWOE5vZGU6Okhhc0lu
c3RhbmNlKGFyZ3NbMF0pKQotICAgICAgICBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0p
KTsKKyAgICAgICAgbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChhcmdzWzBdKSk7CiAKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoInNldERyYWdJbWFnZUZyb21FbGVtZW50
OiBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQAogICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZyA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHN0YXRlQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyhhcmdzWzNdKSk7CiAKLSAgICBQb3BTdGF0ZUV2ZW50KiBldmVudCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFBvcFN0YXRlRXZlbnQ+KFY4Q2xhc3NJ
bmRleDo6UE9QU1RBVEVFVkVOVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgUG9wU3RhdGVFdmVudCog
ZXZlbnQgPSBWOFBvcFN0YXRlRXZlbnQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGV2
ZW50LT5pbml0UG9wU3RhdGVFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVB
cmcsIHN0YXRlQXJnLnJlbGVhc2UoKSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtNTYsNyArNTYsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLlBvcFN0YXRlRXZlbnQuc3Rh
dGUiKTsKIAotICAgIFBvcFN0YXRlRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8UG9wU3RhdGVFdmVudD4oVjhDbGFzc0luZGV4OjpQT1BTVEFURUVWRU5U
LCBpbmZvLkhvbGRlcigpKTsKKyAgICBQb3BTdGF0ZUV2ZW50KiBldmVudCA9IFY4UG9wU3RhdGVF
dmVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiBzdGF0ZSA9IGV2ZW50LT5zdGF0ZSgpOwogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJh
bWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEhUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uSFRNTEZyYW1lU2V0RWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7
Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxIVE1MRnJhbWVTZXRFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBI
VE1MRnJhbWVTZXRFbGVtZW50KiBpbXAgPSBWOEhUTUxGcmFtZVNldEVsZW1lbnQ6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwogICAgIE5vZGUqIGZyYW1lTm9kZSA9IGltcC0+Y2hpbGRyZW4oKS0+
bmFtZWRJdGVtKHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpKTsKICAgICBpZiAo
ZnJhbWVOb2RlICYmIGZyYW1lTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKSkg
ewogICAgICAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+
KGZyYW1lTm9kZSktPmNvbnRlbnREb2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2Nh
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6OmxvY2F0aW9uQWNjZXNzb3JHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBWOERvY3VtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBpZiAoIWRvY3VtZW50
LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIApAQCAtNDUsNyArNDUsNyBA
QAogCiB2b2lkIFY4RG9jdW1lbnQ6OmxvY2F0aW9uQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxEb2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7Cisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhEb2N1bWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogewogICAgIElOQ19T
VEFUUygiRE9NLkxvY2F0aW9uLmhhc2guX3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJ
T04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhv
bGRlcik7CiAgICAgU3RyaW5nIGhhc2ggPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwogCiAgICAg
RnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtODYsNyArODYsNyBAQAogewogICAgIElO
Q19TVEFUUygiRE9NLkxvY2F0aW9uLmhvc3QuX3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9D
QVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZl
KGhvbGRlcik7CiAgICAgU3RyaW5nIGhvc3QgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwogCiAg
ICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uaG9zdG5hbWUuX3NldCIpOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJ
bmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246
OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgU3RyaW5nIGhvc3RuYW1lID0gdG9XZWJDb3JlU3RyaW5n
KHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTEyMyw3ICsx
MjMsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmhyZWYuX3NldCIpOwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2Nh
dGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+
KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4
TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTE0Myw3ICsxNDMsNyBAQAogewogICAgIElOQ19T
VEFUUygiRE9NLkxvY2F0aW9uLnBhdGhuYW1lLl9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9uOjp0b05hdGl2
ZShob2xkZXIpOwogICAgIFN0cmluZyBwYXRobmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7
CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0xNjAsNyArMTYwLDcgQEAK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5wb3J0Ll9zZXQiKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGlt
cCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9u
Ojp0b05hdGl2ZShob2xkZXIpOwogICAgIFN0cmluZyBwb3J0ID0gdG9XZWJDb3JlU3RyaW5nKHZh
bHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTE3Nyw3ICsxNzcs
NyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnByb3RvY29sLl9zZXQiKTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9j
YXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9u
PihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBW
OExvY2F0aW9uOjp0b05hdGl2ZShob2xkZXIpOwogICAgIFN0cmluZyBwcm90b2NvbCA9IHRvV2Vi
Q29yZVN0cmluZyh2YWx1ZSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBA
IC0xOTQsNyArMTk0LDcgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5zZWFyY2gu
X3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIo
KTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRp
b24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgU3RyaW5nIHF1ZXJ5
ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJh
bWUoKTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hl
Y2sgYWxyZWFkeQogICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigp
OwogICAgIH0KLSAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAg
TG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFW
OEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwg
aW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhMb2NhdGlv
bjo6cmVsb2FkQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJl
OjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKICAgICAgICAgcmV0dXJuIHNo
YXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAg
IC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5CiAgICAgICAgIHJldHVybiBwcml2YXRl
VGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQotICAgIExvY2F0aW9uKiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpM
T0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhMb2NhdGlvbjo6dG9OYXRp
dmUoaG9sZGVyKTsKICAgICBpZiAoIVY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShW
OEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKSkgewogICAgICAgICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRl
ID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhWOExvY2F0aW9uOjpyZXBsYWNlQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUo
KSkpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwpAQCAt
MjU0LDcgKzI1NCw3IEBACiAgICAgICAgIC8vIGRvbWFpbiBzZWN1cml0eSBjaGVjayBhbHJlYWR5
CiAgICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CiAgICAgfQot
ICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxM
b2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiog
aW1wID0gVjhMb2NhdGlvbjo6dG9OYXRpdmUoaG9sZGVyKTsKICAgICBpZiAoIVY4QmluZGluZ1Nl
Y3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBpbXAtPmZyYW1l
KCksIGZhbHNlKSkgewogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOExvY2F0aW9uOjphc3NpZ25D
YWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExv
Y2F0aW9uOjpHZXRSYXdUZW1wbGF0ZSgpKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxh
dGUtPkdldEZ1bmN0aW9uKCk7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAogICAgIElOQ19TVEFUUygi
RE9NLkxvY2F0aW9uLnJlbG9hZCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gYXJncy5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRl
cik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAK
ICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhU2Ny
aXB0Q29udHJvbGxlcjo6aXNTYWZlU2NyaXB0KGZyYW1lKSkKQEAgLTI4Myw3ICsyODMsNyBAQAog
ewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlcGxhY2UiKTsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9uOjp0
b05hdGl2ZShob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCkBAIC0zMDQsNyArMzA0LDcgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5M
b2NhdGlvbi5hc3NpZ24iKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFy
Z3MuSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwor
ICAgIExvY2F0aW9uKiBpbXAgPSBWOExvY2F0aW9uOjp0b05hdGl2ZShob2xkZXIpOwogCiAgICAg
RnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0zMzUsNyAr
MzM1LDcgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi50b1N0cmluZyIpOwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBMb2Nh
dGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+
KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4
TG9jYXRpb246OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6
Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCB0cnVl
KSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgcmVzdWx0ID0g
aW1wLT5ocmVmKCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIHsKICAgICBBU1NFUlQoVjhDbGFzc0lu
ZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpMT0NBVElP
Tik7CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MKLSAgICBMb2NhdGlvbiog
aW1wID0gIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENs
YXNzSW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsKKyAgICBMb2NhdGlvbiogaW1wID0gIFY4TG9jYXRp
b246OnRvTmF0aXZlKGhvc3QpOwogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNj
ZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9
CiAKQEAgLTM1NCw3ICszNTQsNyBAQAogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21J
bnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkxPQ0FUSU9OKTsKICAgICAv
LyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2VzcwotICAgIExvY2F0aW9uKiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpM
T0NBVElPTiwgaG9zdCk7CisgICAgTG9jYXRpb24qIGltcCA9IFY4TG9jYXRpb246OnRvTmF0aXZl
KGhvc3QpOwogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhC
aW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMy
NjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAKIHZvaWQgVjhBdHRyOjp2YWx1ZUFjY2Vzc29y
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBBdHRyKiBpbXAgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KGluZm8uSG9sZGVyKCkp
OworICAgIEF0dHIqIGltcCA9IFY4QXR0cjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAg
U3RyaW5nIGF0dHJWYWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOwog
ICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGltcC0+b3duZXJFbGVtZW50KCk7CiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVs
ZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6
bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MU2VsZWN0RWxl
bWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVj
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1l
bnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBWOEhU
TUxTZWxlY3RFbGVtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUgPSBpbmZvLkhvbGRlcigpLT5HZXRSZWFsTmFtZWRQcm9wZXJ0eUlu
UHJvdG90eXBlQ2hhaW4obmFtZSk7CiAKICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkKQEAgLTc3
LDcgKzc3LDcgQEAKIHsKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIo
aW5mby5Ib2xkZXIoKSkpOwogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBl
KGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgUmVmUHRyPE5vZGU+
IHJlc3VsdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVj
dEVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpLT5pdGVtKGluZGV4KTsKKyAgICBSZWZQdHI8Tm9kZT4g
cmVzdWx0ID0gVjhIVE1MU2VsZWN0RWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSktPml0
ZW0oaW5kZXgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKIApAQCAtODcsMjEgKzg3LDIxIEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGlu
ZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MU2VsZWN0RWxlbWVudC5JbmRleGVkUHJv
cGVydHlTZXR0ZXIiKTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MU2VsZWN0RWxlbWVudD4oaW5mby5Ib2xk
ZXIoKSk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IFY4SFRNTFNlbGVjdEVsZW1l
bnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiB0b09wdGlvbnNDb2xsZWN0
aW9uU2V0dGVyKGluZGV4LCB2YWx1ZSwgc2VsZWN0KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTFNlbGVjdEVsZW1lbnQucmVtb3Zl
Iik7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEhU
TUxTZWxlY3RFbGVtZW50KiBpbXAgPSBWOEhUTUxTZWxlY3RFbGVtZW50Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKICAgICByZXR1cm4gcmVtb3ZlRWxlbWVudChpbXAsIGFyZ3MpOwogfQogCiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRWxlbWVudChIVE1MU2VsZWN0RWxlbWVudCogaW1w
LCBjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSAKIHsKICAgICBpZiAoVjhIVE1MT3B0aW9uRWxl
bWVudDo6SGFzSW5zdGFuY2UoYXJnc1swXSkpIHsKLSAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQq
IGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRp
b25FbGVtZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICAg
ICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBWOEhUTUxPcHRpb25FbGVtZW50Ojp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICAgICAgaW1w
LT5yZW1vdmUoZWxlbWVudC0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVx
dWVzdFVwbG9hZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdFVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9h
ZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQ
TE9BRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBS
ZXF1ZXN0VXBsb2FkID0gVjhYTUxIdHRwUmVxdWVzdFVwbG9hZDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CiAKICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVx
dWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7CiAKQEAgLTY0LDcgKzY0LDcg
QEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVF
dmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCki
KTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhD
bGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhYTUxIdHRwUmVxdWVz
dFVwbG9hZDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBS
ZXF1ZXN0KCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUxpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb2RlTGlzdDo6bmFtZWRQcm9wZXJ0eUdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlTGlzdC5OYW1lZFByb3BlcnR5R2V0dGVyIik7
Ci0gICAgTm9kZUxpc3QqIGxpc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxOb2RlTGlzdD4oVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAg
Tm9kZUxpc3QqIGxpc3QgPSBWOE5vZGVMaXN0Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAg
ICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwogCiAgICAgLy8gTGVuZ3RoIHBy
b3BlcnR5IGNhbm5vdCBiZSBvdmVycmlkZGVuLgpAQCAtNjcsNyArNjcsNyBAQAogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAg
IE5vZGVMaXN0KiBsaXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9k
ZUxpc3Q+KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIE5vZGVM
aXN0KiBsaXN0ID0gVjhOb2RlTGlzdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICAv
LyBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlci4KICAgICB2ODo6TG9jYWw8djg6
OlVpbnQzMj4gaW5kZXggPSBhcmdzWzBdLT5Ub0FycmF5SW5kZXgoKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5hZGRFdmVudExpc3Rl
bmVyKCkiKTsKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFdlYlNvY2tldD4oVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIGFyZ3Mu
SG9sZGVyKCkpOworICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gVjhXZWJTb2NrZXQ6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKHdlYlNvY2tldCwgYXJnc1sxXSwgZmFs
c2UsIExpc3RlbmVyRmluZE9yQ3JlYXRlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTY0LDcg
KzY0LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYlNvY2tldDo6cmVtb3ZlRXZlbnRM
aXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViU29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFdlYlNvY2tl
dCogd2ViU29ja2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViU29j
a2V0PihWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgV2ViU29j
a2V0KiB3ZWJTb2NrZXQgPSBWOFdlYlNvY2tldDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAK
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2
ZW50TGlzdGVuZXIod2ViU29ja2V0LCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT25seSk7
CiAgICAgaWYgKGxpc3RlbmVyKSB7CkBAIC0xMjcsNyArMTI3LDcgQEAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFdlYlNvY2tldDo6c2VuZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViU29ja2V0LnNlbmQoKSIpOwotICAgIFdlYlNv
Y2tldCogd2ViU29ja2V0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2Vi
U29ja2V0PihWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgV2Vi
U29ja2V0KiB3ZWJTb2NrZXQgPSBWOFdlYlNvY2tldDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIHJldCA9IGZhbHNlOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0
aW9uQ2VudGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbjo6
YWRkRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uTm90aWZpY2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAg
IE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8Tm90aWZpY2F0aW9uPihWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgYXJncy5I
b2xkZXIoKSk7CisgICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOE5vdGlmaWNhdGlv
bjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobm90aWZpY2F0aW9uLCBh
cmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwogICAgIGlmIChsaXN0ZW5lcikg
ewpAQCAtNjcsNyArNjcsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm90aWZpY2F0aW9u
OjpyZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob3RpZmljYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigp
Iik7Ci0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9O
LCBhcmdzLkhvbGRlcigpKTsKKyAgICBOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IFY4Tm90
aWZpY2F0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihub3RpZmlj
YXRpb24sIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKICAgICBpZiAobGlzdGVu
ZXIpIHsKQEAgLTgzLDcgKzgzLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNh
dGlvbkNlbnRlcjo6Y3JlYXRlSFRNTE5vdGlmaWNhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLk5vdGlmaWNhdGlvbkNlbnRlci5D
cmVhdGVIVE1MTm90aWZpY2F0aW9uKCkiKTsKLSAgICBOb3RpZmljYXRpb25DZW50ZXIqIG5vdGlm
aWNhdGlvbkNlbnRlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vdGlm
aWNhdGlvbkNlbnRlcj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT05DRU5URVIsIGFyZ3MuSG9s
ZGVyKCkpOworICAgIE5vdGlmaWNhdGlvbkNlbnRlciogbm90aWZpY2F0aW9uQ2VudGVyID0gVjhO
b3RpZmljYXRpb25DZW50ZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgU3RyaW5nIHVybCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm90aWZpY2F0
aW9uQ2VudGVyOjpjcmVhdGVOb3RpZmljYXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Ob3RpZmljYXRpb25DZW50ZXIuQ3JlYXRl
Tm90aWZpY2F0aW9uKCkiKTsKLSAgICBOb3RpZmljYXRpb25DZW50ZXIqIG5vdGlmaWNhdGlvbkNl
bnRlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbkNl
bnRlcj4oVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT05DRU5URVIsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIE5vdGlmaWNhdGlvbkNlbnRlciogbm90aWZpY2F0aW9uQ2VudGVyID0gVjhOb3RpZmljYXRp
b25DZW50ZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gbm90aWZpY2F0
aW9uQ2VudGVyLT5jcmVhdGVOb3RpZmljYXRpb24odG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCB0
b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzJdKSwgZWMpOwpA
QCAtMTE4LDcgKzExOCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25D
ZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKICAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLlJlcXVlc3RQZXJt
aXNzaW9uKCkiKTsKLSAgICBOb3RpZmljYXRpb25DZW50ZXIqIG5vdGlmaWNhdGlvbkNlbnRlciA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbkNlbnRlcj4o
VjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT05DRU5URVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIE5v
dGlmaWNhdGlvbkNlbnRlciogbm90aWZpY2F0aW9uQ2VudGVyID0gVjhOb3RpZmljYXRpb25DZW50
ZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQgPSBub3RpZmljYXRpb25DZW50ZXItPmNvbnRleHQoKTsKIAogICAgIC8vIFJlcXVl
c3RpbmcgcGVybWlzc2lvbiBpcyBvbmx5IHZhbGlkIGZyb20gYSBwYWdlIGNvbnRleHQuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLk1lc3Nh
Z2VQb3J0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9y
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENs
YXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzLkhvbGRlcigpKTsKKyAgICBNZXNzYWdlUG9ydCog
bWVzc2FnZVBvcnQgPSBWOE1lc3NhZ2VQb3J0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50
TGlzdGVuZXIobWVzc2FnZVBvcnQsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPckNyZWF0
ZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOwpAQCAtNjEsNyArNjEsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4TWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LnJlbW92ZUV2
ZW50TGlzdGVuZXIoKSIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1F
U1NBR0VQT1JULCBhcmdzLkhvbGRlcigpKTsKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQg
PSBWOE1lc3NhZ2VQb3J0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIobWVz
c2FnZVBvcnQsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5KTsKICAgICBpZiAobGlz
dGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7
CkBAIC03Nyw3ICs3Nyw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhNZXNzYWdlUG9ydDo6
cG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElO
Q19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlIik7Ci0gICAgTWVzc2FnZVBvcnQq
IG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2Fn
ZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkpOworICAgIE1l
c3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4TWVzc2FnZVBvcnQ6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogICAg
IE1lc3NhZ2VQb3J0QXJyYXkgcG9ydEFycmF5OwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkg
ewpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICB0aHJvd0Vycm9yKCJNZXNzYWdlUG9y
dEFycmF5IGFyZ3VtZW50IG11c3QgY29udGFpbiBvbmx5IE1lc3NhZ2VQb3J0cyIpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHBvcnRBcnJheVtpXSA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5k
ZXg6Ok1FU1NBR0VQT1JULCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBvcnQpKTsKKyAg
ICAgICAgcG9ydEFycmF5W2ldID0gVjhNZXNzYWdlUG9ydDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChwb3J0KSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JD
dXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkg
QEAKICAgICBpZiAoIVY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkpCiAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhT
TFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4
WFNMVFByb2Nlc3Nvcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBOb2RlKiBub2Rl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpbXAt
PmltcG9ydFN0eWxlc2hlZXQobm9kZSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0K
QEAgLTczLDEwICs3MywxMCBAQAogICAgIGlmICghVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSB8fCAhVjhEb2N1bWVudDo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpCiAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQ
Uk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4WFNM
VFByb2Nlc3Nvcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBOb2RlKiBzb3VyY2Ug
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIERvY3VtZW50KiBvd25lciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOworICAgIE5vZGUqIHNvdXJjZSA9IFY4Tm9kZTo6dG9O
YXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgRG9jdW1l
bnQqIG93bmVyID0gVjhEb2N1bWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzWzFdKSk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHJlc3VsdCA9IGlt
cC0+dHJhbnNmb3JtVG9GcmFnbWVudChzb3VyY2UsIG93bmVyKTsKICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CkBAIC04
OSw5ICs4OSw5IEBACiAgICAgaWYgKCFWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgWFNMVFByb2Nlc3NvciogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nlc3Nvcj4oVjhDbGFz
c0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKKyAgICBYU0xUUHJvY2Vzc29y
KiBpbXAgPSBWOFhTTFRQcm9jZXNzb3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCi0gICAg
Tm9kZSogc291cmNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2Rl
Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBOb2RlKiBzb3Vy
Y2UgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sw
XSkpOwogICAgIGlmICghc291cmNlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkg
fHwgaXNVbmRlZmluZWRPck51bGwoYXJnc1syXSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAKLSAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1Is
IGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4WFNMVFByb2Nlc3Nv
cjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0g
dG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNv
cmVTdHJpbmcoYXJnc1sxXSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICBpZiAoaXNVbmRlZmlu
ZWRPck51bGwoYXJnc1sxXSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAg
ICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4WFNMVFByb2Nlc3Nvcjo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJn
c1sxXSk7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoYXJn
c1sxXSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBYU0xUUHJvY2Vz
c29yKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vz
c29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhT
TFRQcm9jZXNzb3IqIGltcCA9IFY4WFNMVFByb2Nlc3Nvcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0p
OwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5F
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOSArNDUsMTAgQEAKIC8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgZ2V0dGVyL3NldHRlciBo
ZWxwZXJzIHRvIFY4TlBPYmplY3QgYW5kIHJlbmFtaW5nIHRoaXMgZmlsZSB0byBWOFBsdWdpbkVs
ZW1lbnRGdW5jdGlvbnMKIC8vIHRvIG1hdGNoIEpTQyBiaW5kaW5ncyBuYW1pbmcgY29udmVudGlv
bi4KIAordGVtcGxhdGUgPGNsYXNzIEM+CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5w
T2JqZWN0TmFtZWRHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFBsdWdJbkVsZW1lbnQ+KGluZm8u
SG9sZGVyKCkpOworICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAgPSBDOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKICAgICBTY3JpcHRJbnN0YW5jZSBzY3JpcHRJbnN0YW5jZSA9IGltcC0+Z2V0
SW5zdGFuY2UoKTsKICAgICBpZiAoIXNjcmlwdEluc3RhbmNlKQogICAgICAgICByZXR1cm4gbm90
SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTU5LDkgKzYwLDEwIEBACiAgICAgcmV0dXJuIG5w
T2JqZWN0R2V0TmFtZWRQcm9wZXJ0eShpbnN0YW5jZSwgbmFtZSk7CiB9CiAKK3RlbXBsYXRlIDxj
bGFzcyBDPgogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdE5hbWVkU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICBIVE1MUGx1Z0luRWxlbWVudCog
aW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxl
bWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IEM6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFNjcmlwdEluc3RhbmNlIHNjcmlwdEluc3RhbmNl
ID0gaW1wLT5nZXRJbnN0YW5jZSgpOwogICAgIGlmICghc2NyaXB0SW5zdGFuY2UpCiAgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpAQCAtNzYsMzcgKzc4LDM3IEBACiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQXBwbGV0RWxlbWVudDo6bmFtZWRQcm9wZXJ0eUdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQXBwbGV0RWxlbWVudC5OYW1lZFByb3Bl
cnR5R2V0dGVyIik7Ci0gICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRHZXR0ZXIobmFtZSwgaW5mbyk7
CisgICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRHZXR0ZXI8VjhIVE1MQXBwbGV0RWxlbWVudD4obmFt
ZSwgaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxFbWJlZEVsZW1lbnQ6
Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEVtYmVkRWxl
bWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRHZXR0
ZXIobmFtZSwgaW5mbyk7CisgICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRHZXR0ZXI8VjhIVE1MRW1i
ZWRFbGVtZW50PihuYW1lLCBpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRN
TE9iamVjdEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uSFRNTE9iamVjdEVsZW1lbnQuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIHJldHVybiBu
cE9iamVjdE5hbWVkR2V0dGVyKG5hbWUsIGluZm8pOworICAgIHJldHVybiBucE9iamVjdE5hbWVk
R2V0dGVyPFY4SFRNTE9iamVjdEVsZW1lbnQ+KG5hbWUsIGluZm8pOwogfQogCiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhIVE1MQXBwbGV0RWxlbWVudDo6bmFtZWRQcm9wZXJ0eVNldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFwcGxl
dEVsZW1lbnQuTmFtZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIHJldHVybiBucE9iamVjdE5hbWVk
U2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKKyAgICByZXR1cm4gbnBPYmplY3ROYW1lZFNldHRl
cjxWOEhUTUxBcHBsZXRFbGVtZW50PihuYW1lLCB2YWx1ZSwgaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxFbWJlZEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxFbWJl
ZEVsZW1lbnQuTmFtZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIHJldHVybiBucE9iamVjdE5hbWVk
U2V0dGVyKG5hbWUsIHZhbHVlLCBpbmZvKTsKKyAgICByZXR1cm4gbnBPYmplY3ROYW1lZFNldHRl
cjxWOEhUTUxFbWJlZEVsZW1lbnQ+KG5hbWUsIHZhbHVlLCBpbmZvKTsKIH0KIAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SFRNTE9iamVjdEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPYmpl
Y3RFbGVtZW50Lk5hbWVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICByZXR1cm4gbnBPYmplY3ROYW1l
ZFNldHRlcihuYW1lLCB2YWx1ZSwgaW5mbyk7CisgICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRTZXR0
ZXI8VjhIVE1MT2JqZWN0RWxlbWVudD4obmFtZSwgdmFsdWUsIGluZm8pOwogfQogCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQXBwbGV0RWxlbWVudDo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTI3LDEwICsxMjksMTEgQEAKICAgICBy
ZXR1cm4gbnBPYmplY3RJbnZva2VEZWZhdWx0SGFuZGxlcihhcmdzKTsKIH0KIAordGVtcGxhdGUg
PGNsYXNzIEM+CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbmRleGVkR2V0dGVyKHVp
bnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxQbHVnSW5FbGVtZW50LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAg
IEhUTUxQbHVnSW5FbGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MUGx1Z0lu
RWxlbWVudCogaW1wID0gQzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU2NyaXB0SW5z
dGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBpbXAtPmdldEluc3RhbmNlKCk7CiAgICAgaWYgKCFzY3Jp
cHRJbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBA
IC0xNDIsMTAgKzE0NSwxMSBAQAogICAgIHJldHVybiBucE9iamVjdEdldEluZGV4ZWRQcm9wZXJ0
eShpbnN0YW5jZSwgaW5kZXgpOwogfQogCit0ZW1wbGF0ZSA8Y2xhc3MgQz4KIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBucE9iamVjdEluZGV4ZWRTZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IElOQ19TVEFUUygiRE9NLkhUTUxQbHVnSW5FbGVtZW50LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIp
OwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1M
UGx1Z0luRWxlbWVudCogaW1wID0gQzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU2Ny
aXB0SW5zdGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBpbXAtPmdldEluc3RhbmNlKCk7CiAgICAgaWYg
KCFzY3JpcHRJbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7CkBAIC0xNjAsMzcgKzE2NCwzNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFw
cGxldEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQXBwbGV0
RWxlbWVudC5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKLSAgICByZXR1cm4gbnBPYmplY3RJbmRl
eGVkR2V0dGVyKGluZGV4LCBpbmZvKTsKKyAgICByZXR1cm4gbnBPYmplY3RJbmRleGVkR2V0dGVy
PFY4SFRNTEFwcGxldEVsZW1lbnQ+KGluZGV4LCBpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4SFRNTEVtYmVkRWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90
IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygi
RE9NLkhUTUxFbWJlZEVsZW1lbnQuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgcmV0dXJu
IG5wT2JqZWN0SW5kZXhlZEdldHRlcihpbmRleCwgaW5mbyk7CisgICAgcmV0dXJuIG5wT2JqZWN0
SW5kZXhlZEdldHRlcjxWOEhUTUxFbWJlZEVsZW1lbnQ+KGluZGV4LCBpbmZvKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9iamVjdEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdl
dHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5IVE1MT2JqZWN0RWxlbWVudC5JbmRleGVkUHJvcGVydHlHZXR0ZXIi
KTsKLSAgICByZXR1cm4gbnBPYmplY3RJbmRleGVkR2V0dGVyKGluZGV4LCBpbmZvKTsKKyAgICBy
ZXR1cm4gbnBPYmplY3RJbmRleGVkR2V0dGVyPFY4SFRNTE9iamVjdEVsZW1lbnQ+KGluZGV4LCBp
bmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFwcGxldEVsZW1lbnQ6Omlu
ZGV4ZWRQcm9wZXJ0eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uSFRNTEFwcGxldEVsZW1lbnQuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgcmV0dXJu
IG5wT2JqZWN0SW5kZXhlZFNldHRlcihpbmRleCwgdmFsdWUsIGluZm8pOworICAgIHJldHVybiBu
cE9iamVjdEluZGV4ZWRTZXR0ZXI8VjhIVE1MQXBwbGV0RWxlbWVudD4oaW5kZXgsIHZhbHVlLCBp
bmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEVtYmVkRWxlbWVudDo6aW5k
ZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MRW1iZWRFbGVtZW50LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIHJldHVybiBu
cE9iamVjdEluZGV4ZWRTZXR0ZXIoaW5kZXgsIHZhbHVlLCBpbmZvKTsKKyAgICByZXR1cm4gbnBP
YmplY3RJbmRleGVkU2V0dGVyPFY4SFRNTEVtYmVkRWxlbWVudD4oaW5kZXgsIHZhbHVlLCBpbmZv
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9iamVjdEVsZW1lbnQ6OmluZGV4
ZWRQcm9wZXJ0eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
SFRNTE9iamVjdEVsZW1lbnQuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgcmV0dXJuIG5w
T2JqZWN0SW5kZXhlZFNldHRlcihpbmRleCwgdmFsdWUsIGluZm8pOworICAgIHJldHVybiBucE9i
amVjdEluZGV4ZWRTZXR0ZXI8VjhIVE1MT2JqZWN0RWxlbWVudD4oaW5kZXgsIHZhbHVlLCBpbmZv
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEFic3RyYWN0V29ya2VyOjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoTCJET00uQWJzdHJhY3RXb3Jr
ZXIuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgQWJzdHJhY3RXb3JrZXIqIHdvcmtlciA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNz
SW5kZXg6OkFCU1RSQUNUV09SS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBBYnN0cmFjdFdvcmtl
ciogd29ya2VyID0gVjhBYnN0cmFjdFdvcmtlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAK
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2
ZW50TGlzdGVuZXIod29ya2VyLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUp
OwogICAgIGlmIChsaXN0ZW5lcikgewpAQCAtNjMsNyArNjMsNyBAQAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4QWJzdHJhY3RXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdv
cmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKLSAgICBBYnN0cmFjdFdvcmtlciogd29ya2Vy
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4
Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIEFic3RyYWN0
V29ya2VyKiB3b3JrZXIgPSBWOEFic3RyYWN0V29ya2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKIAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlLCBMaXN0ZW5lckZpbmRPbmx5
KTsKICAgICBpZiAobGlzdGVuZXIpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFu
Y2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhTVkdFbGVtZW50SW5zdGFuY2U6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlNWR0Vs
ZW1lbnRJbnN0YW5jZS5BZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBTVkdFbGVtZW50SW5zdGFu
Y2UqIGluc3RhbmNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFNW
R0VsZW1lbnRJbnN0YW5jZT4oYXJncy5Ib2xkZXIoKSk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNl
KiBpbnN0YW5jZSA9IFY4U1ZHRWxlbWVudEluc3RhbmNlOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKIAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6
Z2V0RXZlbnRMaXN0ZW5lcihpbnN0YW5jZSwgYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9y
Q3JlYXRlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTYzLDcgKzYzLDcgQEAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFNWR0VsZW1lbnRJbnN0YW5jZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
U1ZHRWxlbWVudEluc3RhbmNlLlJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFNWR0VsZW1l
bnRJbnN0YW5jZSogaW5zdGFuY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8U1ZHRWxlbWVudEluc3RhbmNlPihhcmdzLkhvbGRlcigpKTsKKyAgICBTVkdFbGVtZW50
SW5zdGFuY2UqIGluc3RhbmNlID0gVjhTVkdFbGVtZW50SW5zdGFuY2U6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gVjhET01X
cmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGluc3RhbmNlLCBhcmdzWzFdLCBmYWxzZSwgTGlzdGVu
ZXJGaW5kT25seSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQAogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGFyZ3MuSG9sZGVyKCkpOworICAg
IEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwog
ICAgIGhpc3RvcnktPnN0YXRlT2JqZWN0QWRkZWQoaGlzdG9yeVN0YXRlLnJlbGVhc2UoKSwgdGl0
bGUsIHVybCwgSGlzdG9yeTo6U3RhdGVPYmplY3RQdXNoLCBlYyk7CiAgICAgcmV0dXJuIHRocm93
RXJyb3IoZWMpOwogfQpAQCAtNzgsNyArNzgsNyBAQAogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGFyZ3MuSG9sZGVy
KCkpOworICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwogICAgIGhpc3RvcnktPnN0YXRlT2JqZWN0QWRkZWQoaGlzdG9yeVN0YXRlLnJlbGVh
c2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6U3RhdGVPYmplY3RSZXBsYWNlLCBlYyk7CiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZWMpOwogfQpAQCAtODcsNyArODcsNyBAQAogewogICAgIEFTU0VS
VChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5k
ZXg6OkhJU1RPUlkpOwogICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzLgotICAg
IEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxI
aXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOworICAgIEhpc3RvcnkqIGhpc3Rv
cnkgPSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGhvc3QpOwogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1
cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaGlzdG9yeS0+ZnJh
bWUoKSwgZmFsc2UpOwogfQogCkBAIC05NSw3ICs5NSw3IEBACiB7CiAgICAgQVNTRVJUKFY4Q2xh
c3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6SElT
VE9SWSk7CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MuCi0gICAgSGlzdG9y
eSogaGlzdG9yeSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhpc3Rvcnk+
KFY4Q2xhc3NJbmRleDo6SElTVE9SWSwgaG9zdCk7CisgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4
SGlzdG9yeTo6dG9OYXRpdmUoaG9zdCk7CiAgICAgcmV0dXJuIFY4QmluZGluZ1NlY3VyaXR5Ojpj
YW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBoaXN0b3J5LT5mcmFtZSgpLCBm
YWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzI2OCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIHZvaWQgVjhIVE1MSUZyYW1lRWxlbWVu
dDo6c3JjQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAg
IEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPEhUTUxJRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MSUZy
YW1lRWxlbWVudCogaWZyYW1lID0gVjhIVE1MSUZyYW1lRWxlbWVudDo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CiAgICAgU3RyaW5nIHYgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZh
bHVlKTsKIAogICAgIGlmICghVjhCaW5kaW5nU2VjdXJpdHk6OmFsbG93U2V0dGluZ0ZyYW1lU3Jj
VG9KYXZhc2NyaXB0VXJsKFY4QmluZGluZ1N0YXRlOjpPbmx5KCksIGlmcmFtZSwgdikpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gNTMyNjgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdl
b2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9u
cyk7CiAKLSAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxHZW9sb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpHRU9MT0NBVElPTiwg
YXJncy5Ib2xkZXIoKSk7CisgICAgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uID0gVjhHZW9sb2Nh
dGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgZ2VvbG9jYXRpb24tPmdldEN1cnJl
bnRQb3NpdGlvbihwb3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25FcnJvckNhbGxi
YWNrLnJlbGVhc2UoKSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIH0KQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCi0gICAgR2VvbG9j
YXRpb24qIGdlb2xvY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
R2VvbG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6R0VPTE9DQVRJT04sIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiA9IFY4R2VvbG9jYXRpb246OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwogICAgIGludCB3YXRjaElkID0gZ2VvbG9jYXRpb24tPndhdGNoUG9zaXRp
b24ocG9zaXRpb25DYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxl
YXNlKCksIHBvc2l0aW9uT3B0aW9ucy5yZWxlYXNlKCkpOwogICAgIHJldHVybiB2ODo6TnVtYmVy
OjpOZXcod2F0Y2hJZCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
c3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lv
biA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC01Myw3ICs1NCw3IEBACiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzBdKSk7CisgICAgTm9kZSogbm9kZSA9IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTMyNjgp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoInNxbEFyZ3Mgc2hvdWxkIGJlIGFycmF5IG9yIG9iamVjdCEiLCBWOFByb3h5OjpU
eXBlRXJyb3IpOwogICAgIH0KIAotICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFNRTFRyYW5zYWN0aW9uPihWOENsYXNz
SW5kZXg6OlNRTFRSQU5TQUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24gPSBWOFNRTFRyYW5zYWN0aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50
Q29udGV4dCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxr
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
VHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cGFyZW50Tm9k
ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVHJlZVdhbGtlci5wYXJlbnROb2RlKCkiKTsKLSAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2Vy
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFz
c0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVl
V2Fsa2VyID0gVjhUcmVlV2Fsa2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIFNj
cmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5w
YXJlbnROb2RlKCZzdGF0ZSk7CkBAIC02OCw3ICs2OCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhUcmVlV2Fsa2VyOjpmaXJzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UcmVlV2Fsa2VyLmZpcnN0Q2hpbGQoKSIpOwot
ICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmZpcnN0Q2hpbGQoJnN0YXRlKTsKQEAgLTc4LDcgKzc4
LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6Omxhc3RDaGlsZENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVHJl
ZVdhbGtlci5sYXN0Q2hpbGQoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6
OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIg
PSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0U3Rh
dGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmxhc3RDaGls
ZCgmc3RhdGUpOwpAQCAtODgsNyArODgsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJl
ZVdhbGtlcjo6bmV4dE5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIubmV4dE5vZGUoKSIpOwotICAgIFRyZWVXYWxr
ZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVl
V2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRy
ZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9
IHRyZWVXYWxrZXItPm5leHROb2RlKCZzdGF0ZSk7CkBAIC05OCw3ICs5OCw3IEBACiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGVDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIucHJl
dmlvdXNOb2RlKCkiKTsKLSAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FM
S0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhUcmVl
V2Fsa2VyOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRl
OwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c05vZGUoJnN0
YXRlKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdh
bGtlcjo6bmV4dFNpYmxpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIubmV4dFNpYmxpbmcoKSIpOwotICAgIFRyZWVX
YWxrZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxU
cmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAg
IFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3Vs
dCA9IHRyZWVXYWxrZXItPm5leHRTaWJsaW5nKCZzdGF0ZSk7CkBAIC0xMTgsNyArMTE4LDcgQEAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZ0NhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVHJl
ZVdhbGtlci5wcmV2aW91c1NpYmxpbmcoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNz
SW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVX
YWxrZXIgPSBWOFRyZWVXYWxrZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2Ny
aXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnBy
ZXZpb3VzU2libGluZygmc3RhdGUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiA1MzI2OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGVkaWNhdGVk
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNz
YWdlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMo
TCJET00uRGVkaWNhdGVkV29ya2VyQ29udGV4dC5wb3N0TWVzc2FnZSIpOwotICAgIERlZGljYXRl
ZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OkRFRElDQVRF
RFdPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworICAgIERlZGljYXRlZFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBWOERlZGljYXRlZFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2Ug
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pKTsKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRBcnJheTsKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+IDEpIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzMjY4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSwxMCBAQAogCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRl
ICJWOFN0b3JhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUsNyArMTE4LDcg
QEAKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5pbnNwZWN0ZWRXaW5kb3co
KSIpOwogCi0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8SW5qZWN0ZWRTY3JpcHRIb3N0PihWOENsYXNzSW5kZXg6OklOSkVD
VEVEU0NSSVBUSE9TVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBo
b3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAg
IEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaG9zdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwog
ICAgIGlmICghaWMpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0xMzQsNyAr
MTM3LDcgQEAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAKLSAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGhvc3QgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbmplY3RlZFNjcmlwdEhvc3Q+KFY4Q2xhc3NJbmRl
eDo6SU5KRUNURURTQ1JJUFRIT1NULCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbmplY3RlZFNjcmlw
dEhvc3QqIGhvc3QgPSBWOEluamVjdGVkU2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IGhvc3QtPm5vZGVGb3JJZChhcmdzWzBdLT5Ub0lu
dDMyKCktPlZhbHVlKCkpOwogICAgIGlmICghbm9kZSkKQEAgLTE1Myw3ICsxNTYsNyBAQAogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMikKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IAotICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PEluamVjdGVkU2NyaXB0SG9zdD4oVjhDbGFzc0luZGV4OjpJTkpFQ1RFRFND
UklQVEhPU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9
IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICByZXR1
cm4gaG9zdC0+d3JhcE9iamVjdChTY3JpcHRWYWx1ZShhcmdzWzBdKSwgdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzFdKSkudjhWYWx1ZSgpOwogfQogCkBAIC0xNjMsNyArMTY2LDcg
QEAKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAKLSAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGhvc3QgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxJbmplY3RlZFNjcmlwdEhvc3Q+KFY4Q2xhc3NJbmRleDo6SU5K
RUNURURTQ1JJUFRIT1NULCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbmplY3RlZFNjcmlwdEhvc3Qq
IGhvc3QgPSBWOEluamVjdGVkU2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAg
ICAgcmV0dXJuIGhvc3QtPnVud3JhcE9iamVjdCh0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNr
KGFyZ3NbMF0pKS52OFZhbHVlKCk7CiB9CiAKQEAgLTE3Myw4ICsxNzYsOCBAQAogICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAg
IEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PEluamVjdGVkU2NyaXB0SG9zdD4oVjhDbGFzc0luZGV4OjpJTkpFQ1RFRFNDUklQVEhP
U1QsIGFyZ3MuSG9sZGVyKCkpOwotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJn
c1swXSkpOworICAgIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0ZWRTY3JpcHRI
b3N0Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhOb2RlOjp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBib29s
IHdpdGhDaGlsZHJlbiA9IGFyZ3NbMV0tPlRvQm9vbGVhbigpLT5WYWx1ZSgpOwogICAgIGJvb2wg
c2VsZWN0SW5VSSA9IGFyZ3NbMl0tPlRvQm9vbGVhbigpLT5WYWx1ZSgpOwogICAgIGlmIChub2Rl
KQpAQCAtMTkwLDcgKzE5Myw3IEBACiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5qZWN0ZWRTY3JpcHRIb3N0
PihWOENsYXNzSW5kZXg6OklOSkVDVEVEU0NSSVBUSE9TVCwgYXJncy5Ib2xkZXIoKSk7CisgICAg
SW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwogICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGhvc3QtPmRhdGFiYXNl
Rm9ySWQoYXJnc1swXS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKICAgICBpZiAoIWRhdGFiYXNlKQog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtMjAzLDggKzIwNiw4IEBACiAgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SW5qZWN0ZWRTY3JpcHRIb3N0PihWOENsYXNzSW5kZXg6OklOSkVDVEVEU0NS
SVBUSE9TVCwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGF0YWJhc2U+KFY4Q2xhc3NJbmRleDo6REFU
QUJBU0UsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIEluamVj
dGVkU2NyaXB0SG9zdCogaG9zdCA9IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBWOERhdGFiYXNlOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoZGF0YWJh
c2UpCiAgICAgICAgIGhvc3QtPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKIApAQCAtMjE5LDgg
KzIyMiw4IEBACiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogCi0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5qZWN0ZWRTY3JpcHRIb3N0PihWOENsYXNzSW5k
ZXg6OklOSkVDVEVEU0NSSVBUSE9TVCwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgU3RvcmFnZSogc3Rv
cmFnZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0b3JhZ2U+KFY4Q2xh
c3NJbmRleDo6U1RPUkFHRSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7
CisgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFN0b3JhZ2U6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogICAgIGlm
IChzdG9yYWdlKQogICAgICAgICBob3N0LT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOwogCg==
</data>
<flag name="review"
          id="28884"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46593</attachid>
            <date>2010-01-14 12:11:10 -0800</date>
            <delta_ts>2010-01-14 12:24:08 -0800</delta_ts>
            <desc>the rest</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22200</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTMyODQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMTQgIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZSooKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzM2NzcKKworICAgICAgICAqIHNyYy9XZWJCaW5kaW5ncy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmdldERyYWdEYXRhSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OmdldFJh
bmdlSW1wbCk6CisKIDIwMTAtMDEtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmluZGluZ3MuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMCBAQAogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEV2ZW50LmgiCiAjaW5jbHVkZSAiVjhIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4UmFuZ2UuaCIKICNlbGlmIFVT
RShKU0MpCiAjaW5jbHVkZSAiYnJpZGdlL2MvY191dGlsaXR5LmgiCiAjZW5kaWYKQEAgLTIyNCwx
MyArMjI2LDEzIEBACiAKICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgV2ViQ29yZSBldmVudC4KICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VycmVudEV2ZW50KGdldEV2ZW50KGNvbnRleHQpKTsK
LSAgICBFdmVudCogZXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZUV2ZW50KGN1
cnJlbnRFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjdXJyZW50RXZlbnQpKTsKICAgICBpZiAoIWV2ZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBnaXZlbiBucG9i
aiBpcyB0aGF0IGV2ZW50LgogICAgIFY4TlBPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VjhOUE9iamVjdCo+KG5wb2JqKTsKLSAgICBFdmVudCogZ2l2ZW4gPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZUV2ZW50KG9iamVjdC0+djhPYmplY3QpOworICAgIEV2ZW50KiBnaXZl
biA9IFY4RXZlbnQ6OnRvTmF0aXZlKG9iamVjdC0+djhPYmplY3QpOwogICAgIGlmIChnaXZlbiAh
PSBldmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODUsNyArMjg3LDcgQEAKICAg
ICBpZiAoVjhDbGFzc0luZGV4OjpSQU5HRSAhPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBl
KHY4b2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmFuZ2UqIG5hdGl2ZSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkNvcmU6OlJhbmdlPihWOENs
YXNzSW5kZXg6OlJBTkdFLCB2OG9iamVjdCk7CisgICAgUmFuZ2UqIG5hdGl2ZSA9IFY4UmFuZ2U6
OnRvTmF0aXZlKHY4b2JqZWN0KTsKICAgICBpZiAoIW5hdGl2ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gNTMyODQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTAxLTE0ICBOYXRlIENoYXBpbiAgPGphcGhldEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3RhbmRhcmRpemUgdGhlIHJlc3Qgb2YgdGhlIHY4IGJpbmRpbmdzIG9uIHRvTmF0aXZl
KCkgd2hlcmV2ZXIgcG9zc2libGUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMzNjc3CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0
LmNwcDoKKyAgICAgICAgKHY4T2JqZWN0VG9OUE9iamVjdCk6IFNwZWNpYWwgY2FzZSBmb3IgY29u
dmVydGluZyBOUE9iamVjdHMsIHNpbmNlIHRoZXJlIGFyZW4ndCBnZW5lcmVhdGVkIGJpbmRpbmdz
IGZvciB0aGVtLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3QuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOENvbGxlY3Rpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6dG9OYXRpdmVDb2xsZWN0aW9uKTogU3BlY2lhbCBjYXNlIGZv
ciBjb252ZXJ0aW5nIFY4Q29sbGVjdGlvbnMsIHNpbmNlIHRoZXJlIGFyZW4ndCBnZW5lcmVhdGVk
IGJpbmRpbmdzIGZvciB0aGVtLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhO
UE9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisKIDIwMTAtMDEtMTQgIEt3YW5n
IFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cAkocmV2aXNpb24gNTMyNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NiwxMSArNjY2LDYgQEAKICAgICByZXR1cm4gVjhDbGFz
c0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIGlzV3Jh
cHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lk
Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpIDogMDsKLX0KLQogUGFzc1Jl
ZlB0cjxOb2RlRmlsdGVyPiBWOERPTVdyYXBwZXI6OndyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBmaWx0ZXIpCiB7CiAgICAgLy8gQSBOb2RlRmlsdGVyIGlzIHVzZWQg
d2hlbiB3YWxraW5nIHRocm91Z2ggYSBET00gdHJlZSBvciBpdGVyYXRpbmcgdHJlZQpAQCAtMTUy
Miw3ICsxNTE3LDcgQEAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGN1cnJlbnRHbG9iYWwg
PSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFsKTsKICAgICBpZiAoIXdpbmRvd1dyYXBwZXIuSXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmIChjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRv
dz4od2luZG93V3JhcHBlcikgPT0gd2luZG93KQorICAgICAgICBpZiAoVjhET01XaW5kb3c6OnRv
TmF0aXZlKHdpbmRvd1dyYXBwZXIpID09IHdpbmRvdykKICAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50R2xvYmFsOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lv
biA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CiAg
ICAgZ2xvYmFsID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBnbG9iYWwpOwogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGdsb2JhbCk7CisgICAgcmV0dXJuIFY4RE9NV2luZG93Ojp0
b05hdGl2ZShnbG9iYWwpOwogfQogCiBGcmFtZSogVjhQcm94eTo6cmV0cmlldmVGcmFtZSh2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJWOEN1c3Rv
bUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhFdmVudC5oIgogI2luY2x1ZGUgIlY4SW5kZXgu
aCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4WFBhdGhOU1Jlc29sdmVy
LmgiCkBAIC0xMjEsMjkgKzEyMiw2IEBACiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LklzRW1w
dHkoKSA/IG9iamVjdCA6IG9iamVjdC0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVDaGFpbihnZXRU
ZW1wbGF0ZSh0eXBlKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBIGhlbHBlciBmdW5jdGlv
biBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBmcm9tIGEgRE9NIHdyYXBwZXIKLSAgICAg
ICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0eXBlLgotICAgICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgICAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxDKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRl
IDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05vZGUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgICAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbVdyYXBw
ZXJUeXBlKG9iamVjdCkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSNlbmRpZgotICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Qz4ob2JqZWN0KTsKLSAgICAgICAg
fQotCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8VD4gaW1wKQogICAgICAgICB7CkBAIC0xNzQsMzAgKzE1Miw2
IEBACiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9k
ZVRvVjhPYmplY3QoTm9kZSosIFY4UHJveHkqLCBET01XcmFwcGVyTWFwPE5vZGU+Jik7CiAKLSAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRp
dmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOYXRpdmUgZXZlbnQg
bGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVy
aWMgZnVuY3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVW
RU5UTElTVEVORVIpOwotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpF
VkVOVFRBUkdFVCk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0
KSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBjb25zdCBib29sIHR5cGVJc1ZhbGlk
ID0KLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICh0eXBlICE9IFY4Q2xhc3NJbmRleDo6
VFlQRSkgJiYKLSAgICAgICAgICAgICAgICBET01fTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0jaWYg
RU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0j
ZW5kaWYKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICAgICAgICAgICAgICB0cnVlOwotICAgICAgICAg
ICAgQVNTRVJUKHR5cGVJc1ZhbGlkKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gY29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTxDPihvYmplY3QpOwotICAgICAgICB9Ci0KICAgICAgICAg
c3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnZlcnRFdmVudFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCkBAIC0yMDcs
MTMgKzE2MSw2IEBACiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CiAKLSAgICAgICAgc3RhdGljIEV2ZW50KiBjb252
ZXJ0VG9OYXRpdmVFdmVudCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoZXZlbnRUYXJnZXQuZ2V0KCkpOwpAQCAtMjUzLDcgKzIwMCw3IEBACiAgICAgICAgIHsKICAg
ICAgICAgICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyOwogICAgICAgICAgICAg
aWYgKFY4WFBhdGhOU1Jlc29sdmVyOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmVzb2x2ZXIgPSBjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENs
YXNzSW5kZXg6OlhQQVRITlNSRVNPTFZFUiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHJlc29sdmVyID0gVjhYUGF0aE5TUmVzb2x2ZXI6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJlc29sdmVyID0g
VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShwcm94eSwgdmFsdWUtPlRvT2JqZWN0KCkp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyOwpAQCAtMjgxLDggKzIyOCw2IEBACiAgICAg
ICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIHdyYXBwZXIgb2YgdHlwZSB8Y2xh
c3NUeXBlfC4KICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKIAotICAgICAgICBzdGF0
aWMgdm9pZCogY29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
YSBWOCB2YWx1ZSBpcyBhIERPTSBFdmVudCB3cmFwcGVyLgogICAgICAgICBzdGF0aWMgYm9vbCBp
c0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDUzMjc1KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOEV2ZW50LmgiCiAj
aW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMTY5LDcgKzE3MCw3IEBACiAKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBnbG9iYWwtPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
ImV2ZW50IikpOwotICAgIEV2ZW50KiBldmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlRXZlbnQoanNFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjppc0RP
TUV2ZW50V3JhcHBlcihqc0V2ZW50KSA/IFY4RXZlbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoanNFdmVudCkpIDogMDsKIAogICAgIC8vIEJhc2VkIG9uIGNvZGUgZnJv
bSBranNfYmluZGluZ3MuY3BwLgogICAgIC8vIE5vdGU6IFRoaXMgaXMgbW9yZSBsaWJlcmFsIHRo
YW4gRmlyZWZveCdzIGltcGxlbWVudGF0aW9uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDkgQEAK
ICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJWOEhpc3RvcnkuaCIKICNpbmNs
dWRlICJWOEluZGV4LmgiCisjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtOTUs
MTcgKzk3LDE3IEBACiAgICAgICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRhcmdldDsKIAotICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpE
T01XSU5ET1csIHdpbmRvdyk7CisgICAgICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhE
T01XaW5kb3c6OnRvTmF0aXZlKHdpbmRvdyk7CiAgICAgICAgIHRhcmdldCA9IHRhcmdldFdpbmRv
dy0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpMT0NBVElPTjogewotICAgICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0
KTsKKyAgICAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoaG9zdCk7
CiAgICAgICAgIHRhcmdldCA9IGhpc3RvcnktPmZyYW1lKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SElTVE9SWTogewotICAgICAgICBMb2NhdGlvbiog
bG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4o
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9zdCk7CisgICAgICAgIExvY2F0aW9uKiBsb2NhdGlv
biA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvc3QpOwogICAgICAgICB0YXJnZXQgPSBsb2NhdGlv
bi0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L05Q
VjhPYmplY3QuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvTlBW
OE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDExIEBACiAgICAgcmV0dXJu
IHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpOwogfQogCitOUE9iamVjdCogdjhPYmplY3RUb05QT2Jq
ZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
V2ViQ29yZTo6djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsgCit9CisKIHN0YXRpYyBOUENsYXNz
IFY4TlBPYmplY3RDbGFzcyA9IHsgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jVjhOUE9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlZVY4TlBPYmplY3QsCkBAIC0xMTAsNyArMTE1LDcgQEAK
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdHlwZUluZGV4ID0gb2JqZWN0LT5HZXRJbnRl
cm5hbEZpZWxkKFdlYkNvcmU6OnY4RE9NV3JhcHBlclR5cGVJbmRleCk7CiAgICAgICAgIGlmICh0
eXBlSW5kZXgtPklzTnVtYmVyKCkgJiYgdHlwZUluZGV4LT5VaW50MzJWYWx1ZSgpID09IFY4Q2xh
c3NJbmRleDo6TlBPQkpFQ1QpIHsKIAotICAgICAgICAgICAgTlBPYmplY3QqIHJldHVyblZhbHVl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmplY3Q+KFY4Q2xhc3NJ
bmRleDo6TlBPQkpFQ1QsIG9iamVjdCk7CisgICAgICAgICAgICBOUE9iamVjdCogcmV0dXJuVmFs
dWUgPSB2OE9iamVjdFRvTlBPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHJldHVyblZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCShyZXZpc2lvbiA1MzI3
NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDEwICs2NSwxNiBAQAogICAgIGlmIChWOEhUTUxBcHBsZXRFbGVtZW50OjpIYXNJbnN0
YW5jZShhcmdzLkhvbGRlcigpKSB8fCBWOEhUTUxFbWJlZEVsZW1lbnQ6Okhhc0luc3RhbmNlKGFy
Z3MuSG9sZGVyKCkpCiAgICAgICAgIHx8IFY4SFRNTE9iamVjdEVsZW1lbnQ6Okhhc0luc3RhbmNl
KGFyZ3MuSG9sZGVyKCkpKSB7CiAgICAgICAgIC8vIFRoZSBob2xkZXIgb2JqZWN0IGlzIGEgc3Vi
dHlwZSBvZiBIVE1MUGx1Z0luRWxlbWVudC4KLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVs
ZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5F
bGVtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1l
bnQ7CisgICAgICAgIGlmIChWOEhUTUxBcHBsZXRFbGVtZW50OjpIYXNJbnN0YW5jZShhcmdzLkhv
bGRlcigpKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSBWOEhUTUxBcHBsZXRFbGVtZW50Ojp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICAgICAgZWxzZSBpZiAoVjhIVE1MRW1iZWRFbGVtZW50
OjpIYXNJbnN0YW5jZShhcmdzLkhvbGRlcigpKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSBWOEhU
TUxFbWJlZEVsZW1lbnQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbGVtZW50ID0gVjhIVE1MT2JqZWN0RWxlbWVudDo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAgICAgICAgIFNjcmlwdEluc3RhbmNlIHNjcmlwdEluc3RhbmNlID0gZWxlbWVu
dC0+Z2V0SW5zdGFuY2UoKTsKICAgICAgICAgaWYgKHNjcmlwdEluc3RhbmNlKQotICAgICAgICAg
ICAgbnBPYmplY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOUE9iamVj
dD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgc2NyaXB0SW5zdGFuY2UtPmluc3RhbmNlKCkpOwor
ICAgICAgICAgICAgbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmplY3Qoc2NyaXB0SW5zdGFuY2Ut
Pmluc3RhbmNlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBucE9iamVjdCA9IDA7CiAg
ICAgfSBlbHNlIHsKQEAgLTc3LDcgKzgzLDcgQEAKICAgICAgICAgaWYgKGFyZ3MuSG9sZGVyKCkt
PkludGVybmFsRmllbGRDb3VudCgpICE9IG5wT2JqZWN0SW50ZXJuYWxGaWVsZENvdW50KQogICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOUE1ldGhvZCBjYWxsZWQgb24gbm9uLU5QT2JqZWN0
IiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwogCi0gICAgICAgIG5wT2JqZWN0ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmplY3Q+KFY4Q2xhc3NJbmRleDo6TlBP
QkpFQ1QsIGFyZ3MuSG9sZGVyKCkpOworICAgICAgICBucE9iamVjdCA9IHY4T2JqZWN0VG9OUE9i
amVjdChhcmdzLkhvbGRlcigpKTsKICAgICB9CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3Jh
cHBlciB3YXNuJ3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0
ZWQuCkBAIC0xNjEsNyArMTY3LDcgQEAKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBu
cE9iamVjdEdldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50aWZp
ZXIgaWRlbnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4ga2V5KQogewotICAgIE5QT2JqZWN0
KiBucE9iamVjdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0
PihWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBzZWxmKTsKKyAgICBOUE9iamVjdCogbnBPYmplY3Qg
PSB2OE9iamVjdFRvTlBPYmplY3Qoc2VsZik7CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3Jh
cHBlciB3YXNuJ3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaAogICAgIC8vIGhhcyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZC4KQEAgLTIzMCw3ICsyMzYsNyBAQAogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG5wT2JqZWN0U2V0UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5Q
SWRlbnRpZmllciBpZGVudGlmaWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKIHsKLSAg
ICBOUE9iamVjdCogbnBPYmplY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxOUE9iamVjdD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgc2VsZik7CisgICAgTlBPYmplY3Qq
IG5wT2JqZWN0ID0gdjhPYmplY3RUb05QT2JqZWN0KHNlbGYpOwogCiAgICAgLy8gVmVyaWZ5IHRo
YXQgb3VyIHdyYXBwZXIgd2Fzbid0IHVzaW5nIGEgTlBPYmplY3Qgd2hpY2ggaGFzIGFscmVhZHkg
YmVlbiBkZWxldGVkLgogICAgIGlmICghbnBPYmplY3QgfHwgIV9OUE5fSXNBbGl2ZShucE9iamVj
dCkpIHsKQEAgLTI4MCw3ICsyODYsNyBAQAogCiB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbnBPYmpl
Y3RQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbywgYm9vbCBu
YW1lZFByb3BlcnR5KQogewotICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0PihWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBp
bmZvLkhvbGRlcigpKTsKKyAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmpl
Y3QoaW5mby5Ib2xkZXIoKSk7CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3JhcHBlciB3YXNu
J3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaAogICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRl
ZC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAJKHJldmlzaW9uIDUzMjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw3IEBACiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5j
bHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMp
CiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCkBAIC0xMDksNyArMTEwLDcgQEAKICAgICAvLyBSZXR1
cm4gMCBpZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3QgdGhlIHdvcmtlciBj
b250ZXh0LgogICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBn
bG9iYWwpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRl
eHQ6OnRvTmF0aXZlKGdsb2JhbCk7CiAgICAgcmV0dXJuIHdvcmtlckNvbnRleHQtPnNjcmlwdCgp
LT5wcm94eSgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHJldmlz
aW9uIDUzMjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAKICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbGVtZW50YXRpb24pOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxl
Y3Rpb24odjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PENvbGxlY3Rpb24qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgIH0KKwogICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFz
c1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50
YXRpb25UeXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFY4T2JqZWN0KGltcGxlbWVudGF0
aW9uLmdldCgpLCBpbXBsZW1lbnRhdGlvblR5cGUpOwpAQCAtNjQsNyArNjksNyBAQAogICAgICAg
ICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CiAgICAgICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUob2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXJUeXBlICE9IFY4
Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwg
b2JqZWN0KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVj
dGlvbjxDb2xsZWN0aW9uPihvYmplY3QpOwogICAgICAgICBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lID0gdG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsKICAgICAgICAg
cmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKICAgICB9CkBAIC0xMTIsNyArMTE3LDcgQEAK
ICAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwog
ICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOERPTVdy
YXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9iamVjdCk7CiAgICAgICAgIEFTU0VSVCh3cmFwcGVyVHlw
ZSAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9u
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBl
clR5cGUsIG9iamVjdCk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2
ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4ob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGdldFY4T2Jq
ZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5pdGVtKGluZGV4KSwgaW1wbGVtZW50YXRpb25UeXBl
KTsKICAgICB9CiAKQEAgLTEyNyw3ICsxMzIsNyBAQAogICAgIHsKICAgICAgICAgQVNTRVJUKFY4
RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKICAgICAgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFz
c0luZGV4OjpOT0RFKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7
CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29s
bGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9u
LT5sZW5ndGgoKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2
ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CkBAIC0xNDIsOCArMTQ3LDcgQEAKICAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0
aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGNvbGxlY3Rpb25JbmRleGVkUHJvcGVy
dHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiAgICAgewogICAgICAg
ICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwot
ICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOERPTVdy
YXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpOwotICAgICAgICBDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVj
dGlvbj4od3JhcHBlclR5cGUsIGluZm8uSG9sZGVyKCkpOworICAgICAgICBDb2xsZWN0aW9uKiBj
b2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkp
OwogICAgICAgICBpbnQgbGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7CiAgICAgICAgIHY4
OjpIYW5kbGU8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTYwLDggKzE2
NCw3IEBACiAgICAgewogICAgICAgICAvLyBGSVhNRTogYXNzZXJ0IHRoYXQgb2JqZWN0IG11c3Qg
YmUgYSBjb2xsZWN0aW9uIHR5cGUKICAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHdyYXBwZXJUeXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhv
bGRlcigpKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBpbmZvLkhvbGRl
cigpKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlv
bjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGNv
bGxlY3Rpb24tPml0ZW0oaW5kZXgpOwogICAgICAgICByZXR1cm4gdjhTdHJpbmdPck51bGwocmVz
dWx0KTsKICAgICB9CkBAIC0xNzIsOCArMTc1LDcgQEAKICAgICB7CiAgICAgICAgIC8vIEZJWE1F
OiBhc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZQogICAgICAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwotICAg
ICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBw
ZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpOwotICAgICAgICBDb2xsZWN0aW9uKiBj
b2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlv
bj4od3JhcHBlclR5cGUsIGluZm8uSG9sZGVyKCkpOworICAgICAgICBDb2xsZWN0aW9uKiBjb2xs
ZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwog
ICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7CiAgICAgICAg
IHJldHVybiB2OFN0cmluZyhyZXN1bHQpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvTlBWOE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9i
amVjdC5oCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw0ICs2MCw2IEBACiAKIE5QT2JqZWN0KiBucENyZWF0
ZVY4U2NyaXB0T2JqZWN0KE5QUCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgV2ViQ29yZTo6RE9N
V2luZG93Kik7CiAKK05QT2JqZWN0KiB2OE9iamVjdFRvTlBPYmplY3Qodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pik7CisKICNlbmRpZiAvLyBOUFY4T2JqZWN0X2gKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIs
MTQgKzQwMiwxMiBAQAogdGVtcGxhdGUgPGNsYXNzIFA+CiBQIFY4U1ZHUE9EVHlwZVV0aWw6OnRv
U1ZHUE9EVHlwZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG9iamVjdCwgYm9vbCYgb2spCiB7Ci0gICAgdm9pZCAqd3JhcHBlciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwodHlwZSwgb2JqZWN0KTsKLSAgICBpZiAo
d3JhcHBlciA9PSBOVUxMKSB7CisgICAgaWYgKCFWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlw
ZShvYmplY3QsIHR5cGUpKSB7CiAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybiBQ
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICByZXR1cm4gKnN0
YXRpY19jYXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8UD4qPih3cmFwcGVyKTsKICAgICB9CisgICAg
b2sgPSB0cnVlOworICAgIHJldHVybiAqVjhTVkdQT0RUeXBlV3JhcHBlcjxQPjo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gNTMyNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0K
IAotICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdCh2YWx1ZSkpOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gVjhIVE1M
T3B0aW9uRWxlbWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1
ZSkpOwogICAgIGJhc2UtPnNldE9wdGlvbihpbmRleCwgZWxlbWVudCwgZWMpOwogCiAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsK
</data>
<flag name="commit-queue"
          id="28892"
          type_id="3"
          status="-"
          setter="japhet"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46595</attachid>
            <date>2010-01-14 12:24:08 -0800</date>
            <delta_ts>2010-01-14 13:48:09 -0800</delta_ts>
            <desc>the rest - compile fixed</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>23741</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTMyODQpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMTQgIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZSooKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzM2NzcKKworICAgICAgICAqIHNyYy9XZWJCaW5kaW5ncy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OmdldERyYWdEYXRhSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OmdldFJh
bmdlSW1wbCk6CisKIDIwMTAtMDEtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmluZGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmluZGluZ3MuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmluZGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMCBAQAogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJW
OERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEV2ZW50LmgiCiAjaW5jbHVkZSAiVjhIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4UmFuZ2UuaCIKICNlbGlmIFVT
RShKU0MpCiAjaW5jbHVkZSAiYnJpZGdlL2MvY191dGlsaXR5LmgiCiAjZW5kaWYKQEAgLTIyNCwx
MyArMjI2LDEzIEBACiAKICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgV2ViQ29yZSBldmVudC4KICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VycmVudEV2ZW50KGdldEV2ZW50KGNvbnRleHQpKTsK
LSAgICBFdmVudCogZXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZUV2ZW50KGN1
cnJlbnRFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjdXJyZW50RXZlbnQpKTsKICAgICBpZiAoIWV2ZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBnaXZlbiBucG9i
aiBpcyB0aGF0IGV2ZW50LgogICAgIFY4TlBPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VjhOUE9iamVjdCo+KG5wb2JqKTsKLSAgICBFdmVudCogZ2l2ZW4gPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZUV2ZW50KG9iamVjdC0+djhPYmplY3QpOworICAgIEV2ZW50KiBnaXZl
biA9IFY4RXZlbnQ6OnRvTmF0aXZlKG9iamVjdC0+djhPYmplY3QpOwogICAgIGlmIChnaXZlbiAh
PSBldmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODUsNyArMjg3LDcgQEAKICAg
ICBpZiAoVjhDbGFzc0luZGV4OjpSQU5HRSAhPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBl
KHY4b2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmFuZ2UqIG5hdGl2ZSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkNvcmU6OlJhbmdlPihWOENs
YXNzSW5kZXg6OlJBTkdFLCB2OG9iamVjdCk7CisgICAgUmFuZ2UqIG5hdGl2ZSA9IFY4UmFuZ2U6
OnRvTmF0aXZlKHY4b2JqZWN0KTsKICAgICBpZiAoIW5hdGl2ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gNTMyODQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTAxLTE0ICBOYXRlIENoYXBpbiAgPGphcGhldEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3RhbmRhcmRpemUgdGhlIHJlc3Qgb2YgdGhlIHY4IGJpbmRpbmdzIG9uIHRvTmF0aXZl
KCkgd2hlcmV2ZXIgcG9zc2libGUuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMzNjc3CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0
LmNwcDoKKyAgICAgICAgKHY4T2JqZWN0VG9OUE9iamVjdCk6IFNwZWNpYWwgY2FzZSBmb3IgY29u
dmVydGluZyBOUE9iamVjdHMsIHNpbmNlIHRoZXJlIGFyZW4ndCBnZW5lcmVhdGVkIGJpbmRpbmdz
IGZvciB0aGVtLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3QuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOENvbGxlY3Rpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6dG9OYXRpdmVDb2xsZWN0aW9uKTogU3BlY2lhbCBjYXNlIGZv
ciBjb252ZXJ0aW5nIFY4Q29sbGVjdGlvbnMsIHNpbmNlIHRoZXJlIGFyZW4ndCBnZW5lcmVhdGVk
IGJpbmRpbmdzIGZvciB0aGVtLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhO
UE9iamVjdC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhTVkdQT0RUeXBlV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisKIDIwMTAtMDEtMTQgIEt3YW5n
IFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cAkocmV2aXNpb24gNTMyNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NiwxMSArNjY2LDYgQEAKICAgICByZXR1cm4gVjhDbGFz
c0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7CiB9CiAKLXZvaWQqIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIGlzV3Jh
cHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lk
Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpIDogMDsKLX0KLQogUGFzc1Jl
ZlB0cjxOb2RlRmlsdGVyPiBWOERPTVdyYXBwZXI6OndyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBmaWx0ZXIpCiB7CiAgICAgLy8gQSBOb2RlRmlsdGVyIGlzIHVzZWQg
d2hlbiB3YWxraW5nIHRocm91Z2ggYSBET00gdHJlZSBvciBpdGVyYXRpbmcgdHJlZQpAQCAtMTUy
Miw3ICsxNTE3LDcgQEAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGN1cnJlbnRHbG9iYWwg
PSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFsKTsKICAgICBpZiAoIXdpbmRvd1dyYXBwZXIuSXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmIChjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRv
dz4od2luZG93V3JhcHBlcikgPT0gd2luZG93KQorICAgICAgICBpZiAoVjhET01XaW5kb3c6OnRv
TmF0aXZlKHdpbmRvd1dyYXBwZXIpID09IHdpbmRvdykKICAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50R2xvYmFsOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lv
biA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CiAg
ICAgZ2xvYmFsID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBnbG9iYWwpOwogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGdsb2JhbCk7CisgICAgcmV0dXJuIFY4RE9NV2luZG93Ojp0
b05hdGl2ZShnbG9iYWwpOwogfQogCiBGcmFtZSogVjhQcm94eTo6cmV0cmlldmVGcmFtZSh2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJWOEN1c3Rv
bUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1
ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhFdmVudC5oIgogI2luY2x1ZGUgIlY4SW5kZXgu
aCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4WFBhdGhOU1Jlc29sdmVy
LmgiCkBAIC0xMjEsMjkgKzEyMiw2IEBACiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LklzRW1w
dHkoKSA/IG9iamVjdCA6IG9iamVjdC0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVDaGFpbihnZXRU
ZW1wbGF0ZSh0eXBlKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBBIGhlbHBlciBmdW5jdGlv
biBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBmcm9tIGEgRE9NIHdyYXBwZXIKLSAgICAg
ICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0eXBlLgotICAgICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgICAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxDKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRl
IDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05vZGUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgICAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbVdyYXBw
ZXJUeXBlKG9iamVjdCkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSNlbmRpZgotICAgICAgICAg
ICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Qz4ob2JqZWN0KTsKLSAgICAgICAg
fQotCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIHR5cGUsIFBhc3NSZWZQdHI8VD4gaW1wKQogICAgICAgICB7CkBAIC0xNzQsMzAgKzE1Miw2
IEBACiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9k
ZVRvVjhPYmplY3QoTm9kZSosIFY4UHJveHkqLCBET01XcmFwcGVyTWFwPE5vZGU+Jik7CiAKLSAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRp
dmVPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOYXRpdmUgZXZlbnQg
bGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVy
aWMgZnVuY3Rpb24uCi0gICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVW
RU5UTElTVEVORVIpOwotICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpF
VkVOVFRBUkdFVCk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0
KSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBjb25zdCBib29sIHR5cGVJc1ZhbGlk
ID0KLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICh0eXBlICE9IFY4Q2xhc3NJbmRleDo6
VFlQRSkgJiYKLSAgICAgICAgICAgICAgICBET01fTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0jaWYg
RU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0j
ZW5kaWYKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICAgICAgICAgICAgICB0cnVlOwotICAgICAgICAg
ICAgQVNTRVJUKHR5cGVJc1ZhbGlkKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gY29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTxDPihvYmplY3QpOwotICAgICAgICB9Ci0KICAgICAgICAg
c3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnZlcnRFdmVudFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCkBAIC0yMDcs
MTMgKzE2MSw2IEBACiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CiAKLSAgICAgICAgc3RhdGljIEV2ZW50KiBjb252
ZXJ0VG9OYXRpdmVFdmVudCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoZXZlbnRUYXJnZXQuZ2V0KCkpOwpAQCAtMjUzLDcgKzIwMCw3IEBACiAgICAgICAgIHsKICAg
ICAgICAgICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyOwogICAgICAgICAgICAg
aWYgKFY4WFBhdGhOU1Jlc29sdmVyOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmVzb2x2ZXIgPSBjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENs
YXNzSW5kZXg6OlhQQVRITlNSRVNPTFZFUiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHJlc29sdmVyID0gVjhYUGF0aE5TUmVzb2x2ZXI6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLT5Jc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJlc29sdmVyID0g
VjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShwcm94eSwgdmFsdWUtPlRvT2JqZWN0KCkp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyOwpAQCAtMjgxLDggKzIyOCw2IEBACiAgICAg
ICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIHdyYXBwZXIgb2YgdHlwZSB8Y2xh
c3NUeXBlfC4KICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKIAotICAgICAgICBzdGF0
aWMgdm9pZCogY29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
YSBWOCB2YWx1ZSBpcyBhIERPTSBFdmVudCB3cmFwcGVyLgogICAgICAgICBzdGF0aWMgYm9vbCBp
c0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDUzMjc1KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOEV2ZW50LmgiCiAj
aW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMTY5LDcgKzE3MCw3IEBACiAKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBnbG9iYWwtPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
ImV2ZW50IikpOwotICAgIEV2ZW50KiBldmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlRXZlbnQoanNFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjppc0RP
TUV2ZW50V3JhcHBlcihqc0V2ZW50KSA/IFY4RXZlbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoanNFdmVudCkpIDogMDsKIAogICAgIC8vIEJhc2VkIG9uIGNvZGUgZnJv
bSBranNfYmluZGluZ3MuY3BwLgogICAgIC8vIE5vdGU6IFRoaXMgaXMgbW9yZSBsaWJlcmFsIHRo
YW4gRmlyZWZveCdzIGltcGxlbWVudGF0aW9uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDkgQEAK
ICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJWOEhpc3RvcnkuaCIKICNpbmNs
dWRlICJWOEluZGV4LmgiCisjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApAQCAtOTUs
MTcgKzk3LDE3IEBACiAgICAgICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRhcmdldDsKIAotICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpE
T01XSU5ET1csIHdpbmRvdyk7CisgICAgICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhE
T01XaW5kb3c6OnRvTmF0aXZlKHdpbmRvdyk7CiAgICAgICAgIHRhcmdldCA9IHRhcmdldFdpbmRv
dy0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpMT0NBVElPTjogewotICAgICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0
KTsKKyAgICAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoaG9zdCk7
CiAgICAgICAgIHRhcmdldCA9IGhpc3RvcnktPmZyYW1lKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SElTVE9SWTogewotICAgICAgICBMb2NhdGlvbiog
bG9jYXRpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4o
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9zdCk7CisgICAgICAgIExvY2F0aW9uKiBsb2NhdGlv
biA9IFY4TG9jYXRpb246OnRvTmF0aXZlKGhvc3QpOwogICAgICAgICB0YXJnZXQgPSBsb2NhdGlv
bi0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L05Q
VjhPYmplY3QuY3BwCShyZXZpc2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvTlBW
OE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDExIEBACiAgICAgcmV0dXJu
IHY4OjpTdHJpbmc6Ok5ldyhidWZmZXIpOwogfQogCitOUE9iamVjdCogdjhPYmplY3RUb05QT2Jq
ZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
V2ViQ29yZTo6djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsgCit9CisKIHN0YXRpYyBOUENsYXNz
IFY4TlBPYmplY3RDbGFzcyA9IHsgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jVjhOUE9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJlZVY4TlBPYmplY3QsCkBAIC0xMTAsNyArMTE1LDcgQEAK
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdHlwZUluZGV4ID0gb2JqZWN0LT5HZXRJbnRl
cm5hbEZpZWxkKFdlYkNvcmU6OnY4RE9NV3JhcHBlclR5cGVJbmRleCk7CiAgICAgICAgIGlmICh0
eXBlSW5kZXgtPklzTnVtYmVyKCkgJiYgdHlwZUluZGV4LT5VaW50MzJWYWx1ZSgpID09IFY4Q2xh
c3NJbmRleDo6TlBPQkpFQ1QpIHsKIAotICAgICAgICAgICAgTlBPYmplY3QqIHJldHVyblZhbHVl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmplY3Q+KFY4Q2xhc3NJ
bmRleDo6TlBPQkpFQ1QsIG9iamVjdCk7CisgICAgICAgICAgICBOUE9iamVjdCogcmV0dXJuVmFs
dWUgPSB2OE9iamVjdFRvTlBPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHJldHVyblZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCShyZXZpc2lvbiA1MzI3
NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDEwICs2NSwxNiBAQAogICAgIGlmIChWOEhUTUxBcHBsZXRFbGVtZW50OjpIYXNJbnN0
YW5jZShhcmdzLkhvbGRlcigpKSB8fCBWOEhUTUxFbWJlZEVsZW1lbnQ6Okhhc0luc3RhbmNlKGFy
Z3MuSG9sZGVyKCkpCiAgICAgICAgIHx8IFY4SFRNTE9iamVjdEVsZW1lbnQ6Okhhc0luc3RhbmNl
KGFyZ3MuSG9sZGVyKCkpKSB7CiAgICAgICAgIC8vIFRoZSBob2xkZXIgb2JqZWN0IGlzIGEgc3Vi
dHlwZSBvZiBIVE1MUGx1Z0luRWxlbWVudC4KLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVs
ZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5F
bGVtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1l
bnQ7CisgICAgICAgIGlmIChWOEhUTUxBcHBsZXRFbGVtZW50OjpIYXNJbnN0YW5jZShhcmdzLkhv
bGRlcigpKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSBWOEhUTUxBcHBsZXRFbGVtZW50Ojp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICAgICAgZWxzZSBpZiAoVjhIVE1MRW1iZWRFbGVtZW50
OjpIYXNJbnN0YW5jZShhcmdzLkhvbGRlcigpKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSBWOEhU
TUxFbWJlZEVsZW1lbnQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbGVtZW50ID0gVjhIVE1MT2JqZWN0RWxlbWVudDo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAgICAgICAgIFNjcmlwdEluc3RhbmNlIHNjcmlwdEluc3RhbmNlID0gZWxlbWVu
dC0+Z2V0SW5zdGFuY2UoKTsKICAgICAgICAgaWYgKHNjcmlwdEluc3RhbmNlKQotICAgICAgICAg
ICAgbnBPYmplY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOUE9iamVj
dD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgc2NyaXB0SW5zdGFuY2UtPmluc3RhbmNlKCkpOwor
ICAgICAgICAgICAgbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmplY3Qoc2NyaXB0SW5zdGFuY2Ut
Pmluc3RhbmNlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBucE9iamVjdCA9IDA7CiAg
ICAgfSBlbHNlIHsKQEAgLTc3LDcgKzgzLDcgQEAKICAgICAgICAgaWYgKGFyZ3MuSG9sZGVyKCkt
PkludGVybmFsRmllbGRDb3VudCgpICE9IG5wT2JqZWN0SW50ZXJuYWxGaWVsZENvdW50KQogICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOUE1ldGhvZCBjYWxsZWQgb24gbm9uLU5QT2JqZWN0
IiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwogCi0gICAgICAgIG5wT2JqZWN0ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmplY3Q+KFY4Q2xhc3NJbmRleDo6TlBP
QkpFQ1QsIGFyZ3MuSG9sZGVyKCkpOworICAgICAgICBucE9iamVjdCA9IHY4T2JqZWN0VG9OUE9i
amVjdChhcmdzLkhvbGRlcigpKTsKICAgICB9CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3Jh
cHBlciB3YXNuJ3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0
ZWQuCkBAIC0xNjEsNyArMTY3LDcgQEAKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBu
cE9iamVjdEdldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50aWZp
ZXIgaWRlbnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4ga2V5KQogewotICAgIE5QT2JqZWN0
KiBucE9iamVjdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0
PihWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBzZWxmKTsKKyAgICBOUE9iamVjdCogbnBPYmplY3Qg
PSB2OE9iamVjdFRvTlBPYmplY3Qoc2VsZik7CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3Jh
cHBlciB3YXNuJ3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaAogICAgIC8vIGhhcyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZC4KQEAgLTIzMCw3ICsyMzYsNyBAQAogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG5wT2JqZWN0U2V0UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5Q
SWRlbnRpZmllciBpZGVudGlmaWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKIHsKLSAg
ICBOUE9iamVjdCogbnBPYmplY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxOUE9iamVjdD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgc2VsZik7CisgICAgTlBPYmplY3Qq
IG5wT2JqZWN0ID0gdjhPYmplY3RUb05QT2JqZWN0KHNlbGYpOwogCiAgICAgLy8gVmVyaWZ5IHRo
YXQgb3VyIHdyYXBwZXIgd2Fzbid0IHVzaW5nIGEgTlBPYmplY3Qgd2hpY2ggaGFzIGFscmVhZHkg
YmVlbiBkZWxldGVkLgogICAgIGlmICghbnBPYmplY3QgfHwgIV9OUE5fSXNBbGl2ZShucE9iamVj
dCkpIHsKQEAgLTI4MCw3ICsyODYsNyBAQAogCiB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbnBPYmpl
Y3RQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbywgYm9vbCBu
YW1lZFByb3BlcnR5KQogewotICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0PihWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBp
bmZvLkhvbGRlcigpKTsKKyAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2OE9iamVjdFRvTlBPYmpl
Y3QoaW5mby5Ib2xkZXIoKSk7CiAKICAgICAvLyBWZXJpZnkgdGhhdCBvdXIgd3JhcHBlciB3YXNu
J3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaAogICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRl
ZC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAJKHJldmlzaW9uIDUzMjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw3IEBACiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5j
bHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMp
CiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCkBAIC0xMDksNyArMTEwLDcgQEAKICAgICAvLyBSZXR1
cm4gMCBpZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBpcyBub3QgdGhlIHdvcmtlciBj
b250ZXh0LgogICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBn
bG9iYWwpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRl
eHQ6OnRvTmF0aXZlKGdsb2JhbCk7CiAgICAgcmV0dXJuIHdvcmtlckNvbnRleHQtPnNjcmlwdCgp
LT5wcm94eSgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHJldmlz
aW9uIDUzMjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAKICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbGVtZW50YXRpb24pOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxl
Y3Rpb24odjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PENvbGxlY3Rpb24qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgIH0KKwogICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFz
c1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50
YXRpb25UeXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdldFY4T2JqZWN0KGltcGxlbWVudGF0
aW9uLmdldCgpLCBpbXBsZW1lbnRhdGlvblR5cGUpOwpAQCAtNjQsNyArNjksNyBAQAogICAgICAg
ICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CiAgICAgICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUob2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXJUeXBlICE9IFY4
Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwg
b2JqZWN0KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVj
dGlvbjxDb2xsZWN0aW9uPihvYmplY3QpOwogICAgICAgICBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lID0gdG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsKICAgICAgICAg
cmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKICAgICB9CkBAIC04NCwyNiArODksNiBAQAog
ICAgICAgICByZXR1cm4gZ2V0TmFtZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbjxDb2xsZWN0aW9uLCBJ
dGVtVHlwZT4obmFtZSwgaW5mby5Ib2xkZXIoKSwgaW5mby5EYXRhKCkpOwogICAgIH0KIAotICAg
IC8vIEEgdGVtcGxhdGUgb2YgbmFtZWQgcHJvcGVydHkgYWNjZXNzb3Igb2YgSFRNTFNlbGVjdEVs
ZW1lbnQgYW5kIEhUTUxGb3JtRWxlbWVudC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9u
PiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5vZGVDb2xsZWN0aW9uTmFtZWRQcm9wZXJ0
eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3Jh
cHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVyKCktPkdldFJlYWxOYW1l
ZFByb3BlcnR5SW5Qcm90b3R5cGVDaGFpbihuYW1lKTsKLQotICAgICAgICBpZiAoIXZhbHVlLklz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgICAgICAvLyBTZWFyY2gg
bG9jYWwgY2FsbGJhY2sgcHJvcGVydGllcyBuZXh0IHRvIGZpbmQgSURMIGRlZmluZWQKLSAgICAg
ICAgLy8gcHJvcGVydGllcy4KLSAgICAgICAgaWYgKGluZm8uSG9sZGVyKCktPkhhc1JlYWxOYW1l
ZENhbGxiYWNrUHJvcGVydHkobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7
Ci0gICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7Ci0g
ICAgICAgIHZvaWQqIGltcGxlbWVudGF0aW9uID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtKHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBnZXRWOE9iamVjdChpbXBsZW1lbnRhdGlvbiwgaW5m
by5EYXRhKCkpOwotICAgIH0KLQogICAgIC8vIFJldHVybnMgdGhlIHByb3BlcnR5IGF0IHRoZSBp
bmRleCBvZiBhIGNvbGxlY3Rpb24uCiAgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xh
c3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SW5kZXhlZFByb3Bl
cnR5T2ZDb2xsZWN0aW9uKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiBpbXBsZW1lbnRhdGlvblR5cGUpCkBAIC0xMTIsNyArOTcsNyBA
QAogICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7
CiAgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXJU
eXBlICE9IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFw
cGVyVHlwZSwgb2JqZWN0KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0
aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihvYmplY3QpOwogICAgICAgICByZXR1cm4gZ2V0VjhP
YmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpLCBpbXBsZW1lbnRhdGlvblR5
cGUpOwogICAgIH0KIApAQCAtMTI3LDcgKzExMiw3IEBACiAgICAgewogICAgICAgICBBU1NFUlQo
VjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwogICAgICAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKSA9PSBWOENs
YXNzSW5kZXg6Ok5PREUpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigp
KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxD
b2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rp
b24tPmxlbmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9
IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKQEAgLTE0Miw4ICsxMjcsNyBAQAogICAgIHRlbXBsYXRlPGNsYXNzIENvbGxl
Y3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gY29sbGVjdGlvbkluZGV4ZWRQcm9w
ZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7
Ci0gICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgICAgIENvbGxlY3Rp
b24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xs
ZWN0aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIo
KSk7CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9uLT5sZW5ndGgoKTsKICAgICAgICAg
djg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgp
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xNjAsOCAr
MTQ0LDcgQEAKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmplY3QgbXVz
dCBiZSBhIGNvbGxlY3Rpb24gdHlwZQogICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXli
ZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8u
SG9sZGVyKCkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBlclR5cGUsIGluZm8uSG9s
ZGVyKCkpOworICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0
aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwogICAgICAgICBTdHJpbmcgcmVzdWx0ID0g
Y29sbGVjdGlvbi0+aXRlbShpbmRleCk7CiAgICAgICAgIHJldHVybiB2OFN0cmluZ09yTnVsbChy
ZXN1bHQpOwogICAgIH0KQEAgLTE3Miw4ICsxNTUsNyBAQAogICAgIHsKICAgICAgICAgLy8gRklY
TUU6IGFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29sbGVjdGlvbiB0eXBlCiAgICAgICAg
IEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0g
ICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3Jh
cHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgICAgIENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0
aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNv
bGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7
CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKICAgICAg
ICAgcmV0dXJuIHY4U3RyaW5nKHJlc3VsdCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9OUFY4T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4
T2JqZWN0LmgJKHJldmlzaW9uIDUzMjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDQgKzYwLDYgQEAKIAogTlBPYmplY3QqIG5wQ3Jl
YXRlVjhTY3JpcHRPYmplY3QoTlBQLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBXZWJDb3JlOjpE
T01XaW5kb3cqKTsKIAorTlBPYmplY3QqIHY4T2JqZWN0VG9OUE9iamVjdCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KTsKKwogI2VuZGlmIC8vIE5QVjhPYmplY3RfaApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgJKHJldmlzaW9uIDUzMjc1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
MiwxNCArNDAyLDEyIEBACiB0ZW1wbGF0ZSA8Y2xhc3MgUD4KIFAgVjhTVkdQT0RUeXBlVXRpbDo6
dG9TVkdQT0RUeXBlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sJiBvaykKIHsKLSAgICB2b2lkICp3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9TVkdQT0RUeXBlSW1wbCh0eXBlLCBvYmplY3QpOwotICAgIGlm
ICh3cmFwcGVyID09IE5VTEwpIHsKKyAgICBpZiAoIVY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZU
eXBlKG9iamVjdCwgdHlwZSkpIHsKICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJu
IFAoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiAq
c3RhdGljX2Nhc3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjxQPio+KHdyYXBwZXIpOwogICAgIH0KKyAg
ICBvayA9IHRydWU7CisgICAgcmV0dXJuICpWOFNWR1BPRFR5cGVXcmFwcGVyPFA+Ojp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG9iamVjdCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiA1MzI3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
fQogCi0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVtZW50Pih2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+OjpDYXN0KHZhbHVlKSk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBWOEhU
TUxPcHRpb25FbGVtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZh
bHVlKSk7CiAgICAgYmFzZS0+c2V0T3B0aW9uKGluZGV4LCBlbGVtZW50LCBlYyk7CiAKICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwo=
</data>
<flag name="review"
          id="28894"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="28895"
          type_id="3"
          status="-"
          setter="japhet"
    />
          </attachment>
      

    </bug>

</bugzilla>