<?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>58851</bug_id>
          
          <creation_ts>2011-04-18 16:29:24 -0700</creation_ts>
          <short_desc>Add incremental decoding to WebP decoder</short_desc>
          <delta_ts>2011-12-11 22:08:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>73756</dependson>
    
    <dependson>73796</dependson>
    
    <dependson>74041</dependson>
    
    <dependson>74062</dependson>
    
    <dependson>74263</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pascal Massimino">pascal.massimino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388157</commentid>
    <comment_count>0</comment_count>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 16:29:24 -0700</bug_when>
    <thetext>add incremental decoding to WebP decoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388160</commentid>
    <comment_count>1</comment_count>
      <attachid>90115</attachid>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 16:32:53 -0700</bug_when>
    <thetext>Created attachment 90115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388165</commentid>
    <comment_count>2</comment_count>
      <attachid>90115</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-18 16:38:24 -0700</bug_when>
    <thetext>Comment on attachment 90115
Patch

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

Looks great.  Some minor comments below.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests needed.

Normally we like a little more song and dance here about now incremental decoding is good for the soul and difficult to test.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:87
&gt;      const uint8_t* dataBytes =
&gt;          reinterpret_cast&lt;const uint8_t*&gt;(m_data-&gt;data());

This should be on one line.  There isn&apos;t an 80 col limit.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:100
&gt; +    const bool dataComplete = isAllDataReceived();
&gt; +    const int stride = width * bytesPerPixel;

WebKit isn&apos;t super agressive about using the const qualifier, but these are probably fine.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:109
&gt; +        buffer.setHasAlpha(false);

I&apos;d add a FIXME about changing this once WebP supports alpha.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:141
&gt; +         buffer.setStatus(ImageFrame::FrameComplete);

Should we assert some relation to dataComplete here?

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:145
&gt; +    } else {
&gt; +         return false; // I/O suspension.
&gt;      }

No { } on these lines.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:36
&gt; +typedef struct WebPIDecoder WebPIDecoder;

Should this typedef happen inside the WebCore namespace to avoid pollution?

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:51
&gt; +    // incremental decoder, in case only partial data is available.

Please make this comment a complete sentence that starts with an initial capital letter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388176</commentid>
    <comment_count>3</comment_count>
      <attachid>90120</attachid>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 16:57:20 -0700</bug_when>
    <thetext>Created attachment 90120
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388177</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-18 16:58:55 -0700</bug_when>
    <thetext>Attachment 90120 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 4 in 3 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>388178</commentid>
    <comment_count>5</comment_count>
      <attachid>90120</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-18 17:00:43 -0700</bug_when>
    <thetext>Comment on attachment 90120
Patch

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

Ideally pkasting would take a look at well.  Thanks!

&gt; Source/WebCore/ChangeLog:12
&gt; +	Testing buffered connection is flaky: one need a very big picture
&gt; +	to test with and an emulated clogged-connection. And even then,
&gt; +	there&apos;s no guaranty the test will eventually chose the
&gt; +	incremental-decoding code path.

Looks like you have tabs here.  We use spaces instead of tabs.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:108
&gt; +        // FIXME: must be updated when WebP supports alpha-channel.

We generally prefer complete sentences for comments.  I would write something like:

// FIXME: We currently hard code false below because libwebp doesn&apos;t support alpha yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388181</commentid>
    <comment_count>6</comment_count>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 17:01:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 90115 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90115&amp;action=review
&gt; 
&gt; Looks great.  Some minor comments below.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests needed.
&gt; 
&gt; Normally we like a little more song and dance here about now incremental decoding is good for the soul and difficult to test.

added a more descriptive paragraph.

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:87
&gt; &gt;      const uint8_t* dataBytes =
&gt; &gt;          reinterpret_cast&lt;const uint8_t*&gt;(m_data-&gt;data());
&gt; 
&gt; This should be on one line.  There isn&apos;t an 80 col limit.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:100
&gt; &gt; +    const bool dataComplete = isAllDataReceived();
&gt; &gt; +    const int stride = width * bytesPerPixel;
&gt; 
&gt; WebKit isn&apos;t super agressive about using the const qualifier, but these are probably fine.

removed the const. Not really critical.

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:109
&gt; &gt; +        buffer.setHasAlpha(false);
&gt; 
&gt; I&apos;d add a FIXME about changing this once WebP supports alpha.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:141
&gt; &gt; +         buffer.setStatus(ImageFrame::FrameComplete);
&gt; 
&gt; Should we assert some relation to dataComplete here?

no: WebP files can have comment sections at the end, for instance. And hence, you can fully decode the picture even when the data is incomplete and missing the trailing comments section.

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:145
&gt; &gt; +    } else {
&gt; &gt; +         return false; // I/O suspension.
&gt; &gt;      }
&gt; 
&gt; No { } on these lines.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:36
&gt; &gt; +typedef struct WebPIDecoder WebPIDecoder;
&gt; 
&gt; Should this typedef happen inside the WebCore namespace to avoid pollution?
&gt; 

it&apos;s a forward-declaration of libwebp&apos;s struct. Added a comment.

&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:51
&gt; &gt; +    // incremental decoder, in case only partial data is available.
&gt; 
&gt; Please make this comment a complete sentence that starts with an initial capital letter.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388183</commentid>
    <comment_count>7</comment_count>
      <attachid>90121</attachid>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 17:03:54 -0700</bug_when>
    <thetext>Created attachment 90121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388186</commentid>
    <comment_count>8</comment_count>
      <attachid>90121</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-04-18 17:37:09 -0700</bug_when>
    <thetext>Comment on attachment 90121
Patch

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

r- for the concern about byte ordering; the rest are all nits.

&gt; Source/WebCore/ChangeLog:5
&gt; +        add incremental decoding to WebP decoder

Nit: add -&gt; Add

&gt; Source/WebCore/ChangeLog:12
&gt; +        No new tests.
&gt; +        Testing buffered connection is flaky: one need a very big picture
&gt; +        to test with and an emulated clogged-connection. And even then,
&gt; +        there&apos;s no guaranty the test will eventually chose the
&gt; +        incremental-decoding code path.

Nit: Lots of grammar/mechanics errors.  How about this simpler version:

No new tests, as it&apos;s not possible for the layout test framework to force the decoders to decode incrementally.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:86
&gt; +    const uint8_t* dataBytes = reinterpret_cast&lt;const uint8_t*&gt;(m_data-&gt;data());

