<?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>39140</bug_id>
          
          <creation_ts>2010-05-14 15:04:43 -0700</creation_ts>
          <short_desc>Add support for 4 and 8 hexit CSS hexcolor values</short_desc>
          <delta_ts>2016-08-03 13:23:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>150853</dup_id>
          
          <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="Tab Atkins">tabatkins</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ayg</cc>
    
    <cc>bdakin</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dumi</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>ian</cc>
    
    <cc>paul.neave</cc>
    
    <cc>phiw2</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zcorpan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226021</commentid>
    <comment_count>0</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-14 15:04:43 -0700</bug_when>
    <thetext>Feature is proposed for CSS3 Color, worst case will be in CSS4 Color.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226024</commentid>
    <comment_count>1</comment_count>
      <attachid>56115</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-14 15:12:51 -0700</bug_when>
    <thetext>Created attachment 56115
Patch with tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226028</commentid>
    <comment_count>2</comment_count>
      <attachid>56115</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-14 15:22:56 -0700</bug_when>
    <thetext>Comment on attachment 56115
Patch with tests

The patch has tabs in it, so it can&apos;t be landed.

What&apos;s the compatibility implication of this? What do existing browsers do when confronted with colors in these formats? Can we prove to ourselves that there are not some sites unknowingly depending on this? Have any other browsers added support for this yet.

&gt; +	if (length == 6) {
&gt; +		alpha = 0xFF;
&gt; +	}

&gt; +	if (length == 3) {
&gt; +		alpha = 0xF;
&gt; +	}

WebKit coding style does not use braces around single line if statement bodies.

&gt; +var testElement = document.createElement(&apos;div&apos;);
&gt; +for (var i = 0; i &lt; inputs.length; ++i) {
&gt; +    testElement.style.color = inputs[i];
&gt; +    shouldBeEqualToString(&apos;testElement.style.color&apos;, expected[i]);
&gt; +}

This is not a great way to write a test, because the test output won&apos;t contain any indication of what&apos;s being tested. Instead, I suggest writing this:

    shouldBeEqualToString(&apos;testElement.style.color = &quot;&apos; + inputs[i] + &apos;&quot;; testElement.style.color&quot;, expected[i]);

Then the test output will show what&apos;s being tested. Or you can make it even cleaner by using a function:

    shouldBeEqualToString(&apos;testColorRoundTrip(&quot;&apos; + inputs[i] + &apos;&quot;)&quot;, expected[i]);

There also was something wrong with the expected test result you attached here. Not sure what went wrong exactly.

review- because of the tabs. Please consider my other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226049</commentid>
    <comment_count>3</comment_count>
      <attachid>56120</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-14 16:28:59 -0700</bug_when>
    <thetext>Created attachment 56120
Patch with tests

Corrected tab issues, addressed other stylistic comments.

Testing shows that current Opera, Firefox, and Webkit all ignore 4 and 8 hexit colors.  IE8 ignores 8 hexit colors, but treats 4 hexit colors as white.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226069</commentid>
    <comment_count>4</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-14 17:09:50 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Corrected tab issues

i think you still have some tabs in 4-or-8-hexit-colors.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226074</commentid>
    <comment_count>5</comment_count>
      <attachid>56126</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-14 17:16:19 -0700</bug_when>
    <thetext>Created attachment 56126
Patch with tests

Fixed final tab issues, and made a manual check through the patch for further tabs.

I think the issues with my expected output file are due to me working on a windows machine but working through cygwin.  The file, as it exists, appears to be what&apos;s required for tests to pass on my machine.  I can renormalize the linebreaks to unix-style if necessary, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226075</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-14 17:17:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Testing shows that current Opera, Firefox, and Webkit all ignore 4 and 8 hexit colors.  IE8 ignores 8 hexit colors, but treats 4 hexit colors as white.

The fact that current browsers ignore these colors means that a site author might accidentally specify one of these, and it will be harmless until we start supporting it.

In the past, such changes have resulted in websites that worked in all other browsers but not in Safari. I&apos;m not sure what the best way to mitigate this risk is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226077</commentid>
    <comment_count>7</comment_count>
      <attachid>56120</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-05-14 17:26:01 -0700</bug_when>
    <thetext>Comment on attachment 56120
