<?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>26962</bug_id>
          
          <creation_ts>2009-07-03 22:07:43 -0700</creation_ts>
          <short_desc>[V8] Move some simple utility functions in V8Proxy to V8Utilities</short_desc>
          <delta_ts>2009-08-19 19:19:45 -0700</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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>mbelshe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129772</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-03 22:07:43 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129773</commentid>
    <comment_count>1</comment_count>
      <attachid>32252</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-03 22:09:20 -0700</bug_when>
    <thetext>Created attachment 32252
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129774</commentid>
    <comment_count>2</comment_count>
      <attachid>32252</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-03 22:11:42 -0700</bug_when>
    <thetext>Comment on attachment 32252
patch

Nevermind.  That doesn&apos;t compile.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129918</commentid>
    <comment_count>3</comment_count>
      <attachid>32294</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-06 02:55:17 -0700</bug_when>
    <thetext>Created attachment 32294
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129919</commentid>
    <comment_count>4</comment_count>
      <attachid>32295</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-06 02:59:17 -0700</bug_when>
    <thetext>Created attachment 32295
The whole file

Eric suggested that I group the functions before moving them.  The diff was kind of hard to read, so I&apos;m attaching the whole file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130140</commentid>
    <comment_count>5</comment_count>
      <attachid>32294</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:17:36 -0700</bug_when>
    <thetext>Comment on attachment 32294
patch

Your comment format is a bit strange.  I would not have added all the crazy //////.

It would make sense to me to describe each of these new classes some, more than just putting their names there.

// Move to V8Constants, a class to hold all the constants used by V8?

// Move to V8EventListener, a subclass of EventListener with v8 specific methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130141</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:18:15 -0700</bug_when>
    <thetext>The r- is for not really knowing what all these new files do.  The change itself is fine in idea... but it seems like we should document where these are going (if you want a real review at least).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130155</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-07 00:42:25 -0700</bug_when>
    <thetext>Ok.  This kind of patch seems hard to discuss via this system.  Maybe it will be better to talk with Dimitri and Mike in person and come up with a plan and then execute the plan.  Some of the groupings are really obvious.  For example, the GC methods have virtually no overlap in concepts with the rest of the class.  I think I went a bit overboard trying to find a home for everything in this patch.  Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130157</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:45:46 -0700</bug_when>
    <thetext>Yeah, I wasn&apos;t really gonna review where you were gonna put stuff.  So much as just that whoever next reads those comments should have some more idea than just the new class name. :)

Also, I am alergic to *Utilities classes and *Helper classes :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130158</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-07 00:53:26 -0700</bug_when>
    <thetext>&gt; Also, I am alergic to *Utilities classes and *Helper classes :)

Oddly, V8Utilities is the only one of the bunch that currently exists!  There might be a better place for the those exception idioms.  V8ExceptionIdioms.h?  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130526</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 14:53:50 -0700</bug_when>
    <thetext>How about we start small?

* Move event-related stuff to V8CustomEventListener
* Move V8Executive-slated things to ScriptController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130528</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 14:57:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; How about we start small?

Ok.  I&apos;m actually just working on the GCController stuff atm.  That looks pretty self-contained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130531</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 15:01:39 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; How about we start small?
&gt; 
&gt; Ok.  I&apos;m actually just working on the GCController stuff atm.  That looks
&gt; pretty self-contained.

Sounds great!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32252</attachid>
            <date>2009-07-03 22:09:20 -0700</date>
            <delta_ts>2009-07-06 02:54:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bugzilla_requires_a_filename.patch</filename>
            <type>text/plain</type>
            <size>3255</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTU0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDctMDMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IE1vdmUgc29tZSBzaW1wbGUgdXRpbGl0eSBmdW5jdGlvbnMgaW4gVjhQcm94eSB0byBWOFV0aWxp
dGllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5
NjIKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOFV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6bm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRpb25Ob3RIYW5kbGVkQnlJbnRlcmNlcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0Vycm9yKToKKwogMjAwOS0wNy0wMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0
ZXJzb24uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gNDU1NDMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDM2ICs2NDAs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwog
ICAgIH0KIAotCi0gICAgLy8gVXNlZCBieSBhbiBpbnRlcmNlcHRvciBjYWxsYmFjayB0aGF0IGl0
IGhhc24ndCBmb3VuZCBhbnl0aGluZyB0bwotICAgIC8vIGludGVyY2VwdC4KLSAgICBpbmxpbmUg
c3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+KCk7Ci0gICAgfQotCi0g
ICAgaW5saW5lIHN0YXRpYyB2ODo6TG9jYWw8djg6OkJvb2xlYW4+IGRlbGV0aW9uTm90SGFuZGxl
ZEJ5SW50ZXJjZXB0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Qm9v
bGVhbj4oKTsKLSAgICB9Ci0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlByaW1pdGl2ZT4gdGhy
b3dFcnJvcihjb25zdCBjaGFyKiBtZXNzYWdlLCBWOFByb3h5OjpFcnJvclR5cGUgdHlwZSA9IFY4
UHJveHk6OlR5cGVFcnJvcikKLSAgICB7Ci0gICAgICAgIFY4UHJveHk6OnRocm93RXJyb3IodHlw
ZSwgbWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgfQotCi0g
ICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlByaW1pdGl2ZT4gdGhyb3dFcnJvcihFeGNlcHRpb25D
b2RlIGVjKQotICAgIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdjg6Okhh
bmRsZTx2ODo6UHJpbWl0aXZlPiB0aHJvd0Vycm9yKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGV4Y2Vw
dGlvbikKLSAgICB7Ci0gICAgICAgIHY4OjpUaHJvd0V4Y2VwdGlvbihleGNlcHRpb24pOwotICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIH0KLQogICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4KFBhc3NSZWZQdHI8VD4gb2Jq
ZWN0LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9sZGVyKQogICAgIHsKICAgICAgICAgb2JqZWN0
LT5yZWYoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgJKHJldmlzaW9uIDQ1NTQz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05OCw2ICs5OCwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBmdW5j
dGlvbi0+TmV3SW5zdGFuY2UoYXJnYywgYXJndik7CiAgICAgfQogCisgICAgLy8gVXNlZCBieSBh
biBpbnRlcmNlcHRvciBjYWxsYmFjayB0aGF0IGl0IGhhc24ndCBmb3VuZCBhbnl0aGluZyB0bwor
ICAgIC8vIGludGVyY2VwdC4KKyAgICBpbmxpbmUgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpCisgICAgeworICAgICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+KCk7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyB2ODo6TG9jYWw8
djg6OkJvb2xlYW4+IGRlbGV0aW9uTm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Qm9vbGVhbj4oKTsKKyAgICB9CisKKyAgICBpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6UHJpbWl0aXZlPiB0aHJvd0Vycm9yKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIFY4UHJveHk6OkVycm9yVHlwZSB0eXBlID0gVjhQcm94eTo6VHlwZUVycm9yKQorICAgIHsK
KyAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJvcih0eXBlLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
UHJpbWl0aXZlPiB0aHJvd0Vycm9yKEV4Y2VwdGlvbkNvZGUgZWMpCisgICAgeworICAgICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpQcmltaXRpdmU+IHRocm93
RXJyb3Iodjg6OkxvY2FsPHY4OjpWYWx1ZT4gZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgdjg6
OlRocm93RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBWOFV0aWxp
dGllc19o
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32294</attachid>
            <date>2009-07-06 02:55:17 -0700</date>
            <delta_ts>2009-07-07 00:17:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bugzilla_requires_a_filename.patch</filename>
            <type>text/plain</type>
            <size>22514</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDctMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NjIKKworICAgICAgICBHcm91
