<?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>34907</bug_id>
          
          <creation_ts>2010-02-12 15:01:39 -0800</creation_ts>
          <short_desc>audio engine: add FFTConvolver class</short_desc>
          <delta_ts>2010-08-31 14:02:34 -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>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>34452</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190164</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-12 15:01:39 -0800</bug_when>
    <thetext>audio engine: add FFTConvolver class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190165</commentid>
    <comment_count>1</comment_count>
      <attachid>48667</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-12 15:03:42 -0800</bug_when>
    <thetext>Created attachment 48667
diagram describing operation of FFTConvolver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190167</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-12 15:05:16 -0800</bug_when>
    <thetext>The FFTConvolver is able to do short convolutions with the FFT size N being at least twice as large as the length of the short impulse response. It incurs a latency of N/2 sample-frames. Because of this latency and performance considerations, it is not suitable for long convolutions. Multiple instances of this building block can be used to perform extremely long convolutions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190168</commentid>
    <comment_count>3</comment_count>
      <attachid>48668</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-12 15:07:20 -0800</bug_when>
    <thetext>Created attachment 48668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198983</commentid>
    <comment_count>4</comment_count>
      <attachid>48668</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-12 04:29:33 -0800</bug_when>
    <thetext>Comment on attachment 48668
Patch

Looking pretty good.


