<?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>16643</bug_id>
          
          <creation_ts>2007-12-28 11:12:36 -0800</creation_ts>
          <short_desc>number_object.cpp needs a bath</short_desc>
          <delta_ts>2007-12-29 15:49:25 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16640</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65469</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:12:36 -0800</bug_when>
    <thetext>date_object.cpp needs a bath

I went to fix toFixed and toPrecision this evening, but before I can do so number_object.cpp needs to be made readable.

That&apos;s what these patches do (I&apos;m happy to attach them in whitespace ignoring form as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65470</commentid>
    <comment_count>1</comment_count>
      <attachid>18145</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:14:44 -0800</bug_when>
    <thetext>Created attachment 18145
Apply wkstyle/astyle and fix placement of *

 JavaScriptCore/kjs/number_object.cpp |  695 +++++++++++++++++-----------------
 JavaScriptCore/kjs/object.cpp        |    3 +-
 2 files changed, 339 insertions(+), 359 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65471</commentid>
    <comment_count>2</comment_count>
      <attachid>18146</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:14:47 -0800</bug_when>
    <thetext>Created attachment 18146
Break out callAsFunction implmentations into static functions

 JavaScriptCore/kjs/number_object.cpp |  476 +++++++++++++++++-----------------
 1 files changed, 244 insertions(+), 232 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65472</commentid>
    <comment_count>3</comment_count>
      <attachid>18147</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:14:51 -0800</bug_when>
    <thetext>Created attachment 18147
More small attempts to make number code readable

 JavaScriptCore/kjs/number_object.cpp |   98 ++++++++++++++++++----------------
 1 files changed, 51 insertions(+), 47 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65473</commentid>
    <comment_count>4</comment_count>
      <attachid>18148</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:14:53 -0800</bug_when>
    <thetext>Created attachment 18148
More small cleanups to toPrecision

 JavaScriptCore/kjs/number_object.cpp |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65474</commentid>
    <comment_count>5</comment_count>
      <attachid>18149</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 11:14:55 -0800</bug_when>
    <thetext>Created attachment 18149
More changes to make number code readable

 JavaScriptCore/kjs/number_object.cpp |   44 +++++++++++++++++----------------
 1 files changed, 23 insertions(+), 21 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65502</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 15:19:10 -0800</bug_when>
    <thetext>I meant number_object.cpp not date_object!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65505</commentid>
    <comment_count>7</comment_count>
      <attachid>18146</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 15:23:07 -0800</bug_when>
    <thetext>Comment on attachment 18146
Break out callAsFunction implmentations into static functions

It seems odd to me to use static functions here and not follow the lead of all the other classes and put each function in it&apos;s own class with its own callAsFunction. r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65506</commentid>
    <comment_count>8</comment_count>
      <attachid>18145</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 15:23:18 -0800</bug_when>
    <thetext>Comment on attachment 18145
Apply wkstyle/astyle and fix placement of *

Needs a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65507</commentid>
    <comment_count>9</comment_count>
      <attachid>18147</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 15:25:35 -0800</bug_when>
    <thetext>Comment on attachment 18147
More small attempts to make number code readable

Looks good, but again needs a changelog. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65508</commentid>
    <comment_count>10</comment_count>
      <attachid>18149</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 15:30:03 -0800</bug_when>
    <thetext>Comment on attachment 18149
More changes to make number code readable

Looks good.  I think this line should be a FIXME.

+    if (decimalPoint == 999) // ? 9999 is the magical &quot;result is Inf or NaN&quot; value.  what&apos;s 999??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65509</commentid>
    <comment_count>11</comment_count>
      <attachid>18146</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 15:31:00 -0800</bug_when>
    <thetext>Comment on attachment 18146
Break out callAsFunction implmentations into static functions

After talking with Eric on IRC, he said he would provide a follow up patch to convert the static functions into their own classes to avoid the indirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65521</commentid>
    <comment_count>12</comment_count>
      <attachid>18162</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 17:30:54 -0800</bug_when>
    <thetext>Created attachment 18162
Move to modern multi-class function prototype system

 JavaScriptCore/kjs/JSGlobalObject.cpp |    2 +-
 JavaScriptCore/kjs/number_object.cpp  |   79 ++++++++++++++++-----------------
 JavaScriptCore/kjs/number_object.h    |   20 ++++-----
 3 files changed, 49 insertions(+), 52 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65522</commentid>
    <comment_count>13</comment_count>
      <attachid>18162</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 17:32:01 -0800</bug_when>
    <thetext>Comment on attachment 18162
Move to modern multi-class function prototype system

Sam should look at this.  Particularly the use of the &quot;length&quot; parameter in the prototype constructors.  I&apos;m not really sure I did that part right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65523</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 17:42:17 -0800</bug_when>
    <thetext>SunSpider reports that all of the patches add up to a slowdown:

** TOTAL **:           *1.004x as slow*  3875.1ms +/- 0.2%   3889.5ms +/- 0.2%     significant

I&apos;ve not tested individually yet to see which patch(s) cause a slowdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65524</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 17:47:06 -0800</bug_when>
    <thetext>The slowdown seems to come entirely from the final patch.  the &quot;multi-class&quot; prototype system.

** TOTAL **:           -                 3875.1ms +/- 0.2%   3871.7ms +/- 0.2%

is the number w/o that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65525</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 17:50:56 -0800</bug_when>
    <thetext>Running sunspider again, shows the total patch as a wash:
** TOTAL **:           -                 3875.1ms +/- 0.2%   3878.3ms +/- 0.2% 

So I think this is OK, even with the final &quot;many class&quot; patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65534</commentid>
    <comment_count>17</comment_count>
      <attachid>18162</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-28 19:07:47 -0800</bug_when>
    <thetext>Comment on attachment 18162
Move to modern multi-class function prototype system

There are two things that worry me about this patch.  The first is that a different functionPrototype object can be set since you are no longer passing in d()-&gt;functionPrototype but using the one off the execState (note, these may be the same thing).  I am not sure this is an issue in practice, but it is a concern.  The second issue is that by using the macro to make the class declarations for the functions, an unused create function is also being created.  I am going to think about these two issues a little and do a more conclusive review later on tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65547</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-28 20:20:06 -0800</bug_when>
    <thetext>I&apos;ve landed the reviewed patches.  When sam decides on the last one I&apos;ll land or not land that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65618</commentid>
    <comment_count>19</comment_count>
      <attachid>18162</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-29 12:15:16 -0800</bug_when>
    <thetext>Comment on attachment 18162
Move to modern multi-class function prototype system

I don&apos;t see any point in landing this change if it is not a performance improvement.  It will just add to the code size for no particular progression.  r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65643</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-29 15:49:25 -0800</bug_when>
    <thetext>Sounds fine to me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18145</attachid>
            <date>2007-12-28 11:14:44 -0800</date>
            <delta_ts>2007-12-28 20:20:43 -0800</delta_ts>
            <desc>Apply wkstyle/astyle and fix placement of *</desc>
            <filename>Apply-wkstyle-astyle-and-fix-placement-of-.patch</filename>
            <type>text/plain</type>
            <size>26617</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OTQ1NWRjYTVmNGUxNzY0ODliMDVmYjg1MDI5NjI3ZGMwZGYyODdiZgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCmluZGV4IDNhMmUzMmQuLjg2YzE5NDAgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bnVtYmVyX29iamVjdC5jcHAKQEAgLTMxLDc0ICszMSw3MiBAQAogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi11c2luZyBuYW1lc3BhY2UgS0pT
OworbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBO
dW1iZXJJbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGNvbnN0IENsYXNz
SW5mbyBOdW1iZXJJbnN0YW5jZTo6aW5mbyA9IHsgIk51bWJlciIsIDAsIDAgfTsKIAotTnVtYmVy
SW5zdGFuY2U6Ok51bWJlckluc3RhbmNlKEpTT2JqZWN0ICpwcm90bykKLSAgOiBKU1dyYXBwZXJP
YmplY3QocHJvdG8pCitOdW1iZXJJbnN0YW5jZTo6TnVtYmVySW5zdGFuY2UoSlNPYmplY3QqIHBy
b3RvKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvKQogewogfQogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogLy8gRUNNQSAxNS43LjQKIAotTnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5
cGUoRXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT2JqZWN0UHJvdG90eXBlICpvYmpQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlICpmdW5jUHJvdG8pCi0gIDogTnVtYmVySW5z
dGFuY2Uob2JqUHJvdG8pCitOdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3Rh
dGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqUHJvdG8sIEZ1bmN0aW9uUHJvdG90eXBlKiBm
dW5jUHJvdG8pCisgICAgOiBOdW1iZXJJbnN0YW5jZShvYmpQcm90bykKIHsKLSAgc2V0SW50ZXJu
YWxWYWx1ZShqc051bWJlcigwKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcigwKSk7
CiAKLSAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIE51bWJl
ck9iamVjdEltcCBoYXMgYmVlbiBjb25zdHJ1Y3RlZAorICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3
aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBOdW1iZXJPYmplY3RJbXAgaGFzIGJlZW4gY29uc3Ry
dWN0ZWQKIAotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1
bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpUb1N0cmluZywgICAgICAgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvU3RyaW5nKSwgRG9udEVudW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
TnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpUb0xvY2Fs
ZVN0cmluZywgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKSwgRG9udEVu
dW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQ
cm90bywgTnVtYmVyUHJvdG9GdW5jOjpWYWx1ZU9mLCAgICAgICAgMCwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlT2YpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1i
ZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvRml4ZWQsICAg
ICAgICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCksIERvbnRFbnVtKTsKLSAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJl
clByb3RvRnVuYzo6VG9FeHBvbmVudGlhbCwgIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0V4
cG9uZW50aWFsKSwgRG9udEVudW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJv
dG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpUb1ByZWNpc2lvbiwgICAg
MSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lzaW9uKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1i
ZXJQcm90b0Z1bmM6OlRvU3RyaW5nLCAgICAgICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9T
dHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3Rv
RnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJlclByb3RvRnVuYzo6VG9Mb2NhbGVTdHJpbmcsIDAs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVt
YmVyUHJvdG9GdW5jOjpWYWx1ZU9mLCAgICAgICAgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZh
bHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3Rv
RnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJlclByb3RvRnVuYzo6VG9GaXhlZCwgICAgICAgIDEs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0ZpeGVkKSwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90
b0Z1bmM6OlRvRXhwb25lbnRpYWwsICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9FeHBvbmVu
dGlhbCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9G
dW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpUb1ByZWNpc2lvbiwgICAgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lzaW9uKSwgRG9udEVudW0pOwogfQogCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJQcm90b0Z1bmMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIE51bWJlclByb3RvRnVuYzo6TnVtYmVyUHJvdG9GdW5jKEV4
ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgaW50IGksIGludCBs
ZW4sIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCi0gICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVu
Y1Byb3RvLCBuYW1lKQotICAgLCBpZChpKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5j
UHJvdG8sIG5hbWUpCisgICAgLCBpZChpKQogewotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRlfFJl
YWRPbmx5fERvbnRFbnVtKTsKIH0KIAogc3RhdGljIFVTdHJpbmcgaW50ZWdlcl9wYXJ0X25vZXhw
KGRvdWJsZSBkKQogewogICAgIGludCBkZWNpbWFsUG9pbnQ7CiAgICAgaW50IHNpZ247Ci0gICAg
Y2hhciAqcmVzdWx0ID0ga2pzX2R0b2EoZCwgMCwgMCwgJmRlY2ltYWxQb2ludCwgJnNpZ24sIE5V
TEwpOworICAgIGNoYXIqIHJlc3VsdCA9IGtqc19kdG9hKGQsIDAsIDAsICZkZWNpbWFsUG9pbnQs
ICZzaWduLCBOVUxMKTsKICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHJlc3VsdCk7Ci0gICAg
CisKICAgICBVU3RyaW5nIHN0ciA9IHNpZ24gPyAiLSIgOiAiIjsKLSAgICBpZiAoZGVjaW1hbFBv
aW50ID09IDk5OTkpIHsKLSAgICAgICAgc3RyICs9IFVTdHJpbmcocmVzdWx0KTsKLSAgICB9IGVs
c2UgaWYgKGRlY2ltYWxQb2ludCA8PSAwKSB7Ci0gICAgICAgIHN0ciArPSBVU3RyaW5nKCIwIik7
Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoZGVjaW1hbFBvaW50ID09IDk5OTkpCisgICAgICAgIHN0
ciArPSByZXN1bHQ7CisgICAgZWxzZSBpZiAoZGVjaW1hbFBvaW50IDw9IDApCisgICAgICAgIHN0
ciArPSAiMCI7CisgICAgZWxzZSB7CiAgICAgICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWYoZGVj
aW1hbFBvaW50ICsgMSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+
KGxlbmd0aCkgPD0gZGVjaW1hbFBvaW50KSB7CiAgICAgICAgICAgICBzdHJjcHkoYnVmLmRhdGEo
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIG1lbXNldChidWYuZGF0YSgpICsgbGVuZ3RoLCAnMCcs
IGRlY2ltYWxQb2ludCAtIGxlbmd0aCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3Ry
bmNweShidWYuZGF0YSgpLCByZXN1bHQsIGRlY2ltYWxQb2ludCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGJ1ZltkZWNpbWFsUG9pbnRdID0gJ1wwJzsKICAgICAgICAgc3RyICs9IFVTdHJpbmcoYnVm
LmRhdGEoKSk7CiAgICAgfQotICAgIAorCiAgICAga2pzX2ZyZWVkdG9hKHJlc3VsdCk7Ci0gICAg
CisKICAgICByZXR1cm4gc3RyOwogfQogCkBAIC0xMTIsMzAwICsxMTAsMjkwIEBAIHN0YXRpYyBV
U3RyaW5nIGNoYXJfc2VxdWVuY2UoY2hhciBjLCBpbnQgY291bnQpCiAKIHN0YXRpYyBkb3VibGUg
aW50UG93MTAoaW50IGUpCiB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgImV4cG9uZW50
aWF0aW9uIGJ5IHNxdWFyaW5nIiBhbGdvcml0aG0gYW5kCi0gIC8vIGxvbmcgZG91YmxlIHRvIHF1
aWNrbHkgYW5kIHByZWNpc2VseSBjYWxjdWxhdGUgaW50ZWdlciBwb3dlcnMgb2YgMTAuMC4KLQot
ICAvLyBUaGlzIGlzIGEgaGFuZHkgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzQ0OTQ3
NTY+Ci0KLSAgaWYgKGUgPT0gMCkKLSAgICByZXR1cm4gMS4wOwotCi0gIGJvb2wgbmVnYXRpdmUg
PSBlIDwgMDsKLSAgdW5zaWduZWQgZXhwID0gbmVnYXRpdmUgPyAtZSA6IGU7Ci0KLSAgbG9uZyBk
b3VibGUgcmVzdWx0ID0gMTAuMDsKLSAgYm9vbCBmb3VuZE9uZSA9IGZhbHNlOwotICBmb3IgKGlu
dCBiaXQgPSAzMTsgYml0ID49IDA7IGJpdC0tKSB7Ci0gICAgaWYgKCFmb3VuZE9uZSkgewotICAg
ICAgaWYgKChleHAgPj4gYml0KSAmIDEpCi0gICAgICAgIGZvdW5kT25lID0gdHJ1ZTsKLSAgICB9
IGVsc2UgewotICAgICAgcmVzdWx0ID0gcmVzdWx0ICogcmVzdWx0OwotICAgICAgaWYgKChleHAg
Pj4gYml0KSAmIDEpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwLjA7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiB1c2VzIHRoZSAiZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmciIGFsZ29yaXRo
bSBhbmQKKyAgICAvLyBsb25nIGRvdWJsZSB0byBxdWlja2x5IGFuZCBwcmVjaXNlbHkgY2FsY3Vs
YXRlIGludGVnZXIgcG93ZXJzIG9mIDEwLjAuCisKKyAgICAvLyBUaGlzIGlzIGEgaGFuZHkgd29y
a2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzQ0OTQ3NTY+CisKKyAgICBpZiAoZSA9PSAwKQor
ICAgICAgICByZXR1cm4gMS4wOworCisgICAgYm9vbCBuZWdhdGl2ZSA9IGUgPCAwOworICAgIHVu
c2lnbmVkIGV4cCA9IG5lZ2F0aXZlID8gLWUgOiBlOworCisgICAgbG9uZyBkb3VibGUgcmVzdWx0
ID0gMTAuMDsKKyAgICBib29sIGZvdW5kT25lID0gZmFsc2U7CisgICAgZm9yIChpbnQgYml0ID0g
MzE7IGJpdCA+PSAwOyBiaXQtLSkgeworICAgICAgICBpZiAoIWZvdW5kT25lKSB7CisgICAgICAg
ICAgICBpZiAoKGV4cCA+PiBiaXQpICYgMSkKKyAgICAgICAgICAgICAgICBmb3VuZE9uZSA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiByZXN1
bHQ7CisgICAgICAgICAgICBpZiAoKGV4cCA+PiBiaXQpICYgMSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQgKiAxMC4wOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgaWYgKG5l
Z2F0aXZlKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDEuMCAvIHJlc3VsdCk7Ci0g
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdCk7CisgICAgaWYgKG5lZ2F0aXZlKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigxLjAgLyByZXN1bHQpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3VsdCk7CiB9CiAKIC8vIEVDTUEgMTUuNy40LjIg
LSAxNS43LjQuNwotSlNWYWx1ZSAqTnVtYmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1
ZSogTnVtYmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAvLyBubyBnZW5lcmljIGZ1bmN0
aW9uLiAidGhpcyIgaGFzIHRvIGJlIGEgTnVtYmVyIG9iamVjdAotICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCi0gICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKLQotICBKU1ZhbHVlICp2ID0gc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFu
Y2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOwotICBzd2l0Y2ggKGlkKSB7Ci0gIGNhc2Ug
VG9TdHJpbmc6IHsKLSAgICBkb3VibGUgZHJhZGl4ID0gMTA7Ci0gICAgaWYgKCFhcmdzLmlzRW1w
dHkoKSkKLSAgICAgIGRyYWRpeCA9IGFyZ3NbMF0tPnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMp
OwotICAgIGlmIChkcmFkaXggPj0gMiAmJiBkcmFkaXggPD0gMzYgJiYgZHJhZGl4ICE9IDEwKSB7
IC8vIGZhbHNlIGZvciBOYU4KLSAgICAgIGludCByYWRpeCA9IHN0YXRpY19jYXN0PGludD4oZHJh
ZGl4KTsKLSAgICAgIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWpr
bG1ub3BxcnN0dXZ3eHl6IjsKLSAgICAgIC8vIElOVF9NQVggcmVzdWx0cyBpbiAxMDI0IGNoYXJh
Y3RlcnMgbGVmdCBvZiB0aGUgZG90IHdpdGggcmFkaXggMgotICAgICAgLy8gZ2l2ZSB0aGUgc2Ft
ZSBzcGFjZSBvbiB0aGUgcmlnaHQgc2lkZS4gc2FmZXR5IGNoZWNrcyBhcmUgaW4gcGxhY2UKLSAg
ICAgIC8vIHVubGVzcyBzb21lb25lIGZpbmRzIGEgcHJlY2lzZSBydWxlLgotICAgICAgY2hhciBz
WzIwNDggKyAzXTsKLSAgICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICBp
ZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5n
Ojpmcm9tKHgpKTsKLQotICAgICAgLy8gYXBwbHkgYWxnb3JpdGhtIG9uIGFic29sdXRlIHZhbHVl
LiBhZGQgc2lnbiBsYXRlci4KLSAgICAgIGJvb2wgbmVnID0gZmFsc2U7Ci0gICAgICBpZiAoeCA8
IDAuMCkgewotICAgICAgICBuZWcgPSB0cnVlOwotICAgICAgICB4ID0gLXg7Ci0gICAgICB9Ci0g
ICAgICAvLyBjb252ZXJ0IGludGVnZXIgcG9ydGlvbgotICAgICAgZG91YmxlIGYgPSBmbG9vcih4
KTsKLSAgICAgIGRvdWJsZSBkID0gZjsKLSAgICAgIGNoYXIgKmRvdCA9IHMgKyBzaXplb2Yocykg
LyAyOwotICAgICAgY2hhciAqcCA9IGRvdDsKLSAgICAgICpwID0gJ1wwJzsKLSAgICAgIGRvIHsK
LSAgICAgICAgKi0tcCA9IGRpZ2l0c1tzdGF0aWNfY2FzdDxpbnQ+KGZtb2QoZCwgcmFkaXgpKV07
Ci0gICAgICAgIGQgLz0gcmFkaXg7Ci0gICAgICB9IHdoaWxlICgoZCA8PSAtMS4wIHx8IGQgPj0g
MS4wKSAmJiBwID4gcyk7Ci0gICAgICAvLyBhbnkgZGVjaW1hbCBmcmFjdGlvbiA/Ci0gICAgICBk
ID0geCAtIGY7Ci0gICAgICBjb25zdCBkb3VibGUgZXBzID0gMC4wMDE7IC8vIFRPRE86IGd1ZXNz
ZWQuIGJhc2Ugb24gcmFkaXggPwotICAgICAgaWYgKGQgPCAtZXBzIHx8IGQgPiBlcHMpIHsKLSAg
ICAgICAgKmRvdCsrID0gJy4nOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgZCAqPSByYWRpeDsK
LSAgICAgICAgICAqZG90KysgPSBkaWdpdHNbc3RhdGljX2Nhc3Q8aW50PihkKV07Ci0gICAgICAg
ICAgZCAtPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwotICAgICAgICB9IHdoaWxlICgoZCA8IC1lcHMg
fHwgZCA+IGVwcykgJiYgZG90IC0gcyA8IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKHMpKSAtIDEp
OwotICAgICAgICAqZG90ID0gJ1wwJzsKLSAgICAgIH0KLSAgICAgIC8vIGFkZCBzaWduIGlmIG5l
Z2F0aXZlCi0gICAgICBpZiAobmVnKQotICAgICAgICAqLS1wID0gJy0nOwotICAgICAgcmV0dXJu
IGpzU3RyaW5nKHApOwotICAgIH0gZWxzZQotICAgICAgcmV0dXJuIGpzU3RyaW5nKHYtPnRvU3Ry
aW5nKGV4ZWMpKTsKLSAgfQotICBjYXNlIFRvTG9jYWxlU3RyaW5nOiAvKiBUT0RPICovCi0gICAg
cmV0dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgY2FzZSBWYWx1ZU9mOgotICAg
IHJldHVybiBqc051bWJlcih2LT50b051bWJlcihleGVjKSk7Ci0gIGNhc2UgVG9GaXhlZDogCi0g
IHsKLSAgICAgIEpTVmFsdWUgKmZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKLSAgICAgIGRvdWJs
ZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7Ci0gICAgICBpZiAoIShkZiA+
PSAwICYmIGRmIDw9IDIwKSkKLSAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5n
ZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQg
MjAiKTsKLSAgICAgIGludCBmID0gKGludClkZjsKLSAgICAgIAotICAgICAgZG91YmxlIHggPSB2
LT50b051bWJlcihleGVjKTsKLSAgICAgIGlmIChpc25hbih4KSkKLSAgICAgICAgICByZXR1cm4g
anNTdHJpbmcoIk5hTiIpOwotICAgICAgCi0gICAgICBVU3RyaW5nIHMgPSAiIjsKLSAgICAgIGlm
ICh4IDwgMCkgewotICAgICAgICAgIHMgKz0gIi0iOwotICAgICAgICAgIHggPSAteDsKLSAgICAg
IH0KLSAgICAgIAotICAgICAgaWYgKHggPj0gcG93KDEwLjAsIDIxLjApKQotICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhzK1VTdHJpbmc6OmZyb20oeCkpOwotICAgICAgCi0gICAgICBkb3VibGUg
biA9IGZsb29yKHgqcG93KDEwLjAsIGYpKTsKLSAgICAgIGlmIChmYWJzKG4gLyBwb3coMTAuMCwg
ZikgLSB4KSA+PSBmYWJzKChuICsgMSkgLyBwb3coMTAuMCwgZikgLSB4KSkKLSAgICAgICAgICBu
Kys7Ci0gICAgICAKLSAgICAgIFVTdHJpbmcgbSA9IGludGVnZXJfcGFydF9ub2V4cChuKTsKLSAg
ICAgIAotICAgICAgaW50IGsgPSBtLnNpemUoKTsKLSAgICAgIGlmIChrIDw9IGYpIHsKLSAgICAg
ICAgICBVU3RyaW5nIHogPSAiIjsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGYrMS1r
OyBpKyspCi0gICAgICAgICAgICAgIHogKz0gIjAiOwotICAgICAgICAgIG0gPSB6ICsgbTsKLSAg
ICAgICAgICBrID0gZiArIDE7Ci0gICAgICAgICAgQVNTRVJUKGsgPT0gbS5zaXplKCkpOwotICAg
ICAgfQotICAgICAgaWYgKGstZiA8IG0uc2l6ZSgpKQotICAgICAgICAgIHJldHVybiBqc1N0cmlu
ZyhzK20uc3Vic3RyKDAsay1mKSsiLiIrbS5zdWJzdHIoay1mKSk7Ci0gICAgICBlbHNlCi0gICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKHMrbS5zdWJzdHIoMCxrLWYpKTsKLSAgfQotICBjYXNlIFRv
RXhwb25lbnRpYWw6IHsKLSAgICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAKLSAgICAgIGlmIChpc25hbih4KSB8fCBpc2luZih4KSkKLSAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoVVN0cmluZzo6ZnJvbSh4KSk7Ci0gICAgICAKLSAgICAgIEpTVmFsdWUgKmZyYWN0aW9u
RGlnaXRzID0gYXJnc1swXTsKLSAgICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0lu
dGVnZXIoZXhlYyk7Ci0gICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkKLSAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9FeHBvbmVudGlhbCgpIGFy
Z3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOwotICAgICAgaW50IGYgPSAoaW50KWRmOwot
ICAgICAgCi0gICAgICBpbnQgZGVjaW1hbEFkanVzdCA9IDA7Ci0gICAgICBpZiAoIWZyYWN0aW9u
RGlnaXRzLT5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgZG91YmxlIGxvZ3ggPSBmbG9vcihs
b2cxMChmYWJzKHgpKSk7Ci0gICAgICAgICAgeCAvPSBwb3coMTAuMCwgbG9neCk7Ci0gICAgICAg
ICAgZG91YmxlIGZ4ID0gZmxvb3IoeCAqIHBvdygxMC4wLCBmKSkgLyBwb3coMTAuMCwgZik7Ci0g
ICAgICAgICAgZG91YmxlIGN4ID0gY2VpbCh4ICogcG93KDEwLjAsIGYpKSAvIHBvdygxMC4wLCBm
KTsKLSAgICAgICAgICAKLSAgICAgICAgICBpZiAoZmFicyhmeC14KSA8IGZhYnMoY3gteCkpCi0g
ICAgICAgICAgICAgIHggPSBmeDsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHggPSBj
eDsKLSAgICAgICAgICAKLSAgICAgICAgICBkZWNpbWFsQWRqdXN0ID0gc3RhdGljX2Nhc3Q8aW50
Pihsb2d4KTsKLSAgICAgIH0KLSAgICAgIAotICAgICAgY2hhciBidWZbODBdOwotICAgICAgaW50
IGRlY2ltYWxQb2ludDsKLSAgICAgIGludCBzaWduOwotICAgICAgCi0gICAgICBpZiAoaXNuYW4o
eCkpCi0gICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJOYU4iKTsKLSAgICAgIAotICAgICAgY2hh
ciAqcmVzdWx0ID0ga2pzX2R0b2EoeCwgMCwgMCwgJmRlY2ltYWxQb2ludCwgJnNpZ24sIE5VTEwp
OwotICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZXN1bHQpOwotICAgICAgZGVjaW1hbFBv
aW50ICs9IGRlY2ltYWxBZGp1c3Q7Ci0gICAgICAKLSAgICAgIGludCBpID0gMDsKLSAgICAgIGlm
IChzaWduKSB7Ci0gICAgICAgICAgYnVmW2krK10gPSAnLSc7Ci0gICAgICB9Ci0gICAgICAKLSAg
ICAgIGlmIChkZWNpbWFsUG9pbnQgPT0gOTk5KSB7Ci0gICAgICAgICAgc3RyY3B5KGJ1ZiArIGks
IHJlc3VsdCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAgIGJ1ZltpKytdID0gcmVzdWx0WzBd
OwotICAgICAgICAgIAotICAgICAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cy0+aXNVbmRlZmluZWQo
KSkKLSAgICAgICAgICAgICAgZiA9IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAtIDE7Ci0gICAg
ICAgICAgCi0gICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgZiA+IDApIHsKLSAgICAgICAgICAg
ICAgYnVmW2krK10gPSAnLic7Ci0gICAgICAgICAgICAgIGludCBoYXZlRkRpZ2l0cyA9IHN0YXRp
Y19jYXN0PGludD4obGVuZ3RoKSAtIDE7Ci0gICAgICAgICAgICAgIGlmIChmIDwgaGF2ZUZEaWdp
dHMpIHsKLSAgICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVmK2kscmVzdWx0KzEsIGYpOwotICAg
ICAgICAgICAgICAgICAgaSArPSBmOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZitpLHJlc3VsdCsxKTsKLSAgICAgICAg
ICAgICAgICAgIGkgKz0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpIC0gMTsKLSAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZi1oYXZlRkRpZ2l0czsgaisrKQotICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZltpKytdID0gJzAnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
fQotICAgICAgICAgIAotICAgICAgICAgIGJ1ZltpKytdID0gJ2UnOwotICAgICAgICAgIGJ1Zltp
KytdID0gKGRlY2ltYWxQb2ludCA+PSAwKSA/ICcrJyA6ICctJzsKLSAgICAgICAgICAvLyBkZWNp
bWFsUG9pbnQgY2FuJ3QgYmUgbW9yZSB0aGFuIDMgZGlnaXRzIGRlY2ltYWwgZ2l2ZW4gdGhlCi0g
ICAgICAgICAgLy8gbmF0dXJlIG9mIGZsb2F0IHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgaW50
IGV4cG9uZW50aWFsID0gZGVjaW1hbFBvaW50IC0gMTsKLSAgICAgICAgICBpZiAoZXhwb25lbnRp
YWwgPCAwKSB7Ci0gICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gZXhwb25lbnRpYWwgKiAtMTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGV4cG9uZW50aWFsID49IDEwMCkgewotICAgICAg
ICAgICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGV4cG9uZW50aWFsIC8g
MTAwKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGV4cG9uZW50aWFsID49IDEwKSB7Ci0g
ICAgICAgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgKGV4cG9uZW50
aWFsICUgMTAwKSAvIDEwKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnVmW2krK10gPSBzdGF0
aWNfY2FzdDxjaGFyPignMCcgKyBleHBvbmVudGlhbCAlIDEwKTsKLSAgICAgICAgICBidWZbaSsr
XSA9ICdcMCc7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIEFTU0VSVChpIDw9IDgwKTsKLSAgICAg
IAotICAgICAga2pzX2ZyZWVkdG9hKHJlc3VsdCk7Ci0gICAgICAKLSAgICAgIHJldHVybiBqc1N0
cmluZyhidWYpOwotICB9Ci0gIGNhc2UgVG9QcmVjaXNpb246Ci0gIHsKLSAgICAgIGludCBlID0g
MDsKLSAgICAgIFVTdHJpbmcgbTsKLSAgICAgIAotICAgICAgZG91YmxlIGRwID0gYXJnc1swXS0+
dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7Ci0gICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgaWYgKGlzbmFuKGRwKSB8fCBpc25hbih4KSB8fCBpc2luZih4KSkKLSAg
ICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOwotICAgICAgCi0gICAg
ICBVU3RyaW5nIHMgPSAiIjsKLSAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgIHMgPSAiLSI7
Ci0gICAgICAgICAgeCA9IC14OwotICAgICAgfQotICAgICAgCi0gICAgICBpZiAoIShkcCA+PSAx
ICYmIGRwIDw9IDIxKSkgLy8gdHJ1ZSBmb3IgTmFOCi0gICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgUmFuZ2VFcnJvciwgInRvUHJlY2lzaW9uKCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3
ZWVuIDEgYW5kIDIxIik7Ci0gICAgICBpbnQgcCA9IChpbnQpZHA7Ci0gICAgICAKLSAgICAgIGlm
ICh4ICE9IDApIHsKLSAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8aW50Pihsb2cxMCh4KSk7Ci0g
ICAgICAgICAgZG91YmxlIHRlbnMgPSBpbnRQb3cxMChlIC0gcCArIDEpOwotICAgICAgICAgIGRv
dWJsZSBuID0gZmxvb3IoeCAvIHRlbnMpOwotICAgICAgICAgIGlmIChuIDwgaW50UG93MTAocCAt
IDEpKSB7Ci0gICAgICAgICAgICAgIGUgPSBlIC0gMTsKLSAgICAgICAgICAgICAgdGVucyA9IGlu
dFBvdzEwKGUgLSBwICsgMSk7Ci0gICAgICAgICAgICAgIG4gPSBmbG9vcih4IC8gdGVucyk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIAotICAgICAgICAgIGlmIChmYWJzKChuICsgMS4wKSAqIHRl
bnMgLSB4KSA8PSBmYWJzKG4gKiB0ZW5zIC0geCkpCi0gICAgICAgICAgICArK247Ci0gICAgICAg
ICAgLy8gbWFpbnRhaW4gbiA8IDEwXihwKQotICAgICAgICAgIGlmIChuID49IGludFBvdzEwKHAp
KSB7Ci0gICAgICAgICAgICAgIG4gPSBuIC8gMTAuMDsKLSAgICAgICAgICAgICAgZSA9IGUgKyAx
OwotICAgICAgICAgIH0KLSAgICAgICAgICBBU1NFUlQoaW50UG93MTAocCAtIDEpIDw9IG4pOwot
ICAgICAgICAgIEFTU0VSVChuIDwgaW50UG93MTAocCkpOwotICAgICAgICAgIAotICAgICAgICAg
IG0gPSBpbnRlZ2VyX3BhcnRfbm9leHAobik7Ci0gICAgICAgICAgaWYgKGUgPCAtNiB8fCBlID49
IHApIHsKLSAgICAgICAgICAgICAgaWYgKG0uc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICAg
IG0gPSBtLnN1YnN0cigwLDEpKyIuIittLnN1YnN0cigxKTsKLSAgICAgICAgICAgICAgaWYgKGUg
Pj0gMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzK20rImUrIitVU3RyaW5n
Ojpmcm9tKGUpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKHMrbSsiZS0iK1VTdHJpbmc6OmZyb20oLWUpKTsKLSAgICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgICBtID0gY2hhcl9zZXF1ZW5jZSgnMCcscCk7Ci0g
ICAgICAgICAgZSA9IDA7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChlID09IHAtMSkgewot
ICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzK20pOwotICAgICAgfQotICAgICAgZWxzZSBpZiAo
ZSA+PSAwKSB7Ci0gICAgICAgICAgaWYgKGUrMSA8IG0uc2l6ZSgpKQotICAgICAgICAgICAgICBy
ZXR1cm4ganNTdHJpbmcocyttLnN1YnN0cigwLGUrMSkrIi4iK20uc3Vic3RyKGUrMSkpOwotICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMrbS5zdWJzdHIoMCxl
KzEpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICAgIHJldHVybiBqc1N0cmluZyhz
KyIwLiIrY2hhcl9zZXF1ZW5jZSgnMCcsLShlKzEpKSttKTsKLSAgICAgIH0KLSAgIH0KLSAgICAg
IAotIH0KLSAgcmV0dXJuIE5VTEw7CisgICAgLy8gbm8gZ2VuZXJpYyBmdW5jdGlvbi4gInRoaXMi
IGhhcyB0byBiZSBhIE51bWJlciBvYmplY3QKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZO
dW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CisKKyAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFuY2Uq
Pih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOworICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNl
IFRvU3RyaW5nOiB7CisgICAgICAgIGRvdWJsZSBkcmFkaXggPSAxMDsKKyAgICAgICAgaWYgKCFh
cmdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRyYWRpeCA9IGFyZ3NbMF0tPnRvSW50ZWdlclBy
ZXNlcnZlTmFOKGV4ZWMpOworICAgICAgICBpZiAoZHJhZGl4ID49IDIgJiYgZHJhZGl4IDw9IDM2
ICYmIGRyYWRpeCAhPSAxMCkgeyAvLyBmYWxzZSBmb3IgTmFOCisgICAgICAgICAgICBpbnQgcmFk
aXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYWRpeCk7CisgICAgICAgICAgICBjb25zdCBjaGFyIGRp
Z2l0c1tdID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgICAg
ICAgICAvLyBJTlRfTUFYIHJlc3VsdHMgaW4gMTAyNCBjaGFyYWN0ZXJzIGxlZnQgb2YgdGhlIGRv
dCB3aXRoIHJhZGl4IDIKKyAgICAgICAgICAgIC8vIGdpdmUgdGhlIHNhbWUgc3BhY2Ugb24gdGhl
IHJpZ2h0IHNpZGUuIHNhZmV0eSBjaGVja3MgYXJlIGluIHBsYWNlCisgICAgICAgICAgICAvLyB1
bmxlc3Mgc29tZW9uZSBmaW5kcyBhIHByZWNpc2UgcnVsZS4KKyAgICAgICAgICAgIGNoYXIgc1sy
MDQ4ICsgM107CisgICAgICAgICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBqc1N0cmluZyhVU3RyaW5nOjpmcm9tKHgpKTsKKworICAgICAgICAgICAgLy8gYXBwbHkgYWxn
b3JpdGhtIG9uIGFic29sdXRlIHZhbHVlLiBhZGQgc2lnbiBsYXRlci4KKyAgICAgICAgICAgIGJv
b2wgbmVnID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoeCA8IDAuMCkgeworICAgICAgICAgICAg
ICAgIG5lZyA9IHRydWU7CisgICAgICAgICAgICAgICAgeCA9IC14OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gY29udmVydCBpbnRlZ2VyIHBvcnRpb24KKyAgICAgICAgICAgIGRvdWJs
ZSBmID0gZmxvb3IoeCk7CisgICAgICAgICAgICBkb3VibGUgZCA9IGY7CisgICAgICAgICAgICBj
aGFyKiBkb3QgPSBzICsgc2l6ZW9mKHMpIC8gMjsKKyAgICAgICAgICAgIGNoYXIqIHAgPSBkb3Q7
CisgICAgICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgKi0tcCA9IGRpZ2l0c1tzdGF0aWNfY2FzdDxpbnQ+KGZtb2QoZCwgcmFkaXgpKV07CisgICAg
ICAgICAgICAgICAgZCAvPSByYWRpeDsKKyAgICAgICAgICAgIH0gd2hpbGUgKChkIDw9IC0xLjAg
fHwgZCA+PSAxLjApICYmIHAgPiBzKTsKKyAgICAgICAgICAgIC8vIGFueSBkZWNpbWFsIGZyYWN0
aW9uID8KKyAgICAgICAgICAgIGQgPSB4IC0gZjsKKyAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBl
cHMgPSAwLjAwMTsgLy8gVE9ETzogZ3Vlc3NlZC4gYmFzZSBvbiByYWRpeCA/CisgICAgICAgICAg
ICBpZiAoZCA8IC1lcHMgfHwgZCA+IGVwcykgeworICAgICAgICAgICAgICAgICpkb3QrKyA9ICcu
JzsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGQgKj0gcmFkaXg7
CisgICAgICAgICAgICAgICAgICAgICpkb3QrKyA9IGRpZ2l0c1tzdGF0aWNfY2FzdDxpbnQ+KGQp
XTsKKyAgICAgICAgICAgICAgICAgICAgZCAtPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKChkIDwgLWVwcyB8fCBkID4gZXBzKSAmJiBkb3QgLSBzIDwgc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YocykpIC0gMSk7CisgICAgICAgICAgICAgICAgKmRvdCA9ICdc
MCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBhZGQgc2lnbiBpZiBuZWdhdGl2ZQor
ICAgICAgICAgICAgaWYgKG5lZykKKyAgICAgICAgICAgICAgICAqLS1wID0gJy0nOworICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKHApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7CisgICAgfQorICAgIGNhc2UgVG9Mb2Nh
bGVTdHJpbmc6IC8qIFRPRE8gKi8KKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICBjYXNlIFZhbHVlT2Y6CisgICAgICAgIHJldHVybiBqc051bWJlcih2LT50
b051bWJlcihleGVjKSk7CisgICAgY2FzZSBUb0ZpeGVkOiB7CisgICAgICAgIEpTVmFsdWUqIGZy
YWN0aW9uRGlnaXRzID0gYXJnc1swXTsKKyAgICAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdp
dHMtPnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9GaXhl
ZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiKTsKKyAgICAgICAg
aW50IGYgPSAoaW50KWRmOworCisgICAgICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7
CisgICAgICAgIGlmIChpc25hbih4KSkKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygiTmFO
Iik7CisKKyAgICAgICAgVVN0cmluZyBzID0gIiI7CisgICAgICAgIGlmICh4IDwgMCkgeworICAg
ICAgICAgICAgcyArPSAiLSI7CisgICAgICAgICAgICB4ID0gLXg7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoeCA+PSBwb3coMTAuMCwgMjEuMCkpCisgICAgICAgICAgICByZXR1cm4ganNTdHJp
bmcocytVU3RyaW5nOjpmcm9tKHgpKTsKKworICAgICAgICBkb3VibGUgbiA9IGZsb29yKHgqcG93
KDEwLjAsIGYpKTsKKyAgICAgICAgaWYgKGZhYnMobiAvIHBvdygxMC4wLCBmKSAtIHgpID49IGZh
YnMoKG4gKyAxKSAvIHBvdygxMC4wLCBmKSAtIHgpKQorICAgICAgICAgICAgbisrOworCisgICAg
ICAgIFVTdHJpbmcgbSA9IGludGVnZXJfcGFydF9ub2V4cChuKTsKKworICAgICAgICBpbnQgayA9
IG0uc2l6ZSgpOworICAgICAgICBpZiAoayA8PSBmKSB7CisgICAgICAgICAgICBVU3RyaW5nIHog
PSAiIjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZisxLWs7IGkrKykKKyAgICAg
ICAgICAgICAgICB6ICs9ICIwIjsKKyAgICAgICAgICAgIG0gPSB6ICsgbTsKKyAgICAgICAgICAg
IGsgPSBmICsgMTsKKyAgICAgICAgICAgIEFTU0VSVChrID09IG0uc2l6ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoay1mIDwgbS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4ganNTdHJp
bmcocyttLnN1YnN0cigwLGstZikrIi4iK20uc3Vic3RyKGstZikpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXR1cm4ganNTdHJpbmcocyttLnN1YnN0cigwLGstZikpOworICAgIH0KKyAg
ICBjYXNlIFRvRXhwb25lbnRpYWw6IHsKKyAgICAgICAgZG91YmxlIHggPSB2LT50b051bWJlcihl
eGVjKTsKKworICAgICAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCisgICAgICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoVVN0cmluZzo6ZnJvbSh4KSk7CisKKyAgICAgICAgSlNWYWx1ZSogZnJh
Y3Rpb25EaWdpdHMgPSBhcmdzWzBdOworICAgICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0
cy0+dG9JbnRlZ2VyKGV4ZWMpOworICAgICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0b0V4cG9u
ZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVuIDAgYW5kIDIwIik7CisgICAgICAgIGludCBm
ID0gKGludClkZjsKKworICAgICAgICBpbnQgZGVjaW1hbEFkanVzdCA9IDA7CisgICAgICAgIGlm
ICghZnJhY3Rpb25EaWdpdHMtPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSBs
b2d4ID0gZmxvb3IobG9nMTAoZmFicyh4KSkpOworICAgICAgICAgICAgeCAvPSBwb3coMTAuMCwg
bG9neCk7CisgICAgICAgICAgICBkb3VibGUgZnggPSBmbG9vcih4ICogcG93KDEwLjAsIGYpKSAv
IHBvdygxMC4wLCBmKTsKKyAgICAgICAgICAgIGRvdWJsZSBjeCA9IGNlaWwoeCAqIHBvdygxMC4w
LCBmKSkgLyBwb3coMTAuMCwgZik7CisKKyAgICAgICAgICAgIGlmIChmYWJzKGZ4LXgpIDwgZmFi
cyhjeC14KSkKKyAgICAgICAgICAgICAgICB4ID0gZng7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeCA9IGN4OworCisgICAgICAgICAgICBkZWNpbWFsQWRqdXN0ID0gc3RhdGlj
X2Nhc3Q8aW50Pihsb2d4KTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgYnVmWzgwXTsKKyAg
ICAgICAgaW50IGRlY2ltYWxQb2ludDsKKyAgICAgICAgaW50IHNpZ247CisKKyAgICAgICAgaWYg
KGlzbmFuKHgpKQorICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJOYU4iKTsKKworICAgICAg
ICBjaGFyKiByZXN1bHQgPSBranNfZHRvYSh4LCAwLCAwLCAmZGVjaW1hbFBvaW50LCAmc2lnbiwg
TlVMTCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVzdWx0KTsKKyAgICAgICAg
ZGVjaW1hbFBvaW50ICs9IGRlY2ltYWxBZGp1c3Q7CisKKyAgICAgICAgaW50IGkgPSAwOworICAg
ICAgICBpZiAoc2lnbikKKyAgICAgICAgICAgIGJ1ZltpKytdID0gJy0nOworCisgICAgICAgIGlm
IChkZWNpbWFsUG9pbnQgPT0gOTk5KQorICAgICAgICAgICAgc3RyY3B5KGJ1ZiArIGksIHJlc3Vs
dCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYnVmW2krK10gPSByZXN1bHRbMF07CisK
KyAgICAgICAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cy0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAg
ICAgICAgICBmID0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpIC0gMTsKKworICAgICAgICAgICAg
aWYgKGxlbmd0aCA+IDEgJiYgZiA+IDApIHsKKyAgICAgICAgICAgICAgICBidWZbaSsrXSA9ICcu
JzsKKyAgICAgICAgICAgICAgICBpbnQgaGF2ZUZEaWdpdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGxl
bmd0aCkgLSAxOworICAgICAgICAgICAgICAgIGlmIChmIDwgaGF2ZUZEaWdpdHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RybmNweShidWYraSxyZXN1bHQrMSwgZik7CisgICAgICAgICAgICAg
ICAgICAgIGkgKz0gZjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBzdHJjcHkoYnVmK2kscmVzdWx0KzEpOworICAgICAgICAgICAgICAgICAgICBpICs9IHN0
YXRpY19jYXN0PGludD4obGVuZ3RoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgZi1oYXZlRkRpZ2l0czsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnVmW2krK10gPSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBidWZbaSsrXSA9ICdlJzsKKyAgICAgICAgICAgIGJ1ZltpKytdID0gKGRlY2ltYWxQ
b2ludCA+PSAwKSA/ICcrJyA6ICctJzsKKyAgICAgICAgICAgIC8vIGRlY2ltYWxQb2ludCBjYW4n
dCBiZSBtb3JlIHRoYW4gMyBkaWdpdHMgZGVjaW1hbCBnaXZlbiB0aGUKKyAgICAgICAgICAgIC8v
IG5hdHVyZSBvZiBmbG9hdCByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgaW50IGV4cG9uZW50
aWFsID0gZGVjaW1hbFBvaW50IC0gMTsKKyAgICAgICAgICAgIGlmIChleHBvbmVudGlhbCA8IDAp
IHsKKyAgICAgICAgICAgICAgICBleHBvbmVudGlhbCA9IGV4cG9uZW50aWFsICogLTE7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXhwb25lbnRpYWwgPj0gMTAwKQorICAgICAgICAg
ICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhwb25lbnRpYWwgLyAx
MDApOworICAgICAgICAgICAgaWYgKGV4cG9uZW50aWFsID49IDEwKQorICAgICAgICAgICAgICAg
IGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgKGV4cG9uZW50aWFsICUgMTAwKSAv
IDEwKTsKKyAgICAgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhw
b25lbnRpYWwgJSAxMCk7CisgICAgICAgICAgICBidWZbaSsrXSA9ICdcMCc7CisgICAgICAgIH0K
KworICAgICAgICBBU1NFUlQoaSA8PSA4MCk7CisKKyAgICAgICAga2pzX2ZyZWVkdG9hKHJlc3Vs
dCk7CisKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGJ1Zik7CisgICAgfQorICAgIGNhc2UgVG9Q
cmVjaXNpb246IHsKKyAgICAgICAgaW50IGUgPSAwOworICAgICAgICBVU3RyaW5nIG07CisKKyAg
ICAgICAgZG91YmxlIGRwID0gYXJnc1swXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7Cisg
ICAgICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGlmIChpc25hbihk
cCkgfHwgaXNuYW4oeCkgfHwgaXNpbmYoeCkpCisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
di0+dG9TdHJpbmcoZXhlYykpOworCisgICAgICAgIFVTdHJpbmcgcyA9ICIiOworICAgICAgICBp
ZiAoeCA8IDApIHsKKyAgICAgICAgICAgIHMgPSAiLSI7CisgICAgICAgICAgICB4ID0gLXg7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIShkcCA+PSAxICYmIGRwIDw9IDIxKSkgLy8gdHJ1ZSBm
b3IgTmFOCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAi
dG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEiKTsKKyAgICAg
ICAgaW50IHAgPSAoaW50KWRwOworCisgICAgICAgIGlmICh4ICE9IDApIHsKKyAgICAgICAgICAg
IGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGxvZzEwKHgpKTsKKyAgICAgICAgICAgIGRvdWJsZSB0ZW5z
ID0gaW50UG93MTAoZSAtIHAgKyAxKTsKKyAgICAgICAgICAgIGRvdWJsZSBuID0gZmxvb3IoeCAv
IHRlbnMpOworICAgICAgICAgICAgaWYgKG4gPCBpbnRQb3cxMChwIC0gMSkpIHsKKyAgICAgICAg
ICAgICAgICBlID0gZSAtIDE7CisgICAgICAgICAgICAgICAgdGVucyA9IGludFBvdzEwKGUgLSBw
ICsgMSk7CisgICAgICAgICAgICAgICAgbiA9IGZsb29yKHggLyB0ZW5zKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGZhYnMoKG4gKyAxLjApICogdGVucyAtIHgpIDw9IGZhYnMo
biAqIHRlbnMgLSB4KSkKKyAgICAgICAgICAgICAgICArK247CisgICAgICAgICAgICAvLyBtYWlu
dGFpbiBuIDwgMTBeKHApCisgICAgICAgICAgICBpZiAobiA+PSBpbnRQb3cxMChwKSkgeworICAg
ICAgICAgICAgICAgIG4gPSBuIC8gMTAuMDsKKyAgICAgICAgICAgICAgICBlID0gZSArIDE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoaW50UG93MTAocCAtIDEpIDw9IG4pOwor
ICAgICAgICAgICAgQVNTRVJUKG4gPCBpbnRQb3cxMChwKSk7CisKKyAgICAgICAgICAgIG0gPSBp
bnRlZ2VyX3BhcnRfbm9leHAobik7CisgICAgICAgICAgICBpZiAoZSA8IC02IHx8IGUgPj0gcCkg
eworICAgICAgICAgICAgICAgIGlmIChtLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgICAg
IG0gPSBtLnN1YnN0cigwLDEpICsgIi4iICsgbS5zdWJzdHIoMSk7CisgICAgICAgICAgICAgICAg
aWYgKGUgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsg
ImUrIiArIFVTdHJpbmc6OmZyb20oZSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUtIiArIFVTdHJpbmc6OmZyb20o
LWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG0gPSBj
aGFyX3NlcXVlbmNlKCcwJyxwKTsKKyAgICAgICAgICAgIGUgPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGUgPT0gcCAtIDEpCisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcocyttKTsK
KyAgICAgICAgZWxzZSBpZiAoZSA+PSAwKSB7CisgICAgICAgICAgICBpZiAoZSArIDEgPCBtLnNp
emUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcocyArIG0uc3Vic3RyKDAsIGUg
KyAxKSArICIuIiArIG0uc3Vic3RyKGUgKyAxKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtLnN1YnN0cigwLCBlICsgMSkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBqc1N0cmluZyhzICsgIjAuIiArIGNoYXJfc2VxdWVuY2UoJzAn
LCAtKGUgKyAxKSkgKyBtKTsKKyAgICB9CisKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJPYmplY3RJbXAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MjIsNjYgKzQxMCw1OSBAQCBjb25zdCBDbGFzc0lu
Zm8gTnVtYmVyT2JqZWN0SW1wOjppbmZvID0geyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlv
bkltcDo6aW5mbwogQGVuZAogKi8KIE51bWJlck9iamVjdEltcDo6TnVtYmVyT2JqZWN0SW1wKEV4
ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgTnVtYmVyUHJvdG90
eXBlKiBudW1iZXJQcm90bykKLSAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKKyAg
ICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKQogewotICAvLyBOdW1iZXIuUHJvdG90
eXBlCi0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBudW1iZXJQ
cm90byxEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKKyAgICAvLyBOdW1iZXIuUHJvdG90
eXBlCisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG51bWJl
clByb3RvLCBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIAotICAvLyBuby4gb2YgYXJn
dW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICAg
IC8vIG5vLiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCisgICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKIH0KIAogYm9vbCBOdW1iZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogewotICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PE51bWJlck9iamVj
dEltcCwgSW50ZXJuYWxGdW5jdGlvbkltcD4oZXhlYywgJm51bWJlclRhYmxlLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TnVtYmVyT2Jq
ZWN0SW1wLCBJbnRlcm5hbEZ1bmN0aW9uSW1wPihleGVjLCAmbnVtYmVyVGFibGUsIHRoaXMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUgKk51bWJlck9iamVjdEltcDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorSlNWYWx1ZSogTnVtYmVy
T2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3QK
IHsKLSAgLy8gRUNNQSAxNS43LjMKLSAgc3dpdGNoKHRva2VuKSB7Ci0gIGNhc2UgTmFOVmFsdWU6
Ci0gICAgcmV0dXJuIGpzTmFOKCk7Ci0gIGNhc2UgTmVnSW5maW5pdHk6Ci0gICAgcmV0dXJuIGpz
TnVtYmVyQ2VsbCgtSW5mKTsKLSAgY2FzZSBQb3NJbmZpbml0eToKLSAgICByZXR1cm4ganNOdW1i
ZXJDZWxsKEluZik7Ci0gIGNhc2UgTWF4VmFsdWU6Ci0gICAgcmV0dXJuIGpzTnVtYmVyQ2VsbCgx
Ljc5NzY5MzEzNDg2MjMxNTdFKzMwOCk7Ci0gIGNhc2UgTWluVmFsdWU6Ci0gICAgcmV0dXJuIGpz
TnVtYmVyQ2VsbCg1RS0zMjQpOwotICB9Ci0gIHJldHVybiBqc051bGwoKTsKKyAgICAvLyBFQ01B
IDE1LjcuMworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICBjYXNlIE5hTlZhbHVlOgorICAgICAg
ICByZXR1cm4ganNOYU4oKTsKKyAgICBjYXNlIE5lZ0luZmluaXR5OgorICAgICAgICByZXR1cm4g
anNOdW1iZXJDZWxsKC1JbmYpOworICAgIGNhc2UgUG9zSW5maW5pdHk6CisgICAgICAgIHJldHVy
biBqc051bWJlckNlbGwoSW5mKTsKKyAgICBjYXNlIE1heFZhbHVlOgorICAgICAgICByZXR1cm4g
anNOdW1iZXJDZWxsKDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KTsKKyAgICBjYXNlIE1pblZhbHVl
OgorICAgICAgICByZXR1cm4ganNOdW1iZXJDZWxsKDVFLTMyNCk7CisgICAgfQorICAgIHJldHVy
biBqc051bGwoKTsKIH0KIAogYm9vbCBOdW1iZXJPYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1
Y3QoKSBjb25zdAogewotICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAv
LyBFQ01BIDE1LjcuMQotSlNPYmplY3QgKk51bWJlck9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK0pTT2JqZWN0KiBOdW1iZXJPYmplY3RJbXA6
OmNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gIEpTT2Jq
ZWN0ICpwcm90byA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyUHJvdG90eXBl
KCk7Ci0gIE51bWJlckluc3RhbmNlICpvYmoobmV3IE51bWJlckluc3RhbmNlKHByb3RvKSk7Ci0K
LSAgZG91YmxlIG47Ci0gIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICBuID0gMDsKLSAgZWxzZQot
ICAgIG4gPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICBKU09iamVjdCogcHJvdG8gPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlclByb3RvdHlwZSgpOworICAgIE51bWJl
ckluc3RhbmNlKiBvYmogPSBuZXcgTnVtYmVySW5zdGFuY2UocHJvdG8pOwogCi0gIG9iai0+c2V0
SW50ZXJuYWxWYWx1ZShqc051bWJlcihuKSk7Ci0KLSAgcmV0dXJuIG9iajsKKyAgICBkb3VibGUg
biA9IGFyZ3MuaXNFbXB0eSgpID8gMCA6IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgIG9i
ai0+c2V0SW50ZXJuYWxWYWx1ZShqc051bWJlcihuKSk7CisgICAgcmV0dXJuIG9iajsKIH0KIAog
Ly8gRUNNQSAxNS43LjIKLUpTVmFsdWUgKk51bWJlck9iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBKU09iamVjdCogLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3Mp
CitKU1ZhbHVlKiBOdW1iZXJPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICBpZiAoYXJncy5pc0VtcHR5KCkp
Ci0gICAgcmV0dXJuIGpzTnVtYmVyKDApOwotICBlbHNlCi0gICAgcmV0dXJuIGpzTnVtYmVyKGFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBkb3VibGUgbiA9IGFyZ3MuaXNFbXB0eSgpID8g
MCA6IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgIHJldHVybiBqc051bWJlcihuKTsKIH0K
KworfSAvLyBuYW1lc3BhY2UgS0pTCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvb2Jq
ZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCmluZGV4IDgwNTIxN2UuLjY5
N2I1NmEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCkBAIC0yNDMsOSArMjQzLDggQEAgdm9pZCBKU09i
amVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBKU1ZhbHVlICp2YWwKICAgfQogICAKICAgaWYgKGhhc0dldHRlcnNPclNldHRlcnMpIHsKLSAg
ICBpZiAoY2hlY2tSZWFkT25seSAmJiAhY2FuUHV0KGV4ZWMscHJvcGVydHlOYW1lKSkgeworICAg
IGlmIChjaGVja1JlYWRPbmx5ICYmICFjYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICBvYmogPSB0aGlzOwogICAgIHdoaWxlICh0cnVlKSB7Cg==
</data>
<flag name="review"
          id="7878"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18146</attachid>
            <date>2007-12-28 11:14:47 -0800</date>
            <delta_ts>2007-12-28 20:20:47 -0800</delta_ts>
            <desc>Break out callAsFunction implmentations into static functions</desc>
            <filename>Break-out-callAsFunction-implmentations-into-static-functions.patch</filename>
            <type>text/plain</type>
            <size>16987</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NGE1MzM4MjBmMTZmNmM0ZmYwMWQ5YjE3NzM0ZjAyNjc1OTE0M2FlMApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCmluZGV4IDg2YzE5NDAuLjkyOTk2YzYgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bnVtYmVyX29iamVjdC5jcHAKQEAgLTEzOSwyNTkgKzEzOSwyNzEgQEAgc3RhdGljIGRvdWJsZSBp
bnRQb3cxMChpbnQgZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQpOwog
fQogCi0vLyBFQ01BIDE1LjcuNC4yIC0gMTUuNy40LjcKLUpTVmFsdWUqIE51bWJlclByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgLy8gbm8gZ2VuZXJp
YyBmdW5jdGlvbi4gInRoaXMiIGhhcyB0byBiZSBhIE51bWJlciBvYmplY3QKLSAgICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nh
c3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIHN3aXRj
aCAoaWQpIHsKLSAgICBjYXNlIFRvU3RyaW5nOiB7Ci0gICAgICAgIGRvdWJsZSBkcmFkaXggPSAx
MDsKLSAgICAgICAgaWYgKCFhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRyYWRpeCA9IGFy
Z3NbMF0tPnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwotICAgICAgICBpZiAoZHJhZGl4ID49
IDIgJiYgZHJhZGl4IDw9IDM2ICYmIGRyYWRpeCAhPSAxMCkgeyAvLyBmYWxzZSBmb3IgTmFOCi0g
ICAgICAgICAgICBpbnQgcmFkaXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYWRpeCk7Ci0gICAgICAg
ICAgICBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJz
dHV2d3h5eiI7Ci0gICAgICAgICAgICAvLyBJTlRfTUFYIHJlc3VsdHMgaW4gMTAyNCBjaGFyYWN0
ZXJzIGxlZnQgb2YgdGhlIGRvdCB3aXRoIHJhZGl4IDIKLSAgICAgICAgICAgIC8vIGdpdmUgdGhl
IHNhbWUgc3BhY2Ugb24gdGhlIHJpZ2h0IHNpZGUuIHNhZmV0eSBjaGVja3MgYXJlIGluIHBsYWNl
Ci0gICAgICAgICAgICAvLyB1bmxlc3Mgc29tZW9uZSBmaW5kcyBhIHByZWNpc2UgcnVsZS4KLSAg
ICAgICAgICAgIGNoYXIgc1syMDQ4ICsgM107Ci0gICAgICAgICAgICBkb3VibGUgeCA9IHYtPnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nOjpmcm9tKHgpKTsKLQotICAgICAg
ICAgICAgLy8gYXBwbHkgYWxnb3JpdGhtIG9uIGFic29sdXRlIHZhbHVlLiBhZGQgc2lnbiBsYXRl
ci4KLSAgICAgICAgICAgIGJvb2wgbmVnID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoeCA8IDAu
MCkgewotICAgICAgICAgICAgICAgIG5lZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgeCA9IC14
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY29udmVydCBpbnRlZ2VyIHBvcnRpb24K
LSAgICAgICAgICAgIGRvdWJsZSBmID0gZmxvb3IoeCk7Ci0gICAgICAgICAgICBkb3VibGUgZCA9
IGY7Ci0gICAgICAgICAgICBjaGFyKiBkb3QgPSBzICsgc2l6ZW9mKHMpIC8gMjsKLSAgICAgICAg
ICAgIGNoYXIqIHAgPSBkb3Q7Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgICAgICBk
byB7Ci0gICAgICAgICAgICAgICAgKi0tcCA9IGRpZ2l0c1tzdGF0aWNfY2FzdDxpbnQ+KGZtb2Qo
ZCwgcmFkaXgpKV07Ci0gICAgICAgICAgICAgICAgZCAvPSByYWRpeDsKLSAgICAgICAgICAgIH0g
d2hpbGUgKChkIDw9IC0xLjAgfHwgZCA+PSAxLjApICYmIHAgPiBzKTsKLSAgICAgICAgICAgIC8v
IGFueSBkZWNpbWFsIGZyYWN0aW9uID8KLSAgICAgICAgICAgIGQgPSB4IC0gZjsKLSAgICAgICAg
ICAgIGNvbnN0IGRvdWJsZSBlcHMgPSAwLjAwMTsgLy8gVE9ETzogZ3Vlc3NlZC4gYmFzZSBvbiBy
YWRpeCA/Ci0gICAgICAgICAgICBpZiAoZCA8IC1lcHMgfHwgZCA+IGVwcykgewotICAgICAgICAg
ICAgICAgICpkb3QrKyA9ICcuJzsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgIGQgKj0gcmFkaXg7Ci0gICAgICAgICAgICAgICAgICAgICpkb3QrKyA9IGRpZ2l0c1tz
dGF0aWNfY2FzdDxpbnQ+KGQpXTsKLSAgICAgICAgICAgICAgICAgICAgZCAtPSBzdGF0aWNfY2Fz
dDxpbnQ+KGQpOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKChkIDwgLWVwcyB8fCBkID4gZXBz
KSAmJiBkb3QgLSBzIDwgc3RhdGljX2Nhc3Q8aW50PihzaXplb2YocykpIC0gMSk7Ci0gICAgICAg
ICAgICAgICAgKmRvdCA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBhZGQg
c2lnbiBpZiBuZWdhdGl2ZQotICAgICAgICAgICAgaWYgKG5lZykKLSAgICAgICAgICAgICAgICAq
LS1wID0gJy0nOwotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHApOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7Ci0gICAg
fQotICAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6IC8qIFRPRE8gKi8KLSAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBjYXNlIFZhbHVlT2Y6Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcih2LT50b051bWJlcihleGVjKSk7Ci0gICAgY2FzZSBUb0ZpeGVkOiB7Ci0g
ICAgICAgIEpTVmFsdWUqIGZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKLSAgICAgICAgZG91Ymxl
IGRmID0gZnJhY3Rpb25EaWdpdHMtPnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgaWYgKCEoZGYg
Pj0gMCAmJiBkZiA8PSAyMCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBS
YW5nZUVycm9yLCAidG9GaXhlZCgpIGRpZ2l0cyBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBh
bmQgMjAiKTsKLSAgICAgICAgaW50IGYgPSAoaW50KWRmOwotCisgICAgZG91YmxlIGRyYWRpeCA9
IDEwOworICAgIGlmICghYXJncy5pc0VtcHR5KCkpCisgICAgICAgIGRyYWRpeCA9IGFyZ3NbMF0t
PnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgIGlmIChkcmFkaXggPj0gMiAmJiBkcmFk
aXggPD0gMzYgJiYgZHJhZGl4ICE9IDEwKSB7IC8vIGZhbHNlIGZvciBOYU4KKyAgICAgICAgaW50
IHJhZGl4ID0gc3RhdGljX2Nhc3Q8aW50PihkcmFkaXgpOworICAgICAgICBjb25zdCBjaGFyIGRp
Z2l0c1tdID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgICAg
IC8vIElOVF9NQVggcmVzdWx0cyBpbiAxMDI0IGNoYXJhY3RlcnMgbGVmdCBvZiB0aGUgZG90IHdp
dGggcmFkaXggMgorICAgICAgICAvLyBnaXZlIHRoZSBzYW1lIHNwYWNlIG9uIHRoZSByaWdodCBz
aWRlLiBzYWZldHkgY2hlY2tzIGFyZSBpbiBwbGFjZQorICAgICAgICAvLyB1bmxlc3Mgc29tZW9u
ZSBmaW5kcyBhIHByZWNpc2UgcnVsZS4KKyAgICAgICAgY2hhciBzWzIwNDggKyAzXTsKICAgICAg
ICAgZG91YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKLSAgICAgICAgaWYgKGlzbmFuKHgpKQot
ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJOYU4iKTsKLQotICAgICAgICBVU3RyaW5nIHMg
PSAiIjsKLSAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBzICs9ICItIjsKKyAgICAg
ICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQorICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KFVTdHJpbmc6OmZyb20oeCkpOworICAgICAgICAKKyAgICAgICAgLy8gYXBwbHkgYWxnb3JpdGht
IG9uIGFic29sdXRlIHZhbHVlLiBhZGQgc2lnbiBsYXRlci4KKyAgICAgICAgYm9vbCBuZWcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKHggPCAwLjApIHsKKyAgICAgICAgICAgIG5lZyA9IHRydWU7CiAg
ICAgICAgICAgICB4ID0gLXg7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoeCA+PSBwb3coMTAu
MCwgMjEuMCkpCi0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcocytVU3RyaW5nOjpmcm9tKHgp
KTsKLQotICAgICAgICBkb3VibGUgbiA9IGZsb29yKHgqcG93KDEwLjAsIGYpKTsKLSAgICAgICAg
aWYgKGZhYnMobiAvIHBvdygxMC4wLCBmKSAtIHgpID49IGZhYnMoKG4gKyAxKSAvIHBvdygxMC4w
LCBmKSAtIHgpKQotICAgICAgICAgICAgbisrOwotCi0gICAgICAgIFVTdHJpbmcgbSA9IGludGVn
ZXJfcGFydF9ub2V4cChuKTsKLQotICAgICAgICBpbnQgayA9IG0uc2l6ZSgpOwotICAgICAgICBp
ZiAoayA8PSBmKSB7Ci0gICAgICAgICAgICBVU3RyaW5nIHogPSAiIjsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZisxLWs7IGkrKykKLSAgICAgICAgICAgICAgICB6ICs9ICIwIjsK
LSAgICAgICAgICAgIG0gPSB6ICsgbTsKLSAgICAgICAgICAgIGsgPSBmICsgMTsKLSAgICAgICAg
ICAgIEFTU0VSVChrID09IG0uc2l6ZSgpKTsKKyAgICAgICAgLy8gY29udmVydCBpbnRlZ2VyIHBv
cnRpb24KKyAgICAgICAgZG91YmxlIGYgPSBmbG9vcih4KTsKKyAgICAgICAgZG91YmxlIGQgPSBm
OworICAgICAgICBjaGFyKiBkb3QgPSBzICsgc2l6ZW9mKHMpIC8gMjsKKyAgICAgICAgY2hhciog
cCA9IGRvdDsKKyAgICAgICAgKnAgPSAnXDAnOworICAgICAgICBkbyB7CisgICAgICAgICAgICAq
LS1wID0gZGlnaXRzW3N0YXRpY19jYXN0PGludD4oZm1vZChkLCByYWRpeCkpXTsKKyAgICAgICAg
ICAgIGQgLz0gcmFkaXg7CisgICAgICAgIH0gd2hpbGUgKChkIDw9IC0xLjAgfHwgZCA+PSAxLjAp
ICYmIHAgPiBzKTsKKyAgICAgICAgLy8gYW55IGRlY2ltYWwgZnJhY3Rpb24gPworICAgICAgICBk
ID0geCAtIGY7CisgICAgICAgIGNvbnN0IGRvdWJsZSBlcHMgPSAwLjAwMTsgLy8gVE9ETzogZ3Vl
c3NlZC4gYmFzZSBvbiByYWRpeCA/CisgICAgICAgIGlmIChkIDwgLWVwcyB8fCBkID4gZXBzKSB7
CisgICAgICAgICAgICAqZG90KysgPSAnLic7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgZCAqPSByYWRpeDsKKyAgICAgICAgICAgICAgICAqZG90KysgPSBkaWdpdHNbc3RhdGlj
X2Nhc3Q8aW50PihkKV07CisgICAgICAgICAgICAgICAgZCAtPSBzdGF0aWNfY2FzdDxpbnQ+KGQp
OworICAgICAgICAgICAgfSB3aGlsZSAoKGQgPCAtZXBzIHx8IGQgPiBlcHMpICYmIGRvdCAtIHMg
PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihzKSkgLSAxKTsKKyAgICAgICAgICAgICpkb3QgPSAn
XDAnOwogICAgICAgICB9Ci0gICAgICAgIGlmIChrLWYgPCBtLnNpemUoKSkKLSAgICAgICAgICAg
IHJldHVybiBqc1N0cmluZyhzK20uc3Vic3RyKDAsay1mKSsiLiIrbS5zdWJzdHIoay1mKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzK20uc3Vic3RyKDAsay1m
KSk7CisgICAgICAgIC8vIGFkZCBzaWduIGlmIG5lZ2F0aXZlCisgICAgICAgIGlmIChuZWcpCisg
ICAgICAgICAgICAqLS1wID0gJy0nOworICAgICAgICByZXR1cm4ganNTdHJpbmcocCk7CiAgICAg
fQotICAgIGNhc2UgVG9FeHBvbmVudGlhbDogewotICAgICAgICBkb3VibGUgeCA9IHYtPnRvTnVt
YmVyKGV4ZWMpOwotCi0gICAgICAgIGlmIChpc25hbih4KSB8fCBpc2luZih4KSkKLSAgICAgICAg
ICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nOjpmcm9tKHgpKTsKKyAgICByZXR1cm4ganNTdHJp
bmcodi0+dG9TdHJpbmcoZXhlYykpOworfQogCi0gICAgICAgIEpTVmFsdWUqIGZyYWN0aW9uRGln
aXRzID0gYXJnc1swXTsKLSAgICAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMtPnRvSW50
ZWdlcihleGVjKTsKLSAgICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCi0gICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9FeHBvbmVudGlhbCgp
IGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOwotICAgICAgICBpbnQgZiA9IChpbnQp
ZGY7Ci0KLSAgICAgICAgaW50IGRlY2ltYWxBZGp1c3QgPSAwOwotICAgICAgICBpZiAoIWZyYWN0
aW9uRGlnaXRzLT5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgbG9neCA9IGZs
b29yKGxvZzEwKGZhYnMoeCkpKTsKLSAgICAgICAgICAgIHggLz0gcG93KDEwLjAsIGxvZ3gpOwot
ICAgICAgICAgICAgZG91YmxlIGZ4ID0gZmxvb3IoeCAqIHBvdygxMC4wLCBmKSkgLyBwb3coMTAu
MCwgZik7Ci0gICAgICAgICAgICBkb3VibGUgY3ggPSBjZWlsKHggKiBwb3coMTAuMCwgZikpIC8g
cG93KDEwLjAsIGYpOwotCi0gICAgICAgICAgICBpZiAoZmFicyhmeC14KSA8IGZhYnMoY3gteCkp
Ci0gICAgICAgICAgICAgICAgeCA9IGZ4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHggPSBjeDsKLQotICAgICAgICAgICAgZGVjaW1hbEFkanVzdCA9IHN0YXRpY19jYXN0PGlu
dD4obG9neCk7Ci0gICAgICAgIH0KK3N0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb0ZpeGVkKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSogdiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBKU1ZhbHVl
KiBmcmFjdGlvbkRpZ2l0cyA9IGFyZ3NbMF07CisgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdp
dHMtPnRvSW50ZWdlcihleGVjKTsKKyAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvRml4ZWQoKSBkaWdp
dHMgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7CisgICAgaW50IGYgPSAoaW50
KWRmOworICAgIAorICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKGlz
bmFuKHgpKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoIk5hTiIpOworICAgIAorICAgIFVTdHJp
bmcgcyA9ICIiOworICAgIGlmICh4IDwgMCkgeworICAgICAgICBzICs9ICItIjsKKyAgICAgICAg
eCA9IC14OworICAgIH0KKyAgICAKKyAgICBpZiAoeCA+PSBwb3coMTAuMCwgMjEuMCkpCisgICAg
ICAgIHJldHVybiBqc1N0cmluZyhzK1VTdHJpbmc6OmZyb20oeCkpOworICAgIAorICAgIGRvdWJs
ZSBuID0gZmxvb3IoeCpwb3coMTAuMCwgZikpOworICAgIGlmIChmYWJzKG4gLyBwb3coMTAuMCwg
ZikgLSB4KSA+PSBmYWJzKChuICsgMSkgLyBwb3coMTAuMCwgZikgLSB4KSkKKyAgICAgICAgbisr
OworICAgIAorICAgIFVTdHJpbmcgbSA9IGludGVnZXJfcGFydF9ub2V4cChuKTsKKyAgICAKKyAg
ICBpbnQgayA9IG0uc2l6ZSgpOworICAgIGlmIChrIDw9IGYpIHsKKyAgICAgICAgVVN0cmluZyB6
ID0gIiI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZiArIDEgLSBrOyBpKyspCisgICAg
ICAgICAgICB6ICs9ICIwIjsKKyAgICAgICAgbSA9IHogKyBtOworICAgICAgICBrID0gZiArIDE7
CisgICAgICAgIEFTU0VSVChrID09IG0uc2l6ZSgpKTsKKyAgICB9CisgICAgaW50IGtNaW51c2Yg
PSBrIC0gZjsKKyAgICBpZiAoa01pbnVzZiA8IG0uc2l6ZSgpKQorICAgICAgICByZXR1cm4ganNT
dHJpbmcocyArIG0uc3Vic3RyKDAsIGtNaW51c2YpICsgIi4iICsgbS5zdWJzdHIoa01pbnVzZikp
OworICAgIHJldHVybiBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwga01pbnVzZikpOworfQogCi0g
ICAgICAgIGNoYXIgYnVmWzgwXTsKLSAgICAgICAgaW50IGRlY2ltYWxQb2ludDsKLSAgICAgICAg
aW50IHNpZ247Ci0KLSAgICAgICAgaWYgKGlzbmFuKHgpKQotICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKCJOYU4iKTsKLQotICAgICAgICBjaGFyKiByZXN1bHQgPSBranNfZHRvYSh4LCAwLCAw
LCAmZGVjaW1hbFBvaW50LCAmc2lnbiwgTlVMTCk7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBz
dHJsZW4ocmVzdWx0KTsKLSAgICAgICAgZGVjaW1hbFBvaW50ICs9IGRlY2ltYWxBZGp1c3Q7Ci0K
LSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBpZiAoc2lnbikKLSAgICAgICAgICAgIGJ1Zltp
KytdID0gJy0nOwotCi0gICAgICAgIGlmIChkZWNpbWFsUG9pbnQgPT0gOTk5KQotICAgICAgICAg
ICAgc3RyY3B5KGJ1ZiArIGksIHJlc3VsdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
YnVmW2krK10gPSByZXN1bHRbMF07Ci0KLSAgICAgICAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cy0+
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBmID0gc3RhdGljX2Nhc3Q8aW50PihsZW5n
dGgpIC0gMTsKLQotICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgZiA+IDApIHsKLSAgICAg
ICAgICAgICAgICBidWZbaSsrXSA9ICcuJzsKLSAgICAgICAgICAgICAgICBpbnQgaGF2ZUZEaWdp
dHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkgLSAxOwotICAgICAgICAgICAgICAgIGlmIChm
IDwgaGF2ZUZEaWdpdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RybmNweShidWYraSxyZXN1
bHQrMSwgZik7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gZjsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoYnVmK2kscmVzdWx0KzEpOwotICAg
ICAgICAgICAgICAgICAgICBpICs9IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAtIDE7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZi1oYXZlRkRpZ2l0czsgaisrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2krK10gPSAnMCc7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQorc3RhdGljIEpTVmFsdWUqIG51bWJlclRvRXhwb25lbnRpYWwoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGRvdWJs
ZSB4ID0gdi0+dG9OdW1iZXIoZXhlYyk7CisKKyAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkp
CisgICAgICAgIHJldHVybiBqc1N0cmluZyhVU3RyaW5nOjpmcm9tKHgpKTsKKworICAgIEpTVmFs
dWUqIGZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKKyAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRp
Z2l0cy0+dG9JbnRlZ2VyKGV4ZWMpOworICAgIGlmICghKGRmID49IDAgJiYgZGYgPD0gMjApKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9FeHBvbmVudGlh
bCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOworICAgIGludCBmID0gKGludClk
ZjsKKworICAgIGludCBkZWNpbWFsQWRqdXN0ID0gMDsKKyAgICBpZiAoIWZyYWN0aW9uRGlnaXRz
LT5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGRvdWJsZSBsb2d4ID0gZmxvb3IobG9nMTAoZmFi
cyh4KSkpOworICAgICAgICB4IC89IHBvdygxMC4wLCBsb2d4KTsKKyAgICAgICAgZG91YmxlIGZ4
ID0gZmxvb3IoeCAqIHBvdygxMC4wLCBmKSkgLyBwb3coMTAuMCwgZik7CisgICAgICAgIGRvdWJs
ZSBjeCA9IGNlaWwoeCAqIHBvdygxMC4wLCBmKSkgLyBwb3coMTAuMCwgZik7CisKKyAgICAgICAg
aWYgKGZhYnMoZnggLSB4KSA8IGZhYnMoY3ggLSB4KSkKKyAgICAgICAgICAgIHggPSBmeDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeCA9IGN4OwogCi0gICAgICAgICAgICBidWZbaSsrXSA9
ICdlJzsKLSAgICAgICAgICAgIGJ1ZltpKytdID0gKGRlY2ltYWxQb2ludCA+PSAwKSA/ICcrJyA6
ICctJzsKLSAgICAgICAgICAgIC8vIGRlY2ltYWxQb2ludCBjYW4ndCBiZSBtb3JlIHRoYW4gMyBk
aWdpdHMgZGVjaW1hbCBnaXZlbiB0aGUKLSAgICAgICAgICAgIC8vIG5hdHVyZSBvZiBmbG9hdCBy
ZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgaW50IGV4cG9uZW50aWFsID0gZGVjaW1hbFBvaW50
IC0gMTsKLSAgICAgICAgICAgIGlmIChleHBvbmVudGlhbCA8IDApIHsKLSAgICAgICAgICAgICAg
ICBleHBvbmVudGlhbCA9IGV4cG9uZW50aWFsICogLTE7CisgICAgICAgIGRlY2ltYWxBZGp1c3Qg
PSBzdGF0aWNfY2FzdDxpbnQ+KGxvZ3gpOworICAgIH0KKyAgICAKKyAgICBjaGFyIGJ1Zls4MF07
CisgICAgaW50IGRlY2ltYWxQb2ludDsKKyAgICBpbnQgc2lnbjsKKyAgICAKKyAgICBpZiAoaXNu
YW4oeCkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygiTmFOIik7CisgICAgCisgICAgY2hhciog
cmVzdWx0ID0ga2pzX2R0b2EoeCwgMCwgMCwgJmRlY2ltYWxQb2ludCwgJnNpZ24sIE5VTEwpOwor
ICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVzdWx0KTsKKyAgICBkZWNpbWFsUG9pbnQgKz0g
ZGVjaW1hbEFkanVzdDsKKyAgICAKKyAgICBpbnQgaSA9IDA7CisgICAgaWYgKHNpZ24pCisgICAg
ICAgIGJ1ZltpKytdID0gJy0nOworICAgIAorICAgIGlmIChkZWNpbWFsUG9pbnQgPT0gOTk5KQor
ICAgICAgICBzdHJjcHkoYnVmICsgaSwgcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYnVm
W2krK10gPSByZXN1bHRbMF07CisgICAgICAgIAorICAgICAgICBpZiAoZnJhY3Rpb25EaWdpdHMt
PmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBmID0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgp
IC0gMTsKKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGggPiAxICYmIGYgPiAwKSB7CisgICAg
ICAgICAgICBidWZbaSsrXSA9ICcuJzsKKyAgICAgICAgICAgIGludCBoYXZlRkRpZ2l0cyA9IHN0
YXRpY19jYXN0PGludD4obGVuZ3RoKSAtIDE7CisgICAgICAgICAgICBpZiAoZiA8IGhhdmVGRGln
aXRzKSB7CisgICAgICAgICAgICAgICAgc3RybmNweShidWYraSxyZXN1bHQrMSwgZik7CisgICAg
ICAgICAgICAgICAgaSArPSBmOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzdHJjcHkoYnVmK2kscmVzdWx0KzEpOworICAgICAgICAgICAgICAgIGkgKz0gc3RhdGljX2Nh
c3Q8aW50PihsZW5ndGgpIC0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IGYtaGF2ZUZEaWdpdHM7IGorKykKKyAgICAgICAgICAgICAgICAgICAgYnVmW2krK10gPSAnMCc7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXhwb25lbnRpYWwgPj0gMTAwKQotICAg
ICAgICAgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhwb25lbnRp
YWwgLyAxMDApOwotICAgICAgICAgICAgaWYgKGV4cG9uZW50aWFsID49IDEwKQotICAgICAgICAg
ICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgKGV4cG9uZW50aWFsICUg
MTAwKSAvIDEwKTsKLSAgICAgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAn
ICsgZXhwb25lbnRpYWwgJSAxMCk7Ci0gICAgICAgICAgICBidWZbaSsrXSA9ICdcMCc7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJ1ZltpKytdID0gJ2UnOworICAgICAgICBidWZbaSsr
XSA9IChkZWNpbWFsUG9pbnQgPj0gMCkgPyAnKycgOiAnLSc7CisgICAgICAgIC8vIGRlY2ltYWxQ
b2ludCBjYW4ndCBiZSBtb3JlIHRoYW4gMyBkaWdpdHMgZGVjaW1hbCBnaXZlbiB0aGUKKyAgICAg
ICAgLy8gbmF0dXJlIG9mIGZsb2F0IHJlcHJlc2VudGF0aW9uCisgICAgICAgIGludCBleHBvbmVu
dGlhbCA9IGRlY2ltYWxQb2ludCAtIDE7CisgICAgICAgIGlmIChleHBvbmVudGlhbCA8IDApCisg
ICAgICAgICAgICBleHBvbmVudGlhbCAqPSAtMTsKKyAgICAgICAgaWYgKGV4cG9uZW50aWFsID49
IDEwMCkKKyAgICAgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhw
b25lbnRpYWwgLyAxMDApOworICAgICAgICBpZiAoZXhwb25lbnRpYWwgPj0gMTApCisgICAgICAg
ICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIChleHBvbmVudGlhbCAlIDEw
MCkgLyAxMCk7CisgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhw
b25lbnRpYWwgJSAxMCk7CisgICAgICAgIGJ1ZltpKytdID0gJ1wwJzsKKyAgICB9CiAKLSAgICAg
ICAgQVNTRVJUKGkgPD0gODApOworICAgIEFTU0VSVChpIDw9IDgwKTsKIAotICAgICAgICBranNf
ZnJlZWR0b2EocmVzdWx0KTsKKyAgICBranNfZnJlZWR0b2EocmVzdWx0KTsKIAotICAgICAgICBy
ZXR1cm4ganNTdHJpbmcoYnVmKTsKLSAgICB9Ci0gICAgY2FzZSBUb1ByZWNpc2lvbjogewotICAg
ICAgICBpbnQgZSA9IDA7Ci0gICAgICAgIFVTdHJpbmcgbTsKKyAgICByZXR1cm4ganNTdHJpbmco
YnVmKTsKK30KKyAgICAKK3N0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1ByZWNpc2lvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgaW50IGUgPSAw
OworICAgIFVTdHJpbmcgbTsKIAotICAgICAgICBkb3VibGUgZHAgPSBhcmdzWzBdLT50b0ludGVn
ZXJQcmVzZXJ2ZU5hTihleGVjKTsKLSAgICAgICAgZG91YmxlIHggPSB2LT50b051bWJlcihleGVj
KTsKLSAgICAgICAgaWYgKGlzbmFuKGRwKSB8fCBpc25hbih4KSB8fCBpc2luZih4KSkKLSAgICAg
ICAgICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7CisgICAgZG91YmxlIGRw
ID0gYXJnc1swXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CisgICAgZG91YmxlIHggPSB2
LT50b051bWJlcihleGVjKTsKKyAgICBpZiAoaXNuYW4oZHApIHx8IGlzbmFuKHgpIHx8IGlzaW5m
KHgpKQorICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOwogCi0gICAg
ICAgIFVTdHJpbmcgcyA9ICIiOwotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIHMg
PSAiLSI7Ci0gICAgICAgICAgICB4ID0gLXg7CisgICAgVVN0cmluZyBzID0gIiI7CisgICAgaWYg
KHggPCAwKSB7CisgICAgICAgIHMgPSAiLSI7CisgICAgICAgIHggPSAteDsKKyAgICB9CisgICAg
CisgICAgaWYgKCEoZHAgPj0gMSAmJiBkcCA8PSAyMSkpIC8vIHRydWUgZm9yIE5hTgorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9QcmVjaXNpb24oKSBhcmd1
bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEiKTsKKyAgICBpbnQgcCA9IChpbnQpZHA7Cisg
ICAgCisgICAgaWYgKHggIT0gMCkgeworICAgICAgICBlID0gc3RhdGljX2Nhc3Q8aW50Pihsb2cx
MCh4KSk7CisgICAgICAgIGRvdWJsZSB0ZW5zID0gaW50UG93MTAoZSAtIHAgKyAxKTsKKyAgICAg
ICAgZG91YmxlIG4gPSBmbG9vcih4IC8gdGVucyk7CisgICAgICAgIGlmIChuIDwgaW50UG93MTAo
cCAtIDEpKSB7CisgICAgICAgICAgICBlID0gZSAtIDE7CisgICAgICAgICAgICB0ZW5zID0gaW50
UG93MTAoZSAtIHAgKyAxKTsKKyAgICAgICAgICAgIG4gPSBmbG9vcih4IC8gdGVucyk7CiAgICAg
ICAgIH0KLQotICAgICAgICBpZiAoIShkcCA+PSAxICYmIGRwIDw9IDIxKSkgLy8gdHJ1ZSBmb3Ig
TmFOCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSYW5nZUVycm9yLCAidG9Q
cmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEiKTsKLSAgICAgICAg
aW50IHAgPSAoaW50KWRwOwotCi0gICAgICAgIGlmICh4ICE9IDApIHsKLSAgICAgICAgICAgIGUg
PSBzdGF0aWNfY2FzdDxpbnQ+KGxvZzEwKHgpKTsKLSAgICAgICAgICAgIGRvdWJsZSB0ZW5zID0g
aW50UG93MTAoZSAtIHAgKyAxKTsKLSAgICAgICAgICAgIGRvdWJsZSBuID0gZmxvb3IoeCAvIHRl
bnMpOwotICAgICAgICAgICAgaWYgKG4gPCBpbnRQb3cxMChwIC0gMSkpIHsKLSAgICAgICAgICAg
ICAgICBlID0gZSAtIDE7Ci0gICAgICAgICAgICAgICAgdGVucyA9IGludFBvdzEwKGUgLSBwICsg
MSk7Ci0gICAgICAgICAgICAgICAgbiA9IGZsb29yKHggLyB0ZW5zKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGZhYnMoKG4gKyAxLjApICogdGVucyAtIHgpIDw9IGZhYnMobiAq
IHRlbnMgLSB4KSkKLSAgICAgICAgICAgICAgICArK247Ci0gICAgICAgICAgICAvLyBtYWludGFp
biBuIDwgMTBeKHApCi0gICAgICAgICAgICBpZiAobiA+PSBpbnRQb3cxMChwKSkgewotICAgICAg
ICAgICAgICAgIG4gPSBuIC8gMTAuMDsKLSAgICAgICAgICAgICAgICBlID0gZSArIDE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoaW50UG93MTAocCAtIDEpIDw9IG4pOwotICAg
ICAgICAgICAgQVNTRVJUKG4gPCBpbnRQb3cxMChwKSk7Ci0KLSAgICAgICAgICAgIG0gPSBpbnRl
Z2VyX3BhcnRfbm9leHAobik7Ci0gICAgICAgICAgICBpZiAoZSA8IC02IHx8IGUgPj0gcCkgewot
ICAgICAgICAgICAgICAgIGlmIChtLnNpemUoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgIG0g
PSBtLnN1YnN0cigwLDEpICsgIi4iICsgbS5zdWJzdHIoMSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGUgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUr
IiArIFVTdHJpbmc6OmZyb20oZSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUtIiArIFVTdHJpbmc6OmZyb20oLWUp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG0gPSBjaGFy
X3NlcXVlbmNlKCcwJyxwKTsKLSAgICAgICAgICAgIGUgPSAwOworICAgICAgICAKKyAgICAgICAg
aWYgKGZhYnMoKG4gKyAxLjApICogdGVucyAtIHgpIDw9IGZhYnMobiAqIHRlbnMgLSB4KSkKKyAg
ICAgICAgICAgICsrbjsKKyAgICAgICAgLy8gbWFpbnRhaW4gbiA8IDEwXihwKQorICAgICAgICBp
ZiAobiA+PSBpbnRQb3cxMChwKSkgeworICAgICAgICAgICAgbiA9IG4gLyAxMC4wOworICAgICAg
ICAgICAgZSA9IGUgKyAxOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGUgPT0gcCAtIDEpCi0g
ICAgICAgICAgICByZXR1cm4ganNTdHJpbmcocyttKTsKLSAgICAgICAgZWxzZSBpZiAoZSA+PSAw
KSB7Ci0gICAgICAgICAgICBpZiAoZSArIDEgPCBtLnNpemUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4ganNTdHJpbmcocyArIG0uc3Vic3RyKDAsIGUgKyAxKSArICIuIiArIG0uc3Vic3RyKGUg
KyAxKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KHMgKyBtLnN1YnN0cigwLCBlICsgMSkpOworICAgICAgICBBU1NFUlQoaW50UG93MTAocCAtIDEp
IDw9IG4pOworICAgICAgICBBU1NFUlQobiA8IGludFBvdzEwKHApKTsKKworICAgICAgICBtID0g
aW50ZWdlcl9wYXJ0X25vZXhwKG4pOworICAgICAgICBpZiAoZSA8IC02IHx8IGUgPj0gcCkgewor
ICAgICAgICAgICAgaWYgKG0uc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICBtID0gbS5zdWJz
dHIoMCwgMSkgKyAiLiIgKyBtLnN1YnN0cigxKTsKKyAgICAgICAgICAgIGlmIChlID49IDApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUrIiArIFVTdHJpbmc6OmZy
b20oZSkpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtICsgImUtIiArIFVTdHJp
bmc6OmZyb20oLWUpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4ganNTdHJpbmcocyArICIw
LiIgKyBjaGFyX3NlcXVlbmNlKCcwJywgLShlICsgMSkpICsgbSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbSA9IGNoYXJfc2VxdWVuY2UoJzAnLHApOworICAgICAgICBlID0gMDsKKyAgICB9CisK
KyAgICBpZiAoZSA9PSBwIC0gMSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMrbSk7CisgICAg
ZWxzZSBpZiAoZSA+PSAwKSB7CisgICAgICAgIGlmIChlICsgMSA8IG0uc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtLnN1YnN0cigwLCBlICsgMSkgKyAiLiIgKyBtLnN1
YnN0cihlICsgMSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcocyArIG0uc3Vic3RyKDAsIGUg
KyAxKSk7CiAgICAgfQorICAgIHJldHVybiBqc1N0cmluZyhzICsgIjAuIiArIGNoYXJfc2VxdWVu
Y2UoJzAnLCAtKGUgKyAxKSkgKyBtKTsKK30KKworLy8gRUNNQSAxNS43LjQuMiAtIDE1LjcuNC43
CitKU1ZhbHVlKiBOdW1iZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgLy8gbm8gZ2Vu
ZXJpYyBmdW5jdGlvbi4gInRoaXMiIGhhcyB0byBiZSBhIE51bWJlciBvYmplY3QKKyAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKKyAgICBKU1ZhbHVlKiB2ID0gc3RhdGlj
X2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOworICAgIHN3
aXRjaCAoaWQpIHsKKyAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICByZXR1cm4gbnVtYmVyVG9T
dHJpbmcoZXhlYywgdiwgYXJncyk7CisgICAgY2FzZSBUb0xvY2FsZVN0cmluZzogLyogVE9ETyAq
LworICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOworICAgIGNhc2Ug
VmFsdWVPZjoKKyAgICAgICAgcmV0dXJuIHYtPnRvSlNOdW1iZXIoZXhlYyk7CisgICAgY2FzZSBU
b0ZpeGVkOgorICAgICAgICByZXR1cm4gbnVtYmVyVG9GaXhlZChleGVjLCB2LCBhcmdzKTsKKyAg
ICBjYXNlIFRvRXhwb25lbnRpYWw6CisgICAgICAgIHJldHVybiBudW1iZXJUb0V4cG9uZW50aWFs
KGV4ZWMsIHYsIGFyZ3MpOworICAgIGNhc2UgVG9QcmVjaXNpb246CisgICAgICAgIHJldHVybiBu
dW1iZXJUb1ByZWNpc2lvbihleGVjLCB2LCBhcmdzKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9
Cg==
</data>
<flag name="review"
          id="7879"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18147</attachid>
            <date>2007-12-28 11:14:51 -0800</date>
            <delta_ts>2007-12-28 20:20:52 -0800</delta_ts>
            <desc>More small attempts to make number code readable</desc>
            <filename>More-small-attempts-to-make-number-code-readable.patch</filename>
            <type>text/plain</type>
            <size>6348</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Yzg2YTRiOGY2MjM2OTlkM2MwODIwMzNkNWQwNThmY2ZjYWI3ZjY1OApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCmluZGV4IDkyOTk2YzYuLmNkNWMyNTQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bnVtYmVyX29iamVjdC5jcHAKQEAgLTIzMyw2ICsyMzMsMjIgQEAgc3RhdGljIEpTVmFsdWUqIG51
bWJlclRvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdz
KQogICAgIHJldHVybiBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwga01pbnVzZikpOwogfQogCit2
b2lkIGV4cG9uZW50aWFsUGFydFRvU3RyaW5nKGNoYXIqIGJ1ZiwgaW50JiBpLCBpbnQgZGVjaW1h
bFBvaW50KQoreworICAgIGJ1ZltpKytdID0gJ2UnOworICAgIGJ1ZltpKytdID0gKGRlY2ltYWxQ
b2ludCA+PSAwKSA/ICcrJyA6ICctJzsKKyAgICAvLyBkZWNpbWFsUG9pbnQgY2FuJ3QgYmUgbW9y
ZSB0aGFuIDMgZGlnaXRzIGRlY2ltYWwgZ2l2ZW4gdGhlCisgICAgLy8gbmF0dXJlIG9mIGZsb2F0
IHJlcHJlc2VudGF0aW9uCisgICAgaW50IGV4cG9uZW50aWFsID0gZGVjaW1hbFBvaW50IC0gMTsK
KyAgICBpZiAoZXhwb25lbnRpYWwgPCAwKQorICAgICAgICBleHBvbmVudGlhbCAqPSAtMTsKKyAg
ICBpZiAoZXhwb25lbnRpYWwgPj0gMTAwKQorICAgICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0
PGNoYXI+KCcwJyArIGV4cG9uZW50aWFsIC8gMTAwKTsKKyAgICBpZiAoZXhwb25lbnRpYWwgPj0g
MTApCisgICAgICAgIGJ1ZltpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgKGV4cG9uZW50
aWFsICUgMTAwKSAvIDEwKTsKKyAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyAr
IGV4cG9uZW50aWFsICUgMTApOworfQorCiBzdGF0aWMgSlNWYWx1ZSogbnVtYmVyVG9FeHBvbmVu
dGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAg
ICAgZG91YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKQEAgLTI0NSw5ICsyNjEsMTAgQEAgc3Rh
dGljIEpTVmFsdWUqIG51bWJlclRvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
KiB2LCBjb25zdCBMaXN0JiBhcmcKICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvRXhwb25lbnRpYWwo
KSBhcmd1bWVudCBtdXN0IGJldHdlZW4gMCBhbmQgMjAiKTsKICAgICBpbnQgZiA9IChpbnQpZGY7
CisgICAgYm9vbCBpbmNsdWRlQWxsRGlnaXRzID0gZnJhY3Rpb25EaWdpdHMtPmlzVW5kZWZpbmVk
KCk7CiAKICAgICBpbnQgZGVjaW1hbEFkanVzdCA9IDA7Ci0gICAgaWYgKCFmcmFjdGlvbkRpZ2l0
cy0+aXNVbmRlZmluZWQoKSkgeworICAgIGlmICghaW5jbHVkZUFsbERpZ2l0cykgewogICAgICAg
ICBkb3VibGUgbG9neCA9IGZsb29yKGxvZzEwKGZhYnMoeCkpKTsKICAgICAgICAgeCAvPSBwb3co
MTAuMCwgbG9neCk7CiAgICAgICAgIGRvdWJsZSBmeCA9IGZsb29yKHggKiBwb3coMTAuMCwgZikp
IC8gcG93KDEwLjAsIGYpOwpAQCAtMjYwLDU2ICsyNzcsNDQgQEAgc3RhdGljIEpTVmFsdWUqIG51
bWJlclRvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0
JiBhcmcKIAogICAgICAgICBkZWNpbWFsQWRqdXN0ID0gc3RhdGljX2Nhc3Q8aW50Pihsb2d4KTsK
ICAgICB9Ci0gICAgCisKICAgICBjaGFyIGJ1Zls4MF07CiAgICAgaW50IGRlY2ltYWxQb2ludDsK
ICAgICBpbnQgc2lnbjsKLSAgICAKKwogICAgIGlmIChpc25hbih4KSkKICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCJOYU4iKTsKLSAgICAKKwogICAgIGNoYXIqIHJlc3VsdCA9IGtqc19kdG9hKHgs
IDAsIDAsICZkZWNpbWFsUG9pbnQsICZzaWduLCBOVUxMKTsKICAgICBzaXplX3QgbGVuZ3RoID0g
c3RybGVuKHJlc3VsdCk7CiAgICAgZGVjaW1hbFBvaW50ICs9IGRlY2ltYWxBZGp1c3Q7Ci0gICAg
CisKICAgICBpbnQgaSA9IDA7CiAgICAgaWYgKHNpZ24pCiAgICAgICAgIGJ1ZltpKytdID0gJy0n
OwotICAgIAorCiAgICAgaWYgKGRlY2ltYWxQb2ludCA9PSA5OTkpCiAgICAgICAgIHN0cmNweShi
dWYgKyBpLCByZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICBidWZbaSsrXSA9IHJlc3VsdFsw
XTsKLSAgICAgICAgCi0gICAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cy0+aXNVbmRlZmluZWQoKSkK
KworICAgICAgICBpZiAoaW5jbHVkZUFsbERpZ2l0cykKICAgICAgICAgICAgIGYgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGxlbmd0aCkgLSAxOwotICAgICAgICAKKwogICAgICAgICBpZiAobGVuZ3RoID4g
MSAmJiBmID4gMCkgewogICAgICAgICAgICAgYnVmW2krK10gPSAnLic7CiAgICAgICAgICAgICBp
bnQgaGF2ZUZEaWdpdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkgLSAxOwogICAgICAgICAg
ICAgaWYgKGYgPCBoYXZlRkRpZ2l0cykgewotICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVmK2ks
cmVzdWx0KzEsIGYpOworICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVmICsgaSwgcmVzdWx0ICsg
MSwgZik7CiAgICAgICAgICAgICAgICAgaSArPSBmOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzdHJjcHkoYnVmK2kscmVzdWx0KzEpOworICAgICAgICAgICAgICAgIHN0
cmNweShidWYgKyBpLCByZXN1bHQgKyAxKTsKICAgICAgICAgICAgICAgICBpICs9IHN0YXRpY19j
YXN0PGludD4obGVuZ3RoKSAtIDE7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBmLWhhdmVGRGlnaXRzOyBqKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBmIC0gaGF2ZUZEaWdpdHM7IGorKykKICAgICAgICAgICAgICAgICAgICAgYnVmW2krK10gPSAn
MCc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJ1ZltpKytd
ID0gJ2UnOwotICAgICAgICBidWZbaSsrXSA9IChkZWNpbWFsUG9pbnQgPj0gMCkgPyAnKycgOiAn
LSc7Ci0gICAgICAgIC8vIGRlY2ltYWxQb2ludCBjYW4ndCBiZSBtb3JlIHRoYW4gMyBkaWdpdHMg
ZGVjaW1hbCBnaXZlbiB0aGUKLSAgICAgICAgLy8gbmF0dXJlIG9mIGZsb2F0IHJlcHJlc2VudGF0
aW9uCi0gICAgICAgIGludCBleHBvbmVudGlhbCA9IGRlY2ltYWxQb2ludCAtIDE7Ci0gICAgICAg
IGlmIChleHBvbmVudGlhbCA8IDApCi0gICAgICAgICAgICBleHBvbmVudGlhbCAqPSAtMTsKLSAg
ICAgICAgaWYgKGV4cG9uZW50aWFsID49IDEwMCkKLSAgICAgICAgICAgIGJ1ZltpKytdID0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhwb25lbnRpYWwgLyAxMDApOwotICAgICAgICBpZiAoZXhw
b25lbnRpYWwgPj0gMTApCi0gICAgICAgICAgICBidWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+
KCcwJyArIChleHBvbmVudGlhbCAlIDEwMCkgLyAxMCk7Ci0gICAgICAgIGJ1ZltpKytdID0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oJzAnICsgZXhwb25lbnRpYWwgJSAxMCk7CisgICAgICAgIGV4cG9uZW50
aWFsUGFydFRvU3RyaW5nKGJ1ZiwgaSwgZGVjaW1hbFBvaW50KTsKICAgICAgICAgYnVmW2krK10g
PSAnXDAnOwogICAgIH0KIApAQCAtMzIyLDQ2ICszMjcsNDUgQEAgc3RhdGljIEpTVmFsdWUqIG51
bWJlclRvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0
JiBhcmcKICAgICAKIHN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1ByZWNpc2lvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaW50IGUgPSAwOwot
ICAgIFVTdHJpbmcgbTsKLQotICAgIGRvdWJsZSBkcCA9IGFyZ3NbMF0tPnRvSW50ZWdlclByZXNl
cnZlTmFOKGV4ZWMpOworICAgIGRvdWJsZSBkb3VibGVQcmVjaXNpb24gPSBhcmdzWzBdLT50b0lu
dGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMp
OwotICAgIGlmIChpc25hbihkcCkgfHwgaXNuYW4oeCkgfHwgaXNpbmYoeCkpCisgICAgaWYgKGlz
bmFuKGRvdWJsZVByZWNpc2lvbikgfHwgaXNuYW4oeCkgfHwgaXNpbmYoeCkpCiAgICAgICAgIHJl
dHVybiBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7CiAKLSAgICBVU3RyaW5nIHMgPSAiIjsK
KyAgICBVU3RyaW5nIHM7CiAgICAgaWYgKHggPCAwKSB7CiAgICAgICAgIHMgPSAiLSI7CiAgICAg
ICAgIHggPSAteDsKICAgICB9Ci0gICAgCi0gICAgaWYgKCEoZHAgPj0gMSAmJiBkcCA8PSAyMSkp
IC8vIHRydWUgZm9yIE5hTgorCisgICAgaWYgKCEoZG91YmxlUHJlY2lzaW9uID49IDEgJiYgZG91
YmxlUHJlY2lzaW9uIDw9IDIxKSkgLy8gdHJ1ZSBmb3IgTmFOCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3IsICJ0b1ByZWNpc2lvbigpIGFyZ3VtZW50IG11c3QgYmUg
YmV0d2VlbiAxIGFuZCAyMSIpOwotICAgIGludCBwID0gKGludClkcDsKLSAgICAKKyAgICBpbnQg
cHJlY2lzaW9uID0gKGludClkb3VibGVQcmVjaXNpb247CisKKyAgICBpbnQgZSA9IDA7CisgICAg
VVN0cmluZyBtOwogICAgIGlmICh4ICE9IDApIHsKICAgICAgICAgZSA9IHN0YXRpY19jYXN0PGlu
dD4obG9nMTAoeCkpOwotICAgICAgICBkb3VibGUgdGVucyA9IGludFBvdzEwKGUgLSBwICsgMSk7
CisgICAgICAgIGRvdWJsZSB0ZW5zID0gaW50UG93MTAoZSAtIHByZWNpc2lvbiArIDEpOwogICAg
ICAgICBkb3VibGUgbiA9IGZsb29yKHggLyB0ZW5zKTsKLSAgICAgICAgaWYgKG4gPCBpbnRQb3cx
MChwIC0gMSkpIHsKKyAgICAgICAgaWYgKG4gPCBpbnRQb3cxMChwcmVjaXNpb24gLSAxKSkgewog
ICAgICAgICAgICAgZSA9IGUgLSAxOwotICAgICAgICAgICAgdGVucyA9IGludFBvdzEwKGUgLSBw
ICsgMSk7CisgICAgICAgICAgICB0ZW5zID0gaW50UG93MTAoZSAtIHByZWNpc2lvbiArIDEpOwog
ICAgICAgICAgICAgbiA9IGZsb29yKHggLyB0ZW5zKTsKICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBpZiAoZmFicygobiArIDEuMCkgKiB0ZW5zIC0geCkgPD0gZmFicyhuICogdGVucyAt
IHgpKQogICAgICAgICAgICAgKytuOwotICAgICAgICAvLyBtYWludGFpbiBuIDwgMTBeKHApCi0g
ICAgICAgIGlmIChuID49IGludFBvdzEwKHApKSB7CisgICAgICAgIC8vIG1haW50YWluIG4gPCAx
MF4ocHJlY2lzaW9uKQorICAgICAgICBpZiAobiA+PSBpbnRQb3cxMChwcmVjaXNpb24pKSB7CiAg
ICAgICAgICAgICBuID0gbiAvIDEwLjA7CiAgICAgICAgICAgICBlID0gZSArIDE7CiAgICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKGludFBvdzEwKHAgLSAxKSA8PSBuKTsKLSAgICAgICAgQVNTRVJU
KG4gPCBpbnRQb3cxMChwKSk7CisgICAgICAgIEFTU0VSVChpbnRQb3cxMChwcmVjaXNpb24gLSAx
KSA8PSBuKTsKKyAgICAgICAgQVNTRVJUKG4gPCBpbnRQb3cxMChwcmVjaXNpb24pKTsKIAogICAg
ICAgICBtID0gaW50ZWdlcl9wYXJ0X25vZXhwKG4pOwotICAgICAgICBpZiAoZSA8IC02IHx8IGUg
Pj0gcCkgeworICAgICAgICBpZiAoZSA8IC02IHx8IGUgPj0gcHJlY2lzaW9uKSB7CiAgICAgICAg
ICAgICBpZiAobS5zaXplKCkgPiAxKQogICAgICAgICAgICAgICAgIG0gPSBtLnN1YnN0cigwLCAx
KSArICIuIiArIG0uc3Vic3RyKDEpOwogICAgICAgICAgICAgaWYgKGUgPj0gMCkKQEAgLTM2OSwx
MiArMzczLDEyIEBAIHN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1ByZWNpc2lvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCiAgICAgICAgICAgICByZXR1cm4g
anNTdHJpbmcocyArIG0gKyAiZS0iICsgVVN0cmluZzo6ZnJvbSgtZSkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgbSA9IGNoYXJfc2VxdWVuY2UoJzAnLHApOworICAgICAgICBt
ID0gY2hhcl9zZXF1ZW5jZSgnMCcsIHByZWNpc2lvbik7CiAgICAgICAgIGUgPSAwOwogICAgIH0K
IAotICAgIGlmIChlID09IHAgLSAxKQotICAgICAgICByZXR1cm4ganNTdHJpbmcocyttKTsKKyAg
ICBpZiAoZSA9PSBwcmVjaXNpb24gLSAxKQorICAgICAgICByZXR1cm4ganNTdHJpbmcocyArIG0p
OwogICAgIGVsc2UgaWYgKGUgPj0gMCkgewogICAgICAgICBpZiAoZSArIDEgPCBtLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwgZSArIDEpICsgIi4i
ICsgbS5zdWJzdHIoZSArIDEpKTsK
</data>
<flag name="review"
          id="7880"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18148</attachid>
            <date>2007-12-28 11:14:53 -0800</date>
            <delta_ts>2007-12-28 20:21:00 -0800</delta_ts>
            <desc>More small cleanups to toPrecision</desc>
            <filename>More-small-cleanups-to-toPrecision.patch</filename>
            <type>text/plain</type>
            <size>1036</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YmE4NGZmZWMzODJmNjMyODZiZjQ2MTk4MGQxN2Q0Mjg3MjU1YzFlZgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCmluZGV4IGNkNWMyNTQuLmNkODM2ZDQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bnVtYmVyX29iamVjdC5jcHAKQEAgLTM1OCw4ICszNTgsOCBAQCBzdGF0aWMgSlNWYWx1ZSogbnVt
YmVyVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBh
cmdzKQogICAgICAgICAgICAgKytuOwogICAgICAgICAvLyBtYWludGFpbiBuIDwgMTBeKHByZWNp
c2lvbikKICAgICAgICAgaWYgKG4gPj0gaW50UG93MTAocHJlY2lzaW9uKSkgewotICAgICAgICAg
ICAgbiA9IG4gLyAxMC4wOwotICAgICAgICAgICAgZSA9IGUgKyAxOworICAgICAgICAgICAgbiAv
PSAxMC4wOworICAgICAgICAgICAgZSArPSAxOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChp
bnRQb3cxMChwcmVjaXNpb24gLSAxKSA8PSBuKTsKICAgICAgICAgQVNTRVJUKG4gPCBpbnRQb3cx
MChwcmVjaXNpb24pKTsKQEAgLTM4Miw3ICszODIsNyBAQCBzdGF0aWMgSlNWYWx1ZSogbnVtYmVy
VG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdz
KQogICAgIGVsc2UgaWYgKGUgPj0gMCkgewogICAgICAgICBpZiAoZSArIDEgPCBtLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzICsgbS5zdWJzdHIoMCwgZSArIDEpICsgIi4i
ICsgbS5zdWJzdHIoZSArIDEpKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMgKyBtLnN1YnN0
cigwLCBlICsgMSkpOworICAgICAgICByZXR1cm4ganNTdHJpbmcocyArIG0pOwogICAgIH0KICAg
ICByZXR1cm4ganNTdHJpbmcocyArICIwLiIgKyBjaGFyX3NlcXVlbmNlKCcwJywgLShlICsgMSkp
ICsgbSk7CiB9Cg==
</data>
<flag name="review"
          id="7881"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18149</attachid>
            <date>2007-12-28 11:14:55 -0800</date>
            <delta_ts>2007-12-28 20:21:04 -0800</delta_ts>
            <desc>More changes to make number code readable</desc>
            <filename>More-changes-to-make-number-code-readable.patch</filename>
            <type>text/plain</type>
            <size>3173</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ODczNDJjNzEwNzUxOGEzNTYxZGZhYjY5MDE5MTcwY2NmMmI2NzM3NApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL251
bWJlcl9vYmplY3QuY3BwCmluZGV4IGNkODM2ZDQuLjA4OGZkNzMgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ranMv
bnVtYmVyX29iamVjdC5jcHAKQEAgLTc1LDEwICs3NSwxMSBAQCBzdGF0aWMgVVN0cmluZyBpbnRl
Z2VyX3BhcnRfbm9leHAoZG91YmxlIGQpCiAgICAgaW50IGRlY2ltYWxQb2ludDsKICAgICBpbnQg
c2lnbjsKICAgICBjaGFyKiByZXN1bHQgPSBranNfZHRvYShkLCAwLCAwLCAmZGVjaW1hbFBvaW50
LCAmc2lnbiwgTlVMTCk7CisgICAgYm9vbCByZXN1bHRJc0luZk9yTmFuID0gKGRlY2ltYWxQb2lu
dCA9PSA5OTk5KTsKICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHJlc3VsdCk7CiAKICAgICBV
U3RyaW5nIHN0ciA9IHNpZ24gPyAiLSIgOiAiIjsKLSAgICBpZiAoZGVjaW1hbFBvaW50ID09IDk5
OTkpCisgICAgaWYgKHJlc3VsdElzSW5mT3JOYW4pCiAgICAgICAgIHN0ciArPSByZXN1bHQ7CiAg
ICAgZWxzZSBpZiAoZGVjaW1hbFBvaW50IDw9IDApCiAgICAgICAgIHN0ciArPSAiMCI7CkBAIC0x
OTgsMzEgKzE5OSwzMiBAQCBzdGF0aWMgSlNWYWx1ZSogbnVtYmVyVG9GaXhlZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCiAgICAgaWYgKCEoZGYgPj0gMCAm
JiBkZiA8PSAyMCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJhbmdlRXJyb3Is
ICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpOwog
ICAgIGludCBmID0gKGludClkZjsKLSAgICAKKwogICAgIGRvdWJsZSB4ID0gdi0+dG9OdW1iZXIo
ZXhlYyk7CiAgICAgaWYgKGlzbmFuKHgpKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoIk5hTiIp
OwotICAgIAotICAgIFVTdHJpbmcgcyA9ICIiOworCisgICAgVVN0cmluZyBzOwogICAgIGlmICh4
IDwgMCkgewotICAgICAgICBzICs9ICItIjsKKyAgICAgICAgcy5hcHBlbmQoJy0nKTsKICAgICAg
ICAgeCA9IC14OwogICAgIH0KLSAgICAKKwogICAgIGlmICh4ID49IHBvdygxMC4wLCAyMS4wKSkK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMrVVN0cmluZzo6ZnJvbSh4KSk7Ci0gICAgCi0gICAg
ZG91YmxlIG4gPSBmbG9vcih4KnBvdygxMC4wLCBmKSk7Ci0gICAgaWYgKGZhYnMobiAvIHBvdygx
MC4wLCBmKSAtIHgpID49IGZhYnMoKG4gKyAxKSAvIHBvdygxMC4wLCBmKSAtIHgpKQorICAgICAg
ICByZXR1cm4ganNTdHJpbmcocyArIFVTdHJpbmc6OmZyb20oeCkpOworCisgICAgY29uc3QgZG91
YmxlIHRlblRvVGhlRiA9IHBvdygxMC4wLCBmKTsKKyAgICBkb3VibGUgbiA9IGZsb29yKHggKiB0
ZW5Ub1RoZUYpOworICAgIGlmIChmYWJzKG4gLyB0ZW5Ub1RoZUYgLSB4KSA+PSBmYWJzKChuICsg
MSkgLyB0ZW5Ub1RoZUYgLSB4KSkKICAgICAgICAgbisrOwotICAgIAorCiAgICAgVVN0cmluZyBt
ID0gaW50ZWdlcl9wYXJ0X25vZXhwKG4pOwotICAgIAorCiAgICAgaW50IGsgPSBtLnNpemUoKTsK
ICAgICBpZiAoayA8PSBmKSB7Ci0gICAgICAgIFVTdHJpbmcgeiA9ICIiOworICAgICAgICBVU3Ry
aW5nIHo7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZiArIDEgLSBrOyBpKyspCi0gICAg
ICAgICAgICB6ICs9ICIwIjsKKyAgICAgICAgICAgIHouYXBwZW5kKCcwJyk7CiAgICAgICAgIG0g
PSB6ICsgbTsKICAgICAgICAgayA9IGYgKyAxOwogICAgICAgICBBU1NFUlQoayA9PSBtLnNpemUo
KSk7CkBAIC0yNjcsOCArMjY5LDkgQEAgc3RhdGljIEpTVmFsdWUqIG51bWJlclRvRXhwb25lbnRp
YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmcKICAgICBpZiAo
IWluY2x1ZGVBbGxEaWdpdHMpIHsKICAgICAgICAgZG91YmxlIGxvZ3ggPSBmbG9vcihsb2cxMChm
YWJzKHgpKSk7CiAgICAgICAgIHggLz0gcG93KDEwLjAsIGxvZ3gpOwotICAgICAgICBkb3VibGUg
ZnggPSBmbG9vcih4ICogcG93KDEwLjAsIGYpKSAvIHBvdygxMC4wLCBmKTsKLSAgICAgICAgZG91
YmxlIGN4ID0gY2VpbCh4ICogcG93KDEwLjAsIGYpKSAvIHBvdygxMC4wLCBmKTsKKyAgICAgICAg
Y29uc3QgZG91YmxlIHRlblRvVGhlRiA9IHBvdygxMC4wLCBmKTsKKyAgICAgICAgZG91YmxlIGZ4
ID0gZmxvb3IoeCAqIHRlblRvVGhlRikgLyB0ZW5Ub1RoZUY7CisgICAgICAgIGRvdWJsZSBjeCA9
IGNlaWwoeCAqIHRlblRvVGhlRikgLyB0ZW5Ub1RoZUY7CiAKICAgICAgICAgaWYgKGZhYnMoZngg
LSB4KSA8IGZhYnMoY3ggLSB4KSkKICAgICAgICAgICAgIHggPSBmeDsKQEAgLTI3OCwyMiArMjgx
LDIxIEBAIHN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSogdiwgY29uc3QgTGlzdCYgYXJnCiAgICAgICAgIGRlY2ltYWxBZGp1c3QgPSBz
dGF0aWNfY2FzdDxpbnQ+KGxvZ3gpOwogICAgIH0KIAotICAgIGNoYXIgYnVmWzgwXTsKLSAgICBp
bnQgZGVjaW1hbFBvaW50OwotICAgIGludCBzaWduOwotCiAgICAgaWYgKGlzbmFuKHgpKQogICAg
ICAgICByZXR1cm4ganNTdHJpbmcoIk5hTiIpOwogCisgICAgaW50IGRlY2ltYWxQb2ludDsKKyAg
ICBpbnQgc2lnbjsKICAgICBjaGFyKiByZXN1bHQgPSBranNfZHRvYSh4LCAwLCAwLCAmZGVjaW1h
bFBvaW50LCAmc2lnbiwgTlVMTCk7CiAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZXN1bHQp
OwogICAgIGRlY2ltYWxQb2ludCArPSBkZWNpbWFsQWRqdXN0OwogCiAgICAgaW50IGkgPSAwOwor
ICAgIGNoYXIgYnVmWzgwXTsKICAgICBpZiAoc2lnbikKICAgICAgICAgYnVmW2krK10gPSAnLSc7
CiAKLSAgICBpZiAoZGVjaW1hbFBvaW50ID09IDk5OSkKKyAgICBpZiAoZGVjaW1hbFBvaW50ID09
IDk5OSkgLy8gPyA5OTk5IGlzIHRoZSBtYWdpY2FsICJyZXN1bHQgaXMgSW5mIG9yIE5hTiIgdmFs
dWUuICB3aGF0J3MgOTk5Pz8KICAgICAgICAgc3RyY3B5KGJ1ZiArIGksIHJlc3VsdCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGJ1ZltpKytdID0gcmVzdWx0WzBdOwo=
</data>
<flag name="review"
          id="7882"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18162</attachid>
            <date>2007-12-28 17:30:54 -0800</date>
            <delta_ts>2007-12-29 12:15:16 -0800</delta_ts>
            <desc>Move to modern multi-class function prototype system</desc>
            <filename>Move-to-modern-multi-class-function-prototype-system.patch</filename>
            <type>text/plain</type>
            <size>9075</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGM1MDY0ZTdlZjc1ZGU4NGU1ZTY0YWIwZDEzYzRhYzg0MGQ3OGRhZQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9K
U0dsb2JhbE9iamVjdC5jcHAKaW5kZXggN2ExODg5Ni4uZWE0YjUyNCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9r
anMvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdG90eXBlKQogICAgIGQoKS0+YXJyYXlQcm90b3R5cGUg
PSBuZXcgQXJyYXlQcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAgIGQo
KS0+c3RyaW5nUHJvdG90eXBlID0gbmV3IFN0cmluZ1Byb3RvdHlwZShleGVjLCBkKCktPm9iamVj
dFByb3RvdHlwZSk7CiAgICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0gbmV3IEJvb2xlYW5Qcm90
b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
OwotICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gbmV3IE51bWJlclByb3RvdHlwZShleGVjLCBk
KCktPm9iamVjdFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgZCgpLT5u
dW1iZXJQcm90b3R5cGUgPSBuZXcgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJv
dG90eXBlKTsKICAgICBkKCktPmRhdGVQcm90b3R5cGUgPSBuZXcgRGF0ZVByb3RvdHlwZShleGVj
LCBkKCktPm9iamVjdFByb3RvdHlwZSk7CiAgICAgZCgpLT5yZWdFeHBQcm90b3R5cGUgPSBuZXcg
UmVnRXhwUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKTs7CiAgICAgZCgpLT5lcnJvclByb3RvdHlwZSA9IG5ldyBFcnJvclByb3RvdHlw
ZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAKaW5kZXggMDg4ZmQ3My4uODg2M2ZkYyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcApAQCAtNDQsMzAgKzQ0LDE5IEBAIE51bWJl
ckluc3RhbmNlOjpOdW1iZXJJbnN0YW5jZShKU09iamVjdCogcHJvdG8pCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiAvLyBFQ01BIDE1LjcuNAotCi1OdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3Rv
dHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqUHJvdG8sIEZ1bmN0aW9u
UHJvdG90eXBlKiBmdW5jUHJvdG8pCitOdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSogb2JqUHJvdG8pCiAgICAgOiBOdW1iZXJJ
bnN0YW5jZShvYmpQcm90bykKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKDApKTsK
IAogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBOdW1i
ZXJPYmplY3RJbXAgaGFzIGJlZW4gY29uc3RydWN0ZWQKIAotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyBOdW1iZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRv
U3RyaW5nLCAgICAgICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5j
UHJvdG8sIE51bWJlclByb3RvRnVuYzo6VG9Mb2NhbGVTdHJpbmcsIDAsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b0xvY2FsZVN0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpW
YWx1ZU9mLCAgICAgICAgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5j
UHJvdG8sIE51bWJlclByb3RvRnVuYzo6VG9GaXhlZCwgICAgICAgIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b0ZpeGVkKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBO
dW1iZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvRXhwb25l
bnRpYWwsICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9FeHBvbmVudGlhbCksIERvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQ
cm90bywgTnVtYmVyUHJvdG9GdW5jOjpUb1ByZWNpc2lvbiwgICAgMSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvUHJlY2lzaW9uKSwgRG9udEVudW0pOwotfQotCi0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJQcm90b0Z1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLU51bWJlclByb3RvRnVuYzo6TnVtYmVyUHJvdG9GdW5jKEV4ZWNTdGF0ZSogZXhlYywg
RnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50
aWZpZXImIG5hbWUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bywgbmFtZSkK
LSAgICAsIGlkKGkpCi17Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IE51bWJlclByb3RvRnVuY1RvU3RyaW5nKGV4ZWMsIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b1N0cmluZyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
TnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoZXhlYywgMCwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnRvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5l
dyBOdW1iZXJQcm90b0Z1bmNWYWx1ZU9mKGV4ZWMsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52
YWx1ZU9mKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90
b0Z1bmNUb0ZpeGVkKGV4ZWMsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0ZpeGVkKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90b0Z1bmNUb0V4cG9u
ZW50aWFsKGV4ZWMsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0V4cG9uZW50aWFsKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90b0Z1bmNUb1ByZWNp
c2lvbihleGVjLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9QcmVjaXNpb24pLCBEb250RW51
bSk7CiB9CiAKIHN0YXRpYyBVU3RyaW5nIGludGVnZXJfcGFydF9ub2V4cChkb3VibGUgZCkKQEAg
LTE0MCw4ICsxMjksMTIgQEAgc3RhdGljIGRvdWJsZSBpbnRQb3cxMChpbnQgZSkKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZXN1bHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogbnVt
YmVyVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdz
KQorSlNWYWx1ZSogTnVtYmVyUHJvdG9GdW5jVG9TdHJpbmc6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CisgICAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVmFsdWUqIHYgPSBzdGF0
aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisgICAg
CiAgICAgZG91YmxlIGRyYWRpeCA9IDEwOwogICAgIGlmICghYXJncy5pc0VtcHR5KCkpCiAgICAg
ICAgIGRyYWRpeCA9IGFyZ3NbMF0tPnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOwpAQCAtMTky
LDggKzE4NSwxMiBAQCBzdGF0aWMgSlNWYWx1ZSogbnVtYmVyVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdzKQogICAgIHJldHVybiBqc1N0cmluZyh2
LT50b1N0cmluZyhleGVjKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb0ZpeGVkKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdiwgY29uc3QgTGlzdCYgYXJncykKK0pTVmFsdWUqIE51
bWJlclByb3RvRnVuY1RvRml4ZWQ6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CisgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJJ
bnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisgICAgCiAgICAgSlNWYWx1ZSog
ZnJhY3Rpb25EaWdpdHMgPSBhcmdzWzBdOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRz
LT50b0ludGVnZXIoZXhlYyk7CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCkBAIC0y
NTEsOCArMjQ4LDEyIEBAIHZvaWQgZXhwb25lbnRpYWxQYXJ0VG9TdHJpbmcoY2hhciogYnVmLCBp
bnQmIGksIGludCBkZWNpbWFsUG9pbnQpCiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFy
PignMCcgKyBleHBvbmVudGlhbCAlIDEwKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIG51bWJlclRv
RXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdz
KQorSlNWYWx1ZSogTnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbDo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsK
KyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNWYWx1ZSogdiA9
IHN0YXRpY19jYXN0PE51bWJlckluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsK
KyAgICAKICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogCiAgICAgaWYgKGlzbmFu
KHgpIHx8IGlzaW5mKHgpKQpAQCAtMzI3LDggKzMyOCwxMiBAQCBzdGF0aWMgSlNWYWx1ZSogbnVt
YmVyVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3Qm
IGFyZwogICAgIHJldHVybiBqc1N0cmluZyhidWYpOwogfQogICAgIAotc3RhdGljIEpTVmFsdWUq
IG51bWJlclRvUHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdiwgY29uc3QgTGlz
dCYgYXJncykKK0pTVmFsdWUqIE51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdz
KQogeworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlOjppbmZvKSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1ZhbHVl
KiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1
ZSgpOworICAgIAogICAgIGRvdWJsZSBkb3VibGVQcmVjaXNpb24gPSBhcmdzWzBdLT50b0ludGVn
ZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwog
ICAgIGlmIChpc25hbihkb3VibGVQcmVjaXNpb24pIHx8IGlzbmFuKHgpIHx8IGlzaW5mKHgpKQpA
QCAtMzg5LDI5ICszOTQsMjMgQEAgc3RhdGljIEpTVmFsdWUqIG51bWJlclRvUHJlY2lzaW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdiwgY29uc3QgTGlzdCYgYXJncykKICAgICByZXR1cm4g
anNTdHJpbmcocyArICIwLiIgKyBjaGFyX3NlcXVlbmNlKCcwJywgLShlICsgMSkpICsgbSk7CiB9
CiAKLS8vIEVDTUEgMTUuNy40LjIgLSAxNS43LjQuNwotSlNWYWx1ZSogTnVtYmVyUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JiBhcmdzKQorSlNWYWx1ZSogTnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmc6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmKQogewotICAgIC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24uICJ0aGlzIiBoYXMgdG8gYmUgYSBO
dW1iZXIgb2JqZWN0CiAgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6
OmluZm8pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAg
IEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRl
cm5hbFZhbHVlKCk7CisgICAgCisgICAgLyogVE9ETyAqLworICAgIHJldHVybiBqc1N0cmluZyh2
LT50b1N0cmluZyhleGVjKSk7Cit9CiAKK0pTVmFsdWUqIE51bWJlclByb3RvRnVuY1ZhbHVlT2Y6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IExpc3QmKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlOjpp
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICBK
U1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJu
YWxWYWx1ZSgpOwotICAgIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIFRvU3RyaW5nOgotICAgICAg
ICByZXR1cm4gbnVtYmVyVG9TdHJpbmcoZXhlYywgdiwgYXJncyk7Ci0gICAgY2FzZSBUb0xvY2Fs
ZVN0cmluZzogLyogVE9ETyAqLwotICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+dG9TdHJpbmco
ZXhlYykpOwotICAgIGNhc2UgVmFsdWVPZjoKLSAgICAgICAgcmV0dXJuIHYtPnRvSlNOdW1iZXIo
ZXhlYyk7Ci0gICAgY2FzZSBUb0ZpeGVkOgotICAgICAgICByZXR1cm4gbnVtYmVyVG9GaXhlZChl
eGVjLCB2LCBhcmdzKTsKLSAgICBjYXNlIFRvRXhwb25lbnRpYWw6Ci0gICAgICAgIHJldHVybiBu
dW1iZXJUb0V4cG9uZW50aWFsKGV4ZWMsIHYsIGFyZ3MpOwotICAgIGNhc2UgVG9QcmVjaXNpb246
Ci0gICAgICAgIHJldHVybiBudW1iZXJUb1ByZWNpc2lvbihleGVjLCB2LCBhcmdzKTsKLSAgICB9
Ci0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdi0+dG9KU051bWJlcihleGVjKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlck9iamVjdEltcCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9u
dW1iZXJfb2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCmluZGV4
IDY4NTcwZDguLmE5ZTAzYzUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaApAQCAtNDMs
OSArNDMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICovCiAgIGNsYXNzIE51bWJlclByb3RvdHlw
ZSA6IHB1YmxpYyBOdW1iZXJJbnN0YW5jZSB7CiAgIHB1YmxpYzoKLSAgICBOdW1iZXJQcm90b3R5
cGUoRXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5
cGUgKm9ialByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZSAq
ZnVuY1Byb3RvKTsKKyAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90
eXBlKik7CiAgIH07CiAKICAgLyoqCkBAIC01NCwxNiArNTIsMTYgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAqIENsYXNzIHRvIGltcGxlbWVudCBhbGwgbWV0aG9kcyB0aGF0IGFyZSBwcm9wZXJ0aWVz
IG9mIHRoZQogICAgKiBOdW1iZXIucHJvdG90eXBlIG9iamVjdAogICAgKi8KLSAgY2xhc3MgTnVt
YmVyUHJvdG9GdW5jIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewotICBwdWJsaWM6Ci0g
ICAgTnVtYmVyUHJvdG9GdW5jKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgaW50IGks
IGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImKTsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSAqY2Fs
bEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncyk7CisjZGVmaW5lIEZPUl9FQUNIX05VTUJFUl9QUk9UT19GVU5DX0NMQVNTKG1hY3Jv
KSBcCisgICAgbWFjcm8oTnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpIFwKKyAgICBtYWNybyhOdW1i
ZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZykgXAorICAgIG1hY3JvKE51bWJlclByb3RvRnVuY1Zh
bHVlT2YpIFwKKyAgICBtYWNybyhOdW1iZXJQcm90b0Z1bmNUb0ZpeGVkKSBcCisgICAgbWFjcm8o
TnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCkgXAorICAgIG1hY3JvKE51bWJlclByb3RvRnVu
Y1RvUHJlY2lzaW9uKSBcCiAKLSAgICBlbnVtIHsgVG9TdHJpbmcsIFRvTG9jYWxlU3RyaW5nLCBW
YWx1ZU9mLCBUb0ZpeGVkLCBUb0V4cG9uZW50aWFsLCBUb1ByZWNpc2lvbiB9OwotICBwcml2YXRl
OgotICAgIGludCBpZDsKLSAgfTsKK0ZPUl9FQUNIX05VTUJFUl9QUk9UT19GVU5DX0NMQVNTKEtK
U19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OX1dJVEhfQ1JFQVRFKQogCiAgIC8qKgogICAg
KiBAaW50ZXJuYWwK
</data>
<flag name="review"
          id="7893"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>