cCBWOFByb3h5IG1ldGhvZHMgdG8gcHJlcGFyZSBmb3IgdGVhcmluZyB0aGUgY2xhc3MgYXBhcnQu
CisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0RXZlbnRIYW5kbGVyTGlu
ZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpmaW5pc2hlZFdpdGhFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlY4UHJveHk6OnV0aWxpdHlDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV4
dHJhY3RDUG9pbnRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisKIDIwMDktMDct
MDUgIEFudG9uaW8gR29tZXMgIDxhbnRvbmlvLmdvbWVzQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2
aXNpb24gNDU1NTcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDkgKzEwMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
VjhFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcjsKIAorLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1vdmUgdG8gVjhVdGlsaXRpZXMgKG9yIGp1
c3QgcGxhbiBlbGltaW5hdGU/KQorLy8KICAgICAvLyBGSVhNRTogdXNlIHN0YW5kYXJkIGxvZ2dp
bmcgZmFjaWxpdGllcyBpbiBXZWJDb3JlLgogICAgIHZvaWQgbG9nSW5mbyhGcmFtZSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpOworLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCiAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3Zl
IHRvIFY4R0NDb250cm9sbGVyCisvLwogI2lmbmRlZiBOREVCVUcKIAogI2RlZmluZSBHbG9iYWxI
YW5kbGVUeXBlTGlzdChWKSAgIFwKQEAgLTExNiw3ICsxMjQsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgVihTQ1JJUFRJTlNUQU5DRSkgICAgICAgICAgICAgXAogICAgIFYoU0NSSVBUVkFM
VUUpCiAKLQogICAgIC8vIEhvc3QgaW5mb3JtYXRpb24gb2YgcGVyc2lzdGVudCBoYW5kbGVzLgog
ICAgIGVudW0gR2xvYmFsSGFuZGxlVHlwZSB7CiAjZGVmaW5lIEVOVU0obmFtZSkgbmFtZSwKQEAg
LTEyNCw3ICsxMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjdW5kZWYgRU5VTQogICAgIH07
CiAKLQogICAgIGNsYXNzIEdsb2JhbEhhbmRsZUluZm8gewogICAgIHB1YmxpYzoKICAgICAgICAg
R2xvYmFsSGFuZGxlSW5mbyh2b2lkKiBob3N0LCBHbG9iYWxIYW5kbGVUeXBlIHR5cGUpIDogbV9o
b3N0KGhvc3QpLCBtX3R5cGUodHlwZSkgeyB9CkBAIC0xMzMsNyArMTM5LDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB9OwogCiAjZW5kaWYgLy8gTkRFQlVHCisvLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFY4
RE9NV3JhcHBlciA/Pz8gKEZJWE1FOiBTdHVkeSB0aGlzIGNvZGUgZnVydGhlcikKKy8vCiAgICAg
Ly8gVGhlIGZvbGxvd2luZyBCYXRjaCBzdHJ1Y3RzIGFuZCBtZXRob2RzIGFyZSB1c2VkIGZvciBz
ZXR0aW5nIG11bHRpcGxlCiAgICAgLy8gcHJvcGVydGllcyBvbiBhbiBPYmplY3RUZW1wbGF0ZSwg
dXNlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3MKICAgICAvLyBpbml0aWFsaXphdGlvbiAo
Q29uZmlndXJlWFhYVGVtcGxhdGUpLiBUaGlzIGdyZWF0bHkgcmVkdWNlcyB0aGUgYmluYXJ5CkBA
IC0xNjIsOSArMTczLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgdm9p
ZCBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+LCBjb25zdCBCYXRjaGVkQ29uc3RhbnQq
LCBzaXplX3QgY29uc3RhbnRDb3VudCk7CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1vdmUgdG8gVjhDb25zdGFu
dHMKKy8vCiAgICAgY29uc3QgaW50IGtNYXhSZWN1cnNpb25EZXB0aCA9IDIwOworLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLyBNb3ZlIHRvIFY4RXh0ZW5zaW9uUmVnaXN0cnkKKy8vCiAgICAgLy8gSW5mb3JtYXRpb24g
YWJvdXQgYW4gZXh0ZW5zaW9uIHRoYXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElm
IHNjaGVtZQogICAgIC8vIGlzIG5vbi1lbXB0eSwgaXQgY29udGFpbnMgdGhlIFVSTCBzY2hlbWUg
dGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgdXNlZCB3aXRoLgogICAgIC8vIE90aGVyd2lzZSwgdGhl
IGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggYWxsIHNjaGVtZXMuCkBAIC0xNzMsOSArMTk0LDE1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9uOwog
ICAgIH07CiAgICAgdHlwZWRlZiBzdGQ6Omxpc3Q8VjhFeHRlbnNpb25JbmZvPiBWOEV4dGVuc2lv
bkxpc3Q7CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgIGNsYXNzIFY4
UHJveHkgewogICAgIHB1YmxpYzoKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v
IE1vdmUgdG8gVjhDb25zdGFudHMKKy8vCiAgICAgICAgIC8vIFRoZSB0eXBlcyBvZiBqYXZhc2Ny
aXB0IGVycm9ycyB0aGF0IGNhbiBiZSB0aHJvd24uCiAgICAgICAgIGVudW0gRXJyb3JUeXBlIHsK
ICAgICAgICAgICAgIFJhbmdlRXJyb3IsCkBAIC0xODQsNiArMjExLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgVHlwZUVycm9yLAogICAgICAgICAgICAgR2VuZXJhbEVycm9y
CiAgICAgICAgIH07CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgICAg
ICBleHBsaWNpdCBWOFByb3h5KEZyYW1lKiBmcmFtZSkgOiBtX2ZyYW1lKGZyYW1lKSwgbV9pbmxp
bmVDb2RlKGZhbHNlKSwgbV90aW1lckNhbGxiYWNrKGZhbHNlKSwgbV9yZWN1cnNpb24oMCkgeyB9
CiAKQEAgLTIwMCwxMCArMjI5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBV
cGRhdGUgZG9jdW1lbnQgb2JqZWN0IG9mIHRoZSBmcmFtZS4KICAgICAgICAgdm9pZCB1cGRhdGVE
b2N1bWVudCgpOwogCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgc2VjdXJpdHkgb3JpZ2luIG9mIGEg
ZG9jdW1lbnQKLSAgICAgICAgLy8gKGUuZy4sIGFmdGVyIHNldHRpbmcgZG9jb3VtZW50LmRvbWFp
bikuCi0gICAgICAgIHZvaWQgdXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKLQogICAgICAgICAvLyBE
ZXN0cm95IHRoZSBnbG9iYWwgb2JqZWN0LgogICAgICAgICB2b2lkIGRlc3Ryb3lHbG9iYWwoKTsK
IApAQCAtMjIxLDggKzI0Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gYW5k
IGNsZWFycyBhbGwgdGltZW91dHMgb24gdGhlIERPTSB3aW5kb3cuCiAgICAgICAgIHZvaWQgZGlz
Y29ubmVjdEZyYW1lKCk7CiAKLSAgICAgICAgYm9vbCBpc0VuYWJsZWQoKTsKLQorLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1vdmUgdG8gVjhFdmVudExpc3RlbmVyCisvLwogICAg
ICAgICAvLyBGaW5kL0NyZWF0ZS9SZW1vdmUgZXZlbnQgbGlzdGVuZXIgd3JhcHBlcnMuCiAgICAg
ICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kVjhFdmVudExpc3RlbmVyKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlzSHRtbCk7CiAgICAgICAgIFBhc3NSZWZQ
dHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVWOEV2ZW50TGlzdGVuZXIodjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNIdG1sKTsKQEAgLTIzMywxNyArMjU5LDMyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZW1vdmVWOEV2ZW50TGlzdGVuZXIo
VjhFdmVudExpc3RlbmVyKik7CiAgICAgICAgIHZvaWQgcmVtb3ZlT2JqZWN0RXZlbnRMaXN0ZW5l
cihWOE9iamVjdEV2ZW50TGlzdGVuZXIqKTsKIAorICAgICAgICB2b2lkIHNldEV2ZW50SGFuZGxl
ckxpbmVOdW1iZXIoaW50IGxpbmVOdW1iZXIpIHsgbV9oYW5kbGVyTGluZU51bWJlciA9IGxpbmVO
dW1iZXI7IH0KKyAgICAgICAgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChFdmVudCopIHsgfQorCisv
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIE1vdmUgdG8gVjhHQ0NvbnRyb2xsZXIKKy8vCiAgICAgICAgIC8vIFByb3Rl
Y3QvVW5wcm90ZWN0IEpTIHdyYXBwZXJzIG9mIGEgRE9NIG9iamVjdC4KICAgICAgICAgc3RhdGlj
IHZvaWQgZ2NQcm90ZWN0KHZvaWQqIGRvbU9iamVjdCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdj
VW5wcm90ZWN0KHZvaWQqIGRvbU9iamVjdCk7CiAKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBz
dGF0aWMgdm9pZCBzZXRTVkdDb250ZXh0KHZvaWQqLCBTVkdFbGVtZW50Kik7Ci0gICAgICAgIHN0
YXRpYyBTVkdFbGVtZW50KiBzdmdDb250ZXh0KHZvaWQqKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIC8vIEZvciBkZWJ1Z2dpbmcgYW5kIGxlYWsgZGV0ZWN0aW9uIHB1cnBvc2UuCisgICAgICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyR2xvYmFsSGFuZGxlKEdsb2JhbEhhbmRsZVR5cGUsIHZvaWQq
LCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+KTsKKyAgICAgICAgc3RhdGljIHZvaWQgdW5yZWdp
c3Rlckdsb2JhbEhhbmRsZSh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7CiAjZW5k
aWYKIAotICAgICAgICB2b2lkIHNldEV2ZW50SGFuZGxlckxpbmVOdW1iZXIoaW50IGxpbmVOdW1i
ZXIpIHsgbV9oYW5kbGVyTGluZU51bWJlciA9IGxpbmVOdW1iZXI7IH0KLSAgICAgICAgdm9pZCBm
aW5pc2hlZFdpdGhFdmVudChFdmVudCopIHsgfQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4RXhl
Y3V0aXZlCisvLworICAgICAgICBib29sIGlzRW5hYmxlZCgpOwogCiAgICAgICAgIC8vIEV2YWx1
YXRlIEphdmFTY3JpcHQgaW4gYSBuZXcgaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBp
dHMgb3duCiAgICAgICAgIC8vIGdsb2JhbCBzY29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBp
bnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsCkBAIC0yNzAsMTMgKzMxMSwzMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFzIGNv
bnN0cnVjdG9yIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KICAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gbmV3SW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCBpbnQgYXJnYywg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSk7CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUg
ZG9tIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbm9kZSB0eXBlLgotICAgICAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUpOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21w
aWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgaW50IGJhc2VMaW5lKTsKIAotICAgICAgICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBlciBv
YmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBhICdib2lsZXIgcGxhdGUnCi0gICAgICAgIC8v
IG9iamVjdCwgYW5kIHRoZW4gc2ltcGx5IENsb25lIHRoYXQgb2JqZWN0IGVhY2ggdGltZSB3ZSBu
ZWVkIGEgbmV3IG9uZS4KLSAgICAgICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJv
dWdoIHRoZSBmdWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNzLgotICAgICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZShWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUpOworICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjb250ZXh0IGNhdXNlcyBvdXQgb2Yg
bWVtb3J5LCBKYXZhU2NyaXB0IHNldHRpbmcKKyAgICAgICAgLy8gaXMgZGlzYWJsZWQgYW5kIGl0
IHJldHVybnMgdHJ1ZS4KKyAgICAgICAgc3RhdGljIGJvb2wgaGFuZGxlT3V0T2ZNZW1vcnkoKTsK
KworICAgICAgICAvLyBQcm9jZXNzIGFueSBwZW5kaW5nIEphdmFTY3JpcHQgY29uc29sZSBtZXNz
YWdlcy4KKyAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOworCisg
ICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hlY2tOZXdMZWdhbChjb25zdCB2
ODo6QXJndW1lbnRzJik7CisKKyAgICAgICAgYm9vbCBzZXRDb250ZXh0RGVidWdJZChpbnQgaWQp
OworICAgICAgICBzdGF0aWMgaW50IGNvbnRleHREZWJ1Z0lkKHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KTsKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gTW92ZSB0byBWOFNlY3VyaXR5Q29udGV4dAorLy8KKyAgICAg
ICAgLy8gVXBkYXRlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgYSBkb2N1bWVudAorICAgICAgICAv
LyAoZS5nLiwgYWZ0ZXIgc2V0dGluZyBkb2NvdW1lbnQuZG9tYWluKS4KKyAgICAgICAgdm9pZCB1
cGRhdGVTZWN1cml0eU9yaWdpbigpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgc3RhdGlj
IHZvaWQgc2V0U1ZHQ29udGV4dCh2b2lkKiwgU1ZHRWxlbWVudCopOworICAgICAgICBzdGF0aWMg
U1ZHRWxlbWVudCogc3ZnQ29udGV4dCh2b2lkKik7CisjZW5kaWYKIAogICAgICAgICAvLyBSZXR1
cm5zIHRoZSB3aW5kb3cgb2JqZWN0IG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQu
CiAgICAgICAgIHN0YXRpYyBET01XaW5kb3cqIHJldHJpZXZlV2luZG93KCk7CkBAIC0yOTYsNyAr
MzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBhIGNvbnRleHQuCiAgICAg
ICAgIHN0YXRpYyBGcmFtZSogcmV0cmlldmVGcmFtZSh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7
CiAKLQogICAgICAgICAvLyBUaGUgdGhyZWUgZnVuY3Rpb25zIGJlbG93IHJldHJpZXZlIFdlYkZy
YW1lIGluc3RhbmNlcyByZWxhdGluZyB0aGUKICAgICAgICAgLy8gY3VycmVudGx5IGV4ZWN1dGlu
ZyBKYXZhU2NyaXB0LiBTaW5jZSBKYXZhU2NyaXB0IGNhbiBtYWtlIGZ1bmN0aW9uIGNhbGxzCiAg
ICAgICAgIC8vIGFjcm9zcyBmcmFtZXMsIHRob3VnaCwgd2UgbmVlZCB0byBiZSBtb3JlIHByZWNp
c2UuCkBAIC0zMjksMTUgKzM4OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKICAgICAgICAgc3Rh
dGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRleHQoKTsKIAotICAgICAgICAv
LyBSZXR1cm5zIFY4IENvbnRleHQgb2YgYSBmcmFtZS4gSWYgbm9uZSBleGlzdHMsIGNyZWF0ZXMK
LSAgICAgICAgLy8gYSBuZXcgY29udGV4dC4gSXQgaXMgcG90ZW50aWFsbHkgc2xvdyBhbmQgY29u
c3VtZXMgbWVtb3J5LgotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250
ZXh0KEZyYW1lKik7Ci0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN1cnJl
bnRDb250ZXh0KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY29udGV4dCBjYXVzZXMg
b3V0IG9mIG1lbW9yeSwgSmF2YVNjcmlwdCBzZXR0aW5nCi0gICAgICAgIC8vIGlzIGRpc2FibGVk
IGFuZCBpdCByZXR1cm5zIHRydWUuCi0gICAgICAgIHN0YXRpYyBib29sIGhhbmRsZU91dE9mTWVt
b3J5KCk7Ci0KICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4
dCBjYW4gYWNjZXNzIHRoZSB0YXJnZXQgZnJhbWUuCiAgICAgICAgIHN0YXRpYyBib29sIGNhbkFj
Y2Vzc0ZyYW1lKEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CiAKQEAgLTM0NSw4ICszOTYsMjcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjdXJyZW50IHNlY3VyaXR5IGNvbnRl
eHQuCiAgICAgICAgIHN0YXRpYyBib29sIGNoZWNrTm9kZVNlY3VyaXR5KE5vZGUqKTsKIAotICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6
OkFyZ3VtZW50cyYpOworICAgICAgICAvLyBSZXR1cm5zIFY4IENvbnRleHQgb2YgYSBmcmFtZS4g
SWYgbm9uZSBleGlzdHMsIGNyZWF0ZXMKKyAgICAgICAgLy8gYSBuZXcgY29udGV4dC4gSXQgaXMg
cG90ZW50aWFsbHkgc2xvdyBhbmQgY29uc3VtZXMgbWVtb3J5LgorICAgICAgICBzdGF0aWMgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KEZyYW1lKik7CisgICAgICAgIHN0YXRpYyB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0KCk7CisKKyAgICAgICAgLy8gUmV0dXJu
cyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBjb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgbmFtZSBm
b3IgdGhlIHRvcAorICAgICAgICAvLyBKYXZhU2NyaXB0IHN0YWNrIGZyYW1lLgorICAgICAgICBz
dGF0aWMgaW50IHNvdXJjZUxpbmVOdW1iZXIoKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBzb3Vy
Y2VOYW1lKCk7CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAorLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1vdmUgdG8gVjhVdGlsaXRpZXMKKy8vCiAgICAgICAg
IC8vIENyZWF0ZSBhIFY4IHdyYXBwZXIgZm9yIGEgQyBwb2ludGVyCiAgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcENQb2ludGVyKHZvaWQqIGNwdHIpCiAgICAgICAgIHsK
QEAgLTM2Myw3ICs0MzMsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEMqPihleHRyYWN0Q1BvaW50ZXJJbXBsKG9iaikpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBi
YXNlTGluZSk7CisgICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gY29kZSBpcyBkaWZmZXJlbnQg
ZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMKKyAgICAgICAgLy8gc2NoZWR1bGUgdG8gYmUg
dGhyb3duLgorICAgICAgICBzdGF0aWMgdm9pZCBzZXRET01FeGNlcHRpb24oaW50IGV4Y2VwdGlv
bkNvZGUpOworCisgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVycm9yIG9iamVjdCB0byBiZSB0aHJv
d24uCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhyb3dFcnJvcihFcnJv
clR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4RE9N
V3JhcHBlcgorLy8KKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG9tIGNvbnN0cnVjdG9yIGZ1bmN0
aW9uIGZvciB0aGUgZ2l2ZW4gbm9kZSB0eXBlLgorICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOworCisgICAg
ICAgIC8vIFRvIGNyZWF0ZSBKUyBXcmFwcGVyIG9iamVjdHMsIHdlIGNyZWF0ZSBhIGNhY2hlIG9m
IGEgJ2JvaWxlciBwbGF0ZScKKyAgICAgICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xv
bmUgdGhhdCBvYmplY3QgZWFjaCB0aW1lIHdlIG5lZWQgYSBuZXcgb25lLgorICAgICAgICAvLyBU
aGlzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2ggdGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9u
IHByb2Nlc3MuCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJv
bUNhY2hlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgIC8vIENoZWNrcyBpZiBhIHY4IHZhbHVlIGNhbiBiZSBhIERPTSB3cmFwcGVyCkBAIC00
MTIsMTkgKzUwMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDKj4oY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3QpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
ZG9tV3JhcHBlclR5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIGV4Y2VwdGlvbiBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlv
biBpcwotICAgICAgICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24uCi0gICAgICAgIHN0YXRpYyB2
b2lkIHNldERPTUV4Y2VwdGlvbihpbnQgZXhjZXB0aW9uQ29kZSk7Ci0KLSAgICAgICAgLy8gU2No
ZWR1bGUgYW4gZXJyb3Igb2JqZWN0IHRvIGJlIHRocm93bi4KLSAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0aHJvd0Vycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgZnVuY3Rpb24gZGVzY3Jp
cHRvciBhbmQgc2V0IHRvIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGFzIGEgbmFtZWQg
cHJvcGVydHkuIFVzZWQgYnkgdjhfdGVzdF9zaGVsbC4KLSAgICAgICAgc3RhdGljIHZvaWQgYmlu
ZEpzT2JqZWN0VG9XaW5kb3coRnJhbWUqLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQgdHlwZSwgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sIHZvaWQqKTsKLQogICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRvVjhPYmplY3QoRXZlbnQqKTsKIAog
ICAgICAgICBzdGF0aWMgRXZlbnQqIGNvbnZlcnRUb05hdGl2ZUV2ZW50KHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBqc0V2ZW50KQpAQCAtNDM4LDYgKzUxMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gV3JhcCBhbmQgdW53cmFwIEpTIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmpl
Y3QoRXZlbnRMaXN0ZW5lciopOwogCisKKyAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKwogICAg
ICAgICAvLyBET01JbXBsZW1lbnRhdGlvbiBpcyBhIHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxl
ZCBpbiBhIHNwZWNpYWwKICAgICAgICAgLy8gd2F5LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBl
ciBkb2N1bWVudCBhbmQgc3RvcmVkIGluIGFuCiAgICAgICAgIC8vIGludGVybmFsIGZpZWxkIG9m
IHRoZSBkb2N1bWVudC4KQEAgLTQ1OCw1MiArNTM2LDcyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KHZvaWQq
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldEpT
V3JhcHBlckZvckRPTU5vZGUoTm9kZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKIAot
ICAgICAgICAvLyBQcm9jZXNzIGFueSBwZW5kaW5nIEphdmFTY3JpcHQgY29uc29sZSBtZXNzYWdl
cy4KLSAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAvLyBGb3IgZGVidWdnaW5nIGFuZCBsZWFrIGRldGVjdGlvbiBw
dXJwb3NlLgotICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlckdsb2JhbEhhbmRsZShHbG9iYWxI
YW5kbGVUeXBlLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4pOwotI2VuZGlmCi0KICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVl
IGlzIGEgd3JhcHBlciBvZiB0eXBlIHxjbGFzc1R5cGV8LgogICAgICAgICBzdGF0aWMgYm9vbCBp
c1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUpOwogCi0gICAgICAgIC8vIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSBsaW5l
IG51bWJlciBhbmQgc291cmNlIG5hbWUgZm9yIHRoZSB0b3AKLSAgICAgICAgLy8gSmF2YVNjcmlw
dCBzdGFjayBmcmFtZS4KLSAgICAgICAgc3RhdGljIGludCBzb3VyY2VMaW5lTnVtYmVyKCk7Ci0g
ICAgICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTmFtZSgpOwotCi0KLSAgICAgICAgLy8gUmV0dXJu
cyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBjb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOwotICAgICAgICB9CisgICAgICAgIHN0YXRp
YyB2b2lkKiBjb252ZXJ0VG9TVkdQT0RUeXBlSW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KIAotICAgICAgICBib29sIHNldENvbnRleHREZWJ1Z0lkKGludCBpZCk7Ci0gICAgICAg
IHN0YXRpYyBpbnQgY29udGV4dERlYnVnSWQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOworICAg
ICAgICAvLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBmdW5jdGlvbiBkZXNjcmlwdG9yIGFuZCBz
ZXQgdG8gdGhlIGdsb2JhbCBvYmplY3QKKyAgICAgICAgLy8gYXMgYSBuYW1lZCBwcm9wZXJ0eS4g
VXNlZCBieSB2OF90ZXN0X3NoZWxsLgorICAgICAgICBzdGF0aWMgdm9pZCBiaW5kSnNPYmplY3RU
b1dpbmRvdyhGcmFtZSosIGNvbnN0IGNoYXIqIG5hbWUsIGludCB0eXBlLCB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiwgdm9pZCopOwogCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8gTW92ZSB0byBWOEV4dGVuc2lvblJlZ2lzdHJ5CisvLwogICAgICAgICAvLyBSZWdp
c3RlcnMgYW4gZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJwYWdlcyB3aXRoIGEgcGFy
dGljdWxhciBzY2hlbWUKICAgICAgICAgLy8gSWYgdGhlIHNjaGVtZSBhcmd1bWVudCBpcyBlbXB0
eSwgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGUgb24gYWxsIHBhZ2VzLgogICAgICAgICAvLyBX
aWxsIG9ubHkgYWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMgY2FsbC4g
VGFrZXMgb3duZXJzaGlwCiAgICAgICAgIC8vIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9iamVjdCBw
YXNzZWQuCiAgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNp
b24qLCBjb25zdCBTdHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKTsKKy8vCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogCi0gICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0VG9TVkdQT0RU
eXBlSW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
Pik7Ci0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4Q29udGV4
dEZhY3RvcnkKKy8vCiAgICAgICAgIC8vIEZJWE1FOiBTZXBhcmF0ZSB0aGVzZSBjb25jZXJucyBm
cm9tIFY4UHJveHk/CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBjcmVhdGVO
ZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsKTsKICAgICAgICAgYm9vbCBp
bnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERPTVdpbmRv
dyogd2luZG93KTsKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDb250ZXh0RGVidWdEYXRhVHlwZTsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtDb250ZXh0RGVidWdEYXRhVmFsdWU7CiAKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4Q29udGV4dEZhY3RvcnkK
Ky8vCiAgICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5lZWRlZCgpOworLy8KKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisKICAgICAgICAgdm9pZCBkaXNjb25uZWN0RXZlbnRMaXN0ZW5l
cnMoKTsKKworICAgICAgICAvLyBEaXNwb3NlIGdsb2JhbCBoYW5kbGVzIG9mIG1fY29udGV4dHMg
YW5kIGZyaWVuZHMuCisgICAgICAgIHZvaWQgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4U2VjdXJpdHlDb250ZXh0
CisvLwogICAgICAgICB2b2lkIHNldFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAgc3RhdGljIGJv
b2wgY2FuQWNjZXNzUHJpdmF0ZShET01XaW5kb3cqKTsKKworICAgICAgICAvLyBSZXR1cm5zIGEg
bG9jYWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCisgICAgICAgIHN0YXRpYyB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IHV0aWxpdHlDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1fdXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNyZWF0
ZVV0aWxpdHlDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250
ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpOworICAgICAgICB9CisvLworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE1v
dmUgdG8gVjhET01XcmFwZXIKKy8vCiAgICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdyYXBwZXIo
KTsKICAgICAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIpOwogCkBAIC01MTQsMjUgKzYxMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKICAgICAgICAgdm9p
ZCBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7CiAKLSAgICAgICAgLy8gRGlzcG9zZSBnbG9i
YWwgaGFuZGxlcyBvZiBtX2NvbnRleHRzIGFuZCBmcmllbmRzLgotICAgICAgICB2b2lkIGRpc3Bv
c2VDb250ZXh0SGFuZGxlcygpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1ByaXZh
dGUoRE9NV2luZG93Kik7Ci0KICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlz
IGEgRE9NIEV2ZW50IHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFw
cGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKICAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZl
cnRUb05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4pOwogCi0gICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4
IHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyB2b2lkKiBleHRyYWN0Q1BvaW50ZXJJbXBsKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChv
YmplY3QtPklzTnVtYmVyKCkpOwotICAgICAgICAgICAgaW50IGFkZHIgPSBvYmplY3QtPkludDMy
VmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRy
IDw8IDEpOwotICAgICAgICB9Ci0KLQogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbnZlcnRTdHlsZVNoZWV0VG9WOE9iamVjdChTdHlsZVNoZWV0Kik7CiAgICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydENTU1ZhbHVlVG9WOE9iamVjdChDU1NW
YWx1ZSopOwogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NS
dWxlVG9WOE9iamVjdChDU1NSdWxlKik7CkBAIC01NTgsNiArNjQyLDI4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gVjhXcmFwcGVyVHlwZSBhbmQgdGhlIHZvaWQqIGFzIGludGVy
bmFsIGZpZWxkcy4KICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50
aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlLCB2b2lkKik7CiAKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBzdGF0aWMg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsK
KyNlbmRpZgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBNb3ZlIHRvIFY4VXRpbGl0aWVzCisvLworICAgICAgICAv
LyBUYWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgorICAgICAgICBzdGF0aWMgdm9p
ZCogZXh0cmFjdENQb2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0LT5Jc051bWJlcigpKTsKKyAgICAgICAg
ICAgIGludCBhZGRyID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkciA8PCAxKTsKKyAgICAgICAgfQorLy8KKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisvLyBNb3ZlIHRvIFY4Q29uc3RhbnRzCisvLwogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
cmFuZ2VFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGV2ZW50RXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiB4bWxIdHRwUmVxdWVzdEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2Vw
dGlvbkNvZGUpOwpAQCAtNTY4LDE5ICs2NzQsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsKICAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHN2Z0V4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogI2VuZGlmCisv
LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIE1vdmUgdG8gVjhDb250ZXh0RmFjdG9yeQorLy8KICAgICAgICAgc3RhdGlj
IHZvaWQgY3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKLQotICAgICAgICAvLyBSZXR1cm5zIGEgbG9j
YWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCi0gICAgICAgIHN0YXRpYyB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IHV0aWxpdHlDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1fdXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNyZWF0ZVV0
aWxpdHlDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0
Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpOwotICAgICAgICB9CisvLworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KIAogICAgICAgICBGcmFtZSogbV9mcmFtZTsKIApAQCAtNjI1LDYgKzcy
OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFY4RXh0ZW5zaW9uTGlz
dCBtX2V4dGVuc2lvbnM7CiAgICAgfTsKIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vIE1vdmUgdG8gVjhET01XcmFwcGVyCisvLwogICAgIHRlbXBsYXRlIDxpbnQgdGFnLCB0eXBl
bmFtZSBUPgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb25zdHJ1Y3RET01P
YmplY3QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICB7CkBAIC02NDAsNyArNzQ3LDE4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHRvVjgoUGFzc1JlZlB0cjxUPiBvYmplY3QsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob2xk
ZXIpCisgICAgeworICAgICAgICBvYmplY3QtPnJlZigpOworICAgICAgICBWOFByb3h5OjpzZXRK
U1dyYXBwZXJGb3JET01PYmplY3Qob2JqZWN0LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pjo6TmV3KGhvbGRlcikpOworICAgICAgICByZXR1cm4gaG9sZGVyOworICAgIH0KKy8vCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworLy8gTW92ZSB0byBWOFV0aWxpdGllcworLy8KICAgICAvLyBVc2VkIGJ5IGFuIGludGVy
Y2VwdG9yIGNhbGxiYWNrIHRoYXQgaXQgaGFzbid0IGZvdW5kIGFueXRoaW5nIHRvCiAgICAgLy8g
aW50ZXJjZXB0LgogICAgIGlubGluZSBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCkKQEAgLTY2OSwxMyArNzg3LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2ODo6VGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOChQYXNzUmVmUHRyPFQ+IG9iamVjdCwgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGhvbGRlcikKLSAgICB7Ci0gICAgICAgIG9iamVjdC0+cmVmKCk7
Ci0gICAgICAgIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChvYmplY3QuZ2V0KCks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaG9sZGVyKSk7Ci0gICAgICAgIHJldHVy
biBob2xkZXI7Ci0gICAgfQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIH0=
</data>
<flag name="review"
          id="16759"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32295</attachid>
            <date>2009-07-06 02:59:17 -0700</date>
            <delta_ts>2009-07-06 02:59:17 -0700</delta_ts>
            <desc>The whole file</desc>
            <filename>V8Proxy.h</filename>
            <type>text/plain</type>
            <size>32051</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqIAogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqIAogKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAogKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqIGRpc3RyaWJ1
