<?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>101859</bug_id>
          
          <creation_ts>2012-11-11 04:34:12 -0800</creation_ts>
          <short_desc>Use prefix form of increment / decrement operators in WTF String classes when possible</short_desc>
          <delta_ts>2012-11-13 17:28:20 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763816</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-11 04:34:12 -0800</bug_when>
    <thetext>The WTF String classes implementation uses the postfix form of increment / decrement operators in several places where it is not needed. We should prefer using the prefix increment / decrement operators when possible as it is according to WebKit coding style and inherently more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763832</commentid>
    <comment_count>1</comment_count>
      <attachid>173500</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-11 05:46:18 -0800</bug_when>
    <thetext>Created attachment 173500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763850</commentid>
    <comment_count>2</comment_count>
      <attachid>173500</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-11 09:23:17 -0800</bug_when>
    <thetext>Comment on attachment 173500
Patch

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

&gt; Source/WTF/ChangeLog:10
&gt; +        Use prefix form of increment / decrement operators whenever possible in
&gt; +        WTF String classes as this is according to WebKit coding style and
&gt; +        inherently more efficient.

Why? Postfix increment/decrement does not generate any additional code for primitive types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763854</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-11 09:42:34 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 173500 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173500&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:10
&gt; &gt; +        Use prefix form of increment / decrement operators whenever possible in
&gt; &gt; +        WTF String classes as this is according to WebKit coding style and
&gt; &gt; +        inherently more efficient.
&gt; 
&gt; Why? Postfix increment/decrement does not generate any additional code for primitive types.

Right, they are all primitive types so it would not affect performance. I&apos;ll remove the efficiency comment from the Changelog then.

I still think it is good practice to use prefix operators whenever possible and WebKit seemed to follow this rule in most places I have seen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763855</commentid>
    <comment_count>4</comment_count>
      <attachid>173509</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-11 09:49:35 -0800</bug_when>
    <thetext>Created attachment 173509
Patch

Remove the comment about efficiency from the Changelog since all changes relate to primitive types and it does not affect performance in this case as Kling rightfully mentioned.

Is it right that we have such coding convention in WebKit though?
This patch was basically a follow up to https://bugs.webkit.org/show_bug.cgi?id=101257#c22 : 
&quot;Typically ++i in WebKit style.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763917</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-11 16:12:36 -0800</bug_when>
    <thetext>In general, we try not to do pure coding style cleanup patches. Instead, we make sure that any new code follows the style guidelines, and when changing a line of code it&apos;s fine to update it to follow the guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764665</commentid>
    <comment_count>6</comment_count>
      <attachid>173509</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-12 12:28:19 -0800</bug_when>
    <thetext>Comment on attachment 173509
Patch

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

Consistency is good and we are already in a period of coding style patches :)

&gt; Source/WTF/wtf/text/StringImpl.cpp:1863
&gt; -    terminatedString-&gt;m_length--;
&gt; +    --terminatedString-&gt;m_length;

I&apos;d argue this one becomes harder to read with the change.
I would prefer with parenthesis or with the old form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764686</commentid>
    <comment_count>7</comment_count>
      <attachid>173692</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-12 12:43:26 -0800</bug_when>
    <thetext>Created attachment 173692
Patch for landing

Added parenthesis for &quot;--(terminatedString-&gt;m_length);&quot; to increase readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764697</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-12 12:51:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 173509 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173509&amp;action=review
&gt; 
&gt; Consistency is good and we are already in a period of coding style patches :)

We are? That&apos;s unfortunate since they pollute svn blame for no good reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766181</commentid>
    <comment_count>9</comment_count>
      <attachid>173692</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-13 16:49:55 -0800</bug_when>
    <thetext>Comment on attachment 173692
Patch for landing

Ok, let&apos;s go for it.
Rationale:
This code cleaning is nice. It unify the style with what is ultimately very few changes.
Blame is useless here anyway since most of that has be written before WTF was moved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766214</commentid>
    <comment_count>10</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-13 17:20:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Blame is useless here anyway since most of that has be written before WTF was moved.

