<?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>35233</bug_id>
          
          <creation_ts>2010-02-22 03:40:54 -0800</creation_ts>
          <short_desc>Optimize Latin-1 decoding in TextCodecLatin1::decode()</short_desc>
          <delta_ts>2010-02-25 10:13:58 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192407</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-22 03:40:54 -0800</bug_when>
    <thetext>The vast majority of Latin-1 text will be (English) ASCII-only data.

We can exploit this fact to process the text one CPU-word at a time instead of byte-by-byte.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192409</commentid>
    <comment_count>1</comment_count>
      <attachid>49197</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-22 03:46:24 -0800</bug_when>
    <thetext>Created attachment 49197
Patch

Cuts text decoding time in half on my 64-bit Linux machine (tested with data from slashdot.org and reddit.com)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192458</commentid>
    <comment_count>2</comment_count>
      <attachid>49197</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-02-22 07:12:14 -0800</bug_when>
    <thetext>Comment on attachment 49197
Patch

&gt; +#if CPU(X86_64) || CPU(SPARC64) || CPU(IA64) || CPU(PPC64)
&gt; +#define NON_ASCII_MASK 0x8080808080808080
&gt; +typedef uint64_t CpuWord;
&gt; +#else
&gt; +#define NON_ASCII_MASK 0x80808080
&gt; +typedef uint32_t CpuWord;
&gt; +#endif

Nice optimization. Two nits.
NON_ASCII_MASK should be a constant instead of a #define.
Can you use intptr_t instead of CpuWord?

r- to address these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192469</commentid>
    <comment_count>3</comment_count>
      <attachid>49217</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-22 08:30:26 -0800</bug_when>
    <thetext>Created attachment 49217
Same patch with nits addressed

Thanks for the speedy review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192498</commentid>
    <comment_count>4</comment_count>
      <attachid>49217</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-22 10:00:56 -0800</bug_when>
    <thetext>Comment on attachment 49217
Same patch with nits addressed

We capitalize acronyms in WebKit code, so the constant should be called nonASCIIMask rather than nonAsciiMask.

&gt; +#if CPU(X86_64) || CPU(SPARC64) || CPU(IA64) || CPU(PPC64)
&gt; +const uintptr_t nonAsciiMask = 0x8080808080808080;
&gt; +#else
&gt; +const uintptr_t nonAsciiMask = 0x80808080;
&gt; +#endif

This can be done without ifdefs as is done in the WTF header file HashFunctions.h.

    template&lt;size_t size&gt; struct NonASCIIMask;
    template&lt;&gt; struct NonASCIIMask&lt;4&gt; { static unsigned value() { return 0x80808080U; } }
    template&lt;&gt; struct NonASCIIMask&lt;8&gt; { static unsigned long long value() { return 0x8080808080808080UL; }

Then say:

    if (chunk &amp; NonASCIIMask&lt;sizeof(uintptr_t)&gt;::value())

While this is a bit harder to read, it&apos;s safer. The code in the patch as is would fail in a subtle way if you had a 64-bit platform not listed in the ifdefs, only checking half of the bits.

The copying can be done the same way:

&gt; +                    dest[0] = src[0];
&gt; +                    dest[1] = src[1];
&gt; +                    dest[2] = src[2];
&gt; +                    dest[3] = src[3];
&gt; +#if CPU(X86_64) || CPU(SPARC64) || CPU(IA64) || CPU(PPC64)
&gt; +                    dest[4] = src[4];
&gt; +                    dest[5] = src[5];
&gt; +                    dest[6] = src[6];
&gt; +                    dest[7] = src[7];
&gt; +#endif

This copying can also be done with the template technique above, with an inline template member function that copies the correct number of bytes.

Possibly better for platforms that allow unaligned access, this can be done with a single line:

    *reinterpret_cast&lt;uintptr_t*&gt;(dest) = chunk;

You can see in StringHash.h that many platforms do allow unaligned access. I predict it would be a speedup to use that when possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192499</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-22 10:01:07 -0800</bug_when>
    <thetext>Great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192501</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-22 10:01:18 -0800</bug_when>
    <thetext>I think the UTF-8 decoder could also be sped up the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192874</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-23 04:16:50 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Possibly better for platforms that allow unaligned access, this can be done
&gt; with a single line:
&gt; 
&gt;     *reinterpret_cast&lt;uintptr_t*&gt;(dest) = chunk;

`dest` is UChar* (16-bit), so that won&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192875</commentid>
    <comment_count>8</comment_count>
      <attachid>49275</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-23 04:18:55 -0800</bug_when>
    <thetext>Created attachment 49275
Same patch, templates instead of ifdefs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192946</commentid>
    <comment_count>9</comment_count>
      <attachid>49275</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-23 07:39:05 -0800</bug_when>
    <thetext>Comment on attachment 49275
Same patch, templates instead of ifdefs

&gt; +        * platform/text/TextCodecLatin1.cpp:
&gt; +        (WebCore::):
&gt; +        (WebCore::TextCodecLatin1::decode):

You should delete partial lines like that &quot;WebCore::&quot; one there. They&apos;re created due to a bug in the script.

&gt; +template&lt;&gt; struct NonASCIIMask&lt;8&gt; {
&gt; +    static uintptr_t value() { return 0x8080808080808080UL; }
&gt; +};

I was concerned that compiling this might yield warnings on 32-bit platforms. That&apos;s why I used the type &quot;unsigned long long&quot; in my suggested code. I guess we&apos;re OK because the &quot;UL&quot; suffix makes it an unsigned long, not unsigned long long. I meant to use &quot;ULL&quot;.

Please investigate writing full words as well and applying this same optimization to the increasingly-often-used UTF-8 decoder as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192948</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-23 07:39:28 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; `dest` is UChar* (16-bit), so that won&apos;t work.

Oops, I see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192961</commentid>
    <comment_count>11</comment_count>
      <attachid>49275</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-23 08:16:03 -0800</bug_when>
    <thetext>Comment on attachment 49275
Same patch, templates instead of ifdefs

Rejecting patch 49275 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--debug&apos;]&quot; exit_code: 1
Last 500 characters of output:
bit value into a 32-bit value
distcc[35647] ERROR: compile /Users/eseidel/Projects/CommitQueue/WebCore/platform/text/TextCodecLatin1.cpp on localhost failed
** BUILD FAILED **