Nit: Move this below the conditional, into the next section.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:98
&gt; +    bool dataComplete = isAllDataReceived();

Nit: allDataReceived would be a more parallel-structured name.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:116
&gt; +        if (!dataComplete) {
&gt; +            m_decoder = WebPINewRGB(MODE_RGB, m_rgbOutput.data(), m_rgbOutput.size(), stride);
&gt; +            if (!m_decoder)
&gt; +                return setFailed();
&gt; +        }

Nit: I think it would be slightly clearer if you moved this block into the else block below that actually uses the decoder, and changed the conditional to be &quot;if (!m_decoder)&quot;.  Then all access to the decoder occurs within a single outer conditional arm.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:117
&gt; +        m_lastVisibleRow = 0;

Nit: We don&apos;t need to zero this here, it was zeroed in the constructor.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:119
&gt; +    int visiblePart = 0; // Last completed row.

Nit: newLastVisibleRow would be a better name, and would need no comment.

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:137
&gt; +            buffer.setRGBA(x, y, src[bytesPerPixel * x + 0], src[bytesPerPixel * x + 1], src[bytesPerPixel * x + 2], 0xff);

I&apos;m confused.  This reverses the byte order for both incremental and non-incremental decoding.  I don&apos;t see any flag changes in the non-incremental case or other evidence that this is the right thing to do there (I have no idea on the incremental case as it&apos;s new).  Why is this happening?

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:144
&gt; +    if (m_lastVisibleRow == height) {
&gt; +         buffer.setStatus(ImageFrame::FrameComplete);
&gt; +         return true;
&gt; +    } else
&gt; +         return false; // I/O suspension.

Nit: Shorter:

    if (m_lastVisibleRow == height)
        buffer.setStatus(ImageFrame::FrameComplete);
    return m_lastVisibleRow == height;

&gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:52
&gt; +    // These fields store the decoder&apos;s state during incremental decoding, when only partial data is available.

Nit: Blank line before this.  Also, this sentence is technically false, since only the first of the three fields is incremental-only.  I&apos;d instead do:

    WebPIDecoder* m_decoder; // This is only used when we want to decode() but not all data is available yet.

...and leave the rest uncommented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388191</commentid>
    <comment_count>9</comment_count>
      <attachid>90124</attachid>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 17:48:30 -0700</bug_when>
    <thetext>Created attachment 90124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388192</commentid>
    <comment_count>10</comment_count>
    <who name="Pascal Massimino">pascal.massimino</who>
    <bug_when>2011-04-18 17:50:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 90121 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90121&amp;action=review
&gt; 
&gt; r- for the concern about byte ordering; the rest are all nits.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; +        add incremental decoding to WebP decoder
&gt; 
&gt; Nit: add -&gt; Add

done

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        No new tests.
&gt; &gt; +        Testing buffered connection is flaky: one need a very big picture
&gt; &gt; +        to test with and an emulated clogged-connection. And even then,
&gt; &gt; +        there&apos;s no guaranty the test will eventually chose the
&gt; &gt; +        incremental-decoding code path.
&gt; 
&gt; Nit: Lots of grammar/mechanics errors.  How about this simpler version:
&gt; 
&gt; No new tests, as it&apos;s not possible for the layout test framework to force the decoders to decode incrementally.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:86
&gt; &gt; +    const uint8_t* dataBytes = reinterpret_cast&lt;const uint8_t*&gt;(m_data-&gt;data());
&gt; 
&gt; Nit: Move this below the conditional, into the next section.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:98
&gt; &gt; +    bool dataComplete = isAllDataReceived();
&gt; 
&gt; Nit: allDataReceived would be a more parallel-structured name.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:116
&gt; &gt; +        if (!dataComplete) {
&gt; &gt; +            m_decoder = WebPINewRGB(MODE_RGB, m_rgbOutput.data(), m_rgbOutput.size(), stride);
&gt; &gt; +            if (!m_decoder)
&gt; &gt; +                return setFailed();
&gt; &gt; +        }
&gt; 
&gt; Nit: I think it would be slightly clearer if you moved this block into the else block below that actually uses the decoder, and changed the conditional to be &quot;if (!m_decoder)&quot;.  Then all access to the decoder occurs within a single outer conditional arm.

indeed! moved.

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:117
&gt; &gt; +        m_lastVisibleRow = 0;
&gt; 
&gt; Nit: We don&apos;t need to zero this here, it was zeroed in the constructor.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:119
&gt; &gt; +    int visiblePart = 0; // Last completed row.
&gt; 
&gt; Nit: newLastVisibleRow would be a better name, and would need no comment.

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:137
&gt; &gt; +            buffer.setRGBA(x, y, src[bytesPerPixel * x + 0], src[bytesPerPixel * x + 1], src[bytesPerPixel * x + 2], 0xff);
&gt; 
&gt; I&apos;m confused.  This reverses the byte order for both incremental and non-incremental decoding.  I don&apos;t see any flag changes in the non-incremental case or other evidence that this is the right thing to do there (I have no idea on the incremental case as it&apos;s new).  Why is this happening?

oh! that&apos;s hidden in the noise: we were previously calling DecodeBGR() and passing the values in reversed order. It&apos;s more logical to now call DecodeRGB() and pass r,g and b.

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp:144
&gt; &gt; +    if (m_lastVisibleRow == height) {
&gt; &gt; +         buffer.setStatus(ImageFrame::FrameComplete);
&gt; &gt; +         return true;
&gt; &gt; +    } else
&gt; &gt; +         return false; // I/O suspension.
&gt; 
&gt; Nit: Shorter:
&gt; 
&gt;     if (m_lastVisibleRow == height)
&gt;         buffer.setStatus(ImageFrame::FrameComplete);
&gt;     return m_lastVisibleRow == height;

done

&gt; 
&gt; &gt; Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h:52
&gt; &gt; +    // These fields store the decoder&apos;s state during incremental decoding, when only partial data is available.
&gt; 
&gt; Nit: Blank line before this.  Also, this sentence is technically false, since only the first of the three fields is incremental-only.  I&apos;d instead do:
&gt; 
&gt;     WebPIDecoder* m_decoder; // This is only used when we want to decode() but not all data is available yet.
&gt; 
&gt; ...and leave the rest uncommented.