Patch with tests

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 59490)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,16 @@
&gt; +2010-05-14  Tab Atkins  &lt;tabatkins@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Adds support for 4 and 8 hexit CSS hexcolors
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=39140
&gt; +
&gt; +        Tested by fast/css/4-or-8-hexit-colors.html
&gt; +
&gt; +        * css/tokenizer.flex:
&gt; +        * platform/graphics/Color.cpp:
&gt; +        (WebCore::Color::parseHexColor):
&gt; +
&gt;  2010-05-14  Eric Seidel  &lt;eric@webkit.org&gt;
&gt;  
&gt;          Unreviewed, rolling out r59489.
&gt; Index: WebCore/platform/graphics/Color.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/Color.cpp	(revision 59365)
&gt; +++ WebCore/platform/graphics/Color.cpp	(working copy)
&gt; @@ -129,21 +129,36 @@
&gt;  bool Color::parseHexColor(const String&amp; name, RGBA32&amp; rgb)
&gt;  {
&gt;      unsigned length = name.length();
&gt; -    if (length != 3 &amp;&amp; length != 6)
&gt; +    if (length != 3 &amp;&amp; length != 4 &amp;&amp; length != 6 &amp;&amp; length != 8)
&gt;          return false;
&gt;      unsigned value = 0;
&gt; +    unsigned alpha = 0;
&gt;      for (unsigned i = 0; i &lt; length; ++i) {
&gt;          if (!isASCIIHexDigit(name[i]))
&gt;              return false;
&gt;          value &lt;&lt;= 4;
&gt;          value |= toASCIIHexValue(name[i]);
&gt;      }
&gt; -    if (length == 6) {
&gt; -        rgb = 0xFF000000 | value;
&gt; +
&gt; +    if (length == 8) {
&gt; +        alpha = 0xFF &amp; value;
&gt; +        value &gt;&gt;= 8;
&gt; +    }
&gt; +    if (length == 6)
&gt; +        alpha = 0xFF;
&gt; +    if (length == 4) {
&gt; +        alpha = 0xF &amp; value;
&gt; +        value &gt;&gt;= 4;
&gt; +    }
&gt; +    if (length == 3)
&gt; +        alpha = 0xF;
&gt; +	
&gt; +    if (length == 6 || length == 8) {
&gt; +        rgb = alpha &lt;&lt; 24 | value;
&gt;          return true;
&gt;      }
&gt; -    // #abc converts to #aabbcc
&gt; -    rgb = 0xFF000000
&gt; +    // #abc converts to #aabbcc, #abcd converts to #aabbccdd
&gt; +    rgb = alpha &lt;&lt; 28 | alpha &lt;&lt; 24
&gt;          | (value &amp; 0xF00) &lt;&lt; 12 | (value &amp; 0xF00) &lt;&lt; 8
&gt;          | (value &amp; 0xF0) &lt;&lt; 8 | (value &amp; 0xF0) &lt;&lt; 4
&gt;          | (value &amp; 0xF) &lt;&lt; 4 | (value &amp; 0xF);
&gt; Index: WebCore/css/tokenizer.flex
&gt; ===================================================================
&gt; --- WebCore/css/tokenizer.flex	(revision 59365)
&gt; +++ WebCore/css/tokenizer.flex	(working copy)
&gt; @@ -13,7 +13,7 @@
&gt;  nmchar          [_a-zA-Z0-9-]|{nonascii}|{escape}
&gt;  string1         \&quot;([\t !#$%&amp;(-~]|\\{nl}|\&apos;|{nonascii}|{escape})*\&quot;
&gt;  string2         \&apos;([\t !#$%&amp;(-~]|\\{nl}|\&quot;|{nonascii}|{escape})*\&apos;
&gt; -hexcolor        {h}{3}|{h}{6}
&gt; +hexcolor        {h}{3}|{h}{4}|{h}{6}|{h}{8}
&gt;  
&gt;  ident           -?{nmstart}{nmchar}*
&gt;  name            {nmchar}+
&gt; Index: LayoutTests/fast/css/script-tests/4-or-8-hexit-colors.js
&gt; ===================================================================
&gt; --- LayoutTests/fast/css/script-tests/4-or-8-hexit-colors.js	(revision 0)
&gt; +++ LayoutTests/fast/css/script-tests/4-or-8-hexit-colors.js	(revision 0)
&gt; @@ -0,0 +1,32 @@
&gt; +description(
&gt; +&apos;This test checks if CSS 4-hexit and 8-hexit color values are handled correctly..&apos;
&gt; +);
&gt; +
&gt; +var inputs = [&quot;#0000ffff&quot;,
&gt; +			  &quot;#0000ff00&quot;,
&gt; +			  &quot;#00ff&quot;,
&gt; +			  &quot;#00f0&quot;,
&gt; +			  &quot;#f00f&quot;,
&gt; +			  &quot;#0f0f&quot;,
&gt; +			  &quot;#ff0000ff&quot;,
&gt; +			  &quot;#00ff00ff&quot;,
&gt; +			  &quot;#0000ff80&quot;,
&gt; +			  &quot;#00f8&quot;];
&gt; +var expected = [&quot;rgb(0, 0, 255)&quot;,
&gt; +			    &quot;rgba(0, 0, 255, 0)&quot;,
&gt; +				&quot;rgb(0, 0, 255)&quot;,
&gt; +				&quot;rgba(0, 0, 255, 0)&quot;,
&gt; +				&quot;rgb(255, 0, 0)&quot;,
&gt; +				&quot;rgb(0, 255, 0)&quot;,
&gt; +				&quot;rgb(255, 0, 0)&quot;,
&gt; +				&quot;rgb(0, 255, 0)&quot;,
&gt; +				&quot;rgba(0, 0, 255, 0.5)&quot;,
&gt; +				&quot;rgba(0, 0, 255, 0.53125)&quot;];
&gt; +
&gt; +var testElement = document.createElement(&apos;div&apos;);
&gt; +for (var i = 0; i &lt; inputs.length; ++i) {
&gt; +    testElement.style.color = inputs[i];
&gt; +    shouldBeEqualToString(&apos;testElement.style.color = &quot;&apos; + inputs[i] + &apos;&quot;; testElement.style.color&apos;, expected[i]);
&gt; +}
&gt; +
&gt; +successfullyParsed = true;
&gt; Index: LayoutTests/fast/css/4-or-8-hexit-colors.html
&gt; ===================================================================
&gt; --- LayoutTests/fast/css/4-or-8-hexit-colors.html	(revision 0)
&gt; +++ LayoutTests/fast/css/4-or-8-hexit-colors.html	(revision 0)
&gt; @@ -0,0 +1,13 @@
&gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
&gt; +&lt;html&gt;
&gt; +&lt;head&gt;
&gt; +&lt;link rel=&quot;stylesheet&quot; href=&quot;../js/resources/js-test-style.css&quot;&gt;
&gt; +&lt;script src=&quot;../js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
&gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt; +&lt;script src=&quot;script-tests/4-or-8-hexit-colors.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;script src=&quot;../js/resources/js-test-post.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/body&gt;
&gt; +&lt;/html&gt;
&gt; Index: LayoutTests/fast/css/4-or-8-hexit-colors-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/fast/css/4-or-8-hexit-colors-expected.txt	(revision 0)
&gt; +++ LayoutTests/fast/css/4-or-8-hexit-colors-expected.txt	(revision 0)
&gt; @@ -0,0 +1,38 @@
&gt; +This test checks if CSS 4-hexit and 8-hexit color values are handled correctly..
+
&gt; +
+
&gt; +On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
&gt; +
+
&gt; +
+
&gt; +PASS testElement.style.color = &quot;#0000ffff&quot;; testElement.style.color is &quot;rgb(0, 0, 255)&quot;
+
&gt; +PASS testElement.style.color = &quot;#0000ff00&quot;; testElement.style.color is &quot;rgba(0, 0, 255, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#00ff&quot;; testElement.style.color is &quot;rgb(0, 0, 255)&quot;
+
&gt; +PASS testElement.style.color = &quot;#00f0&quot;; testElement.style.color is &quot;rgba(0, 0, 255, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#f00f&quot;; testElement.style.color is &quot;rgb(255, 0, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#0f0f&quot;; testElement.style.color is &quot;rgb(0, 255, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#ff0000ff&quot;; testElement.style.color is &quot;rgb(255, 0, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#00ff00ff&quot;; testElement.style.color is &quot;rgb(0, 255, 0)&quot;
+
&gt; +PASS testElement.style.color = &quot;#0000ff80&quot;; testElement.style.color is &quot;rgba(0, 0, 255, 0.5)&quot;
+
&gt; +PASS testElement.style.color = &quot;#00f8&quot;; testElement.style.color is &quot;rgba(0, 0, 255, 0.53125)&quot;
+
&gt; +PASS successfullyParsed is true
+
&gt; +
+
&gt; +TEST COMPLETE
+
&gt; +
+
&gt; Index: LayoutTests/ChangeLog
&gt; ===================================================================
&gt; --- LayoutTests/ChangeLog	(revision 59492)
&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; @@ -1,3 +1,14 @@
&gt; +2010-05-14  Tab Atkins  &lt;tabatkins@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Tests for 4 and 8 hexit CSS hexcolors.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=39140
&gt; +
&gt; +        * fast/css/4-or-8-hexit-colors-expected.txt: Added.
&gt; +        * fast/css/4-or-8-hexit-colors.html: Added.
&gt; +        * fast/css/script-tests/4-or-8-hexit-colors.js: Added.
&gt; +
&gt;  2010-05-14  Eric Seidel  &lt;eric@webkit.org&gt;
&gt;  
&gt;          Unreviewed, rolling out r59489.

WebCore/platform/graphics/Color.cpp:154
 +          alpha = 0xF;
Since only one of these branches will get taken, I&apos;d use a construct that doesn&apos;t test for all of the conditions once that one branch is found. Either an if else or a switch maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226079</commentid>
    <comment_count>8</comment_count>
      <attachid>56127</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-14 17:47:23 -0700</bug_when>
    <thetext>Created attachment 56127
Patch with tests

@Micheal: Ah, now I feel silly.  I have no idea why I went with serial ifs over a switch.  Hopefully I got the webkit style with regards to switch indentation.

@Darin: I&apos;m running some tests right now to see if there is any significant usage of 4 or 8 hexit colors on the web.  Hopefully I&apos;ll see some results over the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226097</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-14 19:09:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think the issues with my expected output file are due to me working on a windows machine but working through cygwin.  The file, as it exists, appears to be what&apos;s required for tests to pass on my machine.  I can renormalize the linebreaks to unix-style if necessary, though.

You are going to need to do something along those lines. Otherwise the test will fail on all the buildbots and all other machines besides yours!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226345</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-15 16:13:25 -0700</bug_when>
    <thetext>I&apos;m a bit nervous about making syntactic changes to color parsing when this is not even in any draft yet.  This can&apos;t be prefixed, so we need to be careful here.  I&apos;d prefer to see this in a draft before we make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226434</commentid>
    <comment_count>11</comment_count>
      <attachid>56127</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-16 00:40:38 -0700</bug_when>
    <thetext>Comment on attachment 56127
Patch with tests

r- based on Hyatt&apos;s above comment.  This is sensitive code we&apos;re dealing with here. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226436</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-16 00:41:52 -0700</bug_when>
    <thetext>The course forward (to answer Hyatt&apos;s comment) is mostly to wait.  To get this into some sort of editor draft or implemented by some other browser(s) before we modify these core color parsing routines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228673</commentid>
    <comment_count>13</comment_count>
    <who name="Boris Zbarsky">bzbarsky</who>
    <bug_when>2010-05-20 18:29:59 -0700</bug_when>
    <thetext>&gt; Testing shows that current Opera, Firefox, and Webkit all ignore 4 and 8
&gt; hexit colors.

Tab, I don&apos;t think that&apos;s true.  Simple testcase:

  data:text/html,&lt;font color=&quot;%23000000ff&quot;&gt;This is blue&lt;/font&gt;

The text is interoperably blue in Webkit and Gecko (with and without the &apos;#&apos;) and black in Opera.  With your patch it would render black, right?

The key here, at least in Gecko, is quirks mode.  Webkit seems to do the same thing (blue) in both modes.

Another testcase:

  data:text/html,&lt;font color=&quot;0000&quot;&gt;This is black&lt;/font&gt;

The text is solid black in Webkit/Gecko/Opera; in Webkit and Opera this would even happen in standards mode.  With your patch it would be transparent, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228941</commentid>
    <comment_count>14</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2010-05-21 08:51:11 -0700</bug_when>
    <thetext>Right, we fall back to other routines when parsing colors out of HTML.  To avoid any compat issues in that direction, I&apos;d have to find and patch the area where we look for HTML color values to either use a different, HTML-specific function, or to fail early and switch over to the legacy-parsing function immediately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372286</commentid>
    <comment_count>15</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-23 11:31:55 -0700</bug_when>
    <thetext>*** Bug 56461 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736616</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Pieters (:zcorpan)">zcorpan</who>
    <bug_when>2012-10-08 03:51:14 -0700</bug_when>
    <thetext>(dataset: http://dotnetdotcom.org/ )

$ grep -aPic &quot;(background|color|outline|border)\s*:\s*#([0-9a-f]{4}){1,2}($|\s|;|,|})&quot; web200904 
177

This is a relatively low number, though the search does not include cases where the color is not the first token in the value (e.g. border:1px #f000 solid), nor does it include external style sheets.

IMHO this syntax isn&apos;t clear and people get the wrong number of digits at times. It also doesn&apos;t work together with keywords. Using a separator character might be better (e.g. color: orange * 0.7).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144181</commentid>
    <comment_count>17</comment_count>
    <who name="Ian Thomas (thelem)">ian</who>
    <bug_when>2015-11-23 07:40:22 -0800</bug_when>
    <thetext>This is now a duplicate of https://bugs.webkit.org/show_bug.cgi?id=150853</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217106</commentid>
    <comment_count>18</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-08-03 13:23:42 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 150853 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56115</attachid>
            <date>2010-05-14 15:12:51 -0700</date>
            <delta_ts>2010-05-14 16:28:59 -0700</delta_ts>
            <desc>Patch with tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6158</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU5NDkwKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE2IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3VwcG9ydCBmb3IgNCBhbmQgOCBoZXhpdCBDU1MgaGV4Y29sb3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAg
IFRlc3RlZCBieSBmYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwKKworICAgICAgICAq
IGNzcy90b2tlbml6ZXIuZmxleDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cGFyc2VIZXhDb2xvcik6CisKIDIwMTAtMDUt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI1OTQ4OS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDU5MzY1KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMTI5LDIxICsxMjksMzggQEANCiBib29sIENvbG9yOjpw
YXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVu
Z3RoICE9IDYpCisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworCXVuc2lnbmVkIGFscGhhID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtp
XSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlIDw8PSA0OwogICAg
ICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4VmFsdWUobmFtZVtpXSk7CiAgICAgfQotICAgIGlmIChs
ZW5ndGggPT0gNikgewotICAgICAgICByZ2IgPSAweEZGMDAwMDAwIHwgdmFsdWU7CisJCisJaWYg
KGxlbmd0aCA9PSA4KSB7CisJCWFscGhhID0gMHhGRiAmIHZhbHVlOworCQl2YWx1ZSA+Pj0gODsK
Kwl9CisJaWYgKGxlbmd0aCA9PSA2KSB7CisJCWFscGhhID0gMHhGRjsKKwl9CisJaWYgKGxlbmd0
aCA9PSA0KSB7CisJCWFscGhhID0gMHhGICYgdmFsdWU7CisJCXZhbHVlID4+PSA0OworCX0KKwlp
ZiAobGVuZ3RoID09IDMpIHsKKwkJYWxwaGEgPSAweEY7CisJfQorCQorICAgIGlmIChsZW5ndGgg
PT0gNiB8fCBsZW5ndGggPT0gOCkgeworICAgICAgICByZ2IgPSBhbHBoYSA8PCAyNCB8IHZhbHVl
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgLy8gI2FiYyBjb252ZXJ0cyB0byAj
YWFiYmNjCi0gICAgcmdiID0gMHhGRjAwMDAwMAorICAgIC8vICNhYmMgY29udmVydHMgdG8gI2Fh
YmJjYywgI2FiY2QgY29udmVydHMgdG8gI2FhYmJjY2RkCisJcmdiID0gYWxwaGEgPDwgMjggfCBh
bHBoYSA8PCAyNAogICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAxMiB8ICh2YWx1ZSAmIDB4
RjAwKSA8PCA4CiAgICAgICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAp
IDw8IDQKICAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpOwpJbmRl
eDogV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2Nz
cy90b2tlbml6ZXIuZmxleAkocmV2aXNpb24gNTkzNjUpDQorKysgV2ViQ29yZS9jc3MvdG9rZW5p
emVyLmZsZXgJKHdvcmtpbmcgY29weSkNCkBAIC0xMyw3ICsxMyw3IEBADQogbm1jaGFyICAgICAg
ICAgIFtfYS16QS1aMC05LV18e25vbmFzY2lpfXx7ZXNjYXBlfQogc3RyaW5nMSAgICAgICAgIFwi
KFtcdCAhIyQlJigtfl18XFx7bmx9fFwnfHtub25hc2NpaX18e2VzY2FwZX0pKlwiCiBzdHJpbmcy
ICAgICAgICAgXCcoW1x0ICEjJCUmKC1+XXxcXHtubH18XCJ8e25vbmFzY2lpfXx7ZXNjYXBlfSkq
XCcKLWhleGNvbG9yICAgICAgICB7aH17M318e2h9ezZ9CitoZXhjb2xvciAgICAgICAge2h9ezN9
fHtofXs0fXx7aH17Nn18e2h9ezh9CiAKIGlkZW50ICAgICAgICAgICAtP3tubXN0YXJ0fXtubWNo
YXJ9KgogbmFtZSAgICAgICAgICAgIHtubWNoYXJ9KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc2NyaXB0LXRlc3RzLzQtb3ItOC1oZXhpdC1jb2xvcnMuanMNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zY3JpcHQtdGVzdHMvNC1vci04LWhleGl0LWNvbG9ycy5qcwko
cmV2aXNpb24gMCkNCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9zY3JpcHQtdGVzdHMvNC1vci04
LWhleGl0LWNvbG9ycy5qcwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzIgQEANCitkZXNjcmlw
dGlvbigNCisnVGhpcyB0ZXN0IGNoZWNrcyBpZiBDU1MgNC1oZXhpdCBhbmQgOC1oZXhpdCBjb2xv
ciB2YWx1ZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5Li4nDQorKTsNCisNCit2YXIgaW5wdXRzID0g
WyIjMDAwMGZmZmYiLA0KKwkJCSAgIiMwMDAwZmYwMCIsDQorCQkJICAiIzAwZmYiLA0KKwkJCSAg
IiMwMGYwIiwNCisJCQkgICIjZjAwZiIsDQorCQkJICAiIzBmMGYiLA0KKwkJCSAgIiNmZjAwMDBm
ZiIsDQorCQkJICAiIzAwZmYwMGZmIiwNCisJCQkgICIjMDAwMGZmODAiLA0KKwkJCSAgIiMwMGY4
Il07DQordmFyIGV4cGVjdGVkID0gWyJyZ2IoMCwgMCwgMjU1KSIsDQorCQkJICAgICJyZ2JhKDAs
IDAsIDI1NSwgMCkiLA0KKwkJCQkicmdiKDAsIDAsIDI1NSkiLA0KKwkJCQkicmdiYSgwLCAwLCAy
NTUsIDApIiwNCisJCQkJInJnYigyNTUsIDAsIDApIiwNCisJCQkJInJnYigwLCAyNTUsIDApIiwN
CisJCQkJInJnYigyNTUsIDAsIDApIiwNCisJCQkJInJnYigwLCAyNTUsIDApIiwNCisJCQkJInJn
YmEoMCwgMCwgMjU1LCAwLjUpIiwNCisJCQkJInJnYmEoMCwgMCwgMjU1LCAwLjUzMTI1KSJdOw0K
Kw0KK3ZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KK2Zv
ciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgKytpKSB7DQorICAgIHRlc3RFbGVtZW50
LnN0eWxlLmNvbG9yID0gaW5wdXRzW2ldOw0KKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ3Rl
c3RFbGVtZW50LnN0eWxlLmNvbG9yJywgZXhwZWN0ZWRbaV0pOw0KK30NCisNCitzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOw0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzLzQtb3ItOC1oZXhp
dC1jb2xvcnMuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzLzQtb3It
OC1oZXhpdC1jb2xvcnMuaHRtbAkocmV2aXNpb24gMCkNCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nz
cy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDEzIEBA
DQorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4NCis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPGJvZHk+DQorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+DQorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+DQorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy80LW9yLTgtaGV4aXQtY29sb3JzLmpzIj48L3NjcmlwdD4NCis8c2NyaXB0IHNyYz0i
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwv
aHRtbD4NCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLWV4
cGVjdGVkLnR4dA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzLzQtb3ItOC1o
ZXhpdC1jb2xvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQ0KKysrIExheW91dFRlc3RzL2Zh
c3QvY3NzLzQtb3ItOC1oZXhpdC1jb2xvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQ0KQEAg
LTAsMCArMSwzOCBAQA0KK1RoaXMgdGVzdCBjaGVja3MgaWYgQ1NTIDQtaGV4aXQgYW5kIDgtaGV4
aXQgY29sb3IgdmFsdWVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4uDSsNCisNKw0KK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4NKw0KKw0rDQorDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNv
bG9yIGlzICJyZ2IoMCwgMCwgMjU1KSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3Ig
aXMgInJnYmEoMCwgMCwgMjU1LCAwKSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3Ig
aXMgInJnYigwLCAwLCAyNTUpIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAi
cmdiYSgwLCAwLCAyNTUsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAi
cmdiKDI1NSwgMCwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2Io
MCwgMjU1LCAwKSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigyNTUs
IDAsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDI1NSwg
MCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwg
MC41KSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYmEoMCwgMCwgMjU1
LCAwLjUzMTI1KSINKw0KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUNKw0KKw0rDQor
VEVTVCBDT01QTEVURQ0rDQorDSsNCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NDkyKQ0KKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxNCBAQA0KKzIw
MTAtMDUtMTQgIFRhYiBBdGtpbnMgIDx0YWJhdGtpbnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3IgNCBhbmQgOCBo
ZXhpdCBDU1MgaGV4Y29sb3JzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzkxNDAKKworICAgICAgICAqIGZhc3QvY3NzLzQtb3ItOC1oZXhpdC1jb2xv
cnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy80LW9yLTgtaGV4aXQt
Y29sb3JzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3NjcmlwdC10ZXN0cy80LW9y
LTgtaGV4aXQtY29sb3JzLmpzOiBBZGRlZC4KKwogMjAxMC0wNS0xNCAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU5NDg5
Lgo=
</data>
<flag name="review"
          id="40464"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="40465"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56120</attachid>
            <date>2010-05-14 16:28:59 -0700</date>
            <delta_ts>2010-05-14 17:26:01 -0700</delta_ts>
            <desc>Patch with tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6622</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU5NDkwKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE2IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3VwcG9ydCBmb3IgNCBhbmQgOCBoZXhpdCBDU1MgaGV4Y29sb3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAg
IFRlc3RlZCBieSBmYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwKKworICAgICAgICAq
IGNzcy90b2tlbml6ZXIuZmxleDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cGFyc2VIZXhDb2xvcik6CisKIDIwMTAtMDUt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI1OTQ4OS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDU5MzY1KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMTI5LDIxICsxMjksMzYgQEANCiBib29sIENvbG9yOjpw
YXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVu
Z3RoICE9IDYpCisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIHVuc2lnbmVkIGFscGhhID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFt
ZVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlIDw8PSA0Owog
ICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4VmFsdWUobmFtZVtpXSk7CiAgICAgfQotICAgIGlm
IChsZW5ndGggPT0gNikgewotICAgICAgICByZ2IgPSAweEZGMDAwMDAwIHwgdmFsdWU7CisKKyAg
ICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgYWxwaGEgPSAweEZGICYgdmFsdWU7CisgICAg
ICAgIHZhbHVlID4+PSA4OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDYpCisgICAgICAgIGFs
cGhhID0gMHhGRjsKKyAgICBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgYWxwaGEgPSAweEYg
JiB2YWx1ZTsKKyAgICAgICAgdmFsdWUgPj49IDQ7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0g
MykKKyAgICAgICAgYWxwaGEgPSAweEY7CisJCisgICAgaWYgKGxlbmd0aCA9PSA2IHx8IGxlbmd0
aCA9PSA4KSB7CisgICAgICAgIHJnYiA9IGFscGhhIDw8IDI0IHwgdmFsdWU7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICAvLyAjYWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKLSAgICBy
Z2IgPSAweEZGMDAwMDAwCisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjLCAjYWJjZCBj
b252ZXJ0cyB0byAjYWFiYmNjZGQKKyAgICByZ2IgPSBhbHBoYSA8PCAyOCB8IGFscGhhIDw8IDI0
CiAgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgK
ICAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAogICAg
ICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4Rik7CkluZGV4OiBXZWJDb3Jl
L2Nzcy90b2tlbml6ZXIuZmxleA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvY3NzL3Rva2VuaXpl
ci5mbGV4CShyZXZpc2lvbiA1OTM2NSkNCisrKyBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAko
d29ya2luZyBjb3B5KQ0KQEAgLTEzLDcgKzEzLDcgQEANCiBubWNoYXIgICAgICAgICAgW19hLXpB
LVowLTktXXx7bm9uYXNjaWl9fHtlc2NhcGV9CiBzdHJpbmcxICAgICAgICAgXCIoW1x0ICEjJCUm
KC1+XXxcXHtubH18XCd8e25vbmFzY2lpfXx7ZXNjYXBlfSkqXCIKIHN0cmluZzIgICAgICAgICBc
JyhbXHQgISMkJSYoLX5dfFxce25sfXxcInx7bm9uYXNjaWl9fHtlc2NhcGV9KSpcJwotaGV4Y29s
b3IgICAgICAgIHtofXszfXx7aH17Nn0KK2hleGNvbG9yICAgICAgICB7aH17M318e2h9ezR9fHto
fXs2fXx7aH17OH0KIAogaWRlbnQgICAgICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCiBuYW1l
ICAgICAgICAgICAge25tY2hhcn0rCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9zY3JpcHQt
dGVzdHMvNC1vci04LWhleGl0LWNvbG9ycy5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY3NzL3NjcmlwdC10ZXN0cy80LW9yLTgtaGV4aXQtY29sb3JzLmpzCShyZXZpc2lvbiAw
KQ0KKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3NjcmlwdC10ZXN0cy80LW9yLTgtaGV4aXQtY29s
b3JzLmpzCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzMiBAQA0KK2Rlc2NyaXB0aW9uKA0KKydU
aGlzIHRlc3QgY2hlY2tzIGlmIENTUyA0LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVlcyBh
cmUgaGFuZGxlZCBjb3JyZWN0bHkuLicNCispOw0KKw0KK3ZhciBpbnB1dHMgPSBbIiMwMDAwZmZm
ZiIsDQorCQkJICAiIzAwMDBmZjAwIiwNCisJCQkgICIjMDBmZiIsDQorCQkJICAiIzAwZjAiLA0K
KwkJCSAgIiNmMDBmIiwNCisJCQkgICIjMGYwZiIsDQorCQkJICAiI2ZmMDAwMGZmIiwNCisJCQkg
ICIjMDBmZjAwZmYiLA0KKwkJCSAgIiMwMDAwZmY4MCIsDQorCQkJICAiIzAwZjgiXTsNCit2YXIg
ZXhwZWN0ZWQgPSBbInJnYigwLCAwLCAyNTUpIiwNCisJCQkgICAgInJnYmEoMCwgMCwgMjU1LCAw
KSIsDQorCQkJCSJyZ2IoMCwgMCwgMjU1KSIsDQorCQkJCSJyZ2JhKDAsIDAsIDI1NSwgMCkiLA0K
KwkJCQkicmdiKDI1NSwgMCwgMCkiLA0KKwkJCQkicmdiKDAsIDI1NSwgMCkiLA0KKwkJCQkicmdi
KDI1NSwgMCwgMCkiLA0KKwkJCQkicmdiKDAsIDI1NSwgMCkiLA0KKwkJCQkicmdiYSgwLCAwLCAy
NTUsIDAuNSkiLA0KKwkJCQkicmdiYSgwLCAwLCAyNTUsIDAuNTMxMjUpIl07DQorDQordmFyIHRl
c3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorZm9yICh2YXIgaSA9
IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyArK2kpIHsNCisgICAgdGVzdEVsZW1lbnQuc3R5bGUuY29s
b3IgPSBpbnB1dHNbaV07DQorICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdEVsZW1lbnQu
c3R5bGUuY29sb3IgPSAiJyArIGlucHV0c1tpXSArICciOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xv
cicsIGV4cGVjdGVkW2ldKTsNCit9DQorDQorc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwJ
KHJldmlzaW9uIDApDQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvNC1vci04LWhleGl0LWNvbG9y
cy5odG1sCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMyBAQA0KKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4NCis8aHRtbD4NCis8aGVhZD4NCis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
DQorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPg0KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2Pg0KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvNC1vci04LWhleGl0
LWNvbG9ycy5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jc3MvNC1vci04LWhleGl0LWNvbG9ycy1leHBlY3RlZC50eHQNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkNCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQt
Y29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzggQEANCitUaGlz
IHRlc3QgY2hlY2tzIGlmIENTUyA0LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVlcyBhcmUg
aGFuZGxlZCBjb3JyZWN0bHkuLg0rDQorDSsNCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuDSsN
CisNKw0KKw0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDAwMGZmZmYiOyB0
ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSkiDSsNCitQQVNTIHRlc3RF
bGVtZW50LnN0eWxlLmNvbG9yID0gIiMwMDAwZmYwMCI7IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9y
IGlzICJyZ2JhKDAsIDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9y
ID0gIiMwMGZmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIg0r
DQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDBmMCI7IHRlc3RFbGVtZW50LnN0
eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0
eWxlLmNvbG9yID0gIiNmMDBmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigyNTUs
IDAsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMGYwZiI7IHRlc3RF
bGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2IoMCwgMjU1LCAwKSINKw0KK1BBU1MgdGVzdEVsZW1l
bnQuc3R5bGUuY29sb3IgPSAiI2ZmMDAwMGZmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMg
InJnYigyNTUsIDAsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDBm
ZjAwZmYiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDI1NSwgMCkiDSsNCitQ
QVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yID0gIiMwMDAwZmY4MCI7IHRlc3RFbGVtZW50LnN0
eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwgMC41KSINKw0KK1BBU1MgdGVzdEVsZW1lbnQu
c3R5bGUuY29sb3IgPSAiIzAwZjgiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiYSgw
LCAwLCAyNTUsIDAuNTMxMjUpIg0rDQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQ0r
DQorDSsNCitURVNUIENPTVBMRVRFDSsNCisNKw0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTk0OTIp
DQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE0
IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bnb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciA0
IGFuZCA4IGhleGl0IENTUyBoZXhjb2xvcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAgICogZmFzdC9jc3MvNC1vci04LWhl
eGl0LWNvbG9ycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLzQtb3It
OC1oZXhpdC1jb2xvcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc2NyaXB0LXRl
c3RzLzQtb3ItOC1oZXhpdC1jb2xvcnMuanM6IEFkZGVkLgorCiAyMDEwLTA1LTE0ICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByNTk0ODkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56126</attachid>
            <date>2010-05-14 17:16:19 -0700</date>
            <delta_ts>2010-05-14 17:47:23 -0700</delta_ts>
            <desc>Patch with tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6799</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU5NDkwKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE2IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3VwcG9ydCBmb3IgNCBhbmQgOCBoZXhpdCBDU1MgaGV4Y29sb3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAg
IFRlc3RlZCBieSBmYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwKKworICAgICAgICAq
IGNzcy90b2tlbml6ZXIuZmxleDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cGFyc2VIZXhDb2xvcik6CisKIDIwMTAtMDUt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI1OTQ4OS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDU5MzY1KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMTI5LDIxICsxMjksMzYgQEANCiBib29sIENvbG9yOjpw
YXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVu
Z3RoICE9IDYpCisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIHVuc2lnbmVkIGFscGhhID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFt
ZVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlIDw8PSA0Owog
ICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4VmFsdWUobmFtZVtpXSk7CiAgICAgfQotICAgIGlm
IChsZW5ndGggPT0gNikgewotICAgICAgICByZ2IgPSAweEZGMDAwMDAwIHwgdmFsdWU7CisKKyAg
ICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgYWxwaGEgPSAweEZGICYgdmFsdWU7CisgICAg
ICAgIHZhbHVlID4+PSA4OworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDYpCisgICAgICAgIGFs
cGhhID0gMHhGRjsKKyAgICBpZiAobGVuZ3RoID09IDQpIHsKKyAgICAgICAgYWxwaGEgPSAweEYg
JiB2YWx1ZTsKKyAgICAgICAgdmFsdWUgPj49IDQ7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0g
MykKKyAgICAgICAgYWxwaGEgPSAweEY7CisJCisgICAgaWYgKGxlbmd0aCA9PSA2IHx8IGxlbmd0
aCA9PSA4KSB7CisgICAgICAgIHJnYiA9IGFscGhhIDw8IDI0IHwgdmFsdWU7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICAvLyAjYWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKLSAgICBy
Z2IgPSAweEZGMDAwMDAwCisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjLCAjYWJjZCBj
b252ZXJ0cyB0byAjYWFiYmNjZGQKKyAgICByZ2IgPSBhbHBoYSA8PCAyOCB8IGFscGhhIDw8IDI0
CiAgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgK
ICAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAogICAg
ICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4Rik7CkluZGV4OiBXZWJDb3Jl
L2Nzcy90b2tlbml6ZXIuZmxleA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvY3NzL3Rva2VuaXpl
ci5mbGV4CShyZXZpc2lvbiA1OTM2NSkNCisrKyBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAko
d29ya2luZyBjb3B5KQ0KQEAgLTEzLDcgKzEzLDcgQEANCiBubWNoYXIgICAgICAgICAgW19hLXpB
LVowLTktXXx7bm9uYXNjaWl9fHtlc2NhcGV9CiBzdHJpbmcxICAgICAgICAgXCIoW1x0ICEjJCUm
KC1+XXxcXHtubH18XCd8e25vbmFzY2lpfXx7ZXNjYXBlfSkqXCIKIHN0cmluZzIgICAgICAgICBc
JyhbXHQgISMkJSYoLX5dfFxce25sfXxcInx7bm9uYXNjaWl9fHtlc2NhcGV9KSpcJwotaGV4Y29s
b3IgICAgICAgIHtofXszfXx7aH17Nn0KK2hleGNvbG9yICAgICAgICB7aH17M318e2h9ezR9fHto
fXs2fXx7aH17OH0KIAogaWRlbnQgICAgICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCiBuYW1l
ICAgICAgICAgICAge25tY2hhcn0rCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9zY3JpcHQt
dGVzdHMvNC1vci04LWhleGl0LWNvbG9ycy5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY3NzL3NjcmlwdC10ZXN0cy80LW9yLTgtaGV4aXQtY29sb3JzLmpzCShyZXZpc2lvbiAw
KQ0KKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3NjcmlwdC10ZXN0cy80LW9yLTgtaGV4aXQtY29s
b3JzLmpzCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzMiBAQA0KK2Rlc2NyaXB0aW9uKA0KKydU
aGlzIHRlc3QgY2hlY2tzIGlmIENTUyA0LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVlcyBh
cmUgaGFuZGxlZCBjb3JyZWN0bHkuLicNCispOw0KKw0KK3ZhciBpbnB1dHMgPSBbIiMwMDAwZmZm
ZiIsDQorICAgICAgICAgICAgICIjMDAwMGZmMDAiLA0KKyAgICAgICAgICAgICAiIzAwZmYiLA0K
KyAgICAgICAgICAgICAiIzAwZjAiLA0KKyAgICAgICAgICAgICAiI2YwMGYiLA0KKyAgICAgICAg
ICAgICAiIzBmMGYiLA0KKyAgICAgICAgICAgICAiI2ZmMDAwMGZmIiwNCisgICAgICAgICAgICAg
IiMwMGZmMDBmZiIsDQorICAgICAgICAgICAgICIjMDAwMGZmODAiLA0KKyAgICAgICAgICAgICAi
IzAwZjgiXTsNCit2YXIgZXhwZWN0ZWQgPSBbInJnYigwLCAwLCAyNTUpIiwNCisgICAgICAgICAg
ICAgICAgInJnYmEoMCwgMCwgMjU1LCAwKSIsDQorICAgICAgICAgICAgICAgICJyZ2IoMCwgMCwg
MjU1KSIsDQorICAgICAgICAgICAgICAgICJyZ2JhKDAsIDAsIDI1NSwgMCkiLA0KKyAgICAgICAg
ICAgICAgICAicmdiKDI1NSwgMCwgMCkiLA0KKyAgICAgICAgICAgICAgICAicmdiKDAsIDI1NSwg
MCkiLA0KKyAgICAgICAgICAgICAgICAicmdiKDI1NSwgMCwgMCkiLA0KKyAgICAgICAgICAgICAg
ICAicmdiKDAsIDI1NSwgMCkiLA0KKyAgICAgICAgICAgICAgICAicmdiYSgwLCAwLCAyNTUsIDAu
NSkiLA0KKyAgICAgICAgICAgICAgICAicmdiYSgwLCAwLCAyNTUsIDAuNTMxMjUpIl07DQorDQor
dmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorZm9yICh2
YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyArK2kpIHsNCisgICAgdGVzdEVsZW1lbnQuc3R5
bGUuY29sb3IgPSBpbnB1dHNbaV07DQorICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdEVs
ZW1lbnQuc3R5bGUuY29sb3IgPSAiJyArIGlucHV0c1tpXSArICciOyB0ZXN0RWxlbWVudC5zdHls
ZS5jb2xvcicsIGV4cGVjdGVkW2ldKTsNCit9DQorDQorc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsNCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3Jz
Lmh0bWwJKHJldmlzaW9uIDApDQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvNC1vci04LWhleGl0
LWNvbG9ycy5odG1sCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwxMyBAQA0KKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4NCis8aHRtbD4NCis8aGVhZD4NCis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+DQorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPg0KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvNC1vci04
LWhleGl0LWNvbG9ycy5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jc3MvNC1vci04LWhleGl0LWNvbG9ycy1leHBlY3RlZC50eHQNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkNCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgt
aGV4aXQtY29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzggQEAN
CitUaGlzIHRlc3QgY2hlY2tzIGlmIENTUyA0LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVl
cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuLg0rDQorDSsNCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuDSsNCisNKw0KKw0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDAwMGZm
ZmYiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDAsIDI1NSkiDSsNCitQQVNT
IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yID0gIiMwMDAwZmYwMCI7IHRlc3RFbGVtZW50LnN0eWxl
LmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxl
LmNvbG9yID0gIiMwMGZmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigwLCAwLCAy
NTUpIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDBmMCI7IHRlc3RFbGVt
ZW50LnN0eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVt
ZW50LnN0eWxlLmNvbG9yID0gIiNmMDBmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJn
YigyNTUsIDAsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMGYwZiI7
IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2IoMCwgMjU1LCAwKSINKw0KK1BBU1MgdGVz
dEVsZW1lbnQuc3R5bGUuY29sb3IgPSAiI2ZmMDAwMGZmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29s
b3IgaXMgInJnYigyNTUsIDAsIDApIg0rDQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9
ICIjMDBmZjAwZmYiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDI1NSwgMCki
DSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yID0gIiMwMDAwZmY4MCI7IHRlc3RFbGVt
ZW50LnN0eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1NSwgMC41KSINKw0KK1BBU1MgdGVzdEVs
ZW1lbnQuc3R5bGUuY29sb3IgPSAiIzAwZjgiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAi
cmdiYSgwLCAwLCAyNTUsIDAuNTMxMjUpIg0rDQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQ0rDQorDSsNCitURVNUIENPTVBMRVRFDSsNCisNKw0KSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NTk0OTIpDQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwz
ICsxLDE0IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rz
IGZvciA0IGFuZCA4IGhleGl0IENTUyBoZXhjb2xvcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAgICogZmFzdC9jc3MvNC1v
ci04LWhleGl0LWNvbG9ycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3Nz
LzQtb3ItOC1oZXhpdC1jb2xvcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc2Ny
aXB0LXRlc3RzLzQtb3ItOC1oZXhpdC1jb2xvcnMuanM6IEFkZGVkLgorCiAyMDEwLTA1LTE0ICBF
cmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByNTk0ODkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56127</attachid>
            <date>2010-05-14 17:47:23 -0700</date>
            <delta_ts>2010-06-11 13:07:51 -0700</delta_ts>
            <desc>Patch with tests</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>6832</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU5NDkwKQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDE2IEBADQorMjAxMC0wNS0xNCAgVGFiIEF0a2lucyAgPHRhYmF0a2luc0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZHMgc3VwcG9ydCBmb3IgNCBhbmQgOCBoZXhpdCBDU1MgaGV4Y29sb3JzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTE0MAorCisgICAgICAg
IFRlc3RlZCBieSBmYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwKKworICAgICAgICAq
IGNzcy90b2tlbml6ZXIuZmxleDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cGFyc2VIZXhDb2xvcik6CisKIDIwMTAtMDUt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI1OTQ4OS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDU5MzY1KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMTI5LDIxICsxMjksMzYgQEANCiBib29sIENvbG9yOjpw
YXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSwgUkdCQTMyJiByZ2IpCiB7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVu
Z3RoICE9IDYpCisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIHVuc2lnbmVkIGFscGhhID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFt
ZVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlIDw8PSA0Owog
ICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4VmFsdWUobmFtZVtpXSk7CiAgICAgfQotICAgIGlm
IChsZW5ndGggPT0gNikgewotICAgICAgICByZ2IgPSAweEZGMDAwMDAwIHwgdmFsdWU7CisgICBz
d2l0Y2gobGVuZ3RoKSB7DQorICAgY2FzZSA2Og0KKyAgICAgICBhbHBoYSA9IDB4RkY7DQorICAg
ICAgIGJyZWFrOw0KKyAgIGNhc2UgMzoNCisgICAgICAgYWxwaGEgPSAweEY7DQorICAgICAgIGJy
ZWFrOw0KKyAgIGNhc2UgODoNCisgICAgICAgYWxwaGEgPSAweEZGICYgdmFsdWU7DQorICAgICAg
IHZhbHVlID4+PSA4Ow0KKyAgICAgICBicmVhazsNCisgICBjYXNlIDQ6DQorICAgICAgIGFscGhh
ID0gMHhGICYgdmFsdWU7DQorICAgICAgIHZhbHVlID4+PSA0Ow0KKyAgICAgICBicmVhazsNCisg
ICB9CisgICAgaWYgKGxlbmd0aCA9PSA2IHx8IGxlbmd0aCA9PSA4KSB7CisgICAgICAgIHJnYiA9
IGFscGhhIDw8IDI0IHwgdmFsdWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAv
LyAjYWJjIGNvbnZlcnRzIHRvICNhYWJiY2MKLSAgICByZ2IgPSAweEZGMDAwMDAwCisgICAgLy8g
I2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjLCAjYWJjZCBjb252ZXJ0cyB0byAjYWFiYmNjZGQKKyAg
ICByZ2IgPSBhbHBoYSA8PCAyOCB8IGFscGhhIDw8IDI0CiAgICAgICAgIHwgKHZhbHVlICYgMHhG
MDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgKICAgICAgICAgfCAodmFsdWUgJiAweEYw
KSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAogICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwg
NCB8ICh2YWx1ZSAmIDB4Rik7CkluZGV4OiBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFdlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4CShyZXZpc2lvbiA1OTM2NSkN
CisrKyBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAkod29ya2luZyBjb3B5KQ0KQEAgLTEzLDcg
KzEzLDcgQEANCiBubWNoYXIgICAgICAgICAgW19hLXpBLVowLTktXXx7bm9uYXNjaWl9fHtlc2Nh
cGV9CiBzdHJpbmcxICAgICAgICAgXCIoW1x0ICEjJCUmKC1+XXxcXHtubH18XCd8e25vbmFzY2lp
fXx7ZXNjYXBlfSkqXCIKIHN0cmluZzIgICAgICAgICBcJyhbXHQgISMkJSYoLX5dfFxce25sfXxc
Inx7bm9uYXNjaWl9fHtlc2NhcGV9KSpcJwotaGV4Y29sb3IgICAgICAgIHtofXszfXx7aH17Nn0K
K2hleGNvbG9yICAgICAgICB7aH17M318e2h9ezR9fHtofXs2fXx7aH17OH0KIAogaWRlbnQgICAg
ICAgICAgIC0/e25tc3RhcnR9e25tY2hhcn0qCiBuYW1lICAgICAgICAgICAge25tY2hhcn0rCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9zY3JpcHQtdGVzdHMvNC1vci04LWhleGl0LWNvbG9y
cy5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL3NjcmlwdC10ZXN0cy80
LW9yLTgtaGV4aXQtY29sb3JzLmpzCShyZXZpc2lvbiAwKQ0KKysrIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL3NjcmlwdC10ZXN0cy80LW9yLTgtaGV4aXQtY29sb3JzLmpzCShyZXZpc2lvbiAwKQ0KQEAg
LTAsMCArMSwzMiBAQA0KK2Rlc2NyaXB0aW9uKA0KKydUaGlzIHRlc3QgY2hlY2tzIGlmIENTUyA0
LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuLicN
CispOw0KKw0KK3ZhciBpbnB1dHMgPSBbIiMwMDAwZmZmZiIsDQorICAgICAgICAgICAgICIjMDAw
MGZmMDAiLA0KKyAgICAgICAgICAgICAiIzAwZmYiLA0KKyAgICAgICAgICAgICAiIzAwZjAiLA0K
KyAgICAgICAgICAgICAiI2YwMGYiLA0KKyAgICAgICAgICAgICAiIzBmMGYiLA0KKyAgICAgICAg
ICAgICAiI2ZmMDAwMGZmIiwNCisgICAgICAgICAgICAgIiMwMGZmMDBmZiIsDQorICAgICAgICAg
ICAgICIjMDAwMGZmODAiLA0KKyAgICAgICAgICAgICAiIzAwZjgiXTsNCit2YXIgZXhwZWN0ZWQg
PSBbInJnYigwLCAwLCAyNTUpIiwNCisgICAgICAgICAgICAgICAgInJnYmEoMCwgMCwgMjU1LCAw
KSIsDQorICAgICAgICAgICAgICAgICJyZ2IoMCwgMCwgMjU1KSIsDQorICAgICAgICAgICAgICAg
ICJyZ2JhKDAsIDAsIDI1NSwgMCkiLA0KKyAgICAgICAgICAgICAgICAicmdiKDI1NSwgMCwgMCki
LA0KKyAgICAgICAgICAgICAgICAicmdiKDAsIDI1NSwgMCkiLA0KKyAgICAgICAgICAgICAgICAi
cmdiKDI1NSwgMCwgMCkiLA0KKyAgICAgICAgICAgICAgICAicmdiKDAsIDI1NSwgMCkiLA0KKyAg
ICAgICAgICAgICAgICAicmdiYSgwLCAwLCAyNTUsIDAuNSkiLA0KKyAgICAgICAgICAgICAgICAi
cmdiYSgwLCAwLCAyNTUsIDAuNTMxMjUpIl07DQorDQordmFyIHRlc3RFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQorZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVu
Z3RoOyArK2kpIHsNCisgICAgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgPSBpbnB1dHNbaV07DQor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygndGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgPSAiJyAr
IGlucHV0c1tpXSArICciOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvcicsIGV4cGVjdGVkW2ldKTsN
Cit9DQorDQorc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLmh0bWwJKHJldmlzaW9uIDApDQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jc3MvNC1vci04LWhleGl0LWNvbG9ycy5odG1sCShyZXZpc2lvbiAw
KQ0KQEAgLTAsMCArMSwxMyBAQA0KKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4NCis8aHRtbD4NCis8aGVhZD4NCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+DQorPHNjcmlwdCBzcmM9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5
Pg0KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPg0KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvNC1vci04LWhleGl0LWNvbG9ycy5qcyI+PC9zY3Jp
cHQ+DQorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvNC1v
ci04LWhleGl0LWNvbG9ycy1leHBlY3RlZC50eHQNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBMYXlvdXRUZXN0
cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkN
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy80LW9yLTgtaGV4aXQtY29sb3JzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMzggQEANCitUaGlzIHRlc3QgY2hlY2tzIGlmIENT
UyA0LWhleGl0IGFuZCA4LWhleGl0IGNvbG9yIHZhbHVlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHku
Lg0rDQorDSsNCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuDSsNCisNKw0KKw0rDQorUEFTUyB0
ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDAwMGZmZmYiOyB0ZXN0RWxlbWVudC5zdHlsZS5j
b2xvciBpcyAicmdiKDAsIDAsIDI1NSkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9y
ID0gIiMwMDAwZmYwMCI7IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2JhKDAsIDAsIDI1
NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yID0gIiMwMGZmIjsgdGVzdEVs
ZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigwLCAwLCAyNTUpIg0rDQorUEFTUyB0ZXN0RWxlbWVu
dC5zdHlsZS5jb2xvciA9ICIjMDBmMCI7IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2Jh
KDAsIDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yID0gIiNmMDBm
IjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigyNTUsIDAsIDApIg0rDQorUEFTUyB0
ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMGYwZiI7IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9y
IGlzICJyZ2IoMCwgMjU1LCAwKSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgPSAi
I2ZmMDAwMGZmIjsgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgaXMgInJnYigyNTUsIDAsIDApIg0r
DQorUEFTUyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciA9ICIjMDBmZjAwZmYiOyB0ZXN0RWxlbWVu
dC5zdHlsZS5jb2xvciBpcyAicmdiKDAsIDI1NSwgMCkiDSsNCitQQVNTIHRlc3RFbGVtZW50LnN0
eWxlLmNvbG9yID0gIiMwMDAwZmY4MCI7IHRlc3RFbGVtZW50LnN0eWxlLmNvbG9yIGlzICJyZ2Jh
KDAsIDAsIDI1NSwgMC41KSINKw0KK1BBU1MgdGVzdEVsZW1lbnQuc3R5bGUuY29sb3IgPSAiIzAw
ZjgiOyB0ZXN0RWxlbWVudC5zdHlsZS5jb2xvciBpcyAicmdiYSgwLCAwLCAyNTUsIDAuNTMxMjUp
Ig0rDQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQ0rDQorDSsNCitURVNUIENPTVBM
RVRFDSsNCisNKw0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTk0OTIpDQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE0IEBADQorMjAxMC0wNS0xNCAg
VGFiIEF0a2lucyAgPHRhYmF0a2luc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciA0IGFuZCA4IGhleGl0IENTUyBo
ZXhjb2xvcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTE0MAorCisgICAgICAgICogZmFzdC9jc3MvNC1vci04LWhleGl0LWNvbG9ycy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLzQtb3ItOC1oZXhpdC1jb2xvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc2NyaXB0LXRlc3RzLzQtb3ItOC1oZXhpdC1j
b2xvcnMuanM6IEFkZGVkLgorCiAyMDEwLTA1LTE0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNTk0ODkuCg==
</data>
<flag name="review"
          id="40490"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>