dGlvbi4KICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwogKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKiAKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAogKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KCiNpZm5kZWYgVjhQcm94eV9oCiNkZWZpbmUgVjhQ
cm94eV9oCgojaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKI2luY2x1ZGUgIk5vZGUuaCIKI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiIC8vIGZvciBX
ZWJDb3JlOjpTdHJpbmcKI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgLy8gZm9yIFdlYkNv
cmU6OlNjcmlwdFNvdXJjZUNvZGUKI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiIC8vIGZvciBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbgojaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiNpbmNs
dWRlICJWOERPTU1hcC5oIgojaW5jbHVkZSAiVjhFdmVudExpc3RlbmVyTGlzdC5oIgojaW5jbHVk
ZSAiVjhJbmRleC5oIgojaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKI2luY2x1ZGUgPHY4Lmg+CiNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4gLy8g
c28gZ2VuZXJhdGVkIGJpbmRpbmdzIGRvbid0IGhhdmUgdG8KI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KCiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPGxpc3Q+CgojaWZkZWYgRU5BQkxFX0RP
TV9TVEFUU19DT1VOVEVSUwojZGVmaW5lIElOQ19TVEFUUyhuYW1lKSBDaHJvbWl1bUJyaWRnZTo6
aW5jcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpCiNlbHNlCiNkZWZpbmUgSU5DX1NUQVRTKG5hbWUp
CiNlbmRpZgoKbmFtZXNwYWNlIFdlYkNvcmUgewoKICAgIGNsYXNzIENTU1J1bGU7CiAgICBjbGFz
cyBDU1NSdWxlTGlzdDsKICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAgICBjbGFzcyBD
U1NWYWx1ZTsKICAgIGNsYXNzIENTU1ZhbHVlTGlzdDsKICAgIGNsYXNzIENsaWVudFJlY3RMaXN0
OwogICAgY2xhc3MgRE9NSW1wbGVtZW50YXRpb247CiAgICBjbGFzcyBET01XaW5kb3c7CiAgICBj
bGFzcyBEb2N1bWVudDsKICAgIGNsYXNzIEVsZW1lbnQ7CiAgICBjbGFzcyBFdmVudDsKICAgIGNs
YXNzIEV2ZW50TGlzdGVuZXI7CiAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgIGNsYXNzIEZyYW1l
OwogICAgY2xhc3MgSFRNTENvbGxlY3Rpb247CiAgICBjbGFzcyBIVE1MRG9jdW1lbnQ7CiAgICBj
bGFzcyBIVE1MRWxlbWVudDsKICAgIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlvbjsKICAgIGNs
YXNzIE1lZGlhTGlzdDsKICAgIGNsYXNzIE1pbWVUeXBlOwogICAgY2xhc3MgTWltZVR5cGVBcnJh
eTsKICAgIGNsYXNzIE5hbWVkTm9kZU1hcDsKICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgIGNsYXNz
IE5vZGU7CiAgICBjbGFzcyBOb2RlRmlsdGVyOwogICAgY2xhc3MgTm9kZUxpc3Q7CiAgICBjbGFz
cyBQbHVnaW47CiAgICBjbGFzcyBQbHVnaW5BcnJheTsKICAgIGNsYXNzIFNWR0VsZW1lbnQ7CiNp
ZiBFTkFCTEUoU1ZHKQogICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOwojZW5kaWYKICAgIGNs
YXNzIFNjcmVlbjsKICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAgICBjbGFzcyBTdG9yYWdlOwogICAgY2xhc3MgU3RvcmFnZUV2ZW50Owoj
ZW5kaWYKICAgIGNsYXNzIFN0cmluZzsKICAgIGNsYXNzIFN0eWxlU2hlZXQ7CiAgICBjbGFzcyBT
dHlsZVNoZWV0TGlzdDsKICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKICAgIGNsYXNzIFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcjsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUg
dG8gVjhVdGlsaXRpZXMgKG9yIGp1c3QgcGxhbiBlbGltaW5hdGU/KQovLwogICAgLy8gRklYTUU6
IHVzZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXRpZXMgaW4gV2ViQ29yZS4KICAgIHZvaWQgbG9n
SW5mbyhGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB1cmwpOwov
LwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLy8gTW92ZSB0byBWOEdDQ29udHJvbGxlcgovLwojaWZuZGVmIE5ERUJVRwoKI2RlZmlu
ZSBHbG9iYWxIYW5kbGVUeXBlTGlzdChWKSAgIFwKICAgIFYoUFJPWFkpICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgIFYoTlBPQkpFQ1QpICAgICAgICAgICAgICAgICAgIFwKICAgIFYoU0NIRURV
TEVEX0FDVElPTikgICAgICAgICAgIFwKICAgIFYoRVZFTlRfTElTVEVORVIpICAgICAgICAgICAg
IFwKICAgIFYoTk9ERV9GSUxURVIpICAgICAgICAgICAgICAgIFwKICAgIFYoU0NSSVBUSU5TVEFO
Q0UpICAgICAgICAgICAgIFwKICAgIFYoU0NSSVBUVkFMVUUpCgogICAgLy8gSG9zdCBpbmZvcm1h
dGlvbiBvZiBwZXJzaXN0ZW50IGhhbmRsZXMuCiAgICBlbnVtIEdsb2JhbEhhbmRsZVR5cGUgewoj
ZGVmaW5lIEVOVU0obmFtZSkgbmFtZSwKICAgICAgICBHbG9iYWxIYW5kbGVUeXBlTGlzdChFTlVN
KQojdW5kZWYgRU5VTQogICAgfTsKCiAgICBjbGFzcyBHbG9iYWxIYW5kbGVJbmZvIHsKICAgIHB1
YmxpYzoKICAgICAgICBHbG9iYWxIYW5kbGVJbmZvKHZvaWQqIGhvc3QsIEdsb2JhbEhhbmRsZVR5
cGUgdHlwZSkgOiBtX2hvc3QoaG9zdCksIG1fdHlwZSh0eXBlKSB7IH0KICAgICAgICB2b2lkKiBt
X2hvc3Q7CiAgICAgICAgR2xvYmFsSGFuZGxlVHlwZSBtX3R5cGU7CiAgICB9OwoKI2VuZGlmIC8v
IE5ERUJVRwovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLy8gVjhET01XcmFwcGVyID8/PyAoRklYTUU6IFN0dWR5IHRoaXMgY29k
ZSBmdXJ0aGVyKQovLwogICAgLy8gVGhlIGZvbGxvd2luZyBCYXRjaCBzdHJ1Y3RzIGFuZCBtZXRo
b2RzIGFyZSB1c2VkIGZvciBzZXR0aW5nIG11bHRpcGxlCiAgICAvLyBwcm9wZXJ0aWVzIG9uIGFu
IE9iamVjdFRlbXBsYXRlLCB1c2VkIGZyb20gdGhlIGdlbmVyYXRlZCBiaW5kaW5ncwogICAgLy8g
aW5pdGlhbGl6YXRpb24gKENvbmZpZ3VyZVhYWFRlbXBsYXRlKS4gVGhpcyBncmVhdGx5IHJlZHVj
ZXMgdGhlIGJpbmFyeQogICAgLy8gc2l6ZSBieSBtb3ZpbmcgZnJvbSBjb2RlIGRyaXZlbiBzZXR1
cCB0byBkYXRhIHRhYmxlIGRyaXZlbiBzZXR1cC4KCiAgICAvLyBCYXRjaGVkQXR0cmlidXRlIHRy
YW5zbGF0ZXMgaW50byBjYWxscyB0byBTZXRBY2Nlc3NvcigpIG9uIGVpdGhlciB0aGUKICAgIC8v
IGluc3RhbmNlIG9yIHRoZSBwcm90b3R5cGUgT2JqZWN0VGVtcGxhdGUsIGJhc2VkIG9uIHxvblBy
b3RvfC4KICAgIHN0cnVjdCBCYXRjaGVkQXR0cmlidXRlIHsKICAgICAgICBjb25zdCBjaGFyKiBj
b25zdCBuYW1lOwogICAgICAgIHY4OjpBY2Nlc3NvckdldHRlciBnZXR0ZXI7CiAgICAgICAgdjg6
OkFjY2Vzc29yU2V0dGVyIHNldHRlcjsKICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgZGF0YTsKICAgICAgICB2ODo6QWNjZXNzQ29udHJvbCBzZXR0aW5nczsKICAgICAgICB2ODo6
UHJvcGVydHlBdHRyaWJ1dGUgYXR0cmlidXRlOwogICAgICAgIGJvb2wgb25Qcm90bzsKICAgIH07
CgogICAgdm9pZCBiYXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0
VGVtcGxhdGU+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4sIGNvbnN0IEJhdGNoZWRB
dHRyaWJ1dGUqLCBzaXplX3QgYXR0cmlidXRlQ291bnQpOwoKICAgIC8vIEJhdGNoZWRDb25zdGFu
dCB0cmFuc2xhdGVzIGludG8gY2FsbHMgdG8gU2V0KCkgZm9yIHNldHRpbmcgdXAgYW4gb2JqZWN0
J3MKICAgIC8vIGNvbnN0YW50cy4gSXQgc2V0cyB0aGUgY29uc3RhbnQgb24gYm90aCB0aGUgRnVu
Y3Rpb25UZW1wbGF0ZSBhbmQgdGhlCiAgICAvLyBPYmplY3RUZW1wbGF0ZS4gUHJvcGVydHlBdHRy
aWJ1dGVzIGlzIGFsd2F5cyBSZWFkT25seS4KICAgIHN0cnVjdCBCYXRjaGVkQ29uc3RhbnQgewog
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbWU7CiAgICAgICAgaW50IHZhbHVlOwogICAgfTsK
CiAgICB2b2lkIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4sIGNvbnN0IEJhdGNoZWRD
b25zdGFudCosIHNpemVfdCBjb25zdGFudENvdW50KTsKLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8gVjhDb25z
dGFudHMKLy8KICAgIGNvbnN0IGludCBrTWF4UmVjdXJzaW9uRGVwdGggPSAyMDsKLy8KLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8v
IE1vdmUgdG8gVjhFeHRlbnNpb25SZWdpc3RyeQovLwogICAgLy8gSW5mb3JtYXRpb24gYWJvdXQg
YW4gZXh0ZW5zaW9uIHRoYXQgaXMgcmVnaXN0ZXJlZCBmb3IgdXNlIHdpdGggVjguIElmIHNjaGVt
ZQogICAgLy8gaXMgbm9uLWVtcHR5LCBpdCBjb250YWlucyB0aGUgVVJMIHNjaGVtZSB0aGUgZXh0
ZW5zaW9uIHNob3VsZCBiZSB1c2VkIHdpdGguCiAgICAvLyBPdGhlcndpc2UsIHRoZSBleHRlbnNp
b24gaXMgdXNlZCB3aXRoIGFsbCBzY2hlbWVzLgogICAgc3RydWN0IFY4RXh0ZW5zaW9uSW5mbyB7
CiAgICAgICAgU3RyaW5nIHNjaGVtZTsKICAgICAgICB2ODo6RXh0ZW5zaW9uKiBleHRlbnNpb247
CiAgICB9OwogICAgdHlwZWRlZiBzdGQ6Omxpc3Q8VjhFeHRlbnNpb25JbmZvPiBWOEV4dGVuc2lv
bkxpc3Q7Ci8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgogICAgY2xhc3MgVjhQcm94
eSB7CiAgICBwdWJsaWM6CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNb3ZlIHRv
IFY4Q29uc3RhbnRzCi8vCiAgICAgICAgLy8gVGhlIHR5cGVzIG9mIGphdmFzY3JpcHQgZXJyb3Jz
IHRoYXQgY2FuIGJlIHRocm93bi4KICAgICAgICBlbnVtIEVycm9yVHlwZSB7CiAgICAgICAgICAg
IFJhbmdlRXJyb3IsCiAgICAgICAgICAgIFJlZmVyZW5jZUVycm9yLAogICAgICAgICAgICBTeW50
YXhFcnJvciwKICAgICAgICAgICAgVHlwZUVycm9yLAogICAgICAgICAgICBHZW5lcmFsRXJyb3IK
ICAgICAgICB9OwovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICAgICAgICBleHBs
aWNpdCBWOFByb3h5KEZyYW1lKiBmcmFtZSkgOiBtX2ZyYW1lKGZyYW1lKSwgbV9pbmxpbmVDb2Rl
KGZhbHNlKSwgbV90aW1lckNhbGxiYWNrKGZhbHNlKSwgbV9yZWN1cnNpb24oMCkgeyB9CgogICAg
ICAgIH5WOFByb3h5KCk7CgogICAgICAgIEZyYW1lKiBmcmFtZSgpIHsgcmV0dXJuIG1fZnJhbWU7
IH0KCiAgICAgICAgLy8gQ2xlYXIgcGFnZS1zcGVjaWZpYyBkYXRhLCBidXQga2VlcCB0aGUgZ2xv
YmFsIG9iamVjdCBpZGVudGlmeS4KICAgICAgICB2b2lkIGNsZWFyRm9yTmF2aWdhdGlvbigpOwoK
ICAgICAgICAvLyBDbGVhciBwYWdlLXNwZWNpZmljIGRhdGEgYmVmb3JlIHNodXR0aW5nIGRvd24g
dGhlIHByb3h5IG9iamVjdC4KICAgICAgICB2b2lkIGNsZWFyRm9yQ2xvc2UoKTsKCiAgICAgICAg
Ly8gVXBkYXRlIGRvY3VtZW50IG9iamVjdCBvZiB0aGUgZnJhbWUuCiAgICAgICAgdm9pZCB1cGRh
dGVEb2N1bWVudCgpOwoKICAgICAgICAvLyBEZXN0cm95IHRoZSBnbG9iYWwgb2JqZWN0LgogICAg
ICAgIHZvaWQgZGVzdHJveUdsb2JhbCgpOwoKICAgICAgICAvLyBGSVhNRTogTmVlZCBjb21tZW50
LiBVc2VyIEdlc3R1cmUgcmVsYXRlZC4KICAgICAgICBib29sIGlubGluZUNvZGUoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUNvZGU7IH0KICAgICAgICB2b2lkIHNldElubGluZUNvZGUoYm9vbCB2
YWx1ZSkgeyBtX2lubGluZUNvZGUgPSB2YWx1ZTsgfQoKICAgICAgICBib29sIHRpbWVyQ2FsbGJh
Y2soKSBjb25zdCB7IHJldHVybiBtX3RpbWVyQ2FsbGJhY2s7IH0KICAgICAgICB2b2lkIHNldFRp
bWVyQ2FsbGJhY2soYm9vbCB2YWx1ZSkgeyBtX3RpbWVyQ2FsbGJhY2sgPSB2YWx1ZTsgfQoKICAg
ICAgICAvLyBIYXMgdGhlIGNvbnRleHQgZm9yIHRoaXMgcHJveHkgYmVlbiBpbml0aWFsaXplZD8K
ICAgICAgICBib29sIGlzQ29udGV4dEluaXRpYWxpemVkKCk7CgogICAgICAgIC8vIERpc2Nvbm5l
Y3RzIHRoZSBwcm94eSBmcm9tIGl0cyBvd25lciBmcmFtZSwKICAgICAgICAvLyBhbmQgY2xlYXJz
IGFsbCB0aW1lb3V0cyBvbiB0aGUgRE9NIHdpbmRvdy4KICAgICAgICB2b2lkIGRpc2Nvbm5lY3RG
cmFtZSgpOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gTW92ZSB0byBWOEV2ZW50
TGlzdGVuZXIKLy8KICAgICAgICAvLyBGaW5kL0NyZWF0ZS9SZW1vdmUgZXZlbnQgbGlzdGVuZXIg
d3JhcHBlcnMuCiAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRWOEV2ZW50
TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNIdG1sKTsKICAg
ICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlVjhFdmVudExpc3Rl
bmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlzSHRtbCk7CgogICAgICAg
IFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT2JqZWN0RXZlbnRMaXN0ZW5lcih2ODo6
TG9jYWw8djg6OlZhbHVlPiBsaXN0ZW5lciwgYm9vbCBpc0h0bWwpOwogICAgICAgIFBhc3NSZWZQ
dHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlzSHRtbCk7CgogICAgICAgIHZvaWQgcmVt
b3ZlVjhFdmVudExpc3RlbmVyKFY4RXZlbnRMaXN0ZW5lciopOwogICAgICAgIHZvaWQgcmVtb3Zl
T2JqZWN0RXZlbnRMaXN0ZW5lcihWOE9iamVjdEV2ZW50TGlzdGVuZXIqKTsKCiAgICAgICAgdm9p
ZCBzZXRFdmVudEhhbmRsZXJMaW5lTnVtYmVyKGludCBsaW5lTnVtYmVyKSB7IG1faGFuZGxlckxp
bmVOdW1iZXIgPSBsaW5lTnVtYmVyOyB9CiAgICAgICAgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChF
dmVudCopIHsgfQoKLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8gVjhHQ0NvbnRyb2xsZXIKLy8KICAgICAgICAv
LyBQcm90ZWN0L1VucHJvdGVjdCBKUyB3cmFwcGVycyBvZiBhIERPTSBvYmplY3QuCiAgICAgICAg
c3RhdGljIHZvaWQgZ2NQcm90ZWN0KHZvaWQqIGRvbU9iamVjdCk7CiAgICAgICAgc3RhdGljIHZv
aWQgZ2NVbnByb3RlY3Qodm9pZCogZG9tT2JqZWN0KTsKCiNpZm5kZWYgTkRFQlVHCiAgICAgICAg
Ly8gRm9yIGRlYnVnZ2luZyBhbmQgbGVhayBkZXRlY3Rpb24gcHVycG9zZS4KICAgICAgICBzdGF0
aWMgdm9pZCByZWdpc3Rlckdsb2JhbEhhbmRsZShHbG9iYWxIYW5kbGVUeXBlLCB2b2lkKiwgdjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7CiAgICAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3Rlckds
b2JhbEhhbmRsZSh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPik7CiNlbmRpZgoKLy8K
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi8vIE1vdmUgdG8gVjhFeGVjdXRpdmUKLy8KICAgICAgICBib29sIGlzRW5hYmxlZCgpOwoK
ICAgICAgICAvLyBFdmFsdWF0ZSBKYXZhU2NyaXB0IGluIGEgbmV3IGlzb2xhdGVkIHdvcmxkLiBU
aGUgc2NyaXB0IGdldHMgaXRzIG93bgogICAgICAgIC8vIGdsb2JhbCBzY29wZSwgaXRzIG93biBw
cm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsCiAgICAg
ICAgLy8gQXJyYXksIGFuZCBzby1vbiksIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBhbGwgRE9N
IG5vZGVzIGFuZCBET00KICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuCiAgICAgICAgdm9pZCBldmFs
dWF0ZUluTmV3V29ybGQoY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKTsK
CiAgICAgICAgLy8gRXZhbHVhdGUgSmF2YVNjcmlwdCBpbiBhIG5ldyBjb250ZXh0LiBUaGUgc2Ny
aXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUKICAgICAgICAvLyBhbmQgaXRzIG93biBwcm90
b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LAog
ICAgICAgIC8vIGFuZCBzby1vbikuIEl0IHNoYXJlcyB0aGUgd3JhcHBlcnMgZm9yIGFsbCBET00g
bm9kZXMgYW5kIERPTSBjb25zdHJ1Y3RvcnMuCiAgICAgICAgdm9pZCBldmFsdWF0ZUluTmV3Q29u
dGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mKTsKCiAgICAgICAgLy8gRXZhbHVh
dGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuCiAg
ICAgICAgLy8gVGhlIGNhbGxlciBtdXN0IGhvbGQgYW4gZXhlY3V0aW9uIGNvbnRleHQuCiAgICAg
ICAgLy8gSWYgY2Fubm90IGV2YWx1dGUgdGhlIHNjcmlwdCwgaXQgcmV0dXJucyBhbiBlcnJvci4K
ICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiwgTm9kZSopOwoKICAgICAgICAvLyBSdW4gYW4gYWxyZWFkeSBjb21waWxlZCBzY3JpcHQu
CiAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNj
cmlwdD4sIGJvb2wgaXNJbmxpbmVDb2RlKTsKCiAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24g
d2l0aCB0aGUgZ2l2ZW4gcmVjZWl2ZXIgYW5kIGFyZ3VtZW50cy4KICAgICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBjYWxsRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+LCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSk7
CgogICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFzIGNvbnN0cnVjdG9yIHdpdGggdGhlIGdp
dmVuIGFyZ3VtZW50cy4KICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBuZXdJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4sIGludCBhcmdjLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
YXJndltdKTsKCiAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNj
cmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGludCBiYXNlTGluZSk7CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNvbnRleHQgY2F1c2Vz
IG91dCBvZiBtZW1vcnksIEphdmFTY3JpcHQgc2V0dGluZwogICAgICAgIC8vIGlzIGRpc2FibGVk
IGFuZCBpdCByZXR1cm5zIHRydWUuCiAgICAgICAgc3RhdGljIGJvb2wgaGFuZGxlT3V0T2ZNZW1v
cnkoKTsKCiAgICAgICAgLy8gUHJvY2VzcyBhbnkgcGVuZGluZyBKYXZhU2NyaXB0IGNvbnNvbGUg
bWVzc2FnZXMuCiAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOwoK
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qg
djg6OkFyZ3VtZW50cyYpOwoKICAgICAgICBib29sIHNldENvbnRleHREZWJ1Z0lkKGludCBpZCk7
CiAgICAgICAgc3RhdGljIGludCBjb250ZXh0RGVidWdJZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0
Pik7Ci8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4U2VjdXJpdHlDb250ZXh0Ci8vCiAgICAgICAgLy8gVXBk
YXRlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgYSBkb2N1bWVudAogICAgICAgIC8vIChlLmcuLCBh
ZnRlciBzZXR0aW5nIGRvY291bWVudC5kb21haW4pLgogICAgICAgIHZvaWQgdXBkYXRlU2VjdXJp
dHlPcmlnaW4oKTsKCiNpZiBFTkFCTEUoU1ZHKQogICAgICAgIHN0YXRpYyB2b2lkIHNldFNWR0Nv
bnRleHQodm9pZCosIFNWR0VsZW1lbnQqKTsKICAgICAgICBzdGF0aWMgU1ZHRWxlbWVudCogc3Zn
Q29udGV4dCh2b2lkKik7CiNlbmRpZgoKICAgICAgICAvLyBSZXR1cm5zIHRoZSB3aW5kb3cgb2Jq
ZWN0IG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbnRleHQuCiAgICAgICAgc3RhdGljIERP
TVdpbmRvdyogcmV0cmlldmVXaW5kb3coKTsKICAgICAgICAvLyBSZXR1cm5zIHRoZSB3aW5kb3cg
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRleHQuCiAgICAgICAgc3RhdGljIERPTVdpbmRv
dyogcmV0cmlldmVXaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogICAgICAgIC8vIFJl
dHVybnMgVjhQcm94eSBvYmplY3Qgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4K
ICAgICAgICBzdGF0aWMgVjhQcm94eSogcmV0cmlldmUoKTsKICAgICAgICAvLyBSZXR1cm5zIFY4
UHJveHkgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGZyYW1lLgogICAgICAgIHN0YXRpYyBWOFBy
b3h5KiByZXRyaWV2ZShGcmFtZSopOwogICAgICAgIC8vIFJldHVybnMgVjhQcm94eSBvYmplY3Qg
YXNzb2NpYXRlZCB3aXRoIGEgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgogICAgICAgIHN0YXRp
YyBWOFByb3h5KiByZXRyaWV2ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CgogICAgICAgIC8v
IFJldHVybnMgdGhlIGZyYW1lIG9iamVjdCBvZiB0aGUgd2luZG93IG9iamVjdCBhc3NvY2lhdGVk
CiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0LgogICAgICAg
IHN0YXRpYyBGcmFtZSogcmV0cmlldmVGcmFtZSgpOwogICAgICAgIC8vIFJldHVybnMgdGhlIGZy
YW1lIG9iamVjdCBvZiB0aGUgd2luZG93IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAv
LyBhIGNvbnRleHQuCiAgICAgICAgc3RhdGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lKHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+KTsKCiAgICAgICAgLy8gVGhlIHRocmVlIGZ1bmN0aW9ucyBiZWxvdyBy
ZXRyaWV2ZSBXZWJGcmFtZSBpbnN0YW5jZXMgcmVsYXRpbmcgdGhlCiAgICAgICAgLy8gY3VycmVu
dGx5IGV4ZWN1dGluZyBKYXZhU2NyaXB0LiBTaW5jZSBKYXZhU2NyaXB0IGNhbiBtYWtlIGZ1bmN0
aW9uIGNhbGxzCiAgICAgICAgLy8gYWNyb3NzIGZyYW1lcywgdGhvdWdoLCB3ZSBuZWVkIHRvIGJl
IG1vcmUgcHJlY2lzZS4KICAgICAgICAvLwogICAgICAgIC8vIEZvciBleGFtcGxlLCBpbWFnaW5l
IHRoYXQgYSBKUyBmdW5jdGlvbiBpbiBmcmFtZSBBIGNhbGxzIGEgZnVuY3Rpb24gaW4KICAgICAg
ICAvLyBmcmFtZSBCLCB3aGljaCBjYWxscyBuYXRpdmUgY29kZSwgd2hpY2ggd2FudHMgdG8ga25v
dyB3aGF0IHRoZSAnYWN0aXZlJwogICAgICAgIC8vIGZyYW1lIGlzLgogICAgICAgIC8vCiAgICAg
ICAgLy8gVGhlICdlbnRlcmVkIGNvbnRleHQnIGlzIHRoZSBjb250ZXh0IHdoZXJlIGV4ZWN1dGlv
biBmaXJzdCBlbnRlcmVkIHRoZQogICAgICAgIC8vIHNjcmlwdCBlbmdpbmU7IHRoZSBjb250ZXh0
IHRoYXQgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgSlMgZnVuY3Rpb24gc3RhY2suCiAgICAgICAg
Ly8gUmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCkgd291bGQgcmV0dXJuIEZyYW1lIEEg
aW4gb3VyIGV4YW1wbGUuCiAgICAgICAgLy8gVGhpcyBmcmFtZSBpcyBvZnRlbiByZWZlcnJlZCB0
byBhcyB0aGUgImR5bmFtaWMgZ2xvYmFsIG9iamVjdC4iCiAgICAgICAgLy8KICAgICAgICAvLyBU
aGUgJ2N1cnJlbnQgY29udGV4dCcgaXMgdGhlIGNvbnRleHQgdGhlIEpTIGVuZ2luZSBpcyBjdXJy
ZW50bHkgaW5zaWRlIG9mOwogICAgICAgIC8vIHRoZSBjb250ZXh0IHRoYXQgaXMgYXQgdGhlIHRv
cCBvZiB0aGUgSlMgZnVuY3Rpb24gc3RhY2suCiAgICAgICAgLy8gUmV0cmlldmVGcmFtZUZvckN1
cnJlbnRDb250ZXh0KCkgd291bGQgcmV0dXJuIEZyYW1lIEIgaW4gb3VyIGV4YW1wbGUuCiAgICAg
ICAgLy8gVGhpcyBmcmFtZSBpcyBvZnRlbiByZWZlcnJlZCB0byBhcyB0aGUgImxleGljYWwgZ2xv
YmFsIG9iamVjdC4iCiAgICAgICAgLy8KICAgICAgICAvLyBGaW5hbGx5LCB0aGUgJ2NhbGxpbmcg
Y29udGV4dCcgaXMgdGhlIGNvbnRleHQgb25lIGJlbG93IHRoZSBjdXJyZW50CiAgICAgICAgLy8g
Y29udGV4dCBvbiB0aGUgSlMgZnVuY3Rpb24gc3RhY2suIEZvciBleGFtcGxlLCBpZiBmdW5jdGlv
biBmIGNhbGxzCiAgICAgICAgLy8gZnVuY3Rpb24gZywgdGhlbiB0aGUgY2FsbGluZyBjb250ZXh0
IHdpbGwgYmUgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgLy8gZi4gVGhpcyBj
b250ZXh0IGlzIGNvbW1vbmx5IHVzZWQgYnkgRE9NIHNlY3VyaXR5IGNoZWNrcyBiZWNhdXNlIHRo
ZXkgd2FudAogICAgICAgIC8vIHRvIGtub3cgd2hvIGNhbGxlZCB0aGVtLgogICAgICAgIC8vCiAg
ICAgICAgLy8gSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVz
ZSwgYXNrIGFiYXJ0aC4KICAgICAgICAvLwogICAgICAgIC8vIE5PVEU6IFRoZXNlIGNhbm5vdCBi
ZSBkZWNsYXJlZCBhcyBpbmxpbmUgZnVuY3Rpb24sIGJlY2F1c2UgVlMgY29tcGxhaW5zIGF0CiAg
ICAgICAgLy8gbGlua2luZyB0aW1lLgogICAgICAgIHN0YXRpYyBGcmFtZSogcmV0cmlldmVGcmFt
ZUZvckVudGVyZWRDb250ZXh0KCk7CiAgICAgICAgc3RhdGljIEZyYW1lKiByZXRyaWV2ZUZyYW1l
Rm9yQ3VycmVudENvbnRleHQoKTsKICAgICAgICBzdGF0aWMgRnJhbWUqIHJldHJpZXZlRnJhbWVG
b3JDYWxsaW5nQ29udGV4dCgpOwoKICAgICAgICAvLyBDaGVjayBpZiB0aGUgYWN0aXZlIGV4ZWN1
dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRhcmdldCBmcmFtZS4KICAgICAgICBzdGF0aWMg
Ym9vbCBjYW5BY2Nlc3NGcmFtZShGcmFtZSosIGJvb2wgcmVwb3J0RXJyb3IpOwoKICAgICAgICAv
LyBDaGVjayBpZiBpdCBpcyBzYWZlIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQog
ICAgICAgIC8vIGN1cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KICAgICAgICBzdGF0aWMgYm9vbCBj
aGVja05vZGVTZWN1cml0eShOb2RlKik7CgogICAgICAgIC8vIFJldHVybnMgVjggQ29udGV4dCBv
ZiBhIGZyYW1lLiBJZiBub25lIGV4aXN0cywgY3JlYXRlcwogICAgICAgIC8vIGEgbmV3IGNvbnRl
eHQuIEl0IGlzIHBvdGVudGlhbGx5IHNsb3cgYW5kIGNvbnN1bWVzIG1lbW9yeS4KICAgICAgICBz
dGF0aWMgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KEZyYW1lKik7CiAgICAgICAgc3Rh
dGljIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY3VycmVudENvbnRleHQoKTsKCiAgICAgICAgLy8g
UmV0dXJucyBhIGxvY2FsIGhhbmRsZSBvZiB0aGUgY29udGV4dC4KICAgICAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGNvbnRleHQoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOwogICAgICAgIH0KCiAgICAgICAgLy8g
RnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgbmFtZSBm
b3IgdGhlIHRvcAogICAgICAgIC8vIEphdmFTY3JpcHQgc3RhY2sgZnJhbWUuCiAgICAgICAgc3Rh
dGljIGludCBzb3VyY2VMaW5lTnVtYmVyKCk7CiAgICAgICAgc3RhdGljIFN0cmluZyBzb3VyY2VO
YW1lKCk7Ci8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4VXRpbGl0aWVzCi8vCiAgICAgICAgLy8gQ3JlYXRl
IGEgVjggd3JhcHBlciBmb3IgYSBDIHBvaW50ZXIKICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdyYXBDUG9pbnRlcih2b2lkKiBjcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Ly8gUmVwcmVzZW50IHZvaWQqIGFzIGludAogICAgICAgICAgICBpbnQgYWRkciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50PihjcHRyKTsKICAgICAgICAgICAgQVNTRVJUKCEoYWRkciAmIDB4MDEpKTsg
Ly8gVGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkLgogICAgICAgICAgICByZXR1cm4gdjg6Oklu
dGVnZXI6Ok5ldyhhZGRyID4+IDEpOwogICAgICAgIH0KCiAgICAgICAgLy8gVGFrZSBDIHBvaW50
ZXIgb3V0IG9mIGEgdjggd3JhcHBlci4KICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KICAgICAg
ICBzdGF0aWMgQyogZXh0cmFjdENQb2ludGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmopCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGV4dHJhY3RDUG9pbnRl
ckltcGwob2JqKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGNvZGUg
aXMgZGlmZmVyZW50IGZyb20gemVybywgYSBET00gZXhjZXB0aW9uIGlzCiAgICAgICAgLy8gc2No
ZWR1bGUgdG8gYmUgdGhyb3duLgogICAgICAgIHN0YXRpYyB2b2lkIHNldERPTUV4Y2VwdGlvbihp
bnQgZXhjZXB0aW9uQ29kZSk7CgogICAgICAgIC8vIFNjaGVkdWxlIGFuIGVycm9yIG9iamVjdCB0
byBiZSB0aHJvd24uCiAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0aHJvd0Vy
cm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci8vCi8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4
RE9NV3JhcHBlcgovLwogICAgICAgIC8vIFJldHVybnMgdGhlIGRvbSBjb25zdHJ1Y3RvciBmdW5j
dGlvbiBmb3IgdGhlIGdpdmVuIG5vZGUgdHlwZS4KICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOwoKICAgICAg
ICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBh
ICdib2lsZXIgcGxhdGUnCiAgICAgICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUg
dGhhdCBvYmplY3QgZWFjaCB0aW1lIHdlIG5lZWQgYSBuZXcgb25lLgogICAgICAgIC8vIFRoaXMg
aXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJv
Y2Vzcy4KICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNo
ZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOwoKI2lmbmRlZiBOREVCVUcKICAgICAgICAv
LyBDaGVja3MgaWYgYSB2OCB2YWx1ZSBjYW4gYmUgYSBET00gd3JhcHBlcgogICAgICAgIHN0YXRp
YyBib29sIG1heWJlRE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwojZW5kaWYKCiAg
ICAgICAgLy8gU2V0cyBjb250ZW50cyBvZiBhIERPTSB3cmFwcGVyLgogICAgICAgIHN0YXRpYyB2
b2lkIHNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgaW50IHR5cGUsIHZvaWQq
IHB0cik7CgogICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxvb2t1cERPTVdy
YXBwZXIoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4p
OwoKICAgICAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9p
bnRlciBmcm9tIGEgRE9NIHdyYXBwZXIKICAgICAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lm
aWVkIHR5cGUuCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+CiAgICAgICAgc3RhdGljIEMqIGNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKICAg
ICAgICB7CiAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CiAgICAg
ICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwdHIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KG9iamVjdCktPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2Jq
ZWN0SW5kZXgpOwogICAgICAgICAgICByZXR1cm4gZXh0cmFjdENQb2ludGVyPEM+KHB0cik7CiAg
ICAgICAgfQoKICAgICAgICAvLyBBIGhlbHAgZnVuY3Rpb24gZXh0cmFjdCBhIG5vZGUgdHlwZSBw
b2ludGVyIGZyb20gYSBET00gd3JhcHBlci4KICAgICAgICAvLyBXcmFwcGVkIHBvaW50ZXIgbXVz
dCBiZSBjYXN0IHRvIE5vZGUqIGZpcnN0LgogICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZUhlbHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwoKICAgICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQz4KICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05vZGUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEMqPihjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2YWx1ZSkpOwog
ICAgICAgIH0KCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFQ+IGltcCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXAuZ2V0KCkpOwogICAgICAgIH0KCiAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKCiAgICAgICAgLy8gRmFzdC1wYXRoIGZvciBO
b2RlIG9iamVjdHMuCiAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0
Tm9kZVRvVjhPYmplY3QoTm9kZSopOwoKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KICAgICAg
ICBzdGF0aWMgQyogY29udmVydFRvTmF0aXZlT2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEMqPihjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKHR5
cGUsIG9iamVjdCkpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CgogICAgICAgIHN0YXRpYyBFdmVu
dCogY29udmVydFRvTmF0aXZlRXZlbnQodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpCiAg
ICAgICAgewogICAgICAgICAgICBpZiAoIWlzRE9NRXZlbnRXcmFwcGVyKGpzRXZlbnQpKQogICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPEV2ZW50Pihqc0V2ZW50KTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdl
dCopOwogICAgICAgIC8vIFdyYXAgYW5kIHVud3JhcCBKUyBldmVudCBsaXN0ZW5lcnMuCiAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhP
YmplY3QoRXZlbnRMaXN0ZW5lciopOwoKCiAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKCiAgICAg
ICAgLy8gRE9NSW1wbGVtZW50YXRpb24gaXMgYSBzaW5nbGV0b24gYW5kIGl0IGlzIGhhbmRsZWQg
aW4gYSBzcGVjaWFsCiAgICAgICAgLy8gd2F5LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBlciBk
b2N1bWVudCBhbmQgc3RvcmVkIGluIGFuCiAgICAgICAgLy8gaW50ZXJuYWwgZmllbGQgb2YgdGhl
IGRvY3VtZW50LgogICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydERP
TUltcGxlbWVudGF0aW9uVG9WOE9iamVjdChET01JbXBsZW1lbnRhdGlvbiopOwoKICAgICAgICAv
LyBXcmFwIEpTIG5vZGUgZmlsdGVyIGluIEMrKy4KICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
b2RlRmlsdGVyPiB3cmFwTmF0aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwoK
ICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRl
bXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSk7CgogICAgICAgIHRlbXBsYXRlIDxp
bnQgdGFnLCB0eXBlbmFtZSBUPgogICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKCiAgICAgICAgLy8gQ2hl
Y2tzIHdoZXRoZXIgYSBET00gb2JqZWN0IGhhcyBhIEpTIHdyYXBwZXIuCiAgICAgICAgc3RhdGlj
IGJvb2wgZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHZvaWQqKTsKICAgICAgICAvLyBTZXQgSlMgd3Jh
cHBlciBvZiBhIERPTSBvYmplY3QsIHRoZSBjYWxsZXIgaW4gY2hhcmdlIG9mIGluY3JlYXNlIHJl
Zi4KICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBw
ZXJGb3JBY3RpdmVET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsK
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqLCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pik7CgogICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1
ZSBpcyBhIHdyYXBwZXIgb2YgdHlwZSB8Y2xhc3NUeXBlfC4KICAgICAgICBzdGF0aWMgYm9vbCBp
c1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUpOwoKICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydFRvU1ZHUE9EVHlwZUltcGwo
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwovLwov
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICAgICAgICAvLyBDcmVhdGUgYW4gaW5zdGFu
Y2Ugb2YgYSBmdW5jdGlvbiBkZXNjcmlwdG9yIGFuZCBzZXQgdG8gdGhlIGdsb2JhbCBvYmplY3QK
ICAgICAgICAvLyBhcyBhIG5hbWVkIHByb3BlcnR5LiBVc2VkIGJ5IHY4X3Rlc3Rfc2hlbGwuCiAg
ICAgICAgc3RhdGljIHZvaWQgYmluZEpzT2JqZWN0VG9XaW5kb3coRnJhbWUqLCBjb25zdCBjaGFy
KiBuYW1lLCBpbnQgdHlwZSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4sIHZvaWQq
KTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8gVjhFeHRlbnNpb25S
ZWdpc3RyeQovLwogICAgICAgIC8vIFJlZ2lzdGVycyBhbiBleHRlbnNpb24gdG8gYmUgYXZhaWxh
YmxlIG9uIHdlYnBhZ2VzIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVtZQogICAgICAgIC8vIElmIHRo
ZSBzY2hlbWUgYXJndW1lbnQgaXMgZW1wdHksIHRoZSBleHRlbnNpb24gaXMgYXZhaWxhYmxlIG9u
IGFsbCBwYWdlcy4KICAgICAgICAvLyBXaWxsIG9ubHkgYWZmZWN0IHY4IGNvbnRleHRzIGluaXRp
YWxpemVkIGFmdGVyIHRoaXMgY2FsbC4gVGFrZXMgb3duZXJzaGlwCiAgICAgICAgLy8gb2YgdGhl
IHY4OjpFeHRlbnNpb24gb2JqZWN0IHBhc3NlZC4KICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckV4dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiwgY29uc3QgU3RyaW5nJiBzY2hlbWVSZXN0cmljdGlv
bik7Ci8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4Q29udGV4dEZhY3RvcnkKLy8KICAgICAgICAvLyBGSVhN
RTogU2VwYXJhdGUgdGhlc2UgY29uY2VybnMgZnJvbSBWOFByb3h5PwogICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gZ2xvYmFsKTsKICAgICAgICBib29sIGluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93KiB3aW5kb3cpOwovLwovLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwoKICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtD
b250ZXh0RGVidWdEYXRhVHlwZTsKICAgICAgICBzdGF0aWMgY29uc3QgY2hhcioga0NvbnRleHRE
ZWJ1Z0RhdGFWYWx1ZTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8g
VjhDb250ZXh0RmFjdG9yeQovLwogICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5lZWRlZCgpOwov
LwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RF
dmVudExpc3RlbmVycygpOwoKICAgICAgICAvLyBEaXNwb3NlIGdsb2JhbCBoYW5kbGVzIG9mIG1f
Y29udGV4dHMgYW5kIGZyaWVuZHMuCiAgICAgICAgdm9pZCBkaXNwb3NlQ29udGV4dEhhbmRsZXMo
KTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8gVjhTZWN1cml0eUNv
bnRleHQKLy8KICAgICAgICB2b2lkIHNldFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICBzdGF0aWMg
Ym9vbCBjYW5BY2Nlc3NQcml2YXRlKERPTVdpbmRvdyopOwoKICAgICAgICAvLyBSZXR1cm5zIGEg
bG9jYWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCiAgICAgICAgc3RhdGljIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4gdXRpbGl0eUNvbnRleHQoKQogICAgICAgIHsKICAgICAgICAgICAg
aWYgKG1fdXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICAgICAgICAgY3JlYXRlVXRp
bGl0eUNvbnRleHQoKTsKICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46
Ok5ldyhtX3V0aWxpdHlDb250ZXh0KTsKICAgICAgICB9Ci8vCi8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4RE9N
V3JhcGVyCi8vCiAgICAgICAgdm9pZCBjbGVhckRvY3VtZW50V3JhcHBlcigpOwogICAgICAgIHZv
aWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyKTsK
CiAgICAgICAgLy8gVGhlIEphdmFTY3JpcHQgd3JhcHBlciBmb3IgdGhlIGRvY3VtZW50IG9iamVj
dCBpcyBjYWNoZWQgb24gdGhlIGdsb2JhbAogICAgICAgIC8vIG9iamVjdCBmb3IgZmFzdCBhY2Nl
c3MuIFVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlIHNldHMgdGhlIHdyYXBwZXIKICAgICAgICAv
LyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgb24gdGhlIGdsb2JhbCBvYmplY3QuIENsZWFyRG9j
dW1lbnRXcmFwcGVyQ2FjaGUKICAgICAgICAvLyBkZWxldGVzIHRoZSBkb2N1bWVudCB3cmFwcGVy
IGZyb20gdGhlIGdsb2JhbCBvYmplY3QuCiAgICAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFdyYXBw
ZXJDYWNoZSgpOwogICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOwoKICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSBET00gRXZlbnQgd3JhcHBlci4K
ICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOwoKICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CgogICAgICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0
KFN0eWxlU2hlZXQqKTsKICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUqKTsKICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChDU1NSdWxlKik7CiAgICAgICAg
Ly8gUmV0dXJucyB0aGUgSlMgd3JhcHBlciBvZiBhIHdpbmRvdyBvYmplY3QsIGluaXRpYWxpemVz
IHRoZSBlbnZpcm9ubWVudAogICAgICAgIC8vIG9mIHRoZSB3aW5kb3cgZnJhbWUgaWYgbmVlZGVk
LgogICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFdpbmRvd1RvVjhP
YmplY3QoRE9NV2luZG93Kik7CgojaWYgRU5BQkxFKFNWRykKICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KFNWR0Vs
ZW1lbnRJbnN0YW5jZSopOwogICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUsIHZvaWQqKTsKI2VuZGlmCgogICAgICAgIC8vIFNldCBoaWRkZW4gcmVmZXJlbmNlcyBp
biBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFtZS4KICAgICAgICBzdGF0aWMgdm9pZCBzZXRI
aWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CgogICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgaHRtbEVsZW1lbnRUeXBlKEhUTUxFbGVtZW50Kik7CgogICAgICAgIC8vIFRoZSBm
aXJzdCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvcgogICAg
ICAgIC8vIHVzZWQgdG8gY3JlYXRlIEpTIG9iamVjdC4gVGhlIHNlY29uZCBWOFdyYXBwZXJUeXBl
IHNwZWNpZmllcwogICAgICAgIC8vIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9yIHR5
cGUgY2FzdGluZy4KICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYSBIVE1MIGVsZW1lbnQgaGFzIEhU
TUxFTEVNRU5UIGZvciB0aGUgZmlyc3QgVjhXcmFwcGVyVHlwZSwgYnV0IGFsd2F5cwogICAgICAg
IC8vIHVzZSBOT0RFIGFzIHRoZSBzZWNvbmQgVjhXcmFwcGVyVHlwZS4gSlMgd3JhcHBlciBzdG9y
ZXMgdGhlIHNlY29uZAogICAgICAgIC8vIFY4V3JhcHBlclR5cGUgYW5kIHRoZSB2b2lkKiBhcyBp
bnRlcm5hbCBmaWVsZHMuCiAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0
YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7CgojaWYgRU5BQkxFKFNWRykKICAgICAgICBzdGF0aWMg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsK
I2VuZGlmCi8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4VXRpbGl0aWVzCi8vCiAgICAgICAgLy8gVGFrZSBD
IHBvaW50ZXIgb3V0IG9mIGEgdjggd3JhcHBlci4KICAgICAgICBzdGF0aWMgdm9pZCogZXh0cmFj
dENQb2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogICAgICAgIHsKICAg
ICAgICAgICAgQVNTRVJUKG9iamVjdC0+SXNOdW1iZXIoKSk7CiAgICAgICAgICAgIGludCBhZGRy
ID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7CiAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihhZGRyIDw8IDEpOwogICAgICAgIH0KLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIE1vdmUgdG8gVjhDb25z
dGFudHMKLy8KICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogcmFuZ2VFeGNlcHRpb25OYW1lKGlu
dCBleGNlcHRpb25Db2RlKTsKICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogZXZlbnRFeGNlcHRp
b25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogeG1s
SHR0cFJlcXVlc3RFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogZG9tRXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CgojaWYg
RU5BQkxFKFhQQVRIKQogICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB4cGF0aEV4Y2VwdGlvbk5h
bWUoaW50IGV4Y2VwdGlvbkNvZGUpOwojZW5kaWYKCiNpZiBFTkFCTEUoU1ZHKQogICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdmdFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKI2Vu
ZGlmCi8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4Q29udGV4dEZhY3RvcnkKLy8KICAgICAgICBzdGF0aWMg
dm9pZCBjcmVhdGVVdGlsaXR5Q29udGV4dCgpOwovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwoKICAgICAgICBGcmFtZSogbV9mcmFtZTsKCiAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkNvbnRleHQ+IG1fY29udGV4dDsKICAgICAgICAvLyBGb3IgZWFjaCBwb3NzaWJsZSB0eXBlIG9m
IHdyYXBwZXIsIHdlIGtlZXAgYSBib2lsZXJwbGF0ZSBvYmplY3QuCiAgICAgICAgLy8gVGhlIGJv
aWxlcnBsYXRlIGlzIHVzZWQgdG8gY3JlYXRlIGFkZGl0aW9uYWwgd3JhcHBlcnMgb2YgdGhlIHNh
bWUgdHlwZS4KICAgICAgICAvLyBXZSBrZWVwIGEgc2luZ2xlIHBlcnNpc3RlbnQgaGFuZGxlIHRv
IGFuIGFycmF5IG9mIHRoZSBhY3RpdmF0ZWQKICAgICAgICAvLyBib2lsZXJwbGF0ZXMuCiAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkFycmF5PiBtX3dyYXBwZXJCb2lsZXJwbGF0ZXM7CiAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX29iamVjdFByb3RvdHlwZTsKCiAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9iYWw7CiAgICAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiBtX2RvY3VtZW50OwoKICAgICAgICAvLyBVdGlsaXR5IGNvbnRleHQgaG9s
ZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkuCiAgICAgICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX3V0aWxpdHlDb250ZXh0OwoKICAgICAgICBp
bnQgbV9oYW5kbGVyTGluZU51bWJlcjsKCiAgICAgICAgLy8gQSBsaXN0IG9mIGV2ZW50IGxpc3Rl
bmVycyBjcmVhdGVkIGZvciB0aGlzIGZyYW1lLAogICAgICAgIC8vIHRoZSBsaXN0IGdldHMgY2xl
YXJlZCB3aGVuIHJlbW92aW5nIGFsbCB0aW1lb3V0cy4KICAgICAgICBWOEV2ZW50TGlzdGVuZXJM
aXN0IG1fZXZlbnRMaXN0ZW5lcnM7CgogICAgICAgIC8vIEEgbGlzdCBvZiBldmVudCBsaXN0ZW5l
cnMgY3JlYXRlIGZvciBYTUxIdHRwUmVxdWVzdCBvYmplY3QgZm9yIHRoaXMgZnJhbWUsCiAgICAg
ICAgLy8gdGhlIGxpc3QgZ2V0cyBjbGVhcmVkIHdoZW4gcmVtb3ZpbmcgYWxsIHRpbWVvdXRzLgog
ICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QgbV94aHJMaXN0ZW5lcnM7CgogICAgICAgIC8vIFRy
dWUgZm9yIDxhIGhyZWY9ImphdmFzY3JpcHQ6Zm9vKCkiPiBhbmQgZmFsc2UgZm9yIDxzY3JpcHQ+
Zm9vKCk8L3NjcmlwdD4uCiAgICAgICAgLy8gT25seSB2YWxpZCBkdXJpbmcgZXhlY3V0aW9uLgog
ICAgICAgIGJvb2wgbV9pbmxpbmVDb2RlOwoKICAgICAgICAvLyBUcnVlIHdoZW4gZXhlY3V0aW5n
IGZyb20gd2l0aGluIGEgdGltZXIgY2FsbGJhY2suIE9ubHkgdmFsaWQgZHVyaW5nCiAgICAgICAg
Ly8gZXhlY3V0aW9uLgogICAgICAgIGJvb2wgbV90aW1lckNhbGxiYWNrOwoKICAgICAgICAvLyBU
cmFjayB0aGUgcmVjdXJzaW9uIGRlcHRoIHRvIGJlIGFibGUgdG8gYXZvaWQgdG9vIGRlZXAgcmVj
dXJzaW9uLiBUaGUgVjgKICAgICAgICAvLyBlbmdpbmUgYWxsb3dzIG11Y2ggbW9yZSByZWN1cnNp
b24gdGhhbiBLSlMgZG9lcyBzbyB3ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QKICAgICAgICAvLyBl
eGNlc3NpdmUgcmVjdXJzaW9uIGluIHRoZSBiaW5kaW5nIGxheWVyLgogICAgICAgIGludCBtX3Jl
Y3Vyc2lvbjsKCiAgICAgICAgLy8gTGlzdCBvZiBleHRlbnNpb25zIHJlZ2lzdGVyZWQgd2l0aCB0
aGUgY29udGV4dC4KICAgICAgICBzdGF0aWMgVjhFeHRlbnNpb25MaXN0IG1fZXh0ZW5zaW9uczsK
ICAgIH07CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNb3ZlIHRvIFY4RE9NV3Jh
cHBlcgovLwogICAgdGVtcGxhdGUgPGludCB0YWcsIHR5cGVuYW1lIFQ+CiAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiAgICB7CiAgICAgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQogICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihWOFByb3h5OjpUeXBlRXJyb3IsICJET00gb2JqZWN0
IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKCiAgICAgICAg
Ly8gTm90ZTogaXQncyBPSyB0byBsZXQgdGhpcyBSZWZQdHIgZ28gb3V0IG9mIHNjb3BlIGJlY2F1
c2Ugd2UgYWxzbyBjYWxsCiAgICAgICAgLy8gU2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZlY3Rp
dmVseSBob2xkcyBhIHJlZmVyZW5jZSB0byBvYmouCiAgICAgICAgUmVmUHRyPFQ+IG9iaiA9IFQ6
OmNyZWF0ZSgpOwogICAgICAgIFY4UHJveHk6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
dGFnLCBvYmouZ2V0KCkpOwogICAgICAgIG9iai0+cmVmKCk7CiAgICAgICAgVjhQcm94eTo6c2V0
SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHRvVjgoUGFzc1JlZlB0cjxUPiBvYmplY3QsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob2xkZXIp
CiAgICB7CiAgICAgICAgb2JqZWN0LT5yZWYoKTsKICAgICAgICBWOFByb3h5OjpzZXRKU1dyYXBw
ZXJGb3JET01PYmplY3Qob2JqZWN0LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KGhvbGRlcikpOwogICAgICAgIHJldHVybiBob2xkZXI7CiAgICB9Ci8vCi8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBNb3Zl
IHRvIFY4VXRpbGl0aWVzCi8vCiAgICAvLyBVc2VkIGJ5IGFuIGludGVyY2VwdG9yIGNhbGxiYWNr
IHRoYXQgaXQgaGFzbid0IGZvdW5kIGFueXRoaW5nIHRvCiAgICAvLyBpbnRlcmNlcHQuCiAgICBp
bmxpbmUgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpCiAgICB7CiAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOwogICAgfQoK
ICAgIGlubGluZSBzdGF0aWMgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiBkZWxldGlvbk5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpCb29s
ZWFuPigpOwogICAgfQogICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlByaW1pdGl2ZT4gdGhyb3dF
cnJvcihjb25zdCBjaGFyKiBtZXNzYWdlLCBWOFByb3h5OjpFcnJvclR5cGUgdHlwZSA9IFY4UHJv
eHk6OlR5cGVFcnJvcikKICAgIHsKICAgICAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKHR5cGUsIG1l
c3NhZ2UpOwogICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICB9CgogICAgaW5saW5l
IHY4OjpIYW5kbGU8djg6OlByaW1pdGl2ZT4gdGhyb3dFcnJvcihFeGNlcHRpb25Db2RlIGVjKQog
ICAgewogICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKICAgIH0KCiAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6UHJpbWl0
aXZlPiB0aHJvd0Vycm9yKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGV4Y2VwdGlvbikKICAgIHsKICAg
ICAgICB2ODo6VGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogICAgfQovLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKfQoKI2Vu
ZGlmIC8vIFY4UHJveHlfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>