done


thanks! patch uploaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388193</commentid>
    <comment_count>11</comment_count>
      <attachid>90124</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-18 17:54:14 -0700</bug_when>
    <thetext>Comment on attachment 90124
Patch

... and that&apos;s why I wish Peter reviewed every patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388263</commentid>
    <comment_count>12</comment_count>
      <attachid>90124</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-18 20:43:39 -0700</bug_when>
    <thetext>Comment on attachment 90124
Patch

Clearing flags on attachment: 90124

Committed r84219: &lt;http://trac.webkit.org/changeset/84219&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388264</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-18 20:43:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514601</commentid>
    <comment_count>14</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-03 17:22:04 -0800</bug_when>
    <thetext>I don&apos;t see where the allocated m_decoder is ever deleted, filed bug 73756 about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514869</commentid>
    <comment_count>15</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-04 20:56:54 -0800</bug_when>
    <thetext>Noticed WebPGetInfo() is continuously called even after we know the decoded image width/height.  Filed bug 73796 about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517041</commentid>
    <comment_count>16</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-07 17:55:59 -0800</bug_when>
    <thetext>If allDataReceived happens during a progressive decode, the decoder performs full image decode.  Filed bug 74041 about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517760</commentid>
    <comment_count>17</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-08 13:53:28 -0800</bug_when>
    <thetext>Progressive decodes sometimes fail to decode valid images.  Filed bug 74062 about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519016</commentid>
    <comment_count>18</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2011-12-11 22:04:09 -0800</bug_when>
    <thetext>m_rgbBuffer is not cleared when decoding ends (that wastes memory) and the copy from it to the pixel backing store is slow. Filed bug 74263.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90115</attachid>
            <date>2011-04-18 16:32:53 -0700</date>
            <delta_ts>2011-04-18 16:57:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58851-20110418163252.patch</filename>
            <type>text/plain</type>
            <size>5569</size>
            <attacher name="Pascal Massimino">pascal.massimino</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMTggIFBhc2NhbCBN
YXNzaW1pbm8gIDxwYXNjYWwubWFzc2ltaW5vQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhZGQgaW5jcmVtZW50YWwgZGVjb2Rpbmcg
dG8gV2ViUCBkZWNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01ODg1MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBuZWVkZWQuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6V0VCUEltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oOgorCiAyMDExLTA0LTE4
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA4NDE5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogV0VCUEltYWdlRGVjb2Rlcjo6V0VCUEltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6
QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKICAgICA6IEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCisgICAgLCBtX2RlY29kZXIoMCkKKyAgICAsIG1fbGFzdFZpc2li
bGVSb3coMCkKIHsKIH0KIApAQCAtNzksMTIgKzgxLDE0IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rl
cjo6ZGVjb2RlKGJvb2wgb25seVMKIAogICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgY29uc3Qgc2l6ZV90IGRhdGFTaXplID0gbV9kYXRhLT5zaXplKCk7CiAg
ICAgY29uc3QgdWludDhfdCogZGF0YUJ5dGVzID0KICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4obV9kYXRhLT5kYXRhKCkpOwotICAgIGludCB3aWR0aCwgaGVpZ2h0Owog
ICAgIGlmIChkYXRhU2l6ZSA8IHNpemVPZkhlYWRlcikKICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBpZiAoIVdlYlBHZXRJbmZvKGRhdGFCeXRlcywg
ZGF0YVNpemUsICZ3aWR0aCwgJmhlaWdodCkpCiAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsK
ICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgIXNldFNpemUod2lk
dGgsIGhlaWdodCkpCkBAIC05Miw5ICs5Niw4IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVMKICAgICBpZiAob25seVNpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwcm9ncmVzc2l2ZSBkZWNvZGluZy4KLSAg
ICBpZiAoIWlzQWxsRGF0YVJlY2VpdmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGNv
bnN0IGJvb2wgZGF0YUNvbXBsZXRlID0gaXNBbGxEYXRhUmVjZWl2ZWQoKTsKKyAgICBjb25zdCBp
bnQgc3RyaWRlID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwogICAgIEFTU0VSVCghbV9mcmFtZUJ1
ZmZlckNhY2hlLmlzRW1wdHkoKSk7CiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkgewpAQCAtMTAyLDIyICsxMDUsNDQgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBvbmx5UwogICAgICAgICBBU1NFUlQoaGVpZ2h0ID09IHNpemUoKS5oZWlnaHQo
KSk7CiAgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpCiAgICAgICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoZGF0YUNv
bXBsZXRlID8gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSA6IEltYWdlRnJhbWU6OkZyYW1lUGFy
dGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CisgICAgICAgIGJ1ZmZl
ci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworICAg
ICAgICBtX3JnYk91dHB1dC5yZXNpemUoaGVpZ2h0ICogc3RyaWRlKTsKKyAgICAgICAgaWYgKCFk
YXRhQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFdlYlBJTmV3UkdCKE1PREVf
UkdCLCBtX3JnYk91dHB1dC5kYXRhKCksIG1fcmdiT3V0cHV0LnNpemUoKSwgc3RyaWRlKTsKKyAg
ICAgICAgICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWls
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2xhc3RWaXNpYmxlUm93ID0gMDsKKyAgICB9Cisg
ICAgaW50IHZpc2libGVQYXJ0ID0gMDsgLy8gTGFzdCBjb21wbGV0ZWQgcm93LgorICAgIGlmIChk
YXRhQ29tcGxldGUpIHsKKyAgICAgICAgaWYgKCFXZWJQRGVjb2RlUkdCSW50byhkYXRhQnl0ZXMs
IGRhdGFTaXplLCBtX3JnYk91dHB1dC5kYXRhKCksIG1fcmdiT3V0cHV0LnNpemUoKSwgc3RyaWRl
KSkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgdmlzaWJsZVBhcnQg
PSBoZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVlA4U3RhdHVzQ29kZSBzdGF0
dXMgPSBXZWJQSVVwZGF0ZShtX2RlY29kZXIsIGRhdGFCeXRlcywgZGF0YVNpemUpOworICAgICAg
ICBpZiAoc3RhdHVzICE9IFZQOF9TVEFUVVNfT0sgJiYgc3RhdHVzICE9IFZQOF9TVEFUVVNfU1VT
UEVOREVEKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICBpZiAoIVdl
YlBJRGVjR2V0UkdCKG1fZGVjb2RlciwgJnZpc2libGVQYXJ0LCAwLCAwLCAwKSkKKyAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgQVNTRVJUKHZpc2libGVQYXJ0ID49IDAp
OworICAgICAgICBBU1NFUlQodmlzaWJsZVBhcnQgPD0gaGVpZ2h0KTsKICAgICB9Ci0gICAgY29u
c3QgaW50IHN0cmlkZSA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbDsKLSAgICBWZWN0b3I8dWludDhf
dD4gcmdiOwotICAgIHJnYi5yZXNpemUoaGVpZ2h0ICogc3RyaWRlKTsKLSAgICBpZiAoIVdlYlBE
ZWNvZGVCR1JJbnRvKGRhdGFCeXRlcywgZGF0YVNpemUsIHJnYi5kYXRhKCksIHJnYi5zaXplKCks
IHN0cmlkZSkpCi0gICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAvLyBGSVhNRTogcmVt
b3ZlIHRoaXMgZGF0YSBjb3B5LgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kp
IHsKLSAgICAgICAgY29uc3QgdWludDhfdCogY29uc3Qgc3JjID0gJnJnYlt5ICogc3RyaWRlXTsK
KyAgICBmb3IgKGludCB5ID0gbV9sYXN0VmlzaWJsZVJvdzsgeSA8IHZpc2libGVQYXJ0OyArK3kp
IHsKKyAgICAgICAgY29uc3QgdWludDhfdCogY29uc3Qgc3JjID0gJm1fcmdiT3V0cHV0W3kgKiBz
dHJpZGVdOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCi0gICAgICAg
ICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAyXSwgc3Jj
W2J5dGVzUGVyUGl4ZWwgKiB4ICsgMV0sIHNyY1tieXRlc1BlclBpeGVsICogeCArIDBdLCAweGZm
KTsKKyAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIHNyY1tieXRlc1BlclBpeGVsICog
eCArIDBdLCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAxXSwgc3JjW2J5dGVzUGVyUGl4ZWwgKiB4
ICsgMl0sIDB4ZmYpOworICAgIH0KKyAgICBtX2xhc3RWaXNpYmxlUm93ID0gdmlzaWJsZVBhcnQ7
CisgICAgaWYgKG1fbGFzdFZpc2libGVSb3cgPT0gaGVpZ2h0KSB7ICAKKyAgICAgICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJL08gc3VzcGVu
c2lvbi4KICAgICB9Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBs
ZXRlKTsKLSAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwotICAgIGJ1ZmZlci5zZXRPcmln
aW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwotICAgIHJldHVybiB0
cnVlOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAkocmV2aXNpb24g
ODQxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiAjaWYg
VVNFKFdFQlApCiAKK3R5cGVkZWYgc3RydWN0IFdlYlBJRGVjb2RlciBXZWJQSURlY29kZXI7CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV0VCUEltYWdlRGVjb2RlciA6IHB1YmxpYyBJ
bWFnZURlY29kZXIgewpAQCAtNDYsNiArNDgsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAv
LyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgZGVjb2RpbmcgZmFpbHVyZS4KICAgICBib29sIGRl
Y29kZShib29sIG9ubHlTaXplKTsKKyAgICAvLyBpbmNyZW1lbnRhbCBkZWNvZGVyLCBpbiBjYXNl
IG9ubHkgcGFydGlhbCBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICBXZWJQSURlY29kZXIqIG1fZGVj
b2RlcjsKKyAgICBpbnQgbV9sYXN0VmlzaWJsZVJvdzsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9y
Z2JPdXRwdXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90120</attachid>
            <date>2011-04-18 16:57:20 -0700</date>
            <delta_ts>2011-04-18 17:03:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58851-20110418165719.patch</filename>
            <type>text/plain</type>
            <size>6042</size>
            <attacher name="Pascal Massimino">pascal.massimino</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMTggIFBhc2NhbCBN