Moving WTF out into a separate module did _not_ break svn blame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766216</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-11-13 17:26:11 -0800</bug_when>
    <thetext>(In reply to comment #10))
&gt; &gt; Blame is useless here anyway since most of that has be written before WTF was moved.
&gt; 
&gt; Moving WTF out into a separate module did _not_ break svn blame.

Oh, I did not know that. On GIT it certainly fucks things up, but it is very easy to live with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766218</commentid>
    <comment_count>12</comment_count>
      <attachid>173692</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 17:28:15 -0800</bug_when>
    <thetext>Comment on attachment 173692
Patch for landing

Clearing flags on attachment: 173692

Committed r134514: &lt;http://trac.webkit.org/changeset/134514&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766219</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 17:28:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173500</attachid>
            <date>2012-11-11 05:46:18 -0800</date>
            <delta_ts>2012-11-11 09:49:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101859_wtf_prefix_increment.patch</filename>
            <type>text/plain</type>
            <size>19194</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYWYzY2U3OC4uMDczYTY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0xMS0xMSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFVzZSBwcmVmaXggZm9ybSBvZiBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgb3BlcmF0b3JzIGluIFdU
RiBTdHJpbmcgY2xhc3NlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgcHJlZml4IGZvcm0gb2YgaW5jcmVtZW50IC8gZGVj
cmVtZW50IG9wZXJhdG9ycyB3aGVuZXZlciBwb3NzaWJsZSBpbgorICAgICAgICBXVEYgU3RyaW5n
IGNsYXNzZXMgYXMgdGhpcyBpcyBhY2NvcmRpbmcgdG8gV2ViS2l0IGNvZGluZyBzdHlsZSBhbmQK
KyAgICAgICAgaW5oZXJlbnRseSBtb3JlIGVmZmljaWVudC4KKworICAgICAgICAqIHd0Zi90ZXh0
L0FTQ0lJRmFzdFBhdGguaDoKKyAgICAgICAgKFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNvdXJj
ZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nOjphZGQpOgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAg
ICAgIChXVEY6OmJhc2U2NEVuY29kZSk6CisgICAgICAgIChXVEY6OmJhc2U2NERlY29kZUludGVy
bmFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdU
Rjo6U3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQpOgorICAgICAgICAqIHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dDYXNlKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXBjb252ZXJ0Q2hhcmFjdGVycyk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpsb3dlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnVwcGVyKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Zm9sZENhc2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
cmVtb3ZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0
Y2hlZENoYXJhY3RlcnNUb1NwYWNlKToKKyAgICAgICAgKFdURjo6cmV2ZXJzZUZpbmRJbm5lcik6
CisgICAgICAgIChXVEY6OnJldmVyc2VGaW5kSWdub3JpbmdDYXNlSW5uZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3Jl
YXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik6CisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpjb2RlUG9pbnRDb21wYXJlKToKKyAgICAgICAgKiB3
dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6Cisg
ICAgICAgIChXVEY6OnRvSW50ZWdyYWxUeXBlKToKKwogMjAxMi0xMS0wOSAgQWxleGVpIEZpbGlw
cG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRml4IGhl
YXAgc25hcHNob3RzIGNvdW50ZWQgc2V2ZXJhbCB0aW1lcyBieSBOTUkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9B
U0NJSUZhc3RQYXRoLmgKaW5kZXggZmVmODkyYS4uMDIzM2VmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9B
U0NJSUZhc3RQYXRoLmgKQEAgLTExNyw3ICsxMTcsNyBAQCBpbmxpbmUgdm9pZCBjb3B5TENoYXJz
RnJvbVVDaGFyU291cmNlKExDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNoYXIqIHNvdXJjZSwg
cwogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRMZW5ndGggPSBsZW5ndGggLSB1Y2hhcnNQZXJM
b29wICsgMTsKICAgICAgICAgZm9yICg7IGkgPCBlbmRMZW5ndGg7IGkgKz0gdWNoYXJzUGVyTG9v
cCkgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hlY2tJbmRl
eCA9IDA7IGNoZWNrSW5kZXggPCB1Y2hhcnNQZXJMb29wOyBjaGVja0luZGV4KyspCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoZWNrSW5kZXggPSAwOyBjaGVja0luZGV4IDwgdWNoYXJzUGVy
TG9vcDsgKytjaGVja0luZGV4KQogICAgICAgICAgICAgICAgIEFTU0VSVCghKHNvdXJjZVtpK2No
ZWNrSW5kZXhdICYgMHhmZjAwKSk7CiAjZW5kaWYKICAgICAgICAgICAgIF9fbTEyOGkgZmlyc3Q4
VUNoYXJzID0gX21tX2xvYWRfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4o
JnNvdXJjZVtpXSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IGRlMjFi
OGIuLjg3MzJlYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKQEAgLTI2Nyw3
ICsyNjcsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKGNvbnN0
IFVDaGFyKiBzKQogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICB3aGlsZSAoc1tsZW5n
dGhdICE9IFVDaGFyKDApKQotICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgKytsZW5ndGg7CiAK
ICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0Jhc2U2NC5jcHAKaW5kZXggZmFmYTNmYS4uN2EwNDY3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFz
ZTY0LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kCiAgICAg
Ly8gQWRkIHBhZGRpbmcKICAgICB3aGlsZSAoZGlkeCA8IG91dC5zaXplKCkpIHsKICAgICAgICAg
b3V0W2RpZHhdID0gJz0nOwotICAgICAgICBkaWR4Kys7CisgICAgICAgICsrZGlkeDsKICAgICB9
CiB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmFzZTY0RGVjb2Rl
SW50ZXJuYWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hhcgogCiAgICAg
Ym9vbCBzYXdFcXVhbHNTaWduID0gZmFsc2U7CiAgICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKKyAgICBmb3Ig
KHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbjsgKytpZHgpIHsKICAgICAgICAgdW5zaWduZWQg
Y2ggPSBkYXRhW2lkeF07CiAgICAgICAgIGlmIChjaCA9PSAnPScpCiAgICAgICAgICAgICBzYXdF
cXVhbHNTaWduID0gdHJ1ZTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
YmFzZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8
Y2hhcgogICAgICAgICAgICAgaWYgKHNhd0VxdWFsc1NpZ24pCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgb3V0W291dExlbmd0aF0gPSBiYXNlNjREZWNNYXBbY2hd
OwotICAgICAgICAgICAgb3V0TGVuZ3RoKys7CisgICAgICAgICAgICArK291dExlbmd0aDsKICAg
ICAgICAgfSBlbHNlIGlmIChwb2xpY3kgPT0gQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3RlciB8
fCAocG9saWN5ID09IEJhc2U2NElnbm9yZVdoaXRlc3BhY2UgJiYgIWlzU3BhY2VPck5ld2xpbmUo
Y2gpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmNwcAppbmRleCBjODJlZDJlLi5hMTQzZDBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFN0cmluZ0J1aWxk
ZXI6OmFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVy
cywgdW5zaQogICAgIEFTU0VSVChtX2lzOEJpdCk7CiAgICAgLy8gQ29weSB0aGUgZXhpc3Rpbmcg
ZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9m
IHRoZSBleGlzdGluZyBkYXRhLgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJh
Y3RlcnMxNik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBpKyspCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCiAgICAgICAgIG1fYnVm
ZmVyQ2hhcmFjdGVyczE2W2ldID0gY3VycmVudENoYXJhY3RlcnNbaV07CiAgICAgCiAgICAgbV9p
czhCaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAppbmRl
eCA0NzllZDhjLi45YjFlYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc2l6ZV90IGxl
biA9IDA7CiAgICAgICAgIHdoaWxlIChtX2J1ZmZlcltsZW5dICE9IFVDaGFyKDApKQotICAgICAg
ICAgICAgbGVuKys7CisgICAgICAgICAgICArK2xlbjsKIAogICAgICAgICBpZiAobGVuID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgQ1JBU0goKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDJmZjNiNWZiLi5iMTY4Zjk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTMwNCw3ICszMDQsNyBAQCBjb25zdCBVQ2hh
ciogU3RyaW5nSW1wbDo6Z2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdAogICAgIAogICAgIHVuc2ln
bmVkIGxlbiA9IGxlbmd0aCgpOwogICAgIGlmIChoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIo
KSkKLSAgICAgICAgbGVuKys7CisgICAgICAgICsrbGVuOwogCiAgICAgbV9jb3B5RGF0YTE2ID0g
c3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKGxlbiAqIHNpemVvZihVQ2hhcikpKTsKIApA
QCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgU3RyaW5nSW1wbDo6dXBjb252ZXJ0Q2hhcmFjdGVycyh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAogICAgIEFTU0VSVChpczhCaXQoKSk7
CiAgICAgQVNTRVJUKGhhczE2Qml0U2hhZG93KCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IHN0
YXJ0OyBpIDwgZW5kOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0OyBpIDwgZW5kOyAr
K2kpCiAgICAgICAgIG1fY29weURhdGExNltpXSA9IG1fZGF0YThbaV07CiB9CiAgICAgCkBAIC0z
MzEsNyArMzMxLDcgQEAgYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkK
ICAgICAvLyB0aGF0IGFyZSBub3Qgd2hpdGVzcGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9m
IFJlbmRlclRleHQ7IEkgd29uZGVyIGlmCiAgICAgLy8gdGhhdCdzIGEgcHJvYmxlbSBpbiBwcmFj
dGljZS4KICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGE4W2ldOwogICAgICAg
ICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVz
cGFjZSgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwogICAgICAg
ICBpZiAoIWlzQVNDSUlTcGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4
NSw3ICszODUsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKCkK
ICAgICBVQ2hhciBvcmVkID0gMDsKICAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgY29uc3Qg
TENoYXIqIGVuZCA9IG1fZGF0YTggKyBtX2xlbmd0aDsKLSAgICAgICAgZm9yIChjb25zdCBMQ2hh
ciogY2hwID0gbV9kYXRhODsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAgICAgICAgZm9yIChjb25z
dCBMQ2hhciogY2hwID0gbV9kYXRhODsgY2hwICE9IGVuZDsgKytjaHApIHsKICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoKmNocCkpKQogICAgICAgICAgICAgICAgIG5vVXBw
ZXIgPSBmYWxzZTsKICAgICAgICAgICAgIG9yZWQgfD0gKmNocDsKQEAgLTQwMiwyMSArNDAyLDIx
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBk
YXRhOCk7CiAKICAgICAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkgewotICAgICAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBmb3IgKGludDMy
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRv
QVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKIAogICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVs
ZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRp
b24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgTGF0aW4tMSBjaGFyYWN0ZXJzLgot
ICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBkYXRhOFtpXSA9
IHN0YXRpY19jYXN0PExDaGFyPihVbmljb2RlOjp0b0xvd2VyKG1fZGF0YThbaV0pKTsKIAogICAg
ICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgY29uc3QgVUNoYXIg
KmVuZCA9IG1fZGF0YTE2ICsgbV9sZW5ndGg7Ci0gICAgZm9yIChjb25zdCBVQ2hhciogY2hwID0g
bV9kYXRhMTY7IGNocCAhPSBlbmQ7IGNocCsrKSB7CisgICAgZm9yIChjb25zdCBVQ2hhciogY2hw
ID0gbV9kYXRhMTY7IGNocCAhPSBlbmQ7ICsrY2hwKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShp
c0FTQ0lJVXBwZXIoKmNocCkpKQogICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOwogICAgICAg
ICBvcmVkIHw9ICpjaHA7CkBAIC00MzMsNyArNDMzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpsb3dlcigpCiAgICAgICAgIFVDaGFyKiBkYXRhMTY7CiAgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YTE2KTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgICAgICBkYXRhMTZb
aV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgICAgIH0KQEAgLTQ3Miw3ICs0NzIsNyBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKICAgICAgICAgCiAgICAgICAg
IC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVy
cyBhcmUgQVNDSUkuCiAgICAgICAgIExDaGFyIG9yZWQgPSAwOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwogICAgICAgICAg
ICAgb3JlZCB8PSBjOwogICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7CkBA
IC00ODYsMTAgKzQ4NiwxMCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVw
cGVyKCkKICAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBzcGVjaWFsIGNhc2VzLgogICAgICAgICAv
LyAgMS4gbGF0aW4tMSBjaGFyYWN0ZXJzIHdoZW4gY29udmVydGVkIHRvIHVwcGVyIGNhc2UgYXJl
IDE2IGJpdCBjaGFyYWN0ZXJzLgogICAgICAgICAvLyAgMi4gTG93ZXIgY2FzZSBzaGFycC1TIGNv
bnZlcnRzIHRvICJTUyIgKHR3byBjaGFyYWN0ZXJzKQotICAgICAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CiAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoYyA9PSBzbWFsbExldHRlclNoYXJwUykpCi0gICAgICAgICAgICAg
ICAgbnVtYmVyU2hhcnBTQ2hhcmFjdGVycysrOworICAgICAgICAgICAgICAgICsrbnVtYmVyU2hh
cnBTQ2hhcmFjdGVyczsKICAgICAgICAgICAgIFVDaGFyIHVwcGVyID0gVW5pY29kZTo6dG9VcHBl
cihjKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh1cHBlciA+IDB4ZmYpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gU2luY2UgdGhpcyB1cHBlci1jYXNlZCBjaGFyYWN0ZXIgZG9lcyBub3QgZml0
IGluIGFuIDgtYml0IHN0cmluZywgd2UgbmVlZCB0byB0YWtlIHRoZSAxNi1iaXQgcGF0aC4KQEAg
LTUwNiw3ICs1MDYsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVy
KCkKIAogICAgICAgICBMQ2hhciogZGVzdCA9IGRhdGE4OwogCi0gICAgICAgIGZvciAoaW50MzJf
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKICAg
ICAgICAgICAgIGlmIChjID09IHNtYWxsTGV0dGVyU2hhcnBTKSB7CiAgICAgICAgICAgICAgICAg
KmRlc3QrKyA9ICdTJzsKQEAgLTUyNiw3ICs1MjYsNyBAQCB1cGNvbnZlcnQ6CiAgICAgCiAgICAg
Ly8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJz
IGFyZSBBU0NJSS4KICAgICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBVQ2hhciBjID0gc291cmNlMTZbaV07CiAgICAgICAgIG9yZWQgfD0gYzsKICAgICAg
ICAgZGF0YTE2W2ldID0gdG9BU0NJSVVwcGVyKGMpOwpAQCAtNTc4LDcgKzU3OCw3IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogICAgICAgICBSZWZQdHIg
PFN0cmluZ0ltcGw+bmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEp
OwogICAgICAgICBMQ2hhciBvcmVkID0gMDsKIAotICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CiAgICAgICAgICAg
ICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICAgICAgb3JlZCB8PSBjOwpAQCAt
NTg4LDcgKzU4OCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENh
c2UoKQogICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogCiAgICAgICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIExhdGluLTEgY2hhcmFjdGVycy4KLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQogICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PExDaGFyPihVbmljb2RlOjp0b0xv
d2VyKG1fZGF0YThbaV0pKTsKIAogICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CkBA
IC01OTgsNyArNTk4LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpmb2xk
Q2FzZSgpCiAgICAgVUNoYXIqIGRhdGE7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBvcmVkID0g
MDsKLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBtX2Rh
dGExNltpXTsKICAgICAgICAgb3JlZCB8PSBjOwogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxv
d2VyKGMpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMoVUNoYXJQcmVkaWNhdGUKICAgICAK
ICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20gc3RhcnQKICAgICB3aGlsZSAoc3RhcnQgPD0g
ZW5kICYmIHByZWRpY2F0ZShpczhCaXQoKSA/IG1fZGF0YThbc3RhcnRdIDogbV9kYXRhMTZbc3Rh
cnRdKSkKLSAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgKytzdGFydDsKICAgICAKICAgICAvLyBv
bmx5IHdoaXRlIHNwYWNlCiAgICAgaWYgKHN0YXJ0ID4gZW5kKSAKQEAgLTYzNyw3ICs2MzcsNyBA
QCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdHJpcE1hdGNoZWRD
aGFyYWN0ZXJzKFVDaGFyUHJlZGljYXRlCiAKICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20g
ZW5kCiAgICAgd2hpbGUgKGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W2VuZF0g
OiBtX2RhdGExNltlbmRdKSkKLSAgICAgICAgZW5kLS07CisgICAgICAgIC0tZW5kOwogCiAgICAg
aWYgKCFzdGFydCAmJiBlbmQgPT0gbV9sZW5ndGggLSAxKQogICAgICAgICByZXR1cm4gdGhpczsK
QEAgLTY4NSw3ICs2ODUsNyBAQCBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZQogICAgIAogICAgIC8v
IEFzc3VtZSB0aGUgY29tbW9uIGNhc2Ugd2lsbCBub3QgcmVtb3ZlIGFueSBjaGFyYWN0ZXJzCiAg
ICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhZmluZE1hdGNoKCpmcm9tKSkKLSAgICAgICAg
ZnJvbSsrOworICAgICAgICArK2Zyb207CiAgICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgCkBAIC02OTgsNyArNjk4LDcgQEAgQUxXQVlTX0lOTElORSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoY29uc3Qg
Q2hhclR5cGUKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZy
b21lbmQgJiYgZmluZE1hdGNoKCpmcm9tKSkKLSAgICAgICAgICAgIGZyb20rKzsKKyAgICAgICAg
ICAgICsrZnJvbTsKICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhZmluZE1hdGNo
KCpmcm9tKSkKICAgICAgICAgICAgIHRvW291dGMrK10gPSAqZnJvbSsrOwogICAgICAgICBpZiAo
ZnJvbSA9PSBmcm9tZW5kKQpAQCAtNzMzLDcgKzczMyw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVD
aGFyCiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgcHJlZGljYXRlKCpmcm9tKSkg
ewogICAgICAgICAgICAgaWYgKCpmcm9tICE9ICcgJykKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
VG9TcGFjZSA9IHRydWU7Ci0gICAgICAgICAgICBmcm9tKys7CisgICAgICAgICAgICArK2Zyb207
CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhcHJlZGljYXRl
KCpmcm9tKSkKICAgICAgICAgICAgIHRvW291dGMrK10gPSAqZnJvbSsrOwpAQCAtNzQ0LDcgKzc0
NCw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5
TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyCiAgICAgfQogICAgIAogICAgIGlmIChvdXRj
ID4gMCAmJiB0b1tvdXRjIC0gMV0gPT0gJyAnKQotICAgICAgICBvdXRjLS07CisgICAgICAgIC0t
b3V0YzsKICAgICAKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG91dGMpID09IG1fbGVu
Z3RoICYmICFjaGFuZ2VkVG9TcGFjZSkKICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0xMTM2LDcg
KzExMzYsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJbm5lcihj
b25zdCBTZWFyY2hDaGFyYWN0ZXJUeXBlKiBzZWFyY2hDaAogICAgIHdoaWxlIChzZWFyY2hIYXNo
ICE9IG1hdGNoSGFzaCB8fCAhZXF1YWwoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENo
YXJhY3RlcnMsIG1hdGNoTGVuZ3RoKSkgewogICAgICAgICBpZiAoIWRlbHRhKQogICAgICAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOwotICAgICAgICBkZWx0YS0tOworICAgICAgICAtLWRlbHRhOwog
ICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEgKyBtYXRjaExlbmd0
aF07CiAgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YV07CiAgICAg
fQpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVy
c2VGaW5kSWdub3JpbmdDYXNlSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHkKICAgICB3aGls
ZSAoIWVxdWFsSWdub3JpbmdDYXNlKHNlYXJjaENoYXJhY3RlcnMgKyBkZWx0YSwgbWF0Y2hDaGFy
YWN0ZXJzLCBtYXRjaExlbmd0aCkpIHsKICAgICAgICAgaWYgKCFkZWx0YSkKICAgICAgICAgICAg
IHJldHVybiBub3RGb3VuZDsKLSAgICAgICAgZGVsdGEtLTsKKyAgICAgICAgLS1kZWx0YTsKICAg
ICB9CiAgICAgcmV0dXJuIGRlbHRhOwogfQpAQCAtMTM1NywxOSArMTM1NywxOSBAQCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UodW5zaWduZWQgcG9zaXRpb24sIHVu
c2lnbmVkIGxlbmd0aFRvUgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KICAgICAg
ICAgY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0
aFRvSW5zZXJ0LCBkYXRhKTsKICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwb3NpdGlvbjsgaSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcG9zaXRpb247ICsraSkKICAgICAgICAgICAgIGRhdGFbaV0gPSBtX2RhdGE4W2ldOwog
ICAgIGVsc2UKICAgICAgICAgbWVtY3B5KGRhdGEsIG1fZGF0YTE2LCBwb3NpdGlvbiAqIHNpemVv
ZihVQ2hhcikpOwogICAgIGlmIChzdHIpIHsKICAgICAgICAgaWYgKHN0ci0+aXM4Qml0KCkpCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoVG9JbnNlcnQ7IGkrKykK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGhUb0luc2VydDsgKytp
KQogICAgICAgICAgICAgICAgIGRhdGFbaSArIHBvc2l0aW9uXSA9IHN0ci0+bV9kYXRhOFtpXTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5t
X2RhdGExNiwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAgICAgaWYg
KGlzOEJpdCgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKSAt
IHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyArK2kpCiAg
ICAgICAgICAgICBkYXRhW2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0XSA9IG1fZGF0YThb
aSArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlXTsKICAgICB9IGVsc2UgewogICAgICAgICBt
ZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBv
c2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlLApAQCAtMTYxOSw3ICsxNjE5LDcgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0
cmluZ0ltcGwqIHJlcGwKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIGlmIChzcmNJczhCaXQpIHsKICAgICAgICAgICAg
IC8vIENhc2UgMy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdt
ZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Jj
U2VnbWVudExlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0g
PSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gQ2FzZSAyICYgNC4KQEAgLTE2MjgsNyArMTYyOCw3IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJ
bXBsKiByZXBsCiAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwogICAgICAg
ICBpZiAocmVwbGFjZW1lbnRJczhCaXQpIHsKICAgICAgICAgICAgIC8vIENhc2VzIDIgJiAzLgot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgKytpKQog
ICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNlbWVudC0+bV9kYXRh
OFtpXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENhc2UgNApAQCAtMTY0MSw3
ICsxNjQxLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0
cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwKICAgICBzcmNTZWdtZW50TGVuZ3Ro
ID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgaWYgKHNyY0lzOEJpdCkgewogICAg
ICAgICAvLyBDYXNlIDMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdt
ZW50TGVuZ3RoOyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdt
ZW50TGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRh
OFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDYXNlcyAy
ICYgNC4KQEAgLTE4NjAsNyArMTg2MCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpCiAgICAg
ICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhMTYsIGxlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwogICAgICAgICBkYXRhW2xlbmd0aF0gPSAwOwogICAgIH0KLSAgICB0ZXJtaW5hdGVkU3RyaW5n
LT5tX2xlbmd0aC0tOworICAgIC0tdGVybWluYXRlZFN0cmluZy0+bV9sZW5ndGg7CiAgICAgdGVy
bWluYXRlZFN0cmluZy0+bV9oYXNoQW5kRmxhZ3MgPSAoc3RyaW5nLm1faGFzaEFuZEZsYWdzICYg
KH5zX2ZsYWdNYXNrIHwgc19oYXNoRmxhZzhCaXRCdWZmZXIpKSB8IHNfaGFzaEZsYWdIYXNUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXI7CiAgICAgcmV0dXJuIHRlcm1pbmF0ZWRTdHJpbmcucmVsZWFz
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCA1MzEwNGY4Li4yODYxOTQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMTA2OCw5ICsxMDY4LDkgQEAgc3RhdGljIGlu
bGluZSBpbnQgY29kZVBvaW50Q29tcGFyZSh1bnNpZ25lZCBsMSwgdW5zaWduZWQgbDIsIGNvbnN0
IENoYXJhY3RlclR5cGUKICAgICBjb25zdCB1bnNpZ25lZCBsbWluID0gbDEgPCBsMiA/IGwxIDog
bDI7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKICAgICB3aGlsZSAocG9zIDwgbG1pbiAmJiAqYzEg
PT0gKmMyKSB7Ci0gICAgICAgIGMxKys7Ci0gICAgICAgIGMyKys7Ci0gICAgICAgIHBvcysrOwor
ICAgICAgICArK2MxOworICAgICAgICArK2MyOworICAgICAgICArK3BvczsKICAgICB9CiAKICAg
ICBpZiAocG9zIDwgbG1pbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCBlMTAyODJk
Li40M2M0NmVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtNTYsNyArNTYsNyBA
QCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3RyKQogICAgICAgICAKICAgICBzaXplX3Qg
bGVuID0gMDsKICAgICB3aGlsZSAoc3RyW2xlbl0gIT0gVUNoYXIoMCkpCi0gICAgICAgIGxlbisr
OworICAgICAgICArK2xlbjsKIAogICAgIGlmIChsZW4gPiBudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQogICAgICAgICBDUkFTSCgpOwpAQCAtOTEzLDI0ICs5MTMsMjQgQEAgc3RhdGlj
IGlubGluZSBJbnRlZ3JhbFR5cGUgdG9JbnRlZ3JhbFR5cGUoY29uc3QgQ2hhclR5cGUqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIGIKIAogICAgIC8vIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNlCiAgICAg
d2hpbGUgKGxlbmd0aCAmJiBpc1NwYWNlT3JOZXdsaW5lKCpkYXRhKSkgewotICAgICAgICBsZW5n
dGgtLTsKLSAgICAgICAgZGF0YSsrOworICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgKytkYXRh
OwogICAgIH0KIAogICAgIGlmIChpc1NpZ25lZCAmJiBsZW5ndGggJiYgKmRhdGEgPT0gJy0nKSB7
Ci0gICAgICAgIGxlbmd0aC0tOwotICAgICAgICBkYXRhKys7CisgICAgICAgIC0tbGVuZ3RoOwor
ICAgICAgICArK2RhdGE7CiAgICAgICAgIGlzTmVnYXRpdmUgPSB0cnVlOwogICAgIH0gZWxzZSBp
ZiAobGVuZ3RoICYmICpkYXRhID09ICcrJykgewotICAgICAgICBsZW5ndGgtLTsKLSAgICAgICAg
ZGF0YSsrOworICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgKytkYXRhOwogICAgIH0KIAogICAg
IGlmICghbGVuZ3RoIHx8ICFpc0NoYXJhY3RlckFsbG93ZWRJbkJhc2UoKmRhdGEsIGJhc2UpKQog
ICAgICAgICBnb3RvIGJ5ZTsKIAogICAgIHdoaWxlIChsZW5ndGggJiYgaXNDaGFyYWN0ZXJBbGxv
d2VkSW5CYXNlKCpkYXRhLCBiYXNlKSkgewotICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgLS1s
ZW5ndGg7CiAgICAgICAgIEludGVncmFsVHlwZSBkaWdpdFZhbHVlOwogICAgICAgICBDaGFyVHlw
ZSBjID0gKmRhdGE7CiAgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQoYykpCkBAIC05NDQsNyArOTQ0
LDcgQEAgc3RhdGljIGlubGluZSBJbnRlZ3JhbFR5cGUgdG9JbnRlZ3JhbFR5cGUoY29uc3QgQ2hh
clR5cGUqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGIKICAgICAgICAgICAgIGdvdG8gYnllOwogCiAg
ICAgICAgIHZhbHVlID0gYmFzZSAqIHZhbHVlICsgZGlnaXRWYWx1ZTsKLSAgICAgICAgZGF0YSsr
OworICAgICAgICArK2RhdGE7CiAgICAgfQogCiAjaWYgQ09NUElMRVIoTVNWQykKQEAgLTk2MSw4
ICs5NjEsOCBAQCBzdGF0aWMgaW5saW5lIEludGVncmFsVHlwZSB0b0ludGVncmFsVHlwZShjb25z
dCBDaGFyVHlwZSogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYgogCiAgICAgLy8gc2tpcCB0cmFpbGlu
ZyBzcGFjZQogICAgIHdoaWxlIChsZW5ndGggJiYgaXNTcGFjZU9yTmV3bGluZSgqZGF0YSkpIHsK
LSAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgIGRhdGErKzsKKyAgICAgICAgLS1sZW5ndGg7Cisg
ICAgICAgICsrZGF0YTsKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173509</attachid>
            <date>2012-11-11 09:49:35 -0800</date>
            <delta_ts>2012-11-12 12:43:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>101859_wtf_prefix_increment.patch</filename>
            <type>text/plain</type>
            <size>19156</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYWYzY2U3OC4uYjE5ZjNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMi0xMS0xMSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFVzZSBwcmVmaXggZm9ybSBvZiBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgb3BlcmF0b3JzIGluIFdU
RiBTdHJpbmcgY2xhc3NlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgcHJlZml4IGZvcm0gb2YgaW5jcmVtZW50IC8gZGVj
cmVtZW50IG9wZXJhdG9ycyB3aGVuZXZlciBwb3NzaWJsZSBpbgorICAgICAgICBXVEYgU3RyaW5n
IGNsYXNzZXMgYXMgdGhpcyBzZWVtcyB0byBiZSB0aGUgY29udmVudGlvbiBpbiBXZWJLaXQuCisK
KyAgICAgICAgKiB3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg6CisgICAgICAgIChXVEY6OmNvcHlM
Q2hhcnNGcm9tVUNoYXJTb3VyY2UpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5j
cHA6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAgICAgKiB3dGYvdGV4
dC9CYXNlNjQuY3BwOgorICAgICAgICAoV1RGOjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoV1RG
OjpiYXNlNjREZWNvZGVJbnRlcm5hbCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyVXBDb252
ZXJ0KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAq
IHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXRE
YXRhMTZTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnVwY29udmVydENoYXJh
Y3RlcnMpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNl
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6bG93ZXIpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp1cHBlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZvbGRDYXNlKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6c3RyaXBNYXRjaGVkQ2hhcmFjdGVycyk6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZSk6CisgICAgICAgIChXVEY6
OnJldmVyc2VGaW5kSW5uZXIpOgorICAgICAgICAoV1RGOjpyZXZlcnNlRmluZElnbm9yaW5nQ2Fz
ZUlubmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6Y29kZVBvaW50Q29t
cGFyZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV1RGOjp0b0ludGVncmFsVHlwZSk6CisKIDIwMTIt
MTEtMDkgIEFsZXhlaSBGaWxpcHBvdiAgPGFscGhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEZpeCBoZWFwIHNuYXBzaG90cyBjb3VudGVkIHNldmVyYWwgdGltZXMgYnkg
Tk1JCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCmluZGV4IGZlZjg5MmEuLjAyMzNlZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCkBAIC0xMTcsNyArMTE3LDcgQEAgaW5s
aW5lIHZvaWQgY29weUxDaGFyc0Zyb21VQ2hhclNvdXJjZShMQ2hhciogZGVzdGluYXRpb24sIGNv
bnN0IFVDaGFyKiBzb3VyY2UsIHMKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kTGVuZ3RoID0g
bGVuZ3RoIC0gdWNoYXJzUGVyTG9vcCArIDE7CiAgICAgICAgIGZvciAoOyBpIDwgZW5kTGVuZ3Ro
OyBpICs9IHVjaGFyc1Blckxvb3ApIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoZWNrSW5kZXggPSAwOyBjaGVja0luZGV4IDwgdWNoYXJzUGVyTG9vcDsgY2hl
Y2tJbmRleCsrKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGVja0luZGV4ID0gMDsgY2hl
Y2tJbmRleCA8IHVjaGFyc1Blckxvb3A7ICsrY2hlY2tJbmRleCkKICAgICAgICAgICAgICAgICBB
U1NFUlQoIShzb3VyY2VbaStjaGVja0luZGV4XSAmIDB4ZmYwMCkpOwogI2VuZGlmCiAgICAgICAg
ICAgICBfX20xMjhpIGZpcnN0OFVDaGFycyA9IF9tbV9sb2FkX3NpMTI4KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbaV0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nLmNwcAppbmRleCBkZTIxYjhiLi44NzMyZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuY3BwCkBAIC0yNjcsNyArMjY3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9t
aWNTdHJpbmc6OmFkZChjb25zdCBVQ2hhciogcykKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CiAgICAgd2hpbGUgKHNbbGVuZ3RoXSAhPSBVQ2hhcigwKSkKLSAgICAgICAgbGVuZ3RoKys7Cisg
ICAgICAgICsrbGVuZ3RoOwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBTdHJp
bmdJbXBsOjplbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCmluZGV4IGZhZmEzZmEuLjdhMDQ2
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIGJhc2U2
NEVuY29kZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0
LCBCYXNlNjRFbmNvZAogICAgIC8vIEFkZCBwYWRkaW5nCiAgICAgd2hpbGUgKGRpZHggPCBvdXQu
c2l6ZSgpKSB7CiAgICAgICAgIG91dFtkaWR4XSA9ICc9JzsKLSAgICAgICAgZGlkeCsrOworICAg
ICAgICArK2RpZHg7CiAgICAgfQogfQogCkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbiwg
VmVjdG9yPGNoYXIKIAogICAgIGJvb2wgc2F3RXF1YWxzU2lnbiA9IGZhbHNlOwogICAgIHVuc2ln
bmVkIG91dExlbmd0aCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBsZW47
IGlkeCsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBsZW47ICsraWR4KSB7
CiAgICAgICAgIHVuc2lnbmVkIGNoID0gZGF0YVtpZHhdOwogICAgICAgICBpZiAoY2ggPT0gJz0n
KQogICAgICAgICAgICAgc2F3RXF1YWxzU2lnbiA9IHRydWU7CkBAIC0xNTgsNyArMTU4LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVu
c2lnbmVkIGxlbiwgVmVjdG9yPGNoYXIKICAgICAgICAgICAgIGlmIChzYXdFcXVhbHNTaWduKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG91dFtvdXRMZW5ndGhd
ID0gYmFzZTY0RGVjTWFwW2NoXTsKLSAgICAgICAgICAgIG91dExlbmd0aCsrOworICAgICAgICAg
ICAgKytvdXRMZW5ndGg7CiAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5ID09IEJhc2U2NEZhaWxP
bkludmFsaWRDaGFyYWN0ZXIgfHwgKHBvbGljeSA9PSBCYXNlNjRJZ25vcmVXaGl0ZXNwYWNlICYm
ICFpc1NwYWNlT3JOZXdsaW5lKGNoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggYzgyZWQyZS4uYTE0M2Qw
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0xMjQsNyArMTI0LDcg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChjb25zdCBMQ2hh
ciogY3VycmVudENoYXJhY3RlcnMsIHVuc2kKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAgIC8v
IENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8g
cG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExl
bmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xlbmd0aDsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsg
KytpKQogICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRDaGFyYWN0ZXJz
W2ldOwogICAgIAogICAgIG1faXM4Qml0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmgKaW5kZXggNDc5ZWQ4Yy4uOWIxZWM1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtMTgxLDcgKzE4MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHNpemVfdCBsZW4gPSAwOwogICAgICAgICB3aGlsZSAobV9idWZmZXJbbGVuXSAh
PSBVQ2hhcigwKSkKLSAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgKytsZW47CiAKICAg
ICAgICAgaWYgKGxlbiA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgICAgIENSQVNIKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCAyZmYz
YjVmYi4uYjE2OGY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zMDQsNyAr
MzA0LDcgQEAgY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dDYXNlKCkgY29u
c3QKICAgICAKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBpZiAoaGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKCkpCi0gICAgICAgIGxlbisrOworICAgICAgICArK2xlbjsKIAog
ICAgIG1fY29weURhdGExNiA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhsZW4gKiBz
aXplb2YoVUNoYXIpKSk7CiAKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIFN0cmluZ0ltcGw6OnVw
Y29udmVydENoYXJhY3RlcnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKICAg
ICBBU1NFUlQoaXM4Qml0KCkpOwogICAgIEFTU0VSVChoYXMxNkJpdFNoYWRvdygpKTsKIAotICAg
IGZvciAoc2l6ZV90IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorICAgIGZvciAoc2l6ZV90IGkg
PSBzdGFydDsgaSA8IGVuZDsgKytpKQogICAgICAgICBtX2NvcHlEYXRhMTZbaV0gPSBtX2RhdGE4
W2ldOwogfQogICAgIApAQCAtMzMxLDcgKzMzMSw3IEBAIGJvb2wgU3RyaW5nSW1wbDo6Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpCiAgICAgLy8gdGhhdCBhcmUgbm90IHdoaXRlc3BhY2UgZnJvbSB0
aGUgcG9pbnQgb2YgdmlldyBvZiBSZW5kZXJUZXh0OyBJIHdvbmRlciBpZgogICAgIC8vIHRoYXQn
cyBhIHByb2JsZW0gaW4gcHJhY3RpY2UuCiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBVQ2hhciBjID0g
bV9kYXRhOFtpXTsKICAgICAgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGMpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MCw3ICszNDAsNyBAQCBib29sIFN0cmluZ0ltcGw6
OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykgeworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBt
X2RhdGExNltpXTsKICAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zODUsNyArMzg1LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpsb3dlcigpCiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgaWYgKGlzOEJpdCgp
KSB7CiAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBtX2RhdGE4ICsgbV9sZW5ndGg7Ci0gICAg
ICAgIGZvciAoY29uc3QgTENoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7IGNocCsrKSB7
CisgICAgICAgIGZvciAoY29uc3QgTENoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7ICsr
Y2hwKSB7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKCpjaHApKSkKICAg
ICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CiAgICAgICAgICAgICBvcmVkIHw9ICpjaHA7
CkBAIC00MDIsMjEgKzQwMiwyMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
Omxvd2VyKCkKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgZGF0YTgpOwogCiAgICAgICAgIGlmICghKG9yZWQgJiB+MHg3Rikp
IHsKLSAgICAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAg
ICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIobV9kYXRhOFtpXSk7CiAKICAgICAgICAgICAg
IHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERvIGEg
c2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExh
dGluLTEgY2hhcmFjdGVycy4KLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAg
ICAgICAgICAgZGF0YThbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oVW5pY29kZTo6dG9Mb3dlciht
X2RhdGE4W2ldKSk7CiAKICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogICAgIH0K
IAogICAgIGNvbnN0IFVDaGFyICplbmQgPSBtX2RhdGExNiArIG1fbGVuZ3RoOwotICAgIGZvciAo
Y29uc3QgVUNoYXIqIGNocCA9IG1fZGF0YTE2OyBjaHAgIT0gZW5kOyBjaHArKykgeworICAgIGZv
ciAoY29uc3QgVUNoYXIqIGNocCA9IG1fZGF0YTE2OyBjaHAgIT0gZW5kOyArK2NocCkgewogICAg
ICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKCpjaHApKSkKICAgICAgICAgICAgIG5vVXBw
ZXIgPSBmYWxzZTsKICAgICAgICAgb3JlZCB8PSAqY2hwOwpAQCAtNDMzLDcgKzQzMyw3IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogICAgICAgICBVQ2hhciog
ZGF0YTE2OwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludDMy
X3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwog
ICAgICAgICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICB9CkBAIC00
NzIsNyArNDcyLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigp
CiAgICAgICAgIAogICAgICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVy
ZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgogICAgICAgICBMQ2hhciBvcmVkID0gMDsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBMQ2hhciBjID0gbV9k
YXRhOFtpXTsKICAgICAgICAgICAgIG9yZWQgfD0gYzsKICAgICAgICAgICAgIGRhdGE4W2ldID0g
dG9BU0NJSVVwcGVyKGMpOwpAQCAtNDg2LDEwICs0ODYsMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gc3BlY2lh
bCBjYXNlcy4KICAgICAgICAgLy8gIDEuIGxhdGluLTEgY2hhcmFjdGVycyB3aGVuIGNvbnZlcnRl
ZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQgY2hhcmFjdGVycy4KICAgICAgICAgLy8gIDIuIExv
d2VyIGNhc2Ugc2hhcnAtUyBjb252ZXJ0cyB0byAiU1MiICh0d28gY2hhcmFjdGVycykKLSAgICAg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yIChp
bnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIExDaGFyIGMgPSBt
X2RhdGE4W2ldOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGMgPT0gc21hbGxMZXR0ZXJTaGFy
cFMpKQotICAgICAgICAgICAgICAgIG51bWJlclNoYXJwU0NoYXJhY3RlcnMrKzsKKyAgICAgICAg
ICAgICAgICArK251bWJlclNoYXJwU0NoYXJhY3RlcnM7CiAgICAgICAgICAgICBVQ2hhciB1cHBl
ciA9IFVuaWNvZGU6OnRvVXBwZXIoYyk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodXBwZXIg
PiAweGZmKSkgewogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgdXBwZXItY2FzZWQgY2hh
cmFjdGVyIGRvZXMgbm90IGZpdCBpbiBhbiA4LWJpdCBzdHJpbmcsIHdlIG5lZWQgdG8gdGFrZSB0
aGUgMTYtYml0IHBhdGguCkBAIC01MDYsNyArNTA2LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjp1cHBlcigpCiAKICAgICAgICAgTENoYXIqIGRlc3QgPSBkYXRhODsKIAot
ICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBm
b3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgTENoYXIg
YyA9IG1fZGF0YThbaV07CiAgICAgICAgICAgICBpZiAoYyA9PSBzbWFsbExldHRlclNoYXJwUykg
ewogICAgICAgICAgICAgICAgICpkZXN0KysgPSAnUyc7CkBAIC01MjYsNyArNTI2LDcgQEAgdXBj
b252ZXJ0OgogICAgIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJl
IGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgYyA9IHNvdXJjZTE2W2ldOwogICAgICAg
ICBvcmVkIHw9IGM7CiAgICAgICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBlcihjKTsKQEAgLTU3
OCw3ICs1NzgsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNl
KCkKICAgICAgICAgUmVmUHRyIDxTdHJpbmdJbXBsPm5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICAgICAgTENoYXIgb3JlZCA9IDA7CiAKLSAgICAgICAg
Zm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQz
Ml90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIExDaGFyIGMgPSBtX2Rh
dGE4W2ldOwogICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICAgICAg
ICAgIG9yZWQgfD0gYzsKQEAgLTU4OCw3ICs1ODgsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKICAgICAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVh
c2UoKTsKIAogICAgICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMg
dGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBMYXRpbi0xIGNoYXJhY3RlcnMuCi0gICAgICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxM
Q2hhcj4oVW5pY29kZTo6dG9Mb3dlcihtX2RhdGE4W2ldKSk7CiAKICAgICAgICAgcmV0dXJuIG5l
d0ltcGwucmVsZWFzZSgpOwpAQCAtNTk4LDcgKzU5OCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogICAgIFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7
CiAgICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgIG9yZWQgfD0gYzsKICAgICAgICAg
ZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKQEAgLTYyOSw3ICs2MjksNyBAQCBpbmxpbmUgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVD
aGFyUHJlZGljYXRlCiAgICAgCiAgICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9tIHN0YXJ0CiAg
ICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W3N0
YXJ0XSA6IG1fZGF0YTE2W3N0YXJ0XSkpCi0gICAgICAgIHN0YXJ0Kys7CisgICAgICAgICsrc3Rh
cnQ7CiAgICAgCiAgICAgLy8gb25seSB3aGl0ZSBzcGFjZQogICAgIGlmIChzdGFydCA+IGVuZCkg
CkBAIC02MzcsNyArNjM3LDcgQEAgaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6c3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZQogCiAgICAgLy8gc2tp
cCB3aGl0ZSBzcGFjZSBmcm9tIGVuZAogICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJp
dCgpID8gbV9kYXRhOFtlbmRdIDogbV9kYXRhMTZbZW5kXSkpCi0gICAgICAgIGVuZC0tOworICAg
ICAgICAtLWVuZDsKIAogICAgIGlmICghc3RhcnQgJiYgZW5kID09IG1fbGVuZ3RoIC0gMSkKICAg
ICAgICAgcmV0dXJuIHRoaXM7CkBAIC02ODUsNyArNjg1LDcgQEAgQUxXQVlTX0lOTElORSBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoY29uc3QgQ2hh
clR5cGUKICAgICAKICAgICAvLyBBc3N1bWUgdGhlIGNvbW1vbiBjYXNlIHdpbGwgbm90IHJlbW92
ZSBhbnkgY2hhcmFjdGVycwogICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgIWZpbmRNYXRj
aCgqZnJvbSkpCi0gICAgICAgIGZyb20rKzsKKyAgICAgICAgKytmcm9tOwogICAgIGlmIChmcm9t
ID09IGZyb21lbmQpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIApAQCAtNjk4LDcgKzY5OCw3
IEBAIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1v
dmVDaGFyYWN0ZXJzKGNvbnN0IENoYXJUeXBlCiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIGZpbmRNYXRjaCgqZnJvbSkpCi0gICAgICAgICAg
ICBmcm9tKys7CisgICAgICAgICAgICArK2Zyb207CiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZy
b21lbmQgJiYgIWZpbmRNYXRjaCgqZnJvbSkpCiAgICAgICAgICAgICB0b1tvdXRjKytdID0gKmZy
b20rKzsKICAgICAgICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKQEAgLTczMyw3ICs3MzMsNyBAQCBp
bmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRD
aGFyYWN0ZXJzVG9TcGFjZShVQ2hhcgogICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYm
IHByZWRpY2F0ZSgqZnJvbSkpIHsKICAgICAgICAgICAgIGlmICgqZnJvbSAhPSAnICcpCiAgICAg
ICAgICAgICAgICAgY2hhbmdlZFRvU3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgZnJvbSsrOwor
ICAgICAgICAgICAgKytmcm9tOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZy
b21lbmQgJiYgIXByZWRpY2F0ZSgqZnJvbSkpCiAgICAgICAgICAgICB0b1tvdXRjKytdID0gKmZy
b20rKzsKQEAgLTc0NCw3ICs3NDQsNyBAQCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZShVQ2hhcgogICAgIH0K
ICAgICAKICAgICBpZiAob3V0YyA+IDAgJiYgdG9bb3V0YyAtIDFdID09ICcgJykKLSAgICAgICAg
b3V0Yy0tOworICAgICAgICAtLW91dGM7CiAgICAgCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvdXRjKSA9PSBtX2xlbmd0aCAmJiAhY2hhbmdlZFRvU3BhY2UpCiAgICAgICAgIHJldHVy
biB0aGlzOwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90
IHJldmVyc2VGaW5kSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlwZSogc2VhcmNoQ2gKICAg
ICB3aGlsZSAoc2VhcmNoSGFzaCAhPSBtYXRjaEhhc2ggfHwgIWVxdWFsKHNlYXJjaENoYXJhY3Rl
cnMgKyBkZWx0YSwgbWF0Y2hDaGFyYWN0ZXJzLCBtYXRjaExlbmd0aCkpIHsKICAgICAgICAgaWYg
KCFkZWx0YSkKICAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICAgICAgZGVsdGEtLTsK
KyAgICAgICAgLS1kZWx0YTsKICAgICAgICAgc2VhcmNoSGFzaCAtPSBzZWFyY2hDaGFyYWN0ZXJz
W2RlbHRhICsgbWF0Y2hMZW5ndGhdOwogICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJh
Y3RlcnNbZGVsdGFdOwogICAgIH0KQEAgLTExODYsNyArMTE4Niw3IEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIHNpemVfdCByZXZlcnNlRmluZElnbm9yaW5nQ2FzZUlubmVyKGNvbnN0IFNlYXJjaENo
YXJhY3RlclR5CiAgICAgd2hpbGUgKCFlcXVhbElnbm9yaW5nQ2FzZShzZWFyY2hDaGFyYWN0ZXJz
ICsgZGVsdGEsIG1hdGNoQ2hhcmFjdGVycywgbWF0Y2hMZW5ndGgpKSB7CiAgICAgICAgIGlmICgh
ZGVsdGEpCiAgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIGRlbHRhLS07Cisg
ICAgICAgIC0tZGVsdGE7CiAgICAgfQogICAgIHJldHVybiBkZWx0YTsKIH0KQEAgLTEzNTcsMTkg
KzEzNTcsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKHVu
c2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGhUb1IKICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9CiAgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5n
dGhUb1JlcGxhY2UgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7CiAgICAgaWYgKGlzOEJpdCgpKQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9zaXRpb247IGkrKykKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvc2l0aW9uOyArK2kpCiAgICAgICAgICAgICBkYXRh
W2ldID0gbV9kYXRhOFtpXTsKICAgICBlbHNlCiAgICAgICAgIG1lbWNweShkYXRhLCBtX2RhdGEx
NiwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKICAgICBpZiAoc3RyKSB7CiAgICAgICAgIGlm
IChzdHItPmlzOEJpdCgpKQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aFRvSW5zZXJ0OyBpKyspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoVG9JbnNlcnQ7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhW2kgKyBwb3NpdGlvbl0g
PSBzdHItPm1fZGF0YThbaV07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1lbWNweShkYXRh
ICsgcG9zaXRpb24sIHN0ci0+bV9kYXRhMTYsIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFy
KSk7CiAgICAgfQogICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVwbGFjZTsgaSsrKQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0
aFRvUmVwbGFjZTsgKytpKQogICAgICAgICAgICAgZGF0YVtpICsgcG9zaXRpb24gKyBsZW5ndGhU
b0luc2VydF0gPSBtX2RhdGE4W2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZV07CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0
LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKQEAgLTE2MTksNyAr
MTYxOSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJp
bmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsCiAgICAgICAgIHNyY1NlZ21lbnRMZW5n
dGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgICAgICBpZiAoc3JjSXM4
Qml0KSB7CiAgICAgICAgICAgICAvLyBDYXNlIDMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBk
YXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENhc2UgMiAmIDQuCkBAIC0xNjI4LDcgKzE2Mjgs
NyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoU3RyaW5nSW1w
bCogcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbAogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2Vn
bWVudExlbmd0aDsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50SXM4Qml0KSB7CiAgICAgICAgICAg
ICAvLyBDYXNlcyAyICYgMy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXBTdHJMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXBTdHJMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0g
cmVwbGFjZW1lbnQtPm1fZGF0YThbaV07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBDYXNlIDQKQEAgLTE2NDEsNyArMTY0MSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsCiAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwogICAgIGlm
IChzcmNJczhCaXQpIHsKICAgICAgICAgLy8gQ2FzZSAzLgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgKytpKQogICAgICAgICAgICAgZGF0YVtpICsg
ZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gQ2FzZXMgMiAmIDQuCkBAIC0xODYwLDcgKzE4NjAsNyBAQCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoY29uc3QgU3RyaQogICAgICAgICBtZW1jcHkoZGF0YSwgc3RyaW5nLm1fZGF0YTE2LCBsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgZGF0YVtsZW5ndGhdID0gMDsKICAgICB9Ci0g
ICAgdGVybWluYXRlZFN0cmluZy0+bV9sZW5ndGgtLTsKKyAgICAtLXRlcm1pbmF0ZWRTdHJpbmct
Pm1fbGVuZ3RoOwogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1faGFzaEFuZEZsYWdzID0gKHN0cmlu
Zy5tX2hhc2hBbmRGbGFncyAmICh+c19mbGFnTWFzayB8IHNfaGFzaEZsYWc4Qml0QnVmZmVyKSkg
fCBzX2hhc2hGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOwogICAgIHJldHVybiB0ZXJt
aW5hdGVkU3RyaW5nLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXgg
NTMxMDRmOC4uMjg2MTk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTEwNjgsOSAr
MTA2OCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNvZGVQb2ludENvbXBhcmUodW5zaWduZWQgbDEs
IHVuc2lnbmVkIGwyLCBjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgY29uc3QgdW5zaWduZWQgbG1p
biA9IGwxIDwgbDIgPyBsMSA6IGwyOwogICAgIHVuc2lnbmVkIHBvcyA9IDA7CiAgICAgd2hpbGUg
KHBvcyA8IGxtaW4gJiYgKmMxID09ICpjMikgewotICAgICAgICBjMSsrOwotICAgICAgICBjMisr
OwotICAgICAgICBwb3MrKzsKKyAgICAgICAgKytjMTsKKyAgICAgICAgKytjMjsKKyAgICAgICAg
Kytwb3M7CiAgICAgfQogCiAgICAgaWYgKHBvcyA8IGxtaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAKaW5kZXggZTEwMjgyZC4uNDNjNDZlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nOjpTdHJpbmcoY29uc3QgVUNoYXIqIHN0cikKICAg
ICAgICAgCiAgICAgc2l6ZV90IGxlbiA9IDA7CiAgICAgd2hpbGUgKHN0cltsZW5dICE9IFVDaGFy
KDApKQotICAgICAgICBsZW4rKzsKKyAgICAgICAgKytsZW47CiAKICAgICBpZiAobGVuID4gbnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTkxMywy
NCArOTEzLDI0IEBAIHN0YXRpYyBpbmxpbmUgSW50ZWdyYWxUeXBlIHRvSW50ZWdyYWxUeXBlKGNv
bnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBiCiAKICAgICAvLyBza2lwIGxlYWRp
bmcgd2hpdGVzcGFjZQogICAgIHdoaWxlIChsZW5ndGggJiYgaXNTcGFjZU9yTmV3bGluZSgqZGF0
YSkpIHsKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgIGRhdGErKzsKKyAgICAgICAgLS1sZW5n
dGg7CisgICAgICAgICsrZGF0YTsKICAgICB9CiAKICAgICBpZiAoaXNTaWduZWQgJiYgbGVuZ3Ro
ICYmICpkYXRhID09ICctJykgewotICAgICAgICBsZW5ndGgtLTsKLSAgICAgICAgZGF0YSsrOwor
ICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgKytkYXRhOwogICAgICAgICBpc05lZ2F0aXZlID0g
dHJ1ZTsKICAgICB9IGVsc2UgaWYgKGxlbmd0aCAmJiAqZGF0YSA9PSAnKycpIHsKLSAgICAgICAg
bGVuZ3RoLS07Ci0gICAgICAgIGRhdGErKzsKKyAgICAgICAgLS1sZW5ndGg7CisgICAgICAgICsr
ZGF0YTsKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCB8fCAhaXNDaGFyYWN0ZXJBbGxvd2VkSW5C
YXNlKCpkYXRhLCBiYXNlKSkKICAgICAgICAgZ290byBieWU7CiAKICAgICB3aGlsZSAobGVuZ3Ro
ICYmIGlzQ2hhcmFjdGVyQWxsb3dlZEluQmFzZSgqZGF0YSwgYmFzZSkpIHsKLSAgICAgICAgbGVu
Z3RoLS07CisgICAgICAgIC0tbGVuZ3RoOwogICAgICAgICBJbnRlZ3JhbFR5cGUgZGlnaXRWYWx1
ZTsKICAgICAgICAgQ2hhclR5cGUgYyA9ICpkYXRhOwogICAgICAgICBpZiAoaXNBU0NJSURpZ2l0
KGMpKQpAQCAtOTQ0LDcgKzk0NCw3IEBAIHN0YXRpYyBpbmxpbmUgSW50ZWdyYWxUeXBlIHRvSW50
ZWdyYWxUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBiCiAgICAgICAg
ICAgICBnb3RvIGJ5ZTsKIAogICAgICAgICB2YWx1ZSA9IGJhc2UgKiB2YWx1ZSArIGRpZ2l0VmFs
dWU7Ci0gICAgICAgIGRhdGErKzsKKyAgICAgICAgKytkYXRhOwogICAgIH0KIAogI2lmIENPTVBJ
TEVSKE1TVkMpCkBAIC05NjEsOCArOTYxLDggQEAgc3RhdGljIGlubGluZSBJbnRlZ3JhbFR5cGUg
dG9JbnRlZ3JhbFR5cGUoY29uc3QgQ2hhclR5cGUqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGIKIAog
ICAgIC8vIHNraXAgdHJhaWxpbmcgc3BhY2UKICAgICB3aGlsZSAobGVuZ3RoICYmIGlzU3BhY2VP
ck5ld2xpbmUoKmRhdGEpKSB7Ci0gICAgICAgIGxlbmd0aC0tOwotICAgICAgICBkYXRhKys7Cisg
ICAgICAgIC0tbGVuZ3RoOworICAgICAgICArK2RhdGE7CiAgICAgfQogCiAgICAgaWYgKCFsZW5n
dGgpCg==
</data>
<flag name="review"
          id="188218"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="188219"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173692</attachid>
            <date>2012-11-12 12:43:26 -0800</date>
            <delta_ts>2012-11-13 17:28:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>101859_wtf_prefix_increment.patch</filename>
            <type>text/plain</type>
            <size>19180</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZTExZmRjMy4uZWU1ZjM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMi0xMS0xMiAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAg
IFVzZSBwcmVmaXggZm9ybSBvZiBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgb3BlcmF0b3JzIGluIFdU
RiBTdHJpbmcgY2xhc3NlcyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4NTkKKworICAgICAgICBSZXZpZXdlZCBieSBCZW5q
YW1pbiBQb3VsYWluLgorCisgICAgICAgIFVzZSBwcmVmaXggZm9ybSBvZiBpbmNyZW1lbnQgLyBk
ZWNyZW1lbnQgb3BlcmF0b3JzIHdoZW5ldmVyIHBvc3NpYmxlIGluCisgICAgICAgIFdURiBTdHJp
bmcgY2xhc3NlcyBhcyB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb252ZW50aW9uIGluIFdlYktpdC4K
KworICAgICAgICAqIHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaDoKKyAgICAgICAgKFdURjo6Y29w
eUxDaGFyc0Zyb21VQ2hhclNvdXJjZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGQpOgorICAgICAgICAqIHd0Zi90
ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZSk6CisgICAgICAgIChX
VEY6OmJhc2U2NERlY29kZUludGVybmFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENv
bnZlcnQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6Omdl
dERhdGExNlNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXBjb252ZXJ0Q2hh
cmFjdGVycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpsb3dlcik6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OnVwcGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Zm9sZENhc2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKToKKyAgICAgICAgKFdU
Rjo6cmV2ZXJzZUZpbmRJbm5lcik6CisgICAgICAgIChXVEY6OnJldmVyc2VGaW5kSWdub3JpbmdD
YXNlSW5uZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik6Cisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpjb2RlUG9pbnRD
b21wYXJlKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RG
OjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXVEY6OnRvSW50ZWdyYWxUeXBlKToKKwogMjAx
Mi0xMS0xMSAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV1RGU3RyaW5nOjp1dGY4KCkgc2hvdWxkIGhhdmUgYSBtb2RlIG9mIGNvbnZlcnNpb24gdG8g
dXNlIHJlcGxhY2VtZW50IGNoYXJhY3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9BU0NJSUZhc3RQYXRoLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaApp
bmRleCBmZWY4OTJhLi4wMjMzZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FT
Q0lJRmFzdFBhdGguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaApA
QCAtMTE3LDcgKzExNyw3IEBAIGlubGluZSB2b2lkIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2Uo
TENoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCBzCiAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGVuZExlbmd0aCA9IGxlbmd0aCAtIHVjaGFyc1Blckxvb3AgKyAxOwogICAgICAg
ICBmb3IgKDsgaSA8IGVuZExlbmd0aDsgaSArPSB1Y2hhcnNQZXJMb29wKSB7CiAjaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGVja0luZGV4ID0gMDsgY2hlY2tJbmRl
eCA8IHVjaGFyc1Blckxvb3A7IGNoZWNrSW5kZXgrKykKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hlY2tJbmRleCA9IDA7IGNoZWNrSW5kZXggPCB1Y2hhcnNQZXJMb29wOyArK2NoZWNrSW5k
ZXgpCiAgICAgICAgICAgICAgICAgQVNTRVJUKCEoc291cmNlW2krY2hlY2tJbmRleF0gJiAweGZm
MDApKTsKICNlbmRpZgogICAgICAgICAgICAgX19tMTI4aSBmaXJzdDhVQ2hhcnMgPSBfbW1fbG9h
ZF9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW2ldKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKaW5kZXggZGUyMWI4Yi4uODczMmVhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcApAQCAtMjY3LDcgKzI2Nyw3IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgVUNoYXIqIHMpCiAKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIHdoaWxlIChzW2xlbmd0aF0gIT0gVUNoYXIoMCkp
Ci0gICAgICAgIGxlbmd0aCsrOworICAgICAgICArK2xlbmd0aDsKIAogICAgIGlmICghbGVuZ3Ro
KQogICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNw
cAppbmRleCBmYWZhM2ZhLi43YTA0NjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0Jhc2U2NC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCkBAIC0xMjQs
NyArMTI0LDcgQEAgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuLCBWZWN0b3I8Y2hhcj4mIG91dCwgQmFzZTY0RW5jb2QKICAgICAvLyBBZGQgcGFkZGluZwog
ICAgIHdoaWxlIChkaWR4IDwgb3V0LnNpemUoKSkgewogICAgICAgICBvdXRbZGlkeF0gPSAnPSc7
Ci0gICAgICAgIGRpZHgrKzsKKyAgICAgICAgKytkaWR4OwogICAgIH0KIH0KIApAQCAtMTUwLDcg
KzE1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiYXNlNjREZWNvZGVJbnRlcm5hbChjb25zdCBU
KiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyCiAKICAgICBib29sIHNhd0VxdWFsc1Np
Z24gPSBmYWxzZTsKICAgICB1bnNpZ25lZCBvdXRMZW5ndGggPSAwOwotICAgIGZvciAodW5zaWdu
ZWQgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgeworICAgIGZvciAodW5zaWduZWQgaWR4ID0g
MDsgaWR4IDwgbGVuOyArK2lkeCkgewogICAgICAgICB1bnNpZ25lZCBjaCA9IGRhdGFbaWR4XTsK
ICAgICAgICAgaWYgKGNoID09ICc9JykKICAgICAgICAgICAgIHNhd0VxdWFsc1NpZ24gPSB0cnVl
OwpAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiYXNlNjREZWNvZGVJbnRl
cm5hbChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyCiAgICAgICAgICAg
ICBpZiAoc2F3RXF1YWxzU2lnbikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBvdXRbb3V0TGVuZ3RoXSA9IGJhc2U2NERlY01hcFtjaF07Ci0gICAgICAgICAgICBv
dXRMZW5ndGgrKzsKKyAgICAgICAgICAgICsrb3V0TGVuZ3RoOwogICAgICAgICB9IGVsc2UgaWYg
KHBvbGljeSA9PSBCYXNlNjRGYWlsT25JbnZhbGlkQ2hhcmFjdGVyIHx8IChwb2xpY3kgPT0gQmFz
ZTY0SWdub3JlV2hpdGVzcGFjZSAmJiAhaXNTcGFjZU9yTmV3bGluZShjaCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
CmluZGV4IGM4MmVkMmUuLmExNDNkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZm
ZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpCiAgICAgQVNT
RVJUKG1faXM4Qml0KTsKICAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcg
YnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRh
dGEuCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZb
aV0gPSBjdXJyZW50Q2hhcmFjdGVyc1tpXTsKICAgICAKICAgICBtX2lzOEJpdCA9IGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCmluZGV4IDQ3OWVkOGMuLjliMWVj
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKQEAgLTE4MSw3ICsx
ODEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzaXplX3QgbGVuID0gMDsKICAgICAgICAg
d2hpbGUgKG1fYnVmZmVyW2xlbl0gIT0gVUNoYXIoMCkpCi0gICAgICAgICAgICBsZW4rKzsKKyAg
ICAgICAgICAgICsrbGVuOwogCiAgICAgICAgIGlmIChsZW4gPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHAKaW5kZXggMmZmM2I1ZmIuLjg0Nzk5YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHAKQEAgLTMwNCw3ICszMDQsNyBAQCBjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6
Z2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdAogICAgIAogICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0
aCgpOwogICAgIGlmIChoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSkKLSAgICAgICAgbGVu
Kys7CisgICAgICAgICsrbGVuOwogCiAgICAgbV9jb3B5RGF0YTE2ID0gc3RhdGljX2Nhc3Q8VUNo
YXIqPihmYXN0TWFsbG9jKGxlbiAqIHNpemVvZihVQ2hhcikpKTsKIApAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgU3RyaW5nSW1wbDo6dXBjb252ZXJ0Q2hhcmFjdGVycyh1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kKSBjb25zdAogICAgIEFTU0VSVChpczhCaXQoKSk7CiAgICAgQVNTRVJUKGhh
czE2Qml0U2hhZG93KCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0OyBpIDwgZW5kOyBp
KyspCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpCiAgICAgICAgIG1f
Y29weURhdGExNltpXSA9IG1fZGF0YThbaV07CiB9CiAgICAgCkBAIC0zMzEsNyArMzMxLDcgQEAg
Ym9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKICAgICAvLyB0aGF0IGFy
ZSBub3Qgd2hpdGVzcGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIFJlbmRlclRleHQ7IEkg
d29uZGVyIGlmCiAgICAgLy8gdGhhdCdzIGEgcHJvYmxlbSBpbiBwcmFjdGljZS4KICAgICBpZiAo
aXM4Qml0KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGE4W2ldOwogICAgICAgICAgICAgaWYgKCFpc0FT
Q0lJU3BhY2UoYykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQwLDcgKzM0
MCw3IEBAIGJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xl
bmd0aDsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwogICAgICAgICBpZiAoIWlzQVNDSUlT
cGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4NSw3ICszODUsNyBAQCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKCkKICAgICBVQ2hhciBvcmVk
ID0gMDsKICAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IG1f
ZGF0YTggKyBtX2xlbmd0aDsKLSAgICAgICAgZm9yIChjb25zdCBMQ2hhciogY2hwID0gbV9kYXRh
ODsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAgICAgICAgZm9yIChjb25zdCBMQ2hhciogY2hwID0g
bV9kYXRhODsgY2hwICE9IGVuZDsgKytjaHApIHsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShp
c0FTQ0lJVXBwZXIoKmNocCkpKQogICAgICAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxzZTsKICAg
ICAgICAgICAgIG9yZWQgfD0gKmNocDsKQEAgLTQwMiwyMSArNDAyLDIxIEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogICAgICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhOCk7CiAKICAgICAg
ICAgaWYgKCEob3JlZCAmIH4weDdGKSkgewotICAgICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dlcihtX2Rh
dGE4W2ldKTsKIAogICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRo
YXQgaW5jbHVkZSBub24tQVNDSUkgTGF0aW4tMSBjaGFyYWN0ZXJzLgotICAgICAgICBmb3IgKGlu
dDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExD
aGFyPihVbmljb2RlOjp0b0xvd2VyKG1fZGF0YThbaV0pKTsKIAogICAgICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgY29uc3QgVUNoYXIgKmVuZCA9IG1fZGF0YTE2
ICsgbV9sZW5ndGg7Ci0gICAgZm9yIChjb25zdCBVQ2hhciogY2hwID0gbV9kYXRhMTY7IGNocCAh
PSBlbmQ7IGNocCsrKSB7CisgICAgZm9yIChjb25zdCBVQ2hhciogY2hwID0gbV9kYXRhMTY7IGNo
cCAhPSBlbmQ7ICsrY2hwKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoKmNo
cCkpKQogICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOwogICAgICAgICBvcmVkIHw9ICpjaHA7
CkBAIC00MzMsNyArNDMzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjps
b3dlcigpCiAgICAgICAgIFVDaGFyKiBkYXRhMTY7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKICAgICAg
ICAgCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBV
Q2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93
ZXIoYyk7CiAgICAgICAgIH0KQEAgLTQ3Miw3ICs0NzIsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKICAgICAgICAgCiAgICAgICAgIC8vIERvIGEgZmFzdGVy
IGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAg
ICAgICAgIExDaGFyIG9yZWQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwogICAgICAgICAgICAgb3JlZCB8PSBjOwog
ICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7CkBAIC00ODYsMTAgKzQ4Niwx
MCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKICAgICAgICAg
Ly8gVGhlcmUgYXJlIHR3byBzcGVjaWFsIGNhc2VzLgogICAgICAgICAvLyAgMS4gbGF0aW4tMSBj
aGFyYWN0ZXJzIHdoZW4gY29udmVydGVkIHRvIHVwcGVyIGNhc2UgYXJlIDE2IGJpdCBjaGFyYWN0
ZXJzLgogICAgICAgICAvLyAgMi4gTG93ZXIgY2FzZSBzaGFycC1TIGNvbnZlcnRzIHRvICJTUyIg
KHR3byBjaGFyYWN0ZXJzKQotICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CiAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoYyA9PSBzbWFsbExldHRlclNoYXJwUykpCi0gICAgICAgICAgICAgICAgbnVtYmVyU2hhcnBT
Q2hhcmFjdGVycysrOworICAgICAgICAgICAgICAgICsrbnVtYmVyU2hhcnBTQ2hhcmFjdGVyczsK
ICAgICAgICAgICAgIFVDaGFyIHVwcGVyID0gVW5pY29kZTo6dG9VcHBlcihjKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh1cHBlciA+IDB4ZmYpKSB7CiAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgdGhpcyB1cHBlci1jYXNlZCBjaGFyYWN0ZXIgZG9lcyBub3QgZml0IGluIGFuIDgtYml0IHN0
cmluZywgd2UgbmVlZCB0byB0YWtlIHRoZSAxNi1iaXQgcGF0aC4KQEAgLTUwNiw3ICs1MDYsNyBA
QCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyKCkKIAogICAgICAgICBM
Q2hhciogZGVzdCA9IGRhdGE4OwogCi0gICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKICAgICAgICAgICAgIGlmIChj
ID09IHNtYWxsTGV0dGVyU2hhcnBTKSB7CiAgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICdTJzsK
QEAgLTUyNiw3ICs1MjYsNyBAQCB1cGNvbnZlcnQ6CiAgICAgCiAgICAgLy8gRG8gYSBmYXN0ZXIg
bG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAg
ICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBVQ2hhciBj
ID0gc291cmNlMTZbaV07CiAgICAgICAgIG9yZWQgfD0gYzsKICAgICAgICAgZGF0YTE2W2ldID0g
dG9BU0NJSVVwcGVyKGMpOwpAQCAtNTc4LDcgKzU3OCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogICAgICAgICBSZWZQdHIgPFN0cmluZ0ltcGw+bmV3
SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOwogICAgICAgICBMQ2hh
ciBvcmVkID0gMDsKIAotICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICAgICAgTENoYXIgYyA9IG1fZGF0YThbaV07CiAgICAgICAgICAgICBkYXRhW2ldID0gdG9B
U0NJSUxvd2VyKGMpOwogICAgICAgICAgICAgb3JlZCB8PSBjOwpAQCAtNTg4LDcgKzU4OCw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogICAgICAgICAg
ICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogCiAgICAgICAgIC8vIERvIGEgc2xvd2VyIGlt
cGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hh
cmFjdGVycy4KLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisg
ICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAg
ZGF0YVtpXSA9IHN0YXRpY19jYXN0PExDaGFyPihVbmljb2RlOjp0b0xvd2VyKG1fZGF0YThbaV0p
KTsKIAogICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CkBAIC01OTgsNyArNTk4LDcg
QEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpmb2xkQ2FzZSgpCiAgICAgVUNo
YXIqIGRhdGE7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBvcmVkID0gMDsKLSAgICBmb3IgKGlu
dDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGZvciAoaW50MzJfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGExNltpXTsKICAgICAg
ICAgb3JlZCB8PSBjOwogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOwpAQCAtNjI5
LDcgKzYyOSw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN0
cmlwTWF0Y2hlZENoYXJhY3RlcnMoVUNoYXJQcmVkaWNhdGUKICAgICAKICAgICAvLyBza2lwIHdo
aXRlIHNwYWNlIGZyb20gc3RhcnQKICAgICB3aGlsZSAoc3RhcnQgPD0gZW5kICYmIHByZWRpY2F0
ZShpczhCaXQoKSA/IG1fZGF0YThbc3RhcnRdIDogbV9kYXRhMTZbc3RhcnRdKSkKLSAgICAgICAg
c3RhcnQrKzsKKyAgICAgICAgKytzdGFydDsKICAgICAKICAgICAvLyBvbmx5IHdoaXRlIHNwYWNl
CiAgICAgaWYgKHN0YXJ0ID4gZW5kKSAKQEAgLTYzNyw3ICs2MzcsNyBAQCBpbmxpbmUgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFy
UHJlZGljYXRlCiAKICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20gZW5kCiAgICAgd2hpbGUg
KGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W2VuZF0gOiBtX2RhdGExNltlbmRd
KSkKLSAgICAgICAgZW5kLS07CisgICAgICAgIC0tZW5kOwogCiAgICAgaWYgKCFzdGFydCAmJiBl
bmQgPT0gbV9sZW5ndGggLSAxKQogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTY4NSw3ICs2ODUs
NyBAQCBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVt
b3ZlQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZQogICAgIAogICAgIC8vIEFzc3VtZSB0aGUgY29t
bW9uIGNhc2Ugd2lsbCBub3QgcmVtb3ZlIGFueSBjaGFyYWN0ZXJzCiAgICAgd2hpbGUgKGZyb20g
IT0gZnJvbWVuZCAmJiAhZmluZE1hdGNoKCpmcm9tKSkKLSAgICAgICAgZnJvbSsrOworICAgICAg
ICArK2Zyb207CiAgICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgCkBAIC02OTgsNyArNjk4LDcgQEAgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoY29uc3QgQ2hhclR5cGUKIAogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgZmluZE1h
dGNoKCpmcm9tKSkKLSAgICAgICAgICAgIGZyb20rKzsKKyAgICAgICAgICAgICsrZnJvbTsKICAg
ICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhZmluZE1hdGNoKCpmcm9tKSkKICAgICAg
ICAgICAgIHRvW291dGMrK10gPSAqZnJvbSsrOwogICAgICAgICBpZiAoZnJvbSA9PSBmcm9tZW5k
KQpAQCAtNzMzLDcgKzczMyw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyCiAgICAgICAgIHdo
aWxlIChmcm9tICE9IGZyb21lbmQgJiYgcHJlZGljYXRlKCpmcm9tKSkgewogICAgICAgICAgICAg
aWYgKCpmcm9tICE9ICcgJykKICAgICAgICAgICAgICAgICBjaGFuZ2VkVG9TcGFjZSA9IHRydWU7
Ci0gICAgICAgICAgICBmcm9tKys7CisgICAgICAgICAgICArK2Zyb207CiAgICAgICAgIH0KICAg
ICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhcHJlZGljYXRlKCpmcm9tKSkKICAgICAg
ICAgICAgIHRvW291dGMrK10gPSAqZnJvbSsrOwpAQCAtNzQ0LDcgKzc0NCw3IEBAIGlubGluZSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3Rl
cnNUb1NwYWNlKFVDaGFyCiAgICAgfQogICAgIAogICAgIGlmIChvdXRjID4gMCAmJiB0b1tvdXRj
IC0gMV0gPT0gJyAnKQotICAgICAgICBvdXRjLS07CisgICAgICAgIC0tb3V0YzsKICAgICAKICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG91dGMpID09IG1fbGVuZ3RoICYmICFjaGFuZ2Vk
VG9TcGFjZSkKICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0xMTM2LDcgKzExMzYsNyBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJbm5lcihjb25zdCBTZWFyY2hDaGFy
YWN0ZXJUeXBlKiBzZWFyY2hDaAogICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8
fCAhZXF1YWwoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNo
TGVuZ3RoKSkgewogICAgICAgICBpZiAoIWRlbHRhKQogICAgICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgICAgICBkZWx0YS0tOworICAgICAgICAtLWRlbHRhOwogICAgICAgICBzZWFyY2hI
YXNoIC09IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEgKyBtYXRjaExlbmd0aF07CiAgICAgICAgIHNl
YXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YV07CiAgICAgfQpAQCAtMTE4Niw3ICsx
MTg2LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdD
YXNlSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHkKICAgICB3aGlsZSAoIWVxdWFsSWdub3Jp
bmdDYXNlKHNlYXJjaENoYXJhY3RlcnMgKyBkZWx0YSwgbWF0Y2hDaGFyYWN0ZXJzLCBtYXRjaExl
bmd0aCkpIHsKICAgICAgICAgaWYgKCFkZWx0YSkKICAgICAgICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKLSAgICAgICAgZGVsdGEtLTsKKyAgICAgICAgLS1kZWx0YTsKICAgICB9CiAgICAgcmV0dXJu
IGRlbHRhOwogfQpAQCAtMTM1NywxOSArMTM1NywxOSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aFRv
UgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KICAgICAgICAgY3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRh
KTsKICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
b3NpdGlvbjsgaSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9zaXRpb247
ICsraSkKICAgICAgICAgICAgIGRhdGFbaV0gPSBtX2RhdGE4W2ldOwogICAgIGVsc2UKICAgICAg
ICAgbWVtY3B5KGRhdGEsIG1fZGF0YTE2LCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwogICAg
IGlmIChzdHIpIHsKICAgICAgICAgaWYgKHN0ci0+aXM4Qml0KCkpCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoVG9JbnNlcnQ7IGkrKykKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGhUb0luc2VydDsgKytpKQogICAgICAgICAgICAg
ICAgIGRhdGFbaSArIHBvc2l0aW9uXSA9IHN0ci0+bV9kYXRhOFtpXTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5tX2RhdGExNiwgbGVuZ3Ro
VG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVu
Z3RoVG9SZXBsYWNlOyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyArK2kpCiAgICAgICAgICAgICBkYXRh
W2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0XSA9IG1fZGF0YThbaSArIHBvc2l0aW9uICsg
bGVuZ3RoVG9SZXBsYWNlXTsKICAgICB9IGVsc2UgewogICAgICAgICBtZW1jcHkoZGF0YSArIHBv
c2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3Ro
VG9SZXBsYWNlLApAQCAtMTYxOSw3ICsxNjE5LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwK
ICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3Rh
cnQ7CiAgICAgICAgIGlmIChzcmNJczhCaXQpIHsKICAgICAgICAgICAgIC8vIENhc2UgMy4KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKysp
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsg
KytpKQogICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBz
cmNTZWdtZW50U3RhcnRdOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gQ2FzZSAy
ICYgNC4KQEAgLTE2MjgsNyArMTYyOCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsCiAgICAg
ICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwogICAgICAgICBpZiAocmVwbGFjZW1l
bnRJczhCaXQpIHsKICAgICAgICAgICAgIC8vIENhc2VzIDIgJiAzLgotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAg
IGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIENhc2UgNApAQCAtMTY0MSw3ICsxNjQxLDcgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRl
cm4sIFN0cmluZ0ltcGwqIHJlcGwKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBz
cmNTZWdtZW50U3RhcnQ7CiAgICAgaWYgKHNyY0lzOEJpdCkgewogICAgICAgICAvLyBDYXNlIDMu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKysp
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyArK2kp
CiAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVu
dFN0YXJ0XTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDYXNlcyAyICYgNC4KQEAgLTE4NjAs
NyArMTg2MCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0
aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpCiAgICAgICAgIG1lbWNweShkYXRh
LCBzdHJpbmcubV9kYXRhMTYsIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkYXRh
W2xlbmd0aF0gPSAwOwogICAgIH0KLSAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX2xlbmd0aC0tOwor
ICAgIC0tKHRlcm1pbmF0ZWRTdHJpbmctPm1fbGVuZ3RoKTsKICAgICB0ZXJtaW5hdGVkU3RyaW5n
LT5tX2hhc2hBbmRGbGFncyA9IChzdHJpbmcubV9oYXNoQW5kRmxhZ3MgJiAofnNfZmxhZ01hc2sg
fCBzX2hhc2hGbGFnOEJpdEJ1ZmZlcikpIHwgc19oYXNoRmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENo
YXJhY3RlcjsKICAgICByZXR1cm4gdGVybWluYXRlZFN0cmluZy5yZWxlYXNlKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDUzMTA0ZjguLjI4NjE5NDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oCkBAIC0xMDY4LDkgKzEwNjgsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjb2Rl
UG9pbnRDb21wYXJlKHVuc2lnbmVkIGwxLCB1bnNpZ25lZCBsMiwgY29uc3QgQ2hhcmFjdGVyVHlw
ZQogICAgIGNvbnN0IHVuc2lnbmVkIGxtaW4gPSBsMSA8IGwyID8gbDEgOiBsMjsKICAgICB1bnNp
Z25lZCBwb3MgPSAwOwogICAgIHdoaWxlIChwb3MgPCBsbWluICYmICpjMSA9PSAqYzIpIHsKLSAg
ICAgICAgYzErKzsKLSAgICAgICAgYzIrKzsKLSAgICAgICAgcG9zKys7CisgICAgICAgICsrYzE7
CisgICAgICAgICsrYzI7CisgICAgICAgICsrcG9zOwogICAgIH0KIAogICAgIGlmIChwb3MgPCBs
bWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDAzNzkxNjQuLjRkMzM1YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgU3RyaW5nOjpTdHJp
bmcoY29uc3QgVUNoYXIqIHN0cikKICAgICAgICAgCiAgICAgc2l6ZV90IGxlbiA9IDA7CiAgICAg
d2hpbGUgKHN0cltsZW5dICE9IFVDaGFyKDApKQotICAgICAgICBsZW4rKzsKKyAgICAgICAgKyts
ZW47CiAKICAgICBpZiAobGVuID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAg
ICAgICAgQ1JBU0goKTsKQEAgLTkzNiwyNCArOTM2LDI0IEBAIHN0YXRpYyBpbmxpbmUgSW50ZWdy
YWxUeXBlIHRvSW50ZWdyYWxUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3Ro
LCBiCiAKICAgICAvLyBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZQogICAgIHdoaWxlIChsZW5ndGgg
JiYgaXNTcGFjZU9yTmV3bGluZSgqZGF0YSkpIHsKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAg
IGRhdGErKzsKKyAgICAgICAgLS1sZW5ndGg7CisgICAgICAgICsrZGF0YTsKICAgICB9CiAKICAg
ICBpZiAoaXNTaWduZWQgJiYgbGVuZ3RoICYmICpkYXRhID09ICctJykgewotICAgICAgICBsZW5n
dGgtLTsKLSAgICAgICAgZGF0YSsrOworICAgICAgICAtLWxlbmd0aDsKKyAgICAgICAgKytkYXRh
OwogICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGxlbmd0aCAmJiAq
ZGF0YSA9PSAnKycpIHsKLSAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgIGRhdGErKzsKKyAgICAg
ICAgLS1sZW5ndGg7CisgICAgICAgICsrZGF0YTsKICAgICB9CiAKICAgICBpZiAoIWxlbmd0aCB8
fCAhaXNDaGFyYWN0ZXJBbGxvd2VkSW5CYXNlKCpkYXRhLCBiYXNlKSkKICAgICAgICAgZ290byBi
eWU7CiAKICAgICB3aGlsZSAobGVuZ3RoICYmIGlzQ2hhcmFjdGVyQWxsb3dlZEluQmFzZSgqZGF0
YSwgYmFzZSkpIHsKLSAgICAgICAgbGVuZ3RoLS07CisgICAgICAgIC0tbGVuZ3RoOwogICAgICAg
ICBJbnRlZ3JhbFR5cGUgZGlnaXRWYWx1ZTsKICAgICAgICAgQ2hhclR5cGUgYyA9ICpkYXRhOwog
ICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KGMpKQpAQCAtOTY3LDcgKzk2Nyw3IEBAIHN0YXRpYyBp
bmxpbmUgSW50ZWdyYWxUeXBlIHRvSW50ZWdyYWxUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBz
aXplX3QgbGVuZ3RoLCBiCiAgICAgICAgICAgICBnb3RvIGJ5ZTsKIAogICAgICAgICB2YWx1ZSA9
IGJhc2UgKiB2YWx1ZSArIGRpZ2l0VmFsdWU7Ci0gICAgICAgIGRhdGErKzsKKyAgICAgICAgKytk
YXRhOwogICAgIH0KIAogI2lmIENPTVBJTEVSKE1TVkMpCkBAIC05ODQsOCArOTg0LDggQEAgc3Rh
dGljIGlubGluZSBJbnRlZ3JhbFR5cGUgdG9JbnRlZ3JhbFR5cGUoY29uc3QgQ2hhclR5cGUqIGRh
dGEsIHNpemVfdCBsZW5ndGgsIGIKIAogICAgIC8vIHNraXAgdHJhaWxpbmcgc3BhY2UKICAgICB3
aGlsZSAobGVuZ3RoICYmIGlzU3BhY2VPck5ld2xpbmUoKmRhdGEpKSB7Ci0gICAgICAgIGxlbmd0
aC0tOwotICAgICAgICBkYXRhKys7CisgICAgICAgIC0tbGVuZ3RoOworICAgICAgICArK2RhdGE7
CiAgICAgfQogCiAgICAgaWYgKCFsZW5ndGgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>