&gt; diff --git a/WebCore/platform/audio/FFTConvolver.cpp b/WebCore/platform/audio/FFTConvolver.cpp
&gt; new file mode 100644
&gt; index 0000000..3c06dcc
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/audio/FFTConvolver.cpp
&gt; @@ -0,0 +1,94 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;FFTConvolver.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +FFTConvolver::FFTConvolver(size_t fftSize)
&gt; +    : m_frame(fftSize)
&gt; +    , m_readWriteIndex(0)
&gt; +    , m_inputBuffer(fftSize) // 2nd half of buffer is always zeroed
&gt; +    , m_outputBuffer(fftSize)
&gt; +    , m_lastOverlapBuffer(fftSize / 2)
&gt; +{
&gt; +}
&gt; +
&gt; +void FFTConvolver::process(FFTFrame* fftKernel,
&gt; +                           float* sourceP,
&gt; +                           float* destP,
&gt; +                           size_t framesToProcess)
&gt; +{
&gt; +    // FIXME : make so |framesToProcess| is not required to fit evenly into fftSize/2

No space between FIXME and :.

&gt; +
&gt; +    // Copy samples to input buffer (note contraint above!)

Can we ASSERT anything there?

&gt; +    float* inputP = m_inputBuffer;
&gt; +    memcpy(inputP + m_readWriteIndex, sourceP, sizeof(float) * framesToProcess);
&gt; +
&gt; +    // Copy samples from output buffer
&gt; +    float* outputP = m_outputBuffer;
&gt; +    memcpy(destP, outputP + m_readWriteIndex, sizeof(float) * framesToProcess);
&gt; +
&gt; +    m_readWriteIndex += framesToProcess;
&gt; +
&gt; +    size_t halfSize = fftSize() / 2;
&gt; +
&gt; +    // Check if it&apos;s time to perform the next FFT
&gt; +    if (m_readWriteIndex == halfSize) {
&gt; +        // The input buffer is now filled (get frequency-domain version)
&gt; +        m_frame.doFFT(m_inputBuffer);
&gt; +        m_frame.multiply(*fftKernel);
&gt; +        m_frame.doInverseFFT(m_outputBuffer);
&gt; +
&gt; +        // Overlap-add 1st half from previous time
&gt; +        vadd(m_outputBuffer,
&gt; +             1,
&gt; +             m_lastOverlapBuffer,
&gt; +             1,
&gt; +             m_outputBuffer,
&gt; +             1,
&gt; +             halfSize);

The WebKit standard is to put the whole function call on one line.  I don&apos;t see much of a readability improvement by splitting this over multiple lines, so I think it&apos;d probably be best if you just did that.

&gt; +
&gt; +        // Finally, save 2nd half of result
&gt; +        memcpy((float*)m_lastOverlapBuffer,
&gt; +               (float*)m_outputBuffer + halfSize,
&gt; +               sizeof(float) * halfSize);

Ditto.

&gt; +
&gt; +        // Reset index back to start for next time
&gt; +        m_readWriteIndex = 0;
&gt; +    }
&gt; +}
&gt; +
&gt; +void FFTConvolver::reset()
&gt; +{
&gt; +    m_lastOverlapBuffer.zero();
&gt; +    m_readWriteIndex = 0;
&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; diff --git a/WebCore/platform/audio/FFTConvolver.h b/WebCore/platform/audio/FFTConvolver.h
&gt; new file mode 100644
&gt; index 0000000..20a4873
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/audio/FFTConvolver.h
&gt; @@ -0,0 +1,74 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef FFTConvolver_h
&gt; +#define FFTConvolver_h
&gt; +
&gt; +#include &quot;AudioFloatArray.h&quot;
&gt; +#include &quot;FFTFrame.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class FFTConvolver {
&gt; +public:
&gt; +    // |fftSize| must be a power of two

I think the fact that you&apos;re talking about the fftSize variable is clear without the ||&apos;s and they&apos;re not really used elsewhere in the code base.  Same goes for other uses in comments.

&gt; +    FFTConvolver(size_t fftSize);
&gt; +
&gt; +    // For now, with multiple calls to Process(), |framesToProcess| MUST add up EXACTLY to |fftSize| / 2
&gt; +    //
&gt; +    // FIXME: Later, we can do more sophisticated buffering to relax this requirement...
&gt; +    //
&gt; +    // The input to output latency is equal to |fftSize| / 2
&gt; +    //
&gt; +    // Processing in-place is allowed...
&gt; +    void process(FFTFrame* fftKernel,
&gt; +                 float* sourceP,
&gt; +                 float* destP,
&gt; +                 size_t framesToProcess);
&gt; +
&gt; +    void reset();
&gt; +
&gt; +    size_t fftSize() const { return m_frame.fftSize(); }
&gt; +
&gt; +private:
&gt; +    FFTFrame m_frame;
&gt; +
&gt; +    // Buffer input until we get fftSize / 2 samples then do an FFT
&gt; +    size_t m_readWriteIndex;
&gt; +    AudioFloatArray m_inputBuffer;
&gt; +
&gt; +    // Stores output which we read a little at a time
&gt; +    AudioFloatArray m_outputBuffer;
&gt; +
&gt; +    // Saves the 2nd half of the FFT buffer, so we can do an overlap-add with the 1st half of the next one
&gt; +    AudioFloatArray m_lastOverlapBuffer;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // FFTConvolver_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200496</commentid>
    <comment_count>5</comment_count>
      <attachid>50849</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-16 16:24:33 -0700</bug_when>
    <thetext>Created attachment 50849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200497</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-16 16:25:36 -0700</bug_when>
    <thetext>Hi Jeremy, I think I&apos;ve taken care of everything - thanks...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200816</commentid>
    <comment_count>7</comment_count>
      <attachid>50849</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-17 08:50:15 -0700</bug_when>
    <thetext>Comment on attachment 50849
Patch

&gt; diff --git a/WebCore/platform/audio/FFTConvolver.cpp b/WebCore/platform/audio/FFTConvolver.cpp
&gt; new file mode 100644
&gt; index 0000000..16a0f48
&gt; --- /dev/null
&gt; +++ b/WebCore/platform/audio/FFTConvolver.cpp
&gt; @@ -0,0 +1,101 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;FFTConvolver.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +FFTConvolver::FFTConvolver(size_t fftSize)
&gt; +    : m_frame(fftSize)
&gt; +    , m_readWriteIndex(0)
&gt; +    , m_inputBuffer(fftSize) // 2nd half of buffer is always zeroed
&gt; +    , m_outputBuffer(fftSize)
&gt; +    , m_lastOverlapBuffer(fftSize / 2)
&gt; +{
&gt; +}
&gt; +
&gt; +void FFTConvolver::process(FFTFrame* fftKernel, float* sourceP, float* destP, size_t framesToProcess)
&gt; +{
&gt; +    // FIXME: make so |framesToProcess| is not required to fit evenly into fftSize/2

Get rid of |&apos;s per earlier comment.


Looks good, but we&apos;ll probably want to land this in the branch rather than trunk...we&apos;ll know for sure soon, hopefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203752</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-24 20:09:19 -0700</bug_when>
    <thetext>Chris isn&apos;t a committer.  So it seems that the cq- is effectively the same as an r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203965</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-25 03:24:09 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Chris isn&apos;t a committer.  So it seems that the cq- is effectively the same as
&gt; an r-.

He&apos;ll be a committer in a couple of days (pending paper work).  Once that&apos;s done, he&apos;ll land this on a branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215617</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-21 18:22:18 -0700</bug_when>
    <thetext>Any update?  Should this still be r+ in the pending-commit list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215625</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-04-21 18:26:57 -0700</bug_when>
    <thetext>Chris is on vacation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216493</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-04-23 11:32:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Chris is on vacation.

I&apos;m back now - I&apos;ll soon be checking a bunch of stuff into a branch.  Then we can figure out how to land this and some of the other patches into trunk...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219963</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 19:14:44 -0700</bug_when>
    <thetext>Was this landed in the big audio branch landing?  If so, please close so it&apos;s not in webkit.org/pending-commit anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220233</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-05-03 12:15:24 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Was this landed in the big audio branch landing?  If so, please close so it&apos;s
&gt; not in webkit.org/pending-commit anymore.

This still needs to land in trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226166</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-14 23:49:11 -0700</bug_when>
    <thetext>&gt; This still needs to land in trunk.

Two weeks have gone by.  Would you like this landed in trunk?  If so, either land it (if you are a committer) or mark it commit-queue? so a committer knows that this is available to be committed.  We don&apos;t want patches to live in pending-commit forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226846</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-05-17 12:10:39 -0700</bug_when>
    <thetext>Adam, I&apos;m sorry if this hasn&apos;t been clear.  This and the other patches all need to land in trunk eventually.  But the code currently lives in a private branch where I&apos;m working so we can determine the proper directory layout, etc. as was discussed in the webkit-dev thread.  This was Maciej&apos;s suggestion and it&apos;s working out very well for me.  I&apos;m sorry if the r+ patches sitting around have been a problem but I have to get my patches reviewed as the audio engine contains a lot of code.  But it can&apos;t be landed until we settle on the directory layout.  In the meantime I&apos;ll remove the r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226847</commentid>
    <comment_count>17</comment_count>
      <attachid>50849</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-05-17 12:11:41 -0700</bug_when>
    <thetext>Comment on attachment 50849
Patch

temporarily changing back to r- until we can settle on proper directory layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270086</commentid>
    <comment_count>18</comment_count>
      <attachid>65611</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-26 13:38:08 -0700</bug_when>
    <thetext>Created attachment 65611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270089</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-26 13:43:09 -0700</bug_when>
    <thetext>Jeremy Orlow has already R+ the previous patch.  This new patch just introduces the WEB_AUDIO feature enable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271616</commentid>
    <comment_count>20</comment_count>
      <attachid>65611</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-30 13:56:59 -0700</bug_when>
    <thetext>Comment on attachment 65611
Patch

I&apos;m r+&apos;ing this based on earlier review but want to highlight a couple of portability issues.

&gt; Index: WebCore/platform/audio/FFTConvolver.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/audio/FFTConvolver.cpp	(revision 0)
&gt; +++ WebCore/platform/audio/FFTConvolver.cpp	(revision 0)
&gt; @@ -0,0 +1,108 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(WEB_AUDIO)
&gt; +
&gt; +#include &quot;FFTConvolver.h&quot;
&gt; +
&gt; +#include &quot;Accelerate.h&quot;

This #include should be surrounded by some PLATFORM or OS macro for Mac OS X, and a compile-time or run-time failure on other platforms.

&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +FFTConvolver::FFTConvolver(size_t fftSize)
&gt; +    : m_frame(fftSize)
&gt; +    , m_readWriteIndex(0)
&gt; +    , m_inputBuffer(fftSize) // 2nd half of buffer is always zeroed
&gt; +    , m_outputBuffer(fftSize)
&gt; +    , m_lastOverlapBuffer(fftSize / 2)
&gt; +{
&gt; +}
&gt; +
&gt; +void FFTConvolver::process(FFTFrame* fftKernel, float* sourceP, float* destP, size_t framesToProcess)
&gt; +{
&gt; +    // FIXME: make so framesToProcess is not required to fit evenly into fftSize/2
&gt; +
&gt; +    // Copy samples to input buffer (note contraint above!)
&gt; +    float* inputP = m_inputBuffer.data();
&gt; +
&gt; +    // Sanity check
&gt; +    bool isCopyGood1 = sourceP &amp;&amp; inputP &amp;&amp; m_readWriteIndex + framesToProcess &lt;= m_inputBuffer.size();
&gt; +    ASSERT(isCopyGood1);
&gt; +    if (!isCopyGood1)
&gt; +        return;
&gt; +    
&gt; +    memcpy(inputP + m_readWriteIndex, sourceP, sizeof(float) * framesToProcess);
&gt; +
&gt; +    // Copy samples from output buffer
&gt; +    float* outputP = m_outputBuffer.data();
&gt; +
&gt; +    // Sanity check
&gt; +    bool isCopyGood2 = destP &amp;&amp; outputP &amp;&amp; m_readWriteIndex + framesToProcess &lt;= m_outputBuffer.size();
&gt; +    ASSERT(isCopyGood2);
&gt; +    if (!isCopyGood2)
&gt; +        return;
&gt; +
&gt; +    memcpy(destP, outputP + m_readWriteIndex, sizeof(float) * framesToProcess);
&gt; +    m_readWriteIndex += framesToProcess;
&gt; +
&gt; +
&gt; +    // Check if it&apos;s time to perform the next FFT
&gt; +    size_t halfSize = fftSize() / 2;
&gt; +    if (m_readWriteIndex == halfSize) {
&gt; +        // The input buffer is now filled (get frequency-domain version)
&gt; +        m_frame.doFFT(m_inputBuffer.data());
&gt; +        m_frame.multiply(*fftKernel);
&gt; +        m_frame.doInverseFFT(m_outputBuffer.data());
&gt; +
&gt; +        // Overlap-add 1st half from previous time
&gt; +        vadd(m_outputBuffer.data(), 1, m_lastOverlapBuffer.data(), 1, m_outputBuffer.data(), 1, halfSize);

This should be similarly covered by a Mac-specific PLATFORM or OS macro.

&gt; +
&gt; +        // Finally, save 2nd half of result
&gt; +        bool isCopyGood3 = m_outputBuffer.size() == 2 * halfSize &amp;&amp; m_lastOverlapBuffer.size() == halfSize;
&gt; +        ASSERT(isCopyGood3);
&gt; +        if (!isCopyGood3)
&gt; +            return;
&gt; +        
&gt; +        memcpy(m_lastOverlapBuffer.data(), m_outputBuffer.data() + halfSize, sizeof(float) * halfSize);
&gt; +
&gt; +        // Reset index back to start for next time
&gt; +        m_readWriteIndex = 0;
&gt; +    }
&gt; +}
&gt; +
&gt; +void FFTConvolver::reset()
&gt; +{
&gt; +    m_lastOverlapBuffer.zero();
&gt; +    m_readWriteIndex = 0;
&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // ENABLE(WEB_AUDIO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271619</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-30 14:09:02 -0700</bug_when>
    <thetext>Hi Ken, thanks for the review.  The include of &quot;Accelerate.h&quot; *is* cross-platform and is the abstraction layer for vector operations (like vadd()) so it doesn&apos;t have a platform-specific #if</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271730</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-30 16:22:00 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Hi Ken, thanks for the review.  The include of &quot;Accelerate.h&quot; *is* cross-platform and is the abstraction layer for vector operations (like vadd()) so it doesn&apos;t have a platform-specific #if

OK. I didn&apos;t see the creation of Accelerate.h until looking at https://bugs.webkit.org/show_bug.cgi?id=34452 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272350</commentid>
    <comment_count>23</comment_count>
      <attachid>65611</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-31 14:02:25 -0700</bug_when>
    <thetext>Comment on attachment 65611
Patch

Clearing flags on attachment: 65611

Committed r66529: &lt;http://trac.webkit.org/changeset/66529&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272352</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-31 14:02:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>48667</attachid>
            <date>2010-02-12 15:03:42 -0800</date>
            <delta_ts>2010-02-12 15:03:42 -0800</delta_ts>
            <desc>diagram describing operation of FFTConvolver</desc>
            <filename>fft-convolver.png</filename>
            <type>image/png</type>
            <size>51995</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAkgAAAIVCAIAAAClbJfRAAACPmlDQ1BJQ0MgUHJvZmlsZQAAeAGt
k01r1FAUht/MUKpYixbpdKNkIepilJApVFdOOx9l2jCGmSmj7jJJJhmdZGKSGbUq9Ae4cueiIH6A
C7dSLQh1J0LxoyD2H7ivqCA1npuYtAuLG09I7pPDe84999x7gfRXxXG6KQCW7bu12Rn+4qXL/PAm
OAzhADLYr6ieMy3LEkn2sG+fSE22cZrleiesf994uHLsycvV5bsfz9/ZIyh2j7o0IcBlyXHEiDjP
uBVxg/F13/FJYzJWTUUjvk2cdRu1AvFT4lEj4heMWxG/YTxQDRb7mViwtY4NpPYRn9V0TyXOExua
p1rElIeDZfUof5rlPKU6LsWm3xMfZ32hkaw3S+G/yH9vx6dQHc+pCxO7fCfmgbGjwAq3o9saD3vF
jb/12jkxTMeNuMDQjyDYIu3wKrDtBsHP5SDYfkxzbAJr19S+Owi1VCC3DvzrP1pzlB34QGsgC/fo
7xz1JVQJwKM1oLEESDTep/FkBjh8C5BB/jxSuVz8Rj0kN3CwWJIkXpwUppplJvyvZnX7tFehjdF3
xG5VL9A4Qe8Xx5cbMXuDeinmdqdciVlTirQXkX7RLFRjbrvlWsxXlDlWd5hTtxfqMTvd8Oz/mWsm
0eteKdEsmo1mrHf7tYWYr/bmE72mF5Pa7G6V3acwZ8evJPWjiBIkeniImISAKTRRhhydSYrAoWfA
g4w4J9VfvwqWmGe3+fqNcK8LPeem2zFMn5+mG6ln+YqtnsnyoiCcw2+PgrJyQ/6A/QAAIABJREFU
eAHsnQecFEX6/i/9PCMiEkSCYsCAOYABEwYMYBZMmAMi5iwo6plFxXyCOScUcxbOBAbMAYwIooA5
43n3v/939llqe3t6ZnpnZ3eG3ac+n+19u+qt0E9Xv0+9VTXdf/7f//73JwcjYASMgBEwAk0Fgb80
lQvxdRgBI2AEjIARyCBgYnM/MAJGwAgYgSaFgImtSd1OX4wRMAJGwAiY2NwHjIARMAJGoEkhYGJr
UrfTF2MEjIARMAImNvcBI2AEjIARaFIImNia1O30xRgBI2AEjICJzX3ACBgBI2AEmhQCJrYmdTt9
MUbACBgBI2Bicx8wAkbACBiBJoWAia2+t/PPf/5zfYtwfiNgBIyAESgdAia20mHpkoyAETACRqAC
EDCxVcBNcBOMgBEwAkagdAiY2EqHpUsyAkbACBiBCkDAxFYBN8FNMAJGwAgYgdIhYGIrHZYuyQgY
ASNgBCoAARNbBdyEZtaE//znP//v//2/lBf9888///e//0U5CCkzNpDat99+++9//ztP4aSW8eO9
VP3HH3/kaV5iUiK233//faJyQ0Q2Zl0N0f4iyqQj8SAUkdFZ0iBgYkuDUmPoHHzwwW+++Wadatp1
110HDhyoLLNmzfrLX/5y4YUX6vTFF1/8v//7v59++ikUOH78+OWXX57TDz744IEHHgjxeYSOHTu+
/fbbeRQKJmFnL7vsspip3WeffW644YaCeVE4/PDDV1xxxS+//DIIaXLl0ll66aXfeOONgEMutTzx
v//+O5jn/4HHUkstNWnSpDyFpE+aPn36TjvtlEf/kUceee+996IKEyZMWGONNaIxuWShQWo2tl99
9dXaa6/NbUrMe9JJJ5188skkhRIS1VJG5q8rZSH51RI7Yf4s+VNff/31AQMGbL755vRt2p9fmdQP
P/xwz9rhmmuuoR+eeuqpBfNaoTgETGzF4VbKXA8++OBBBx00cuTIuo5bN954Yx4PNeXpp59ebLHF
nnrqKZ0Sv+aaay600EKhodg7pU6cOPGqq64K8XkE2HG55ZbLo1AwCc8MuwkfFNRMVLj++utpM/wa
hES1OkUGHOqUS8oXXXRRv379GDEUkbdOWRiRcI922WWX5557Lk9G7CNMlkchTVI2tvQQ/M4xY8ak
yV5PnUaoq56dMHaBP/zwA5TWvn37888/n2EfA52YQvZpq1attouEF154Yf75599mm22eeeaZd955
J1vfMfVHwMRWfwzrWwKPxwILLBAlIUocNmwYDtZqq6129tln56oAYnv33XfllkEAxx9/PGZOE2UI
pJKRB+q+++5jAM7oHgWciSFDhsBYhx12GKlvvfXWRhtt1KlTJ4bnP/74Y6wiOGnatGno7Lvvvued
dx6+CGQpt/KMM8648sort95668UXX/zII4/UpMpmm2326aefqhBkHI4ddtiB0w022ODXX3+NFj55
8uR11123bdu2gwYNEu1l52WMSy6OeC0Svvjii19++eWAAw6gwZtsssnLL79MmVzRHnvswdhZ1xtq
efbZZ7faaqs2bdpARdERA8NncECNGc4TTjiBNnTv3j14kAwv8BEJl156aShKAvqAsPvuu8+YMYMs
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
PS7TCGQjEBv58RAVsSwdem92+ZUco3mdWAu5fFmSWHzsNDFvTMenQoA+JlYDtPQmkbwmtuouRI8k
BG4D0DRrbB07dnz77bfr0wup9LLLLotZhH322eeGG25IU+zhhx++4oorfvnll3xdeumll77rrrvS
5LKOEYgi8Msvvxx77LGbbLLJcccd98Ybb0STcsmfffYZ/S2aOmHChDXWWCMak0smo2oJvTdoHnXU
Uaeccko4rVjhoosuAqtY89Zff/2XXnopFpl9mpg3W80xIIBhlKeBZZZ9JhKhIDheY6uGCLAUQFBD
qhjZJEL54osvLrbYYolJKSOpjsd73333ZSo5ZZao2vXXXz9x4kT49dRTTz3wwAP322+/aKplI5AG
gb333puPV5xxxhnQ1brrrjtlypR27dqlyVhPndB7QzmwmrbAhRgLzRkBjDBB/gbH9FDYY6vBKhAb
guitJi2HBCdNmzbtrbfegpnOO++8pZZaas0113zzzTdRx0xceeWVW2+99eKLL37kkUcy7iBys802
+/TTT1UY8vTp03fYYQdON9hgAza2Kl7HyZMnY2Latm07aNAg+Y7Zeffcc09ycWQM+NBDD1177bW3
3HIL2UeOHIkbR7j00ktV2nbbbXffffetvfba9fQvoy203DQQoLc/9dRTcAydkL5EJ6GrcGlbbbXV
mDFj1lprrS5dulx++eW6WLoZMUEnhgBFnXbaaUsuuSQ677zzjlKHDRu2/PLLr7baameffXZUP/Te
L774IsTTgUePHs3ps88+SwPatGnTr18/Xj8RFBAOOuggnrIQZs2aRWT+Ps+URp8+ffjyEc0YN25c
tDTkjTfemHpJ6tq1q2on8tFHHyW+c+fOtPPrr78mhqs76aST0Nl222156lUIje/bty+RJ5xwAgNi
RWIQNtpoo06dOjH1woghV14p+5gHAS3KYI0BXzBKyJOlOgk9B3okq5Tfffcd3XTSpEkvv/zy448/
fuuttwYoc0HUoUMHOjF+G9t1IDnYCKLiEUJ/jz324EHiKeIJX2GFFe6//34ieVDfe+89lda6deuP
P/74k08+oRa4UDdPSeRt1arVnXfe+eSTTzJvc8EFFyTmnTp1Ki8IfuWVV7766ivqPf3007kEjBGW
5bHHHqNhGBSeWPLCuLSBOU8eM1XhY5NHoGDvFQJ0/o8++kgy3WOhhRaix3JK3+7evTu9CFZjmzXT
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
TGzVGEd9NSiNT9hwJE1eWuobYUUjUCkIMNR1762Um+F21B0BOvDvv//OxzHICr0xf8aRLk18wcJM
bNUQgZccNeCD1f7973+DaUH4rGAEjIARMAINhABGGMtMmGeeefDVJJvY0qItvCA2AqxGAFBeX5s2
v/WMgBEwAkag1AhghKExKA1/gyMyIU0l9thqUILegE/zkLNnzw5fEK7RsGQEjIARMAKNhYCIjdrg
M4iNkHI20sRWfYvkronYcNcIcFtj3T7XYwSMgBEwAnEEIDb2jBBYacNEk4z7EVdKOvcrtapR0Wwk
xEZgKpI1Nk9FChoA+fnnn5M6j+OMgBEwAg2IAA4GplizaFW2+b8mtjrALbDktAFi4LaCRRx11FGn
nHJKQbX8Co888sh7772XX6c+qenLX3rppd94441oXQ888ACRd911VzTSshEwAkagERAQseFpYKKx
z3I/0tRrj60aJXGb4IPbUu6KhNWOPvroNEDn0bnmmmsmTJiQR6GeSfUpf8yYMQceeOB+++1XzzY4
uxEwAkagrgjIXYPScDY0FZmyBBNbNVBhRCC/jSP0VhDEW265ZfTo0ahttdVWcMBaa63VpUuXyy+/
nJjnn3/+yCOPPOaYYzp16tSrV68pU6YQed55540aNQqBcO655954442XXXbZ2LFjzzjjjPvvv1/x
Ol588cUrrbQSpQ0fPpyYxNKIHzly5IpV4dJLL1XG6dOn9+7du1WrVjvuuOObb74ZLZ+GEfbYY48z
zzwT5WHDhi2//PKrrbba2Wefrbyx47XXXvvQQw9x5DIL5gWBm266qUePHt27dx83btygQYM6duxI
G7QH55dffjnggAOAYpNNNnn55ZdjFfnUCBgBI5CNQJiExCAHd01OSLZyNMbEVoOGuA0ENZnLsSYt
h/Tpp59+9tlnJL799tvnnHPO9ddff+yxxx5xxBFY82+//RZSadmyJZzUtWvXoUOHojZ16tQvv/xS
hSHPmDEDmoEJBg4cCPmFSiZNmnTdddc9/vjjUMUll1zywQcfJJYGF1IpFHjnnXdeddVVt956KyX0
798fuoLSll122f333z9aPpx36qmntm7dGp3XX3/90Ucfvffee8l75ZVXoh9qDwK01LNnz3322adP
nz4F84IALDtixIjVV199s802m2+++SDFyZMnUz4FHnzwwd98880TTzyBsOWWW3I5oRYLRsAIGIFE
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
yy67bOzYsWecccb999+veI4U9euvv3L84osvtttuu/vuu2/ttdd+++23Od1tt934+CSfo3z66afR
5AXwxJxzzjnLLLPMzjvv/Oabb2600UZLLLHEhRdeqNJQIIY28C3mH3/8MVQhgTaQHTlXjSxVHnDA
AWTfZJNNXn75ZeV6+OGHV1ppJZoEJW+99dZEZl8Xkdl5aQwfG0N5qaWWWnPNNWktaozjTjjhhLZt
23bv3v2GG25gXpSSv/rqK9VF7WPGjJGs40MPPbTWWmuhAyyK4b4PHTp08cUXB5kzzzxTD89WW211
00039ejRg2K5X4MGDWKUsOOOOwIsubKR/PDDD48//niSLrrooiuvvHKXXXahNO6vttfuv//+l1xy
CU1VjT4aASNQEAG5azyePDgcC+oHBRNbBgoZMoBD4IjHBquVfOIIG8eXROAnbOhOO+00Y8YMVqTC
FCIyrIa9ZgoR5mN+j49pQVotW7aE4bp27Uoumjp16tQwu4hMIXvssQeWd+DAgZBfuK8QFRtkMa+Y
+3feeQey3HvvvZdccsnLL7+8ffv2r7322l577TV48GCuF/K4++67Z86cedttt9GADTfc8IgjjiDj
cccd99NPP8Fkm266KdT43HPPUSC5QhUSoBbahpyrxoMPPvibb7554oknELbccksuihp33313LhMP
D5KGbsmefV1EJua95ZZbIJXHHnsM9hUmV1xxBacvvPAC7A79UB2/fYE7KYH2ow8+yAo0ACbedddd
hw8fzrBAkVzv448//tJLLz3zzDO33nqr4mnYyJEjR4wY7GthlAAAIABJREFUsfrqq2+22WbzzTcf
jIh7euedd5IrG0ngAliSpk2bxu2jittvvx0uB14i27Rpw8PJUEY1+mgEjEBBBGSKxWoYKwJZdMyf
17siq/ERWLAaAZljaQfXDOexvFjGFi1a4BjBWFhenKTY7YE82rVrx8wV9EPSYosthu1mRxD+U5cu
XWhVTJ9TXo+ywAILQGB8MTmk4iGRCybj5/pEHn300TguCNtss82qq66KPg4TNAabEklGnAx2HEGN
LDvhlBCJ+0KbsdRwLdmJOfvss4mElsjOKYH2YOhpGHJijThPd9xxx0cffURLVlhhBXiC5UAazKzd
QQcdRC4Y99BDD82UlRUS87IkhstLa9kcdeyxx+JEku+6667DVVq2Kvzzn/9kRIK39OCDD5IK4eGc
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
72W5Ih9PBF3ZrBXVufq5z30Ot/k/2uIOy1bLevzxx7Hayy+/fMcdd6iGNunfMf/881911VUocLPN
Nttvv/3o0znvvPMI/tc2gNXniarx7vXXX6+S6Pacc86pZptyWyGgAXtSurgfe+wx7UFL0Eo1Es+6
13qmx9bN/YEXhiM4MuJC9+WBlk499VTPrPVc1cqYhOdaTaLrRiX9XauRgyEfffTRG264oam3pbPI
gIp+pMEoa0DybFK9SSaZZPXVVz/88MMHpKBRkMmMM8446aST8p+4Nffcc48t5eKmDjrooK985Ss7
7LDD9NNP/9RTT91yyy1YarfddlthhRW8gtTf+BRTTHHsscdKMn78eNxDgb917rnnco+mmWYaxKbx
lFSzzDILIkQzPsKNyE996lPTTTedpzPDDDOcffbZSy21lHepL3zhC7pJeWPIqaTFfF7pWDou5l13
3aV6Xu31Ya611lrocK655sKXlA0ZojrCtddeu/TSS1M74YQT3I6nr5I777xz+KYl2xTaDQHGzXtP
zBxhAAU1xGq91jOJbQKI4kUAfOH8AnSCy62d1HehsKGnnHJKpD7ssMPOPPPMX/ziF7feeusBBxzA
+3E88cQT11xzTfZll112iUJXWWUVjmMkIXunXnfddZ36J5e5mhR23XVXR5bIG7EXVdnyRajVdMuI
wUzetZGToXu+kTdZ/tZCCy30pz/9yVWhSRcNNNzCpptuWu0sYun22GMPCScmZ4Dvvffec889txf8
l156qbMin4C/N25oMIVsa7Rj7+xnnXXWEksswY3gMTCdXtXXW2+9QIOl4yXQX2211W6++Wb5VKsH
Xo6IqyxddC9DjAl2X1FiHjlVPB4+GV8K5QQgHkEIHDXMocUus8wyEbPkkkvWg0afbyceTdIn8JOO
OuoodIWlXn/99fokPcVo1R50XJVchmisKK+88spbbLEF305jNiKoegrSkjlhs846a5AZZY/bH8Ef
ypuf5iHm6aefPvjgg6ftDBoedix5ptCGCBRKC8scpqClepYEY1xg4/wV3333XSZSz4Y3vt/+9rfn
n38+EPuETMMuFFbYW2fks/322+M2FoQJPvTQQ72HIiQvtoy1YYn55psvOvq84XLAI4mX1meeeebZ
Z59VmYceeojdj3ivM/iSrUcJ3oX9vVdaaSUvpxTqu2VQppdZfGakwZsyC+XdXMWik6d5Fw1A2AuF
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
3//+97vsssv//M//SLvyyis///zzRTkE/GFpc/9z+T/11FMiDz/88FNOOSWuHnbYYWeeeablz/l2
jsccc4xX3eeeey5WQ2+xVrKSj4oRFLHHHnsQjj766BNPPHGDDTZQ24022gjUIvGZ74rWXXdd8nLL
LQf8iHFaj7DIavj+979/7rnnRswFF1ywww47VK++8sorq6+++uc//3kLAz700EPVS/V34epPfvIT
nqWHcsghh4TyN7/5zcsuu4y3yqdEFd/97ndButJKK/3xj38MBRAttthiFKhFzJe+9CWLEDYh8lAb
7GMQWzhtQWwdb3DDTbeDfdcN89fkzBnRVBpezcjRhEASW/fTDHctiI0hEMLgdms0ktiI3Xfffbfd
dot+p2OPPZbWr371K5/IMJq8nO9973tzzDEHG81Q1vQZsulf+cpX8M1+++23/vrrv/7666xhMdA2
9l1ggQUw2X//938zrL/73e8MlmyxxRbyZ6l//OMff+ELX5BDqRSyQ6X3338/nR/84Acq9s477+jW
Mx6G4eaee26lFOUQbr31VplgQUesLNJK5+g2rpJVCRksu+yyOBXpIrYvf/nL+++/f+u1khUuUTrh
gw8+UD0CAgPFxhtvfN555+GGiy66SCQAkVkAiFA/+9nPRkxDhOlXA1fvnHPOiRhCTYcnlMSoBnir
e5Q0vIsHHngAj1566aUIkikMInz00Ue9mmy55ZazzTabVxYzMmxNSfj6178OZAFzux0T7dS8VEyt
qJXTYREQm2asMfPYoitSO1eTscZt3i+1W6seD8tTyEKHGIGWJg4McZ2Gqzh/dcGfX2AFeh1ji3rq
59HHyMOgbwuMu+++WzziQQkEroP3eoRkHgGqQzzl7rgvf/jDH7zpTzHFFN/61rcw0DXXXMMEH3nk
kcyQOmAd/0MjW3gxRgU4EDPOOCNTJRPOQXBAyXDcuHELLbTQpJNOig75iH/7299c8qUOPjNT4Kij
jrLkK6NWne3NWTz44IPNH5EVFyTqXDIMwYwPngevDvmpP74x9KViLdZKifohFV2T7YYbbojLRa6z
zjpqW65yfMkyL7MbGiJc9EMAIOKBjFS33HKLF4uiYHTT2B7P6TOf+cxPf/pT81885bjaEFuYeLfw
KNEVh1LvK1TpewQctXfffff8889/+umnMdx888138sknX3vttXL2OLzcUPvhD3+oJpG/wTYPMeTh
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
1lF2a0EN7UXOPFXV7XRqo86tttqqGjkYMjLYeOON9WhZj//KK69UxF133TXvvPMOYFlHH3307rvv
PlAZNqmeJ7vOOusM6sMdqLuY+Hy8n3l2hdU072jqE59z5pAItDMCSWxdTyfeZDuprWuYrYZFBvYp
nnrqqXfffXfrearYTjvtxEhVk9x3330M9OWXX16NHAwZ62y44Ya6s5Roa1BFLLroojfddNNglDUg
eTapno1yVl999cMPP3xACmrzTLRhIbxhR7WNdt7m1c7qJQITiUASWxeA8Yd3RCFhCPr3Un/DDTcs
sMACU0455frrr//GG2/InQ095ZRTopjDDjvszDPP5HvdeuutBxxwwBVXXOF44oknrrnmmjPOOOMu
u+zCWaS5yiqrPPfcc5GE/Morr6y77rpOl1tuuTJXk8Kuu+7quM022zzxxBObbbaZbFdccUVq1113
HcF2ozanfuutt8RgpiOPPBI5zTnnnEccccR55503zzzzLLTQQn/6059cFU4++eQvd4bjjjsuYsoR
Gm5h0003Vcq+++5755137rjjjk899dQee+xBZ2Jyhvbee+8999xzr7322i+99FKUCP/99tsPGjPN
NNNBBx1ER/waa6xx1llnLbHEEosvvvhtt902fvz4mWee2c5zgcarr766ySab0F9ttdVuvvlm+tXq
gXeDDTZwdaONNuLBuAqxY489Ngx9FDpaj9pwZwdERw9EvLSN1jvN+0oEJkCgGPSxLPjbG4149913
mcgnn3zy3nvvxU/nn38+pPoEy4svvvi5z31OWp2E2223HXMsOSu8//77Rz5218Rtb7/9NhN86KGH
vv/++wgJCzLWjz766HzzzYfqaE4zzTQ6KiOJnaafeeaZZ599VmUeeugh5ini2Sx8ydajBI7UZJNN
ttJKK+nhpDD//PNfddVVaFXmSII+ylQxfHbZZZfpUVxmmWXuueceFYsa8vlmm22266+//uGHH9bB
eM4550QRcQTIrLPOSuYvHnPMMcsvvzyU0BtqFDkxOZ922mlY7ZprrnEjk0466Q9/+EMZomfbf0MS
j6rM6aefLhItqbNCv/e975n+gNEfeOABRCwHV7GjtK+//vrZZ58tCQSq1QPvxRdffPvtt7tH7Ehf
gAYEQh6tRw3m17/+tYfr3j1Z70BvvvmmLcu1nNKKRuu9532NcQRyVuQENF9lsn680TOsSy211Kqr
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
r+qXKhWBDrmQWRFEZkgEEoFEoB6BJLZ6TDpsfRhT18LmFsvLgWuQ4GN6KOa76DdUjsgooiQpZfWU
pFQpFHotoib/XvVlG0kcQ7nXJH0toka/11uuVinuOo+JQCKQCPSKQHcHUa+qqVAsfkKRCCQCiUAi
0LYIdM92a9sqZsUSgUQgEUgEEoHWEUhiax2r1EwEEoFEIBEYAQgksY2Ah5RVTAQSgUQgEWgdgcZT
IVpPPxY0f/Ob37zyyitxp0cccQTh29/+9owzzjgW7j3vMRFIBBKBEYdATh7p5ZE999xzc8wxR0yG
tLAWwRSS1Vdf/aqrruolZV5OBBKBRCARGA4EsiuyF9Rnn332hRZaCKUJVB2tW/jjH/+4l2StXfa1
dWTbmnrHsiNPP/30888/T2gxyWhVg1vrIPztb3/z1TkoijBaYcn7SgQSAQgksfXeDHbaaafqSlpT
TTXV1772td6T9aBx7rnnHnvssXHx6quv/sY3vtGDYm30CSecMM0006y77rqLL774nHPOedNNN9Vq
jJDza6+99rHHHmu9sj6n+8UvfmEnvGqSrbba6owzzqjG9CR7fF/+8pdfe+21IvSk2Uo85B988MG7
7rpr3nnnbUU/dRKBRGDoEUhi6x3zDTbYoPhVdgUbP35872kaabDmBx98MPP61FNPNbreLO600047
6qij7rzzzkceeeSNN9448MAD11lnnZdffrlZmna9duqpp959992t145nBrR//vOfrSepap5++ule
AmaeeeYiVK/2T1500UVH7otF/2452dSTzwAACFBJREFUUyUCIwiBJLbeH9bkk08+bty4WDVDj9bW
W2/de5pGGroQ33rrrdlmm616kb3eZpttuGIrrLBCE8LDiPo/55lnHmnVxOyVn/3sZx988IHTG264
YYEFFrDtwPrrr4/zxBx99NEnnngiPp5pppk22mijjz76SOQdd9yxxhprKGjDDTf861//KmaVVVYx
gkgI2QSZhx9+eJNNNjn00EPnmmuub33rWw899JBazTrrrDg11CiImWWWWThM77//fkSWY31NDj/8
8FNOOSUUDjvssDPPPJPvZU+7Aw444IorrnBUzzXXXNNMnF122SXeHuprxUmVw3LLLffhhx+WsghP
PvnkUkstNe2003rVCNqrTwsoqRyBE8Krr77697///bvf/a67WGmllf74xz/K6oknnthss83UbcUV
V6wWUQ9aXPWk9thjD7L2sOeee6oDN7p4kCeffDIfUTjuuOOquaWcCCQCQ4SAfp4MvSJw8803TzbZ
ZB7Jsssu26tyc4Xddttthx12CB3GXZ5MJApZb731GMeGaRliao8//nj91RdffNEWcRjlL3/5y3bb
bYe66CAJPHfxxRfffvvtePSss84SueCCC3Iynn32WSb+oIMOEoPkOJGR5xe+8IVnnnmGR2jt/J13
3vmee+6Zf/75p5hiiksuuUR/KSpFY++99x41JIcOt912229+85uRNo4Na4Jy9t9//1DYfvvtcdvb
b7+92mqr4U4Z4hL1vO222x599NH55psPGjTra6XObh9EXLdSorSf//znL7jgghtvvFH34JFHHtkw
rVpZ3vPee+9V5xB0aUrL33Xv5513no5lVbrvvvs8Xzynm7QUQagHzUyiBx54AFBeMijoVabz5z//
+brrruPNI7zLL78c5tdff72XAN2V55xzTjXDlBOBRGAIEMjp/mxm74HJM2dkkkkm2XHHHXvX7osG
y84bM9mSieRDvP7669NPP31NBuEb0ayJd3r22WfzWlZddVUyCpE2lLllCEwkC84dYc3ffPNNLs7y
yy+vVzN06nMTwz3l8FloeOWVV37hhRfQrUgeFZN9//33M+u77rqrmEMOOUQkxi2jjz3VpKYUbCQJ
F0dBLm255ZZcQMJee+11zTXXrL322jX6Tr/4xS86Kjqc5qKAWd2mUy8Kl156qTeGcqkIIJUK06Dk
ELi5559/vjk4IrEp7wqZ8a74tRdddNHUU09d0rYCGjC9l3ypM/zqV7/617/+ZShUfcyblY9XhAsv
vBCPljxTSAQSgSFAILsiWwKZTWSC9WUxpi0laFkJLcW3BAaBGN933nmnPul0002HU01YqF6KKRgc
EX5exFPDGVw3p+UzOzH/+Mc/7D3Ngh9zzDF4hbWtmYhBPyYNEmaYYYZYPt++4Zy2yFkNJUEGRvhw
koAJ+E98nVBw7KkmRaEUUWIIGCFOzT79wx/+UL1Ebpik6OicDHmRRRapx62ntPw/NQda531MyzeN
/ls8V2U1OfcKGh3dy9gxqrHFFluABUreVCLzvffe2/tEXM1jIpAIDBkCSWytQm24SF8cc99qgtb0
jLqFItPMFscoWk1StIpjqrMVDCltvvnm+tbElykkBsnQGM9G8pq9XXgSSy+9NK8LeeC5fffdN4rQ
J0DgxLz77rsRoysyhPojl1EvIksdQS8ff6ioNayJmmOR0KFflIsQw4ROUSZijvj6WhX9qlCg0xO4
5JJLtpjWXeBpNBx3AT19pNVsi9wTaEWBoLPRfMuI0Sn60ksvyf/444+PzF3ihlb1U04EEoEhQCCJ
rVWQvb8bc2pVu2U9IzECU26uoJkLeAU/XXbZZTUZmAZpQMhwlHjOk1E0nxzgsLXWWos91Wco/sor
rzR7ApfUpHWq75Fbg5gNCJlOEv6NWSGRoS8Q6pPUx+iPNe8j+EkSta2W1bAmehFNgNTLx7MxLhV5
ukfkGrIuRHNGfF5mMM/4pcj6WikFT9fMHKGpRxEUJsLo7ovO2Pq0UUr1yDU0pyZuGQ/hYz20VYUi
NwStXA3B1xqy8p6Bw/j0xjt14Rr5c8uCeUZl3k1NwjxNBBKBwUMgx9gGD9uWcsY3pi8y0Iy73kVp
TGQwDSSmApYsjNnss88+JhAamqJpurkxLVdNX0Rmc889txjjc2YulCRVQSeniZ36J5dYYgmOzs9/
/nNXzewwB4TlXWyxxVBCVb+hzCsyxKjz0GQNo2umRVTVGtbEOJ+xQ718ejhZ/NBHQkbUYijRlA2V
x3M68UwvpFBfK6zm9hdeeGEeJ5e0FIo1Ubu0vqBHqw3TFuUioFUDYzDXMYvY1MQjMHxYFIrQELRy
NQTUZcKOavACdTx6OrxhbIc+uaoqdtJJJ9UkydNEIBEYbARySa3BRrj3/LlresaY6Rhsa5KAZ2AI
R5cdm1tV4y5wXDBEk45E+twmNFDGhMTgJx1uZgZWc2su40U+pUzMpqnXrK8J+45xy5hfJMHN5hBy
cZZZZhlDU1zJqkLDWrlB/lBNidw49YnZJXGpYdqaVE4hyVFTaA2S9Zr1oNXrIEhZFfA9UFNMqSH7
euWMSQQSgcFGIIltsBHO/HtEwOdliK2nIa4ek+WFRCARSASaIpBdkU3hyYuDiYBvCarO1mAWlXkn
AonAGEIgPbYx9LDzVhOBRCARGAsI5KzIsfCU8x4TgUQgERhDCCSxjaGHnbeaCCQCicBYQCCJbSw8
5bzHRCARSATGEAJJbGPoYeetJgKJQCIwFhBIYhsLTznvMRFIBBKBMYRAEtsYeth5q4lAIpAIjAUE
ktjGwlPOe0wEEoFEYAwhkMQ2hh523moikAgkAmMBgSS2sfCU8x4TgUQgERhDCPx/E3amh7kiAJgA
AAAASUVORK5CYII=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48668</attachid>
            <date>2010-02-12 15:07:20 -0800</date>
            <delta_ts>2010-03-16 16:24:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34907-20100212150719.patch</filename>
            <type>text/plain</type>
            <size>7572</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODY2ZjZkOC4uODM4NTJmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wMi0xMiAgQ2hyaXMgUm9nZXJz
ICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGF1ZGlvIGVuZ2luZTogYWRkIEZGVENvbnZvbHZlciBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MDcKKworICAg
ICAgICBObyB0ZXN0cyBzaW5jZSBubyBqYXZhc2NyaXB0IEFQSQorCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRlRD
b252b2x2ZXI6OkZGVENvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRlRDb252b2x2ZXI6
OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RkZUQ29udm9sdmVyOjpyZXNldCk6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkZUQ29udm9sdmVyOjpmZnRTaXplKToKKwogMjAxMC0wMi0wOSAgQ2hyaXMgUm9nZXJz
ICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMDZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRlRDb252b2x2ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGRlRDb252b2x2ZXI6OkZGVENvbnZvbHZlcihzaXplX3QgZmZ0U2l6ZSkKKyAg
ICA6IG1fZnJhbWUoZmZ0U2l6ZSkKKyAgICAsIG1fcmVhZFdyaXRlSW5kZXgoMCkKKyAgICAsIG1f
aW5wdXRCdWZmZXIoZmZ0U2l6ZSkgLy8gMm5kIGhhbGYgb2YgYnVmZmVyIGlzIGFsd2F5cyB6ZXJv
ZWQKKyAgICAsIG1fb3V0cHV0QnVmZmVyKGZmdFNpemUpCisgICAgLCBtX2xhc3RPdmVybGFwQnVm
ZmVyKGZmdFNpemUgLyAyKQoreworfQorCit2b2lkIEZGVENvbnZvbHZlcjo6cHJvY2VzcyhGRlRG
cmFtZSogZmZ0S2VybmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHNvdXJj
ZVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogZGVzdFAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIEZJWE1F
IDogbWFrZSBzbyB8ZnJhbWVzVG9Qcm9jZXNzfCBpcyBub3QgcmVxdWlyZWQgdG8gZml0IGV2ZW5s
eSBpbnRvIGZmdFNpemUvMgorCisgICAgLy8gQ29weSBzYW1wbGVzIHRvIGlucHV0IGJ1ZmZlciAo
bm90ZSBjb250cmFpbnQgYWJvdmUhKQorICAgIGZsb2F0KiBpbnB1dFAgPSBtX2lucHV0QnVmZmVy
OworICAgIG1lbWNweShpbnB1dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzb3VyY2VQLCBzaXplb2Yo
ZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIENvcHkgc2FtcGxlcyBmcm9tIG91
dHB1dCBidWZmZXIKKyAgICBmbG9hdCogb3V0cHV0UCA9IG1fb3V0cHV0QnVmZmVyOworICAgIG1l
bWNweShkZXN0UCwgb3V0cHV0UCArIG1fcmVhZFdyaXRlSW5kZXgsIHNpemVvZihmbG9hdCkgKiBm
cmFtZXNUb1Byb2Nlc3MpOworCisgICAgbV9yZWFkV3JpdGVJbmRleCArPSBmcmFtZXNUb1Byb2Nl
c3M7CisKKyAgICBzaXplX3QgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworCisgICAgLy8gQ2hl
Y2sgaWYgaXQncyB0aW1lIHRvIHBlcmZvcm0gdGhlIG5leHQgRkZUCisgICAgaWYgKG1fcmVhZFdy
aXRlSW5kZXggPT0gaGFsZlNpemUpIHsKKyAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBpcyBu
b3cgZmlsbGVkIChnZXQgZnJlcXVlbmN5LWRvbWFpbiB2ZXJzaW9uKQorICAgICAgICBtX2ZyYW1l
LmRvRkZUKG1faW5wdXRCdWZmZXIpOworICAgICAgICBtX2ZyYW1lLm11bHRpcGx5KCpmZnRLZXJu
ZWwpOworICAgICAgICBtX2ZyYW1lLmRvSW52ZXJzZUZGVChtX291dHB1dEJ1ZmZlcik7CisKKyAg
ICAgICAgLy8gT3ZlcmxhcC1hZGQgMXN0IGhhbGYgZnJvbSBwcmV2aW91cyB0aW1lCisgICAgICAg
IHZhZGQobV9vdXRwdXRCdWZmZXIsCisgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICBtX2xh
c3RPdmVybGFwQnVmZmVyLAorICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgbV9vdXRwdXRC
dWZmZXIsCisgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICBoYWxmU2l6ZSk7CisKKyAgICAg
ICAgLy8gRmluYWxseSwgc2F2ZSAybmQgaGFsZiBvZiByZXN1bHQKKyAgICAgICAgbWVtY3B5KChm
bG9hdCopbV9sYXN0T3ZlcmxhcEJ1ZmZlciwKKyAgICAgICAgICAgICAgIChmbG9hdCopbV9vdXRw
dXRCdWZmZXIgKyBoYWxmU2l6ZSwKKyAgICAgICAgICAgICAgIHNpemVvZihmbG9hdCkgKiBoYWxm
U2l6ZSk7CisKKyAgICAgICAgLy8gUmVzZXQgaW5kZXggYmFjayB0byBzdGFydCBmb3IgbmV4dCB0
aW1lCisgICAgICAgIG1fcmVhZFdyaXRlSW5kZXggPSAwOworICAgIH0KK30KKwordm9pZCBGRlRD
b252b2x2ZXI6OnJlc2V0KCkKK3sKKyAgICBtX2xhc3RPdmVybGFwQnVmZmVyLnplcm8oKTsKKyAg
ICBtX3JlYWRXcml0ZUluZGV4ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjBhNDg3MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRkZUQ29udm9sdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRkZUQ29udm9sdmVy
X2gKKyNkZWZpbmUgRkZUQ29udm9sdmVyX2gKKworI2luY2x1ZGUgIkF1ZGlvRmxvYXRBcnJheS5o
IgorI2luY2x1ZGUgIkZGVEZyYW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RkZUQ29udm9sdmVyIHsKK3B1YmxpYzoKKyAgICAvLyB8ZmZ0U2l6ZXwgbXVzdCBiZSBhIHBvd2Vy
IG9mIHR3bworICAgIEZGVENvbnZvbHZlcihzaXplX3QgZmZ0U2l6ZSk7CisKKyAgICAvLyBGb3Ig
bm93LCB3aXRoIG11bHRpcGxlIGNhbGxzIHRvIFByb2Nlc3MoKSwgfGZyYW1lc1RvUHJvY2Vzc3wg
TVVTVCBhZGQgdXAgRVhBQ1RMWSB0byB8ZmZ0U2l6ZXwgLyAyCisgICAgLy8KKyAgICAvLyBGSVhN
RTogTGF0ZXIsIHdlIGNhbiBkbyBtb3JlIHNvcGhpc3RpY2F0ZWQgYnVmZmVyaW5nIHRvIHJlbGF4
IHRoaXMgcmVxdWlyZW1lbnQuLi4KKyAgICAvLworICAgIC8vIFRoZSBpbnB1dCB0byBvdXRwdXQg
bGF0ZW5jeSBpcyBlcXVhbCB0byB8ZmZ0U2l6ZXwgLyAyCisgICAgLy8KKyAgICAvLyBQcm9jZXNz
aW5nIGluLXBsYWNlIGlzIGFsbG93ZWQuLi4KKyAgICB2b2lkIHByb2Nlc3MoRkZURnJhbWUqIGZm
dEtlcm5lbCwKKyAgICAgICAgICAgICAgICAgZmxvYXQqIHNvdXJjZVAsCisgICAgICAgICAgICAg
ICAgIGZsb2F0KiBkZXN0UCwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzaXplX3QgZmZ0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWUuZmZ0U2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgRkZURnJhbWUgbV9m
cmFtZTsKKworICAgIC8vIEJ1ZmZlciBpbnB1dCB1bnRpbCB3ZSBnZXQgZmZ0U2l6ZSAvIDIgc2Ft
cGxlcyB0aGVuIGRvIGFuIEZGVAorICAgIHNpemVfdCBtX3JlYWRXcml0ZUluZGV4OworICAgIEF1
ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVmZmVyOworCisgICAgLy8gU3RvcmVzIG91dHB1dCB3aGlj
aCB3ZSByZWFkIGEgbGl0dGxlIGF0IGEgdGltZQorICAgIEF1ZGlvRmxvYXRBcnJheSBtX291dHB1
dEJ1ZmZlcjsKKworICAgIC8vIFNhdmVzIHRoZSAybmQgaGFsZiBvZiB0aGUgRkZUIGJ1ZmZlciwg
c28gd2UgY2FuIGRvIGFuIG92ZXJsYXAtYWRkIHdpdGggdGhlIDFzdCBoYWxmIG9mIHRoZSBuZXh0
IG9uZQorICAgIEF1ZGlvRmxvYXRBcnJheSBtX2xhc3RPdmVybGFwQnVmZmVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRkZUQ29udm9sdmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50849</attachid>
            <date>2010-03-16 16:24:33 -0700</date>
            <delta_ts>2010-08-26 13:38:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34907-20100316162432.patch</filename>
            <type>text/plain</type>
            <size>7954</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWYyZDg3NC4uZThhZGY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wMy0xNiAgQ2hyaXMgUm9nZXJz
ICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGF1ZGlvIGVuZ2luZTogYWRkIEZGVENvbnZvbHZlciBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MDcKKworICAg
ICAgICBubyB0ZXN0cyBzaW5jZSBub3QgaG9va2VkIGludG8gamF2YXNjcmlwdCBBUEkgeWV0CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZGVENvbnZvbHZlcjo6RkZUQ29udm9sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZGVENvbnZvbHZlcjo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpGRlRDb252b2x2
ZXI6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRlRDb252b2x2ZXI6OmZmdFNpemUpOgorCiAyMDEwLTAz
LTA1ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCBidWlsZGZpeCBhZnRlciByNTU1OTMuIChUbyBmaXggUXQgLS1taW5pbWFsIGJ1aWxk
LikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xNmEwZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZGVENvbnZvbHZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZGVENvbnZvbHZlcjo6RkZUQ29udm9sdmVyKHNpemVfdCBmZnRTaXplKQorICAg
IDogbV9mcmFtZShmZnRTaXplKQorICAgICwgbV9yZWFkV3JpdGVJbmRleCgwKQorICAgICwgbV9p
bnB1dEJ1ZmZlcihmZnRTaXplKSAvLyAybmQgaGFsZiBvZiBidWZmZXIgaXMgYWx3YXlzIHplcm9l
ZAorICAgICwgbV9vdXRwdXRCdWZmZXIoZmZ0U2l6ZSkKKyAgICAsIG1fbGFzdE92ZXJsYXBCdWZm
ZXIoZmZ0U2l6ZSAvIDIpCit7Cit9CisKK3ZvaWQgRkZUQ29udm9sdmVyOjpwcm9jZXNzKEZGVEZy
YW1lKiBmZnRLZXJuZWwsIGZsb2F0KiBzb3VyY2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRklYTUU6IG1ha2Ugc28gfGZyYW1lc1RvUHJvY2Vzc3wg
aXMgbm90IHJlcXVpcmVkIHRvIGZpdCBldmVubHkgaW50byBmZnRTaXplLzIKKworICAgIC8vIENv
cHkgc2FtcGxlcyB0byBpbnB1dCBidWZmZXIgKG5vdGUgY29udHJhaW50IGFib3ZlISkKKyAgICBm
bG9hdCogaW5wdXRQID0gbV9pbnB1dEJ1ZmZlcjsKKworICAgIC8vIFNhbml0eSBjaGVjaworICAg
IGJvb2wgaXNDb3B5R29vZDEgPSBzb3VyY2VQICYmIGlucHV0UCAmJiBtX3JlYWRXcml0ZUluZGV4
ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IG1faW5wdXRCdWZmZXIuc2l6ZSgpOworICAgIEFTU0VSVChp
c0NvcHlHb29kMSk7CisgICAgaWYgKCFpc0NvcHlHb29kMSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1lbWNweShpbnB1dFAgKyBtX3JlYWRXcml0ZUluZGV4LCBzb3VyY2VQLCBzaXplb2Yo
ZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIENvcHkgc2FtcGxlcyBmcm9tIG91
dHB1dCBidWZmZXIKKyAgICBmbG9hdCogb3V0cHV0UCA9IG1fb3V0cHV0QnVmZmVyOworCisgICAg
Ly8gU2FuaXR5IGNoZWNrCisgICAgYm9vbCBpc0NvcHlHb29kMiA9IGRlc3RQICYmIG91dHB1dFAg
JiYgbV9yZWFkV3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBtX291dHB1dEJ1ZmZlci5z
aXplKCk7CisgICAgQVNTRVJUKGlzQ29weUdvb2QyKTsKKyAgICBpZiAoIWlzQ29weUdvb2QyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtZW1jcHkoZGVzdFAsIG91dHB1dFAgKyBtX3JlYWRXcml0
ZUluZGV4LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBtX3JlYWRXcml0
ZUluZGV4ICs9IGZyYW1lc1RvUHJvY2VzczsKKworCisgICAgLy8gQ2hlY2sgaWYgaXQncyB0aW1l
IHRvIHBlcmZvcm0gdGhlIG5leHQgRkZUCisgICAgc2l6ZV90IGhhbGZTaXplID0gZmZ0U2l6ZSgp
IC8gMjsKKyAgICBpZiAobV9yZWFkV3JpdGVJbmRleCA9PSBoYWxmU2l6ZSkgeworICAgICAgICAv
LyBUaGUgaW5wdXQgYnVmZmVyIGlzIG5vdyBmaWxsZWQgKGdldCBmcmVxdWVuY3ktZG9tYWluIHZl
cnNpb24pCisgICAgICAgIG1fZnJhbWUuZG9GRlQobV9pbnB1dEJ1ZmZlcik7CisgICAgICAgIG1f
ZnJhbWUubXVsdGlwbHkoKmZmdEtlcm5lbCk7CisgICAgICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZU
KG1fb3V0cHV0QnVmZmVyKTsKKworICAgICAgICAvLyBPdmVybGFwLWFkZCAxc3QgaGFsZiBmcm9t
IHByZXZpb3VzIHRpbWUKKyAgICAgICAgdmFkZChtX291dHB1dEJ1ZmZlciwgMSwgbV9sYXN0T3Zl
cmxhcEJ1ZmZlciwgMSwgbV9vdXRwdXRCdWZmZXIsIDEsIGhhbGZTaXplKTsKKworICAgICAgICAv
LyBGaW5hbGx5LCBzYXZlIDJuZCBoYWxmIG9mIHJlc3VsdAorICAgICAgICBib29sIGlzQ29weUdv
b2QzID0gbV9vdXRwdXRCdWZmZXIuc2l6ZSgpID09IDIgKiBoYWxmU2l6ZSAmJiBtX2xhc3RPdmVy
bGFwQnVmZmVyLnNpemUoKSA9PSBoYWxmU2l6ZTsKKyAgICAgICAgQVNTRVJUKGlzQ29weUdvb2Qz
KTsKKyAgICAgICAgaWYgKCFpc0NvcHlHb29kMykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIG1lbWNweShtX2xhc3RPdmVybGFwQnVmZmVyLmRhdGEoKSwgbV9vdXRwdXRC
dWZmZXIuZGF0YSgpICsgaGFsZlNpemUsIHNpemVvZihmbG9hdCkgKiBoYWxmU2l6ZSk7CisKKyAg
ICAgICAgLy8gUmVzZXQgaW5kZXggYmFjayB0byBzdGFydCBmb3IgbmV4dCB0aW1lCisgICAgICAg
IG1fcmVhZFdyaXRlSW5kZXggPSAwOworICAgIH0KK30KKwordm9pZCBGRlRDb252b2x2ZXI6OnJl
c2V0KCkKK3sKKyAgICBtX2xhc3RPdmVybGFwQnVmZmVyLnplcm8oKTsKKyAgICBtX3JlYWRXcml0
ZUluZGV4ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRkZUQ29udm9sdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVl
YzdjMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9s
dmVyLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRkZUQ29udm9sdmVyX2gKKyNkZWZpbmUg
RkZUQ29udm9sdmVyX2gKKworI2luY2x1ZGUgIkF1ZGlvRmxvYXRBcnJheS5oIgorI2luY2x1ZGUg
IkZGVEZyYW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkZUQ29udm9sdmVy
IHsKK3B1YmxpYzoKKyAgICAvLyBmZnRTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28KKyAgICBG
RlRDb252b2x2ZXIoc2l6ZV90IGZmdFNpemUpOworCisgICAgLy8gRm9yIG5vdywgd2l0aCBtdWx0
aXBsZSBjYWxscyB0byBQcm9jZXNzKCksIGZyYW1lc1RvUHJvY2VzcyBNVVNUIGFkZCB1cCBFWEFD
VExZIHRvIGZmdFNpemUgLyAyCisgICAgLy8KKyAgICAvLyBGSVhNRTogTGF0ZXIsIHdlIGNhbiBk
byBtb3JlIHNvcGhpc3RpY2F0ZWQgYnVmZmVyaW5nIHRvIHJlbGF4IHRoaXMgcmVxdWlyZW1lbnQu
Li4KKyAgICAvLworICAgIC8vIFRoZSBpbnB1dCB0byBvdXRwdXQgbGF0ZW5jeSBpcyBlcXVhbCB0
byBmZnRTaXplIC8gMgorICAgIC8vCisgICAgLy8gUHJvY2Vzc2luZyBpbi1wbGFjZSBpcyBhbGxv
d2VkLi4uCisgICAgdm9pZCBwcm9jZXNzKEZGVEZyYW1lKiBmZnRLZXJuZWwsIGZsb2F0KiBzb3Vy
Y2VQLCBmbG9hdCogZGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgdm9pZCBy
ZXNldCgpOworCisgICAgc2l6ZV90IGZmdFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lLmZm
dFNpemUoKTsgfQorCitwcml2YXRlOgorICAgIEZGVEZyYW1lIG1fZnJhbWU7CisKKyAgICAvLyBC
dWZmZXIgaW5wdXQgdW50aWwgd2UgZ2V0IGZmdFNpemUgLyAyIHNhbXBsZXMgdGhlbiBkbyBhbiBG
RlQKKyAgICBzaXplX3QgbV9yZWFkV3JpdGVJbmRleDsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9p
bnB1dEJ1ZmZlcjsKKworICAgIC8vIFN0b3JlcyBvdXRwdXQgd2hpY2ggd2UgcmVhZCBhIGxpdHRs
ZSBhdCBhIHRpbWUKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9vdXRwdXRCdWZmZXI7CisKKyAgICAv
LyBTYXZlcyB0aGUgMm5kIGhhbGYgb2YgdGhlIEZGVCBidWZmZXIsIHNvIHdlIGNhbiBkbyBhbiBv
dmVybGFwLWFkZCB3aXRoIHRoZSAxc3QgaGFsZiBvZiB0aGUgbmV4dCBvbmUKKyAgICBBdWRpb0Zs
b2F0QXJyYXkgbV9sYXN0T3ZlcmxhcEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEZGVENvbnZvbHZlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65611</attachid>
            <date>2010-08-26 13:38:08 -0700</date>
            <delta_ts>2010-08-31 14:02:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34907-20100826133807.patch</filename>
            <type>text/plain</type>
            <size>8193</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDgtMjYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBGRlRDb252b2x2ZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTA3CisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IHNpbmNlIGF1ZGlvIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RkZUQ29udm9sdmVyOjpGRlRDb252b2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkZUQ29udm9sdmVyOjpwcm9jZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZGVENvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L0ZGVENvbnZvbHZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZGVENvbnZvbHZlcjo6
ZmZ0U2l6ZSk6CisKIDIwMTAtMDgtMjYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRDb252b2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9sdmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiRkZUQ29udm9sdmVyLmgiCisKKyNpbmNsdWRlICJBY2NlbGVyYXRlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkZUQ29udm9sdmVyOjpGRlRDb252b2x2ZXIoc2l6
ZV90IGZmdFNpemUpCisgICAgOiBtX2ZyYW1lKGZmdFNpemUpCisgICAgLCBtX3JlYWRXcml0ZUlu
ZGV4KDApCisgICAgLCBtX2lucHV0QnVmZmVyKGZmdFNpemUpIC8vIDJuZCBoYWxmIG9mIGJ1ZmZl
ciBpcyBhbHdheXMgemVyb2VkCisgICAgLCBtX291dHB1dEJ1ZmZlcihmZnRTaXplKQorICAgICwg
bV9sYXN0T3ZlcmxhcEJ1ZmZlcihmZnRTaXplIC8gMikKK3sKK30KKwordm9pZCBGRlRDb252b2x2
ZXI6OnByb2Nlc3MoRkZURnJhbWUqIGZmdEtlcm5lbCwgZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBk
ZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBGSVhNRTogbWFrZSBzbyBm
cmFtZXNUb1Byb2Nlc3MgaXMgbm90IHJlcXVpcmVkIHRvIGZpdCBldmVubHkgaW50byBmZnRTaXpl
LzIKKworICAgIC8vIENvcHkgc2FtcGxlcyB0byBpbnB1dCBidWZmZXIgKG5vdGUgY29udHJhaW50
IGFib3ZlISkKKyAgICBmbG9hdCogaW5wdXRQID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCk7CisKKyAg
ICAvLyBTYW5pdHkgY2hlY2sKKyAgICBib29sIGlzQ29weUdvb2QxID0gc291cmNlUCAmJiBpbnB1
dFAgJiYgbV9yZWFkV3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBtX2lucHV0QnVmZmVy
LnNpemUoKTsKKyAgICBBU1NFUlQoaXNDb3B5R29vZDEpOworICAgIGlmICghaXNDb3B5R29vZDEp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtZW1jcHkoaW5wdXRQICsgbV9yZWFkV3JpdGVJ
bmRleCwgc291cmNlUCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICAv
LyBDb3B5IHNhbXBsZXMgZnJvbSBvdXRwdXQgYnVmZmVyCisgICAgZmxvYXQqIG91dHB1dFAgPSBt
X291dHB1dEJ1ZmZlci5kYXRhKCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2sKKyAgICBib29sIGlz
Q29weUdvb2QyID0gZGVzdFAgJiYgb3V0cHV0UCAmJiBtX3JlYWRXcml0ZUluZGV4ICsgZnJhbWVz
VG9Qcm9jZXNzIDw9IG1fb3V0cHV0QnVmZmVyLnNpemUoKTsKKyAgICBBU1NFUlQoaXNDb3B5R29v
ZDIpOworICAgIGlmICghaXNDb3B5R29vZDIpCisgICAgICAgIHJldHVybjsKKworICAgIG1lbWNw
eShkZXN0UCwgb3V0cHV0UCArIG1fcmVhZFdyaXRlSW5kZXgsIHNpemVvZihmbG9hdCkgKiBmcmFt
ZXNUb1Byb2Nlc3MpOworICAgIG1fcmVhZFdyaXRlSW5kZXggKz0gZnJhbWVzVG9Qcm9jZXNzOwor
CisKKyAgICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gcGVyZm9ybSB0aGUgbmV4dCBGRlQKKyAg
ICBzaXplX3QgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworICAgIGlmIChtX3JlYWRXcml0ZUlu
ZGV4ID09IGhhbGZTaXplKSB7CisgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgbm93IGZp
bGxlZCAoZ2V0IGZyZXF1ZW5jeS1kb21haW4gdmVyc2lvbikKKyAgICAgICAgbV9mcmFtZS5kb0ZG
VChtX2lucHV0QnVmZmVyLmRhdGEoKSk7CisgICAgICAgIG1fZnJhbWUubXVsdGlwbHkoKmZmdEtl
cm5lbCk7CisgICAgICAgIG1fZnJhbWUuZG9JbnZlcnNlRkZUKG1fb3V0cHV0QnVmZmVyLmRhdGEo
KSk7CisKKyAgICAgICAgLy8gT3ZlcmxhcC1hZGQgMXN0IGhhbGYgZnJvbSBwcmV2aW91cyB0aW1l
CisgICAgICAgIHZhZGQobV9vdXRwdXRCdWZmZXIuZGF0YSgpLCAxLCBtX2xhc3RPdmVybGFwQnVm
ZmVyLmRhdGEoKSwgMSwgbV9vdXRwdXRCdWZmZXIuZGF0YSgpLCAxLCBoYWxmU2l6ZSk7CisKKyAg
ICAgICAgLy8gRmluYWxseSwgc2F2ZSAybmQgaGFsZiBvZiByZXN1bHQKKyAgICAgICAgYm9vbCBp
c0NvcHlHb29kMyA9IG1fb3V0cHV0QnVmZmVyLnNpemUoKSA9PSAyICogaGFsZlNpemUgJiYgbV9s
YXN0T3ZlcmxhcEJ1ZmZlci5zaXplKCkgPT0gaGFsZlNpemU7CisgICAgICAgIEFTU0VSVChpc0Nv
cHlHb29kMyk7CisgICAgICAgIGlmICghaXNDb3B5R29vZDMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBtZW1jcHkobV9sYXN0T3ZlcmxhcEJ1ZmZlci5kYXRhKCksIG1f
b3V0cHV0QnVmZmVyLmRhdGEoKSArIGhhbGZTaXplLCBzaXplb2YoZmxvYXQpICogaGFsZlNpemUp
OworCisgICAgICAgIC8vIFJlc2V0IGluZGV4IGJhY2sgdG8gc3RhcnQgZm9yIG5leHQgdGltZQor
ICAgICAgICBtX3JlYWRXcml0ZUluZGV4ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgRkZUQ29udm9s
dmVyOjpyZXNldCgpCit7CisgICAgbV9sYXN0T3ZlcmxhcEJ1ZmZlci56ZXJvKCk7CisgICAgbV9y
ZWFkV3JpdGVJbmRleCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVENv
bnZvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZUQ29udm9s
dmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGRlRDb252b2x2ZXJf
aAorI2RlZmluZSBGRlRDb252b2x2ZXJfaAorCisjaW5jbHVkZSAiQXVkaW9GbG9hdEFycmF5Lmgi
CisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
RlRDb252b2x2ZXIgeworcHVibGljOgorICAgIC8vIGZmdFNpemUgbXVzdCBiZSBhIHBvd2VyIG9m
IHR3bworICAgIEZGVENvbnZvbHZlcihzaXplX3QgZmZ0U2l6ZSk7CisKKyAgICAvLyBGb3Igbm93
LCB3aXRoIG11bHRpcGxlIGNhbGxzIHRvIFByb2Nlc3MoKSwgZnJhbWVzVG9Qcm9jZXNzIE1VU1Qg
YWRkIHVwIEVYQUNUTFkgdG8gZmZ0U2l6ZSAvIDIKKyAgICAvLworICAgIC8vIEZJWE1FOiBMYXRl
ciwgd2UgY2FuIGRvIG1vcmUgc29waGlzdGljYXRlZCBidWZmZXJpbmcgdG8gcmVsYXggdGhpcyBy
ZXF1aXJlbWVudC4uLgorICAgIC8vCisgICAgLy8gVGhlIGlucHV0IHRvIG91dHB1dCBsYXRlbmN5
IGlzIGVxdWFsIHRvIGZmdFNpemUgLyAyCisgICAgLy8KKyAgICAvLyBQcm9jZXNzaW5nIGluLXBs
YWNlIGlzIGFsbG93ZWQuLi4KKyAgICB2b2lkIHByb2Nlc3MoRkZURnJhbWUqIGZmdEtlcm5lbCwg
ZmxvYXQqIHNvdXJjZVAsIGZsb2F0KiBkZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisK
KyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzaXplX3QgZmZ0U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWUuZmZ0U2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgRkZURnJhbWUgbV9mcmFtZTsK
KworICAgIC8vIEJ1ZmZlciBpbnB1dCB1bnRpbCB3ZSBnZXQgZmZ0U2l6ZSAvIDIgc2FtcGxlcyB0
aGVuIGRvIGFuIEZGVAorICAgIHNpemVfdCBtX3JlYWRXcml0ZUluZGV4OworICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2lucHV0QnVmZmVyOworCisgICAgLy8gU3RvcmVzIG91dHB1dCB3aGljaCB3ZSBy
ZWFkIGEgbGl0dGxlIGF0IGEgdGltZQorICAgIEF1ZGlvRmxvYXRBcnJheSBtX291dHB1dEJ1ZmZl
cjsKKworICAgIC8vIFNhdmVzIHRoZSAybmQgaGFsZiBvZiB0aGUgRkZUIGJ1ZmZlciwgc28gd2Ug
Y2FuIGRvIGFuIG92ZXJsYXAtYWRkIHdpdGggdGhlIDFzdCBoYWxmIG9mIHRoZSBuZXh0IG9uZQor
ICAgIEF1ZGlvRmxvYXRBcnJheSBtX2xhc3RPdmVybGFwQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRkZUQ29udm9sdmVyX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>