YXNzaW1pbm8gIDxwYXNjYWwubWFzc2ltaW5vQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhZGQgaW5jcmVtZW50YWwgZGVjb2Rpbmcg
dG8gV2ViUCBkZWNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01ODg1MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKwlUZXN0aW5nIGJ1ZmZlcmVk
IGNvbm5lY3Rpb24gaXMgZmxha3k6IG9uZSBuZWVkIGEgdmVyeSBiaWcgcGljdHVyZQorCXRvIHRl
c3Qgd2l0aCBhbmQgYW4gZW11bGF0ZWQgY2xvZ2dlZC1jb25uZWN0aW9uLiBBbmQgZXZlbiB0aGVu
LAorCXRoZXJlJ3Mgbm8gZ3VhcmFudHkgdGhlIHRlc3Qgd2lsbCBldmVudHVhbGx5IGNob3NlIHRo
ZQorCWluY3JlbWVudGFsLWRlY29kaW5nIGNvZGUgcGF0aC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpXRUJQSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTEtMDQtMTggIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXguCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDg0MTk2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBX
RUJQSW1hZ2VEZWNvZGVyOjpXRUJQSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9wdGlv
biBhbHBoYU9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbikKKyAgICAsIG1fZGVjb2RlcigwKQorICAgICwgbV9sYXN0VmlzaWJsZVJvdygwKQog
ewogfQogCkBAIC03OSwxMiArODEsMTMgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5UwogCiAgICAgaWYgKGZhaWxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBjb25zdCBzaXplX3QgZGF0YVNpemUgPSBtX2RhdGEtPnNpemUoKTsKLSAgICBjb25zdCB1
aW50OF90KiBkYXRhQnl0ZXMgPQotICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2RhdGEtPmRhdGEoKSk7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgY29uc3Qg
dWludDhfdCogZGF0YUJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9k
YXRhLT5kYXRhKCkpOwogICAgIGlmIChkYXRhU2l6ZSA8IHNpemVPZkhlYWRlcikKICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBpZiAoIVdlYlBHZXRJ
bmZvKGRhdGFCeXRlcywgZGF0YVNpemUsICZ3aWR0aCwgJmhlaWdodCkpCiAgICAgICAgIHJldHVy
biBzZXRGYWlsZWQoKTsKICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkg
JiYgIXNldFNpemUod2lkdGgsIGhlaWdodCkpCkBAIC05Miw5ICs5NSw4IEBAIGJvb2wgV0VCUElt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICBpZiAob25seVNpemUpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwcm9ncmVzc2l2
ZSBkZWNvZGluZy4KLSAgICBpZiAoIWlzQWxsRGF0YVJlY2VpdmVkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIGJvb2wgZGF0YUNvbXBsZXRlID0gaXNBbGxEYXRhUmVjZWl2ZWQoKTsKKyAg
ICBpbnQgc3RyaWRlID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwogICAgIEFTU0VSVCghbV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSk7CiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgewpAQCAtMTAyLDIyICsxMDQsNDQgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVy
OjpkZWNvZGUoYm9vbCBvbmx5UwogICAgICAgICBBU1NFUlQoaGVpZ2h0ID09IHNpemUoKS5oZWln
aHQoKSk7CiAgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkpCiAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoZGF0
YUNvbXBsZXRlID8gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSA6IEltYWdlRnJhbWU6OkZyYW1l
UGFydGlhbCk7CisgICAgICAgIC8vIEZJWE1FOiBtdXN0IGJlIHVwZGF0ZWQgd2hlbiBXZWJQIHN1
cHBvcnRzIGFscGhhLWNoYW5uZWwuCisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7
CisgICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCks
IHNpemUoKSkpOworICAgICAgICBtX3JnYk91dHB1dC5yZXNpemUoaGVpZ2h0ICogc3RyaWRlKTsK
KyAgICAgICAgaWYgKCFkYXRhQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFdl
YlBJTmV3UkdCKE1PREVfUkdCLCBtX3JnYk91dHB1dC5kYXRhKCksIG1fcmdiT3V0cHV0LnNpemUo
KSwgc3RyaWRlKTsKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICAgICAgICAg
IHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2xhc3RWaXNpYmxlUm93
ID0gMDsKKyAgICB9CisgICAgaW50IHZpc2libGVQYXJ0ID0gMDsgLy8gTGFzdCBjb21wbGV0ZWQg
cm93LgorICAgIGlmIChkYXRhQ29tcGxldGUpIHsKKyAgICAgICAgaWYgKCFXZWJQRGVjb2RlUkdC
SW50byhkYXRhQnl0ZXMsIGRhdGFTaXplLCBtX3JnYk91dHB1dC5kYXRhKCksIG1fcmdiT3V0cHV0
LnNpemUoKSwgc3RyaWRlKSkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAg
ICAgdmlzaWJsZVBhcnQgPSBoZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVlA4
U3RhdHVzQ29kZSBzdGF0dXMgPSBXZWJQSVVwZGF0ZShtX2RlY29kZXIsIGRhdGFCeXRlcywgZGF0
YVNpemUpOworICAgICAgICBpZiAoc3RhdHVzICE9IFZQOF9TVEFUVVNfT0sgJiYgc3RhdHVzICE9
IFZQOF9TVEFUVVNfU1VTUEVOREVEKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwor
ICAgICAgICBpZiAoIVdlYlBJRGVjR2V0UkdCKG1fZGVjb2RlciwgJnZpc2libGVQYXJ0LCAwLCAw
LCAwKSkKKyAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgQVNTRVJUKHZp
c2libGVQYXJ0ID49IDApOworICAgICAgICBBU1NFUlQodmlzaWJsZVBhcnQgPD0gaGVpZ2h0KTsK
ICAgICB9Ci0gICAgY29uc3QgaW50IHN0cmlkZSA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbDsKLSAg
ICBWZWN0b3I8dWludDhfdD4gcmdiOwotICAgIHJnYi5yZXNpemUoaGVpZ2h0ICogc3RyaWRlKTsK
LSAgICBpZiAoIVdlYlBEZWNvZGVCR1JJbnRvKGRhdGFCeXRlcywgZGF0YVNpemUsIHJnYi5kYXRh
KCksIHJnYi5zaXplKCksIHN0cmlkZSkpCi0gICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZGF0YSBjb3B5LgotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogY29uc3Qgc3JjID0gJnJn
Ylt5ICogc3RyaWRlXTsKKyAgICBmb3IgKGludCB5ID0gbV9sYXN0VmlzaWJsZVJvdzsgeSA8IHZp
c2libGVQYXJ0OyArK3kpIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogY29uc3Qgc3JjID0gJm1f
cmdiT3V0cHV0W3kgKiBzdHJpZGVdOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyArK3gpCi0gICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCBzcmNbYnl0ZXNQZXJQaXhl
bCAqIHggKyAyXSwgc3JjW2J5dGVzUGVyUGl4ZWwgKiB4ICsgMV0sIHNyY1tieXRlc1BlclBpeGVs
ICogeCArIDBdLCAweGZmKTsKKyAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIHNyY1ti
eXRlc1BlclBpeGVsICogeCArIDBdLCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAxXSwgc3JjW2J5
dGVzUGVyUGl4ZWwgKiB4ICsgMl0sIDB4ZmYpOwogICAgIH0KLSAgICBidWZmZXIuc2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwotICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7Ci0gICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
c2l6ZSgpKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9sYXN0VmlzaWJsZVJvdyA9IHZpc2li
bGVQYXJ0OworICAgIGlmIChtX2xhc3RWaXNpYmxlUm93ID09IGhlaWdodCkgeworICAgICAgICAg
YnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0gZWxzZQorICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJL08gc3Vz
cGVuc2lvbi4KIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHJldmlz
aW9uIDg0MTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDkgQEAKIAog
I2lmIFVTRShXRUJQKQogCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGxpYndlYnAncyBzdHJ1
Y3R1cmUuIE11c3QgYmUgb3V0c2lkZSB0aGUgV2ViQ29yZSBzY29wZS4KK3R5cGVkZWYgc3RydWN0
IFdlYlBJRGVjb2RlciBXZWJQSURlY29kZXI7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgV0VCUEltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewpAQCAtNDYsNiArNDks
MTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2Yg
ZGVjb2RpbmcgZmFpbHVyZS4KICAgICBib29sIGRlY29kZShib29sIG9ubHlTaXplKTsKKyAgICAv
LyBUaGVzZSBmaWVsZHMgc3RvcmUgdGhlIGRlY29kZXIncyBzdGF0ZSBkdXJpbmcgaW5jcmVtZW50
YWwgZGVjb2RpbmcsIHdoZW4gb25seSBwYXJ0aWFsIGRhdGEgaXMgYXZhaWxhYmxlLgorICAgIFdl
YlBJRGVjb2RlciogbV9kZWNvZGVyOworICAgIGludCBtX2xhc3RWaXNpYmxlUm93OworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX3JnYk91dHB1dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90121</attachid>
            <date>2011-04-18 17:03:54 -0700</date>
            <delta_ts>2011-04-18 17:48:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58851-20110418170353.patch</filename>
            <type>text/plain</type>
            <size>6098</size>
            <attacher name="Pascal Massimino">pascal.massimino</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMTggIFBhc2NhbCBN