The following build commands failed:
WebCore:
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/i386/TextCodecLatin1.o /Users/eseidel/Projects/CommitQueue/WebCore/platform/text/TextCodecLatin1.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://webkit-commit-queue.appspot.com/results/300612</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193007</commentid>
    <comment_count>12</comment_count>
      <attachid>49275</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-23 10:17:14 -0800</bug_when>
    <thetext>Comment on attachment 49275
Same patch, templates instead of ifdefs

&gt; +template&lt;&gt; struct NonASCIIMask&lt;8&gt; {
&gt; +    static uintptr_t value() { return 0x8080808080808080UL; }
&gt; +};

As I feared, this does not compile in 32-bit Mac.

I believe the right way to do this is this:

    static unsigned long long value() { return 0x8080808080808080ULL; }

Should work on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193270</commentid>
    <comment_count>13</comment_count>
      <attachid>49364</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-24 01:59:04 -0800</bug_when>
    <thetext>Created attachment 49364
Same patch with 32-bit compile fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193271</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-24 02:01:23 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Please investigate writing full words as well and applying this same
&gt; optimization to the increasingly-often-used UTF-8 decoder as well.

Sounds like a good idea, but what code are you talking about? AFAICT the UTF-8 decoding is done by each port&apos;s own backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193364</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-24 08:12:49 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Sounds like a good idea, but what code are you talking about? AFAICT the UTF-8
&gt; decoding is done by each port&apos;s own backend.

We had discussed using the UTF8 conversion code from wtf/unicode/UTF8.cpp to create a TextCodecUTF8 that could be more efficient than the platform-specific encoders, but I guess we never did it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193612</commentid>
    <comment_count>16</comment_count>
      <attachid>49364</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-24 20:03:21 -0800</bug_when>
    <thetext>Comment on attachment 49364
Same patch with 32-bit compile fix

Rejecting patch 49364 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 12223 test cases.
fast/table/007.html -&gt; failed

Exiting early after 1 failures. 8371 tests run.
136.90s total testing time