YXNzaW1pbm8gIDxwYXNjYWwubWFzc2ltaW5vQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhZGQgaW5jcmVtZW50YWwgZGVjb2Rpbmcg
dG8gV2ViUCBkZWNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01ODg1MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKyAgICAgICAgVGVzdGluZyBi
dWZmZXJlZCBjb25uZWN0aW9uIGlzIGZsYWt5OiBvbmUgbmVlZCBhIHZlcnkgYmlnIHBpY3R1cmUK
KyAgICAgICAgdG8gdGVzdCB3aXRoIGFuZCBhbiBlbXVsYXRlZCBjbG9nZ2VkLWNvbm5lY3Rpb24u
IEFuZCBldmVuIHRoZW4sCisgICAgICAgIHRoZXJlJ3Mgbm8gZ3VhcmFudHkgdGhlIHRlc3Qgd2ls
bCBldmVudHVhbGx5IGNob3NlIHRoZQorICAgICAgICBpbmNyZW1lbnRhbC1kZWNvZGluZyBjb2Rl
IHBhdGguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6V0VCUElt
YWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rl
ci5oOgorCiAyMDExLTA0LTE4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA4NDE5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV0VCUEltYWdlRGVjb2Rlcjo6V0VCUEltYWdlRGVj
b2RlcihJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6IEltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgLCBtX2RlY29kZXIoMCkK
KyAgICAsIG1fbGFzdFZpc2libGVSb3coMCkKIHsKIH0KIApAQCAtNzksMTIgKzgxLDEzIEBAIGJv
b2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKIAogICAgIGlmIChmYWlsZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY29uc3Qgc2l6ZV90IGRhdGFTaXplID0g
bV9kYXRhLT5zaXplKCk7Ci0gICAgY29uc3QgdWludDhfdCogZGF0YUJ5dGVzID0KLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9kYXRhLT5kYXRhKCkpOwotICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OworICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGFCeXRlcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YS0+ZGF0YSgpKTsKICAgICBpZiAoZGF0YVNp
emUgPCBzaXplT2ZIZWFkZXIpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CiAgICAgaWYgKCFXZWJQR2V0SW5mbyhkYXRhQnl0ZXMsIGRhdGFTaXplLCAmd2lk
dGgsICZoZWlnaHQpKQogICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgaWYgKCFJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmICFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQpA
QCAtOTIsOSArOTUsOCBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlT
CiAgICAgaWYgKG9ubHlTaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgcHJvZ3Jlc3NpdmUgZGVjb2RpbmcuCi0gICAgaWYgKCFpc0FsbERh
dGFSZWNlaXZlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIGRhdGFDb21wbGV0
ZSA9IGlzQWxsRGF0YVJlY2VpdmVkKCk7CisgICAgaW50IHN0cmlkZSA9IHdpZHRoICogYnl0ZXNQ
ZXJQaXhlbDsKICAgICBBU1NFUlQoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpOwogICAg
IEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVm
ZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKQEAgLTEwMiwyMiArMTA0
LDQ0IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAg
QVNTRVJUKGhlaWdodCA9PSBzaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAoIWJ1ZmZlci5z
ZXRTaXplKHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwor
ICAgICAgICBidWZmZXIuc2V0U3RhdHVzKGRhdGFDb21wbGV0ZSA/IEltYWdlRnJhbWU6OkZyYW1l
Q29tcGxldGUgOiBJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworICAgICAgICAvLyBGSVhNRTog
V2UgY3VycmVudGx5IGhhcmQgY29kZSBmYWxzZSBiZWxvdyBiZWNhdXNlIGxpYndlYnAgZG9lc24n
dCBzdXBwb3J0IGFscGhhIHlldC4KKyAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsK
KyAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
c2l6ZSgpKSk7CisgICAgICAgIG1fcmdiT3V0cHV0LnJlc2l6ZShoZWlnaHQgKiBzdHJpZGUpOwor
ICAgICAgICBpZiAoIWRhdGFDb21wbGV0ZSkgeworICAgICAgICAgICAgbV9kZWNvZGVyID0gV2Vi
UElOZXdSR0IoTU9ERV9SR0IsIG1fcmdiT3V0cHV0LmRhdGEoKSwgbV9yZ2JPdXRwdXQuc2l6ZSgp
LCBzdHJpZGUpOworICAgICAgICAgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICB9CisgICAgICAgIG1fbGFzdFZpc2libGVSb3cg
PSAwOworICAgIH0KKyAgICBpbnQgdmlzaWJsZVBhcnQgPSAwOyAvLyBMYXN0IGNvbXBsZXRlZCBy
b3cuCisgICAgaWYgKGRhdGFDb21wbGV0ZSkgeworICAgICAgICBpZiAoIVdlYlBEZWNvZGVSR0JJ
bnRvKGRhdGFCeXRlcywgZGF0YVNpemUsIG1fcmdiT3V0cHV0LmRhdGEoKSwgbV9yZ2JPdXRwdXQu
c2l6ZSgpLCBzdHJpZGUpKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAg
ICB2aXNpYmxlUGFydCA9IGhlaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBWUDhT
dGF0dXNDb2RlIHN0YXR1cyA9IFdlYlBJVXBkYXRlKG1fZGVjb2RlciwgZGF0YUJ5dGVzLCBkYXRh
U2l6ZSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gVlA4X1NUQVRVU19PSyAmJiBzdGF0dXMgIT0g
VlA4X1NUQVRVU19TVVNQRU5ERUQpCisgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7Cisg
ICAgICAgIGlmICghV2ViUElEZWNHZXRSR0IobV9kZWNvZGVyLCAmdmlzaWJsZVBhcnQsIDAsIDAs
IDApKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgICAgICBBU1NFUlQodmlz
aWJsZVBhcnQgPj0gMCk7CisgICAgICAgIEFTU0VSVCh2aXNpYmxlUGFydCA8PSBoZWlnaHQpOwog
ICAgIH0KLSAgICBjb25zdCBpbnQgc3RyaWRlID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwotICAg
IFZlY3Rvcjx1aW50OF90PiByZ2I7Ci0gICAgcmdiLnJlc2l6ZShoZWlnaHQgKiBzdHJpZGUpOwot
ICAgIGlmICghV2ViUERlY29kZUJHUkludG8oZGF0YUJ5dGVzLCBkYXRhU2l6ZSwgcmdiLmRhdGEo
KSwgcmdiLnNpemUoKSwgc3RyaWRlKSkKLSAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhpcyBkYXRhIGNvcHkuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBjb25zdCBzcmMgPSAmcmdi
W3kgKiBzdHJpZGVdOworICAgIGZvciAoaW50IHkgPSBtX2xhc3RWaXNpYmxlUm93OyB5IDwgdmlz
aWJsZVBhcnQ7ICsreSkgeworICAgICAgICBjb25zdCB1aW50OF90KiBjb25zdCBzcmMgPSAmbV9y
Z2JPdXRwdXRbeSAqIHN0cmlkZV07CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
ICsreCkKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIHNyY1tieXRlc1BlclBpeGVs
ICogeCArIDJdLCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAxXSwgc3JjW2J5dGVzUGVyUGl4ZWwg
KiB4ICsgMF0sIDB4ZmYpOworICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeSwgc3JjW2J5
dGVzUGVyUGl4ZWwgKiB4ICsgMF0sIHNyY1tieXRlc1BlclBpeGVsICogeCArIDFdLCBzcmNbYnl0
ZXNQZXJQaXhlbCAqIHggKyAyXSwgMHhmZik7CiAgICAgfQotICAgIGJ1ZmZlci5zZXRTdGF0dXMo
SW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7Ci0gICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNl
KTsKLSAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBz
aXplKCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2xhc3RWaXNpYmxlUm93ID0gdmlzaWJs
ZVBhcnQ7CisgICAgaWYgKG1fbGFzdFZpc2libGVSb3cgPT0gaGVpZ2h0KSB7CisgICAgICAgICBi
dWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlCisgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEkvTyBzdXNw
ZW5zaW9uLgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gODQxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJw
L1dFQlBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOSBAQAogCiAj
aWYgVVNFKFdFQlApCiAKKy8vIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgbGlid2VicCdzIHN0cnVj
dHVyZS4gTXVzdCBiZSBvdXRzaWRlIHRoZSBXZWJDb3JlIHNjb3BlLgordHlwZWRlZiBzdHJ1Y3Qg
V2ViUElEZWNvZGVyIFdlYlBJRGVjb2RlcjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBXRUJQSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CkBAIC00Niw2ICs0OSwx
MCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBk
ZWNvZGluZyBmYWlsdXJlLgogICAgIGJvb2wgZGVjb2RlKGJvb2wgb25seVNpemUpOworICAgIC8v
IFRoZXNlIGZpZWxkcyBzdG9yZSB0aGUgZGVjb2RlcidzIHN0YXRlIGR1cmluZyBpbmNyZW1lbnRh
bCBkZWNvZGluZywgd2hlbiBvbmx5IHBhcnRpYWwgZGF0YSBpcyBhdmFpbGFibGUuCisgICAgV2Vi
UElEZWNvZGVyKiBtX2RlY29kZXI7CisgICAgaW50IG1fbGFzdFZpc2libGVSb3c7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IG1fcmdiT3V0cHV0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90124</attachid>
            <date>2011-04-18 17:48:30 -0700</date>
            <delta_ts>2011-04-18 20:43:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58851-20110418174829.patch</filename>
            <type>text/plain</type>
            <size>5899</size>
            <attacher name="Pascal Massimino">pascal.massimino</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MjA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMTggIFBhc2NhbCBN