8370 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
5 test cases (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/309294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193723</commentid>
    <comment_count>17</comment_count>
      <attachid>49487</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-25 08:04:32 -0800</bug_when>
    <thetext>Created attachment 49487
Patch with bugfix for test failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193724</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-25 08:08:29 -0800</bug_when>
    <thetext>Attachment 49487 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/TextCodecLatin1.cpp:171:  use_lookup_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193727</commentid>
    <comment_count>19</comment_count>
      <attachid>49487</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-25 08:17:20 -0800</bug_when>
    <thetext>Comment on attachment 49487
Patch with bugfix for test failure

The style bot is correct.

Instead of use_lookup_table the label should be useLookupTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193728</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-25 08:17:43 -0800</bug_when>
    <thetext>I’m glad the test case caught the logic mistake!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193739</commentid>
    <comment_count>21</comment_count>
      <attachid>49492</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-02-25 08:38:19 -0800</bug_when>
    <thetext>Created attachment 49492
Same patch again, style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193791</commentid>
    <comment_count>22</comment_count>
      <attachid>49492</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 10:13:52 -0800</bug_when>
    <thetext>Comment on attachment 49492
Same patch again, style fixed

Clearing flags on attachment: 49492

Committed r55242: &lt;http://trac.webkit.org/changeset/55242&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193792</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 10:13:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49197</attachid>
            <date>2010-02-22 03:46:24 -0800</date>
            <delta_ts>2010-02-22 08:30:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35233.diff</filename>
            <type>text/plain</type>
            <size>3467</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzY0OTQ0Ni4uMjBjZmI3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yMiAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKwogMjAx
MC0wMi0yMiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1z
dGFtcGVkIGJ5IFNhbSBXZWluaWcgYW5kIE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAppbmRleCBjZmRjNWI5Li43M2M2MzU3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMTE3LDI2ICsxMTcs
NjAgQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCiAgICAgcmVnaXN0cmFyKCJVUy1BU0NJSSIsIG5ld1N0cmVhbWluZ1Rl
eHREZWNvZGVyV2luZG93c0xhdGluMSwgMCk7CiB9CiAKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
U1BBUkM2NCkgfHwgQ1BVKElBNjQpIHx8IENQVShQUEM2NCkKKyNkZWZpbmUgTk9OX0FTQ0lJX01B
U0sgMHg4MDgwODA4MDgwODA4MDgwCit0eXBlZGVmIHVpbnQ2NF90IENwdVdvcmQ7CisjZWxzZQor
I2RlZmluZSBOT05fQVNDSUlfTUFTSyAweDgwODA4MDgwCit0eXBlZGVmIHVpbnQzMl90IENwdVdv
cmQ7CisjZW5kaWYKKwogU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYXIq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsKICAgICBVQ2hhciog
Y2hhcmFjdGVyczsKICAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgY2hhcmFjdGVycyk7CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBm
YXN0IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBp
ZiBpdCdzIGFsbCBBU0NJSS4KLSAgICB1bnNpZ25lZCBjaGFyIG9yZWQgPSAwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBj
ID0gYnl0ZXNbaV07Ci0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSBjOwotICAgICAgICBvcmVkIHw9
IGM7Ci0gICAgfQotCi0gICAgaWYgKCEob3JlZCAmIDB4ODApKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgLy8gQ29udmVydCB0aGUgc2xpZ2h0bHkgc2xvd2VyIHdheSB3aGVuIHRoZXJl
IGFyZSBub24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAgICAg
ICBjaGFyYWN0ZXJzW2ldID0gdGFibGVbY107CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3Jj
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0ZXMpOworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGJ5dGVzICsgbGVuZ3RoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBhbGlnbmVk
RW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocmVpbnRlcnByZXRf
Y2FzdDxwdHJkaWZmX3Q+KGVuZCkgJiB+KHNpemVvZihDcHVXb3JkKSAtIDEpKTsKKyAgICBVQ2hh
ciogZGVzdCA9IGNoYXJhY3RlcnM7CisKKyAgICB3aGlsZSAoc3JjIDwgZW5kKSB7CisgICAgICAg
IGlmICgqc3JjIDwgMHg4MCkgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciB2YWx1ZXMg
PCAweDgwIChtb3N0IExhdGluLTEgdGV4dCB3aWxsIGJlIEFTQ0lJKQorICAgICAgICAgICAgLy8g
V2FpdCB1bnRpbCB3ZSdyZSBhdCBhIHByb3Blcmx5IGFsaWduZWQgYWRkcmVzcywgdGhlbiByZWFk
IGZ1bGwgQ1BVIHdvcmRzLgorICAgICAgICAgICAgaWYgKCEocmVpbnRlcnByZXRfY2FzdDxwdHJk
aWZmX3Q+KHNyYykgJiAoc2l6ZW9mKENwdVdvcmQpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHNyYyA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3B1V29yZCBj
aHVuayA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IENwdVdvcmQqPihzcmMpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChjaHVuayAmIE5PTl9BU0NJSV9NQVNLKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVzdFswXSA9IHNyY1swXTsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdFsxXSA9IHNyY1sxXTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFsyXSA9IHNyY1syXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFszXSA9IHNyY1sz
XTsKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKElBNjQpIHx8IENQVShQ
UEM2NCkKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0XSA9IHNyY1s0XTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVzdFs1XSA9IHNyY1s1XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs2XSA9
IHNyY1s2XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs3XSA9IHNyY1s3XTsKKyNlbmRpZgor
CisgICAgICAgICAgICAgICAgICAgIHNyYyArPSBzaXplb2YoQ3B1V29yZCk7CisgICAgICAgICAg
ICAgICAgICAgIGRlc3QgKz0gc2l6ZW9mKENwdVdvcmQpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChzcmMgPT0gZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmRlc3QgPSAqc3JjOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gdGFibGVbKnNyY107CisKKyAgICAgICAgKytzcmM7
CisgICAgICAgICsrZGVzdDsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>
<flag name="review"
          id="31983"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49217</attachid>
            <date>2010-02-22 08:30:26 -0800</date>
            <delta_ts>2010-02-23 04:18:55 -0800</delta_ts>
            <desc>Same patch with nits addressed</desc>
            <filename>bug-35233-2.diff</filename>
            <type>text/plain</type>
            <size>3423</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTM1MjM4MS4uNzdlMzZkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yMiAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKwogMjAx
MC0wMi0yMiAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
TGF0aW4xLmNwcAppbmRleCBjZmRjNWI5Li5lZjcxYzA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjTGF0aW4xLmNwcApAQCAtMTE3LDI2ICsxMTcsNTggQEAgdm9pZCBUZXh0Q29k
ZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAg
ICAgcmVnaXN0cmFyKCJVUy1BU0NJSSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xh
dGluMSwgMCk7CiB9CiAKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKElB
NjQpIHx8IENQVShQUEM2NCkKK2NvbnN0IHVpbnRwdHJfdCBub25Bc2NpaU1hc2sgPSAweDgwODA4
MDgwODA4MDgwODA7CisjZWxzZQorY29uc3QgdWludHB0cl90IG5vbkFzY2lpTWFzayA9IDB4ODA4
MDgwODA7CisjZW5kaWYKKwogU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNo
YXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsKICAgICBVQ2hh
ciogY2hhcmFjdGVyczsKICAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgY2hhcmFjdGVycyk7CiAKLSAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcg
YSBmYXN0IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4gZWZmaWNpZW50IGNoZWNrIHRvIHNl
ZSBpZiBpdCdzIGFsbCBBU0NJSS4KLSAgICB1bnNpZ25lZCBjaGFyIG9yZWQgPSAwOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hh
ciBjID0gYnl0ZXNbaV07Ci0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSBjOwotICAgICAgICBvcmVk
IHw9IGM7Ci0gICAgfQotCi0gICAgaWYgKCEob3JlZCAmIDB4ODApKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgLy8gQ29udmVydCB0aGUgc2xpZ2h0bHkgc2xvd2VyIHdheSB3aGVuIHRo
ZXJlIGFyZSBub24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAg
ICAgICBjaGFyYWN0ZXJzW2ldID0gdGFibGVbY107CisgICAgY29uc3QgdW5zaWduZWQgY2hhciog
c3JjID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0ZXMpOworICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGJ5dGVzICsgbGVuZ3RoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBhbGln
bmVkRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocmVpbnRlcnBy
ZXRfY2FzdDxwdHJkaWZmX3Q+KGVuZCkgJiB+KHNpemVvZih1aW50cHRyX3QpIC0gMSkpOworICAg
IFVDaGFyKiBkZXN0ID0gY2hhcmFjdGVyczsKKworICAgIHdoaWxlIChzcmMgPCBlbmQpIHsKKyAg
ICAgICAgaWYgKCpzcmMgPCAweDgwKSB7CisgICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHZh
bHVlcyA8IDB4ODAgKG1vc3QgTGF0aW4tMSB0ZXh0IHdpbGwgYmUgQVNDSUkpCisgICAgICAgICAg
ICAvLyBXYWl0IHVudGlsIHdlJ3JlIGF0IGEgcHJvcGVybHkgYWxpZ25lZCBhZGRyZXNzLCB0aGVu
IHJlYWQgZnVsbCBDUFUgd29yZHMuCisgICAgICAgICAgICBpZiAoIShyZWludGVycHJldF9jYXN0
PHB0cmRpZmZfdD4oc3JjKSAmIChzaXplb2YodWludHB0cl90KSAtIDEpKSkgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChzcmMgPCBhbGlnbmVkRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHVp
bnRwdHJfdCBjaHVuayA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHNyYyk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rICYgbm9uQXNjaWlNYXNrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVzdFswXSA9
IHNyY1swXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFsxXSA9IHNyY1sxXTsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzdFsyXSA9IHNyY1syXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFsz
XSA9IHNyY1szXTsKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKElBNjQp
IHx8IENQVShQUEM2NCkKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0XSA9IHNyY1s0XTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdFs1XSA9IHNyY1s1XTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzdFs2XSA9IHNyY1s2XTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs3XSA9IHNyY1s3XTsK
KyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIHNyYyArPSBzaXplb2YodWludHB0cl90KTsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBzaXplb2YodWludHB0cl90KTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3JjID09IGVuZCkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpkZXN0ID0gKnNy
YzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAqZGVzdCA9IHRhYmxlWypzcmNdOworCisg
ICAgICAgICsrc3JjOworICAgICAgICArK2Rlc3Q7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3Vs
dDsK
</data>
<flag name="review"
          id="32015"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49275</attachid>
            <date>2010-02-23 04:18:55 -0800</date>
            <delta_ts>2010-02-24 01:59:04 -0800</delta_ts>
            <desc>Same patch, templates instead of ifdefs</desc>
            <filename>bug-35233-3.diff</filename>
            <type>text/plain</type>
            <size>3846</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTM1ODZmZC4uY2YzMjIyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wMi0yMyAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNM
YXRpbjE6OmRlY29kZSk6CisKIDIwMTAtMDItMjMgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKaW5kZXggY2ZkYzViOS4uYTI0Zjk0MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAKQEAgLTExNywyNiAr
MTE3LDc1IEBAIHZvaWQgVGV4dENvZGVjTGF0aW4xOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIgcmVnaXN0cmFyKQogICAgIHJlZ2lzdHJhcigiVVMtQVNDSUkiLCBuZXdTdHJlYW1p
bmdUZXh0RGVjb2RlcldpbmRvd3NMYXRpbjEsIDApOwogfQogCit0ZW1wbGF0ZTxzaXplX3Qgc2l6
ZT4gc3RydWN0IE5vbkFTQ0lJTWFzazsKK3RlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw0
PiB7CisgICAgc3RhdGljIHVpbnRwdHJfdCB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODBVOyB9
Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDg+IHsKKyAgICBzdGF0aWMgdWlu
dHB0cl90IHZhbHVlKCkgeyByZXR1cm4gMHg4MDgwODA4MDgwODA4MDgwVUw7IH0KK307CisKK3Rl
bXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgVUNoYXJCeXRlRmlsbGVyOwordGVtcGxhdGU8PiBz
dHJ1Y3QgVUNoYXJCeXRlRmlsbGVyPDQ+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBk
ZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMpCisgICAgeworICAgICAgICBkZXN0WzBdID0g
c3JjWzBdOworICAgICAgICBkZXN0WzFdID0gc3JjWzFdOworICAgICAgICBkZXN0WzJdID0gc3Jj
WzJdOworICAgICAgICBkZXN0WzNdID0gc3JjWzNdOworICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBVQ2hhckJ5dGVGaWxsZXI8OD4geworICAgIHN0YXRpYyB2b2lkIGNvcHkoVUNoYXIqIGRl
c3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyYykKKyAgICB7CisgICAgICAgIGRlc3RbMF0gPSBz
cmNbMF07CisgICAgICAgIGRlc3RbMV0gPSBzcmNbMV07CisgICAgICAgIGRlc3RbMl0gPSBzcmNb
Ml07CisgICAgICAgIGRlc3RbM10gPSBzcmNbM107CisgICAgICAgIGRlc3RbNF0gPSBzcmNbNF07
CisgICAgICAgIGRlc3RbNV0gPSBzcmNbNV07CisgICAgICAgIGRlc3RbNl0gPSBzcmNbNl07Cisg
ICAgICAgIGRlc3RbN10gPSBzcmNbN107CisgICAgfQorfTsKKwogU3RyaW5nIFRleHRDb2RlY0xh
dGluMTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29s
LCBib29sJikKIHsKICAgICBVQ2hhciogY2hhcmFjdGVyczsKICAgICBTdHJpbmcgcmVzdWx0ID0g
U3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgY2hhcmFjdGVycyk7CiAKLSAgICAv
LyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4g
ZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KLSAgICB1bnNpZ25lZCBj
aGFyIG9yZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gYnl0ZXNbaV07Ci0gICAgICAgIGNoYXJhY3RlcnNb
aV0gPSBjOwotICAgICAgICBvcmVkIHw9IGM7Ci0gICAgfQorICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJ5dGVzKTsK
KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBlbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihieXRlcyArIGxlbmd0aCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciog
YWxpZ25lZEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHJlaW50
ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihlbmQpICYgfihzaXplb2YodWludHB0cl90KSAtIDEpKTsK
KyAgICBVQ2hhciogZGVzdCA9IGNoYXJhY3RlcnM7CisKKyAgICB3aGlsZSAoc3JjIDwgZW5kKSB7
CisgICAgICAgIGlmICgqc3JjIDwgMHg4MCkgeworICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZv
ciB2YWx1ZXMgPCAweDgwIChtb3N0IExhdGluLTEgdGV4dCB3aWxsIGJlIEFTQ0lJKQorICAgICAg
ICAgICAgLy8gV2FpdCB1bnRpbCB3ZSdyZSBhdCBhIHByb3Blcmx5IGFsaWduZWQgYWRkcmVzcywg
dGhlbiByZWFkIGZ1bGwgQ1BVIHdvcmRzLgorICAgICAgICAgICAgaWYgKCEocmVpbnRlcnByZXRf
Y2FzdDxwdHJkaWZmX3Q+KHNyYykgJiAoc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKSkpIHsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoc3JjIDwgYWxpZ25lZEVuZCkgeworICAgICAgICAgICAgICAgICAg
ICB1aW50cHRyX3QgY2h1bmsgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3QqPihz
cmMpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAmIE5vbkFTQ0lJTWFzazxzaXpl
b2YodWludHB0cl90KT46OnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgICBVQ2hhckJ5dGVGaWxsZXI8c2l6ZW9mKHVpbnRwdHJfdCk+
Ojpjb3B5KGRlc3QsIHNyYyk7CisKKyAgICAgICAgICAgICAgICAgICAgc3JjICs9IHNpemVvZih1
aW50cHRyX3QpOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IHNpemVvZih1aW50cHRyX3Qp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzcmMgPT0gZW5kKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAotICAgIGlmICghKG9y
ZWQgJiAweDgwKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICpkZXN0ID0g
KnNyYzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAqZGVzdCA9IHRhYmxlWypzcmNdOwog
Ci0gICAgLy8gQ29udmVydCB0aGUgc2xpZ2h0bHkgc2xvd2VyIHdheSB3aGVuIHRoZXJlIGFyZSBu
b24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAgICAgICBjaGFy
YWN0ZXJzW2ldID0gdGFibGVbY107CisgICAgICAgICsrc3JjOworICAgICAgICArK2Rlc3Q7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>
<flag name="review"
          id="32096"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="32097"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49364</attachid>
            <date>2010-02-24 01:59:04 -0800</date>
            <delta_ts>2010-02-25 08:04:32 -0800</delta_ts>
            <desc>Same patch with 32-bit compile fix</desc>
            <filename>bug-35233-4.diff</filename>
            <type>text/plain</type>
            <size>3827</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmMzOTc5YS4uMmM5Mzg0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yNCAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKwogMjAx
MC0wMi0yMyAgR2VvZmYgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0xhdGluMS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcAppbmRleCBjZmRjNWI5Li5hNjY5MWM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjTGF0aW4xLmNwcApAQCAtMTE3LDI2ICsxMTcsNzUgQEAgdm9pZCBUZXh0Q29kZWNMYXRp
bjE6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCiAgICAgcmVn
aXN0cmFyKCJVUy1BU0NJSSIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVyV2luZG93c0xhdGluMSwg
MCk7CiB9CiAKK3RlbXBsYXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgTm9uQVNDSUlNYXNrOwordGVt
cGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDQ+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgdmFs
dWUoKSB7IHJldHVybiAweDgwODA4MDgwVTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IE5vbkFT
Q0lJTWFzazw4PiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSgpIHsgcmV0
dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsgfQorfTsKKwordGVtcGxhdGU8c2l6ZV90IHNpemU+
IHN0cnVjdCBVQ2hhckJ5dGVGaWxsZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBVQ2hhckJ5dGVGaWxs
ZXI8ND4geworICAgIHN0YXRpYyB2b2lkIGNvcHkoVUNoYXIqIGRlc3QsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIHNyYykKKyAgICB7CisgICAgICAgIGRlc3RbMF0gPSBzcmNbMF07CisgICAgICAgIGRl
c3RbMV0gPSBzcmNbMV07CisgICAgICAgIGRlc3RbMl0gPSBzcmNbMl07CisgICAgICAgIGRlc3Rb
M10gPSBzcmNbM107CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFVDaGFyQnl0ZUZpbGxl
cjw4PiB7CisgICAgc3RhdGljIHZvaWQgY29weShVQ2hhciogZGVzdCwgY29uc3QgdW5zaWduZWQg
Y2hhciogc3JjKQorICAgIHsKKyAgICAgICAgZGVzdFswXSA9IHNyY1swXTsKKyAgICAgICAgZGVz
dFsxXSA9IHNyY1sxXTsKKyAgICAgICAgZGVzdFsyXSA9IHNyY1syXTsKKyAgICAgICAgZGVzdFsz
XSA9IHNyY1szXTsKKyAgICAgICAgZGVzdFs0XSA9IHNyY1s0XTsKKyAgICAgICAgZGVzdFs1XSA9
IHNyY1s1XTsKKyAgICAgICAgZGVzdFs2XSA9IHNyY1s2XTsKKyAgICAgICAgZGVzdFs3XSA9IHNy
Y1s3XTsKKyAgICB9Cit9OworCiBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3Qg
Y2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewogICAgIFVD
aGFyKiBjaGFyYWN0ZXJzOwogICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJzKTsKIAotICAgIC8vIENvbnZlcnQgdGhlIHN0cmlu
ZyBhIGZhc3Qgd2F5IGFuZCBzaW11bHRhbmVvdXNseSBkbyBhbiBlZmZpY2llbnQgY2hlY2sgdG8g
c2VlIGlmIGl0J3MgYWxsIEFTQ0lJLgotICAgIHVuc2lnbmVkIGNoYXIgb3JlZCA9IDA7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBj
aGFyIGMgPSBieXRlc1tpXTsKLSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IGM7Ci0gICAgICAgIG9y
ZWQgfD0gYzsKLSAgICB9CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0ZXMpOworICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGJ5dGVz
ICsgbGVuZ3RoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBhbGlnbmVkRW5kID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZm
X3Q+KGVuZCkgJiB+KHNpemVvZih1aW50cHRyX3QpIC0gMSkpOworICAgIFVDaGFyKiBkZXN0ID0g
Y2hhcmFjdGVyczsKKworICAgIHdoaWxlIChzcmMgPCBlbmQpIHsKKyAgICAgICAgaWYgKCpzcmMg
PCAweDgwKSB7CisgICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHZhbHVlcyA8IDB4ODAgKG1v
c3QgTGF0aW4tMSB0ZXh0IHdpbGwgYmUgQVNDSUkpCisgICAgICAgICAgICAvLyBXYWl0IHVudGls
IHdlJ3JlIGF0IGEgcHJvcGVybHkgYWxpZ25lZCBhZGRyZXNzLCB0aGVuIHJlYWQgZnVsbCBDUFUg
d29yZHMuCisgICAgICAgICAgICBpZiAoIShyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oc3Jj
KSAmIChzaXplb2YodWludHB0cl90KSAtIDEpKSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChz
cmMgPCBhbGlnbmVkRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBjaHVuayA9
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHNyYyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNodW5rICYgTm9uQVNDSUlNYXNrPHNpemVvZih1aW50cHRyX3QpPjo6dmFs
dWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ICAgIFVDaGFyQnl0ZUZpbGxlcjxzaXplb2YodWludHB0cl90KT46OmNvcHkoZGVzdCwgc3JjKTsK
KworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gc2l6ZW9mKHVpbnRwdHJfdCk7CisgICAgICAg
ICAgICAgICAgICAgIGRlc3QgKz0gc2l6ZW9mKHVpbnRwdHJfdCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKHNyYyA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogCi0gICAgaWYgKCEob3JlZCAmIDB4ODApKQotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgKmRlc3QgPSAqc3JjOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICpkZXN0ID0gdGFibGVbKnNyY107CiAKLSAgICAvLyBDb252ZXJ0IHRo
ZSBzbGlnaHRseSBzbG93ZXIgd2F5IHdoZW4gdGhlcmUgYXJlIG5vbi1BU0NJSSBjaGFyYWN0ZXJz
LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5z
aWduZWQgY2hhciBjID0gYnl0ZXNbaV07Ci0gICAgICAgIGNoYXJhY3RlcnNbaV0gPSB0YWJsZVtj
XTsKKyAgICAgICAgKytzcmM7CisgICAgICAgICsrZGVzdDsKICAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0Owo=
</data>
<flag name="review"
          id="32216"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="32217"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49487</attachid>
            <date>2010-02-25 08:04:32 -0800</date>
            <delta_ts>2010-02-25 08:38:19 -0800</delta_ts>
            <desc>Patch with bugfix for test failure</desc>
            <filename>bug-35233-5.diff</filename>
            <type>text/plain</type>
            <size>3886</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWM4N2ZiOS4uNDgwZjgzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yNSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKwogMjAx
MC0wMi0yNSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuY3BwCmluZGV4IGNmZGM1YjkuLmRmNzBmMWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCkBAIC0xMTcsMjYgKzExNyw3NiBAQCB2b2lkIFRl
eHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJh
cikKICAgICByZWdpc3RyYXIoIlVTLUFTQ0lJIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJXaW5k
b3dzTGF0aW4xLCAwKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBOb25BU0NJ
SU1hc2s7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBOb25BU0NJSU1hc2s8ND4geworICAgIHN0YXRpYyB1
bnNpZ25lZCB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODBVOyB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgTm9uQVNDSUlNYXNrPDg+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHZh
bHVlKCkgeyByZXR1cm4gMHg4MDgwODA4MDgwODA4MDgwVUxMOyB9Cit9OworCit0ZW1wbGF0ZTxz
aXplX3Qgc2l6ZT4gc3RydWN0IFVDaGFyQnl0ZUZpbGxlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFVD
aGFyQnl0ZUZpbGxlcjw0PiB7CisgICAgc3RhdGljIHZvaWQgY29weShVQ2hhciogZGVzdCwgY29u
c3QgdW5zaWduZWQgY2hhciogc3JjKQorICAgIHsKKyAgICAgICAgZGVzdFswXSA9IHNyY1swXTsK
KyAgICAgICAgZGVzdFsxXSA9IHNyY1sxXTsKKyAgICAgICAgZGVzdFsyXSA9IHNyY1syXTsKKyAg
ICAgICAgZGVzdFszXSA9IHNyY1szXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVUNo
YXJCeXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0LCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBzcmMpCisgICAgeworICAgICAgICBkZXN0WzBdID0gc3JjWzBdOwor
ICAgICAgICBkZXN0WzFdID0gc3JjWzFdOworICAgICAgICBkZXN0WzJdID0gc3JjWzJdOworICAg
ICAgICBkZXN0WzNdID0gc3JjWzNdOworICAgICAgICBkZXN0WzRdID0gc3JjWzRdOworICAgICAg
ICBkZXN0WzVdID0gc3JjWzVdOworICAgICAgICBkZXN0WzZdID0gc3JjWzZdOworICAgICAgICBk
ZXN0WzddID0gc3JjWzddOworICAgIH0KK307CisKIFN0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmRl
Y29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbCYp
CiB7CiAgICAgVUNoYXIqIGNoYXJhY3RlcnM7CiAgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6
Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMpOwogCi0gICAgLy8gQ29udmVy
dCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVu
dCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCi0gICAgdW5zaWduZWQgY2hhciBvcmVk
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsK
LSAgICAgICAgb3JlZCB8PSBjOwotICAgIH0KLQotICAgIGlmICghKG9yZWQgJiAweDgwKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihieXRlcyk7CisgICAgY29uc3QgdW5z
aWduZWQgY2hhciogZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
Ynl0ZXMgKyBsZW5ndGgpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGFsaWduZWRFbmQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oZW5kKSAmIH4oc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKSk7CisgICAgVUNoYXIqIGRl
c3QgPSBjaGFyYWN0ZXJzOworCisgICAgd2hpbGUgKHNyYyA8IGVuZCkgeworICAgICAgICBpZiAo
KnNyYyA8IDB4ODApIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgdmFsdWVzIDwgMHg4
MCAobW9zdCBMYXRpbi0xIHRleHQgd2lsbCBiZSBBU0NJSSkKKyAgICAgICAgICAgIC8vIFdhaXQg
dW50aWwgd2UncmUgYXQgYSBwcm9wZXJseSBhbGlnbmVkIGFkZHJlc3MsIHRoZW4gcmVhZCBmdWxs
IENQVSB3b3Jkcy4KKyAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
PihzcmMpICYgKHNpemVvZih1aW50cHRyX3QpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHNyYyA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGNo
dW5rID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4oc3JjKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2h1bmsgJiBOb25BU0NJSU1hc2s8c2l6ZW9mKHVpbnRwdHJfdCk+
Ojp2YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byB1c2VfbG9va3VwX3RhYmxl
OworCisgICAgICAgICAgICAgICAgICAgIFVDaGFyQnl0ZUZpbGxlcjxzaXplb2YodWludHB0cl90
KT46OmNvcHkoZGVzdCwgc3JjKTsKKworICAgICAgICAgICAgICAgICAgICBzcmMgKz0gc2l6ZW9m
KHVpbnRwdHJfdCk7CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gc2l6ZW9mKHVpbnRwdHJf
dCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHNyYyA9PSBlbmQp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KmRlc3QgPSAqc3JjOworICAgICAgICB9IGVsc2UgewordXNlX2xvb2t1cF90YWJsZToKKyAgICAg
ICAgICAgICpkZXN0ID0gdGFibGVbKnNyY107CisgICAgICAgIH0KIAotICAgIC8vIENvbnZlcnQg
dGhlIHNsaWdodGx5IHNsb3dlciB3YXkgd2hlbiB0aGVyZSBhcmUgbm9uLUFTQ0lJIGNoYXJhY3Rl
cnMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICB1
bnNpZ25lZCBjaGFyIGMgPSBieXRlc1tpXTsKLSAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRhYmxl
W2NdOworICAgICAgICArK3NyYzsKKyAgICAgICAgKytkZXN0OwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQ7Cg==
</data>
<flag name="review"
          id="32371"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49492</attachid>
            <date>2010-02-25 08:38:19 -0800</date>
            <delta_ts>2010-02-25 10:13:52 -0800</delta_ts>
            <desc>Same patch again, style fixed</desc>
            <filename>bug-35233-6.diff</filename>
            <type>text/plain</type>
            <size>3882</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWM4N2ZiOS4uNDgwZjgzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yNSAgQW5kcmVhcyBLbGlu
ZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE9wdGltaXplIGRlY29kaW5nIG9mIExhdGluLTEgdGV4dCBi
eSBleHBsb2l0aW5nIHRoZSBmYWN0IHRoYXQgbW9zdCBvZiBpdCB3aWxsCisgICAgICAgIGJlIEFT
Q0lJLW9ubHkgZGF0YS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUyMzMKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4x
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKToKKwogMjAx
MC0wMi0yNSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuY3BwCmluZGV4IGNmZGM1YjkuLjAwMDU3NTMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCkBAIC0xMTcsMjYgKzExNyw3NiBAQCB2b2lkIFRl
eHRDb2RlY0xhdGluMTo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJh
cikKICAgICByZWdpc3RyYXIoIlVTLUFTQ0lJIiwgbmV3U3RyZWFtaW5nVGV4dERlY29kZXJXaW5k
b3dzTGF0aW4xLCAwKTsKIH0KIAordGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBOb25BU0NJ
SU1hc2s7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBOb25BU0NJSU1hc2s8ND4geworICAgIHN0YXRpYyB1
bnNpZ25lZCB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODBVOyB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgTm9uQVNDSUlNYXNrPDg+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHZh
bHVlKCkgeyByZXR1cm4gMHg4MDgwODA4MDgwODA4MDgwVUxMOyB9Cit9OworCit0ZW1wbGF0ZTxz
aXplX3Qgc2l6ZT4gc3RydWN0IFVDaGFyQnl0ZUZpbGxlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFVD
aGFyQnl0ZUZpbGxlcjw0PiB7CisgICAgc3RhdGljIHZvaWQgY29weShVQ2hhciogZGVzdCwgY29u
c3QgdW5zaWduZWQgY2hhciogc3JjKQorICAgIHsKKyAgICAgICAgZGVzdFswXSA9IHNyY1swXTsK
KyAgICAgICAgZGVzdFsxXSA9IHNyY1sxXTsKKyAgICAgICAgZGVzdFsyXSA9IHNyY1syXTsKKyAg
ICAgICAgZGVzdFszXSA9IHNyY1szXTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgVUNo
YXJCeXRlRmlsbGVyPDg+IHsKKyAgICBzdGF0aWMgdm9pZCBjb3B5KFVDaGFyKiBkZXN0LCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBzcmMpCisgICAgeworICAgICAgICBkZXN0WzBdID0gc3JjWzBdOwor
ICAgICAgICBkZXN0WzFdID0gc3JjWzFdOworICAgICAgICBkZXN0WzJdID0gc3JjWzJdOworICAg
ICAgICBkZXN0WzNdID0gc3JjWzNdOworICAgICAgICBkZXN0WzRdID0gc3JjWzRdOworICAgICAg
ICBkZXN0WzVdID0gc3JjWzVdOworICAgICAgICBkZXN0WzZdID0gc3JjWzZdOworICAgICAgICBk
ZXN0WzddID0gc3JjWzddOworICAgIH0KK307CisKIFN0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmRl
Y29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbCYp
CiB7CiAgICAgVUNoYXIqIGNoYXJhY3RlcnM7CiAgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6
Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMpOwogCi0gICAgLy8gQ29udmVy
dCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVu
dCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCi0gICAgdW5zaWduZWQgY2hhciBvcmVk
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAgICAgICBjaGFyYWN0ZXJzW2ldID0gYzsK
LSAgICAgICAgb3JlZCB8PSBjOwotICAgIH0KLQotICAgIGlmICghKG9yZWQgJiAweDgwKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihieXRlcyk7CisgICAgY29uc3QgdW5z
aWduZWQgY2hhciogZW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
Ynl0ZXMgKyBsZW5ndGgpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGFsaWduZWRFbmQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oZW5kKSAmIH4oc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKSk7CisgICAgVUNoYXIqIGRl
c3QgPSBjaGFyYWN0ZXJzOworCisgICAgd2hpbGUgKHNyYyA8IGVuZCkgeworICAgICAgICBpZiAo
KnNyYyA8IDB4ODApIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgdmFsdWVzIDwgMHg4
MCAobW9zdCBMYXRpbi0xIHRleHQgd2lsbCBiZSBBU0NJSSkKKyAgICAgICAgICAgIC8vIFdhaXQg
dW50aWwgd2UncmUgYXQgYSBwcm9wZXJseSBhbGlnbmVkIGFkZHJlc3MsIHRoZW4gcmVhZCBmdWxs
IENQVSB3b3Jkcy4KKyAgICAgICAgICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
PihzcmMpICYgKHNpemVvZih1aW50cHRyX3QpIC0gMSkpKSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHNyYyA8IGFsaWduZWRFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGNo
dW5rID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4oc3JjKTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2h1bmsgJiBOb25BU0NJSU1hc2s8c2l6ZW9mKHVpbnRwdHJfdCk+
Ojp2YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byB1c2VMb29rdXBUYWJsZTsK
KworICAgICAgICAgICAgICAgICAgICBVQ2hhckJ5dGVGaWxsZXI8c2l6ZW9mKHVpbnRwdHJfdCk+
Ojpjb3B5KGRlc3QsIHNyYyk7CisKKyAgICAgICAgICAgICAgICAgICAgc3JjICs9IHNpemVvZih1
aW50cHRyX3QpOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IHNpemVvZih1aW50cHRyX3Qp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzcmMgPT0gZW5kKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpk
ZXN0ID0gKnNyYzsKKyAgICAgICAgfSBlbHNlIHsKK3VzZUxvb2t1cFRhYmxlOgorICAgICAgICAg
ICAgKmRlc3QgPSB0YWJsZVsqc3JjXTsKKyAgICAgICAgfQogCi0gICAgLy8gQ29udmVydCB0aGUg
c2xpZ2h0bHkgc2xvd2VyIHdheSB3aGVuIHRoZXJlIGFyZSBub24tQVNDSUkgY2hhcmFjdGVycy4K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwotICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdGFibGVbY107
CisgICAgICAgICsrc3JjOworICAgICAgICArK2Rlc3Q7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>