YXNzaW1pbm8gIDxwYXNjYWwubWFzc2ltaW5vQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5jcmVtZW50YWwgZGVjb2Rpbmcg
dG8gV2ViUCBkZWNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01ODg1MQorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgaXQncyBub3QgcG9zc2li
bGUgZm9yIHRoZSBsYXlvdXQgdGVzdCBmcmFtZXdvcmsgdG8KKyAgICAgICAgZm9yY2UgdGhlIGRl
Y29kZXJzIHRvIGRlY29kZSBpbmNyZW1lbnRhbGx5LgorCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OldFQlBJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaDoKKwogMjAxMS0wNC0xOCAgR2VvZmZyZXkgR2Fy
ZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gODQxOTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdFQlBJ
bWFnZURlY29kZXI6OldFQlBJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFs
cGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
CiAgICAgOiBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKQorICAgICwgbV9kZWNvZGVyKDApCisgICAgLCBtX2xhc3RWaXNpYmxlUm93KDApCiB7CiB9
CiAKQEAgLTc5LDEyICs4MSwxMyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29s
IG9ubHlTCiAKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IGNvbnN0IHNpemVfdCBkYXRhU2l6ZSA9IG1fZGF0YS0+c2l6ZSgpOwotICAgIGNvbnN0IHVpbnQ4
X3QqIGRhdGFCeXRlcyA9Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fZGF0YS0+ZGF0YSgpKTsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBpZiAoZGF0YVNp
emUgPCBzaXplT2ZIZWFkZXIpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CisgICAgY29uc3QgdWludDhfdCogZGF0YUJ5dGVzID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4obV9kYXRhLT5kYXRhKCkpOwogICAgIGlmICghV2ViUEdldEluZm8o
ZGF0YUJ5dGVzLCBkYXRhU2l6ZSwgJndpZHRoLCAmaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuIHNl
dEZhaWxlZCgpOwogICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiAh
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKQEAgLTkyLDkgKzk1LDggQEAgYm9vbCBXRUJQSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIGlmIChvbmx5U2l6ZSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHByb2dyZXNzaXZlIGRl
Y29kaW5nLgotICAgIGlmICghaXNBbGxEYXRhUmVjZWl2ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBpc0FsbERhdGFSZWNlaXZlZCgpOworICAg
IGludCBzdHJpZGUgPSB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWw7CiAgICAgQVNTRVJUKCFtX2ZyYW1l
QnVmZmVyQ2FjaGUuaXNFbXB0eSgpKTsKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSB7CkBAIC0xMDIsMjIgKzEwNCw0MSBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6
OmRlY29kZShib29sIG9ubHlTCiAgICAgICAgIEFTU0VSVChoZWlnaHQgPT0gc2l6ZSgpLmhlaWdo
dCgpKTsKICAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKICAgICAg
ICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhhbGxE
YXRhUmVjZWl2ZWQgPyBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlIDogSW1hZ2VGcmFtZTo6RnJh
bWVQYXJ0aWFsKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGN1cnJlbnRseSBoYXJkIGNvZGUgZmFs
c2UgYmVsb3cgYmVjYXVzZSBsaWJ3ZWJwIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSB5ZXQuCisgICAg
ICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CisgICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOworICAgICAgICBtX3JnYk91
dHB1dC5yZXNpemUoaGVpZ2h0ICogc3RyaWRlKTsKKyAgICB9CisgICAgaW50IG5ld0xhc3RWaXNp
YmxlUm93ID0gMDsgLy8gTGFzdCBjb21wbGV0ZWQgcm93LgorICAgIGlmIChhbGxEYXRhUmVjZWl2
ZWQpIHsKKyAgICAgICAgaWYgKCFXZWJQRGVjb2RlUkdCSW50byhkYXRhQnl0ZXMsIGRhdGFTaXpl
LCBtX3JnYk91dHB1dC5kYXRhKCksIG1fcmdiT3V0cHV0LnNpemUoKSwgc3RyaWRlKSkKKyAgICAg
ICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgbmV3TGFzdFZpc2libGVSb3cgPSBo
ZWlnaHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAg
ICAgIG1fZGVjb2RlciA9IFdlYlBJTmV3UkdCKE1PREVfUkdCLCBtX3JnYk91dHB1dC5kYXRhKCks
IG1fcmdiT3V0cHV0LnNpemUoKSwgc3RyaWRlKTsKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBjb25zdCBWUDhTdGF0dXNDb2RlIHN0YXR1cyA9IFdlYlBJVXBkYXRlKG1fZGVjb2RlciwgZGF0
YUJ5dGVzLCBkYXRhU2l6ZSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gVlA4X1NUQVRVU19PSyAm
JiBzdGF0dXMgIT0gVlA4X1NUQVRVU19TVVNQRU5ERUQpCisgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7CisgICAgICAgIGlmICghV2ViUElEZWNHZXRSR0IobV9kZWNvZGVyLCAmbmV3TGFz
dFZpc2libGVSb3csIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwor
ICAgICAgICBBU1NFUlQobmV3TGFzdFZpc2libGVSb3cgPj0gMCk7CisgICAgICAgIEFTU0VSVChu
ZXdMYXN0VmlzaWJsZVJvdyA8PSBoZWlnaHQpOwogICAgIH0KLSAgICBjb25zdCBpbnQgc3RyaWRl
ID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwotICAgIFZlY3Rvcjx1aW50OF90PiByZ2I7Ci0gICAg
cmdiLnJlc2l6ZShoZWlnaHQgKiBzdHJpZGUpOwotICAgIGlmICghV2ViUERlY29kZUJHUkludG8o
ZGF0YUJ5dGVzLCBkYXRhU2l6ZSwgcmdiLmRhdGEoKSwgcmdiLnNpemUoKSwgc3RyaWRlKSkKLSAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBkYXRh
IGNvcHkuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgICAgICBj
b25zdCB1aW50OF90KiBjb25zdCBzcmMgPSAmcmdiW3kgKiBzdHJpZGVdOworICAgIGZvciAoaW50
IHkgPSBtX2xhc3RWaXNpYmxlUm93OyB5IDwgbmV3TGFzdFZpc2libGVSb3c7ICsreSkgeworICAg
ICAgICBjb25zdCB1aW50OF90KiBjb25zdCBzcmMgPSAmbV9yZ2JPdXRwdXRbeSAqIHN0cmlkZV07
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkKLSAgICAgICAgICAgIGJ1
ZmZlci5zZXRSR0JBKHgsIHksIHNyY1tieXRlc1BlclBpeGVsICogeCArIDJdLCBzcmNbYnl0ZXNQ
ZXJQaXhlbCAqIHggKyAxXSwgc3JjW2J5dGVzUGVyUGl4ZWwgKiB4ICsgMF0sIDB4ZmYpOworICAg
ICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeSwgc3JjW2J5dGVzUGVyUGl4ZWwgKiB4ICsgMF0s
IHNyY1tieXRlc1BlclBpeGVsICogeCArIDFdLCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAyXSwg
MHhmZik7CiAgICAgfQotICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSk7Ci0gICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICBidWZmZXIuc2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBtX2xhc3RWaXNpYmxlUm93ID0gbmV3TGFzdFZpc2libGVSb3c7CisgICAgaWYg
KG1fbGFzdFZpc2libGVSb3cgPT0gaGVpZ2h0KQorICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKKyAgICByZXR1cm4gbV9sYXN0VmlzaWJsZVJvdyA9
PSBoZWlnaHQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA4NDE5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dl
YnAvV0VCUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw5IEBACiAK
ICNpZiBVU0UoV0VCUCkKIAorLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBsaWJ3ZWJwJ3Mgc3Ry
dWN0dXJlLiBNdXN0IGJlIG91dHNpZGUgdGhlIFdlYkNvcmUgc2NvcGUuCit0eXBlZGVmIHN0cnVj
dCBXZWJQSURlY29kZXIgV2ViUElEZWNvZGVyOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdFQlBJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKQEAgLTQ2LDYgKzQ5
LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9m
IGRlY29kaW5nIGZhaWx1cmUuCiAgICAgYm9vbCBkZWNvZGUoYm9vbCBvbmx5U2l6ZSk7CisKKyAg
ICBXZWJQSURlY29kZXIqIG1fZGVjb2RlcjsgLy8gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB3ZSB3
YW50IHRvIGRlY29kZSgpIGJ1dCBub3QgYWxsIGRhdGEgaXMgYXZhaWxhYmxlIHlldC4KKyAgICBp
bnQgbV9sYXN0VmlzaWJsZVJvdzsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yZ2JPdXRwdXQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>