<?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>74842</bug_id>
          
          <creation_ts>2011-12-19 00:10:33 -0800</creation_ts>
          <short_desc>SSE optimization for FFTFrameFFMPEG.cpp::multiply()</short_desc>
          <delta_ts>2012-01-05 17:27:21 -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>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hclam</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523778</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-19 00:10:33 -0800</bug_when>
    <thetext>We will get a better performance with SSE2 optimization due to it is a vector related multiply in FFTFrameFFMPEG.cpp::multiply().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523782</commentid>
    <comment_count>1</comment_count>
      <attachid>119829</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-19 00:18:42 -0800</bug_when>
    <thetext>Created attachment 119829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523979</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-19 10:31:48 -0800</bug_when>
    <thetext>Thanks for doing this.  You got to it first before I could recommend it to you!

One thing I would suggest is to take this code out of FFTFrameFFMPEG and move it to a place where other FFTFrame implementations could potentially use it (or other code needing complex multiply).  Maybe it makes sense to make a function for this in VectorMath?  In FFTFrameMac.cpp there&apos;s a call to a vecLib function called vDSP_zvmul(), so zvmul()??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524485</commentid>
    <comment_count>3</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-20 01:44:55 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Thanks for doing this.  You got to it first before I could recommend it to you!
&gt; 
&gt; One thing I would suggest is to take this code out of FFTFrameFFMPEG and move it to a place where other FFTFrame implementations could potentially use it (or other code needing complex multiply).  Maybe it makes sense to make a function for this in VectorMath?  In FFTFrameMac.cpp there&apos;s a call to a vecLib function called vDSP_zvmul(), so zvmul()??

Hi Roger,

I agree that we should add a zvmul into VectorMath, and in my mind it`s also very meaning to add more basic vector calculation functions such as vDSP_deq22D in Biquad.cpp to VectorMath and thus we can get more benefits from SSE optimization in audio processing. If so I am very glad to contribute more such optimization codes to enlarge the VectorMath.

For the zvmul, I would like to add two with different types:
//1. To be consistent with vDSP_zvmul
void zvmul(const float* source1P, int sourceStride1, const float* source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess, int conjugate);
//2. Used in FFTFrame, avoiding splitting and merging of complex_data
void zvmul(const float* real1P, const float* imag1P, const float* real2P, const* imag2P, float* realDestP, float* imagDestP, size_t framesToProcess); 

They have different implementations of SSE optimization.
If the two function`s definitions are OK, patch coming soon.
Thanks for any comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524668</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-20 10:28:41 -0800</bug_when>
    <thetext>great to hear about the Biquad optimization!

I&apos;ll have to look more closely, but I&apos;m pretty sure we only need the zvmul() version which operates on non-interleaved (planar) complex data like we use in FFTFrameFFMPEG.  I *thought* that was the same as the one used in FFTFrameMac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525027</commentid>
    <comment_count>5</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-20 18:14:37 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; great to hear about the Biquad optimization!
&gt; 
Now I am doing some work on the Biquad optimization, I will submit another patch when finishing it.
&gt; I&apos;ll have to look more closely, but I&apos;m pretty sure we only need the zvmul() version which operates on non-interleaved (planar) complex data like we use in FFTFrameFFMPEG.  I *thought* that was the same as the one used in FFTFrameMac.

Yes you are right , sorry for misunderstanding the vDSP_zvmul, which surely uses non-interleaved complex data. I`ll update the patch soon.

BTW, do you think it makes sense to add two functions like vDSP_ctoz and vDSP_ztoc in VectorMath? Maybe we can improve the performance of packing and unpacking complex data after some optimization on them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525037</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-20 18:33:26 -0800</bug_when>
    <thetext>vDSP_ctoz and vDSP_ztoc might be useful.  But the FFT algorithm itself is *really* the hotspot.  Do you think it would make sense to create an FFTFrameIPP which calls into an appropriate Intel IPP library FFT function?  We already have one for MKL (FFTFrameMKL), but I&apos;ve since learned that the IPP library may be more appropriate for media/audio applications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525050</commentid>
    <comment_count>7</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-20 19:05:59 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; vDSP_ctoz and vDSP_ztoc might be useful.  But the FFT algorithm itself is *really* the hotspot.  Do you think it would make sense to create an FFTFrameIPP which calls into an appropriate Intel IPP library FFT function?  We already have one for MKL (FFTFrameMKL), but I&apos;ve since learned that the IPP library may be more appropriate for media/audio applications.

Agree, IPP is more suitable than MKL for FFT in audio processing and it makes sense to leverage the IPP to do FFT. So I could have a try to add an FFTFrameIPP and enable the library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525096</commentid>
    <comment_count>8</comment_count>
      <attachid>120142</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-20 21:52:57 -0800</bug_when>
    <thetext>Created attachment 120142
Patch

Patch updated as comments.
Add zvmul in VectorMath and use zvmul and vsmul in multiply().
Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525745</commentid>
    <comment_count>9</comment_count>
      <attachid>120142</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-21 15:44:28 -0800</bug_when>
    <thetext>Comment on attachment 120142
Patch

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

Looks good overall, with a few comments:

&gt; Source/WebCore/platform/audio/VectorMath.cpp:301
&gt; +void zvmul(const float* real1P, const float* imag1P, const float* real2P, const float* imag2P, float* realDestP, float* imagDestP, size_t framesToProcess)

We need to provide a version of this function in the DARWIN section using vDSP_zvmul.  It shouldn&apos;t be too hard.  You can look in FFTFrameMac.cpp for an example usage.

It will involve using three local variables of type &quot;DSPSplitComplex&quot;

/* Complex-split vector multiply, single-precision.*/
/*
 *  vDSP_zvmul()
 *  
 *  Availability:
 *    Mac OS X:         in version 10.0 and later in vecLib.framework
 *    CarbonLib:        not in Carbon, but vecLib is compatible with CarbonLib
 *    Non-Carbon CFM:   in vecLib 1.0 and later
 */
extern void vDSP_zvmul(
	const DSPSplitComplex *__vDSP_input1, vDSP_Stride __vDSP_stride1,
	const DSPSplitComplex *__vDSP_input2, vDSP_Stride __vDSP_stride2,
	const DSPSplitComplex *__vDSP_result, vDSP_Stride __vDSP_strideResult,
	vDSP_Length __vDSP_size,
	int __vDSP_conjugate)
		AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER;

&gt; Source/WebCore/platform/audio/VectorMath.cpp:305
&gt; +    // Only handle the very common case that all addresses are 16-byte aligned.

I would elaborate on this comment a little by saying something like:

// Only use the SSE optimization in the very common case that all addresses are 16-byte aligned.
// Otherwise, fall through to the scalar code below.

As the comment is right now, it seems to imply that we don&apos;t handle &quot;at all&quot; the non-aligned case.

&gt; Source/WebCore/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp:-138
&gt; -    }

I would restore the comment:
// Multiply the packed DC/nyquist component</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525930</commentid>
    <comment_count>10</comment_count>
      <attachid>120259</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-21 19:23:39 -0800</bug_when>
    <thetext>Created attachment 120259
Patch

Update the patch as comments.
Change the FFTFrameMac::multiply() to the same way of FFTFrameFFMPEG, due to the real1P, imag1P, real2P and imag2P are all 16-byte aligned and it`s better to start process from 0 of buffer than 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525951</commentid>
    <comment_count>11</comment_count>
      <attachid>120259</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-21 20:35:52 -0800</bug_when>
    <thetext>Comment on attachment 120259
Patch

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

&gt; Source/WebCore/platform/audio/VectorMath.cpp:79
&gt; +#else

You need to invoke ::zvmul exactly with the same arguments as vDSP_zvmul()

and move lines 77:79 down to just after line 88

In other words ::zvmul() also needs to take DSPSplitComplex arguments (as opposed to our new VectorMath::zvmul() function...)

&gt; Source/WebCore/platform/audio/ffmpeg/FFTFrameFFMPEG.cpp:122
&gt;      float scale = 0.5f;

Please move lines 121:122 to just before first use, which is now just before line 134

&gt; Source/WebCore/platform/audio/mac/FFTFrameMac.cpp:113
&gt;      float scale = 0.5f;

Please move lines 112:113 to just right before first use, which is now just before line 126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525968</commentid>
    <comment_count>12</comment_count>
      <attachid>120259</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-21 21:04:35 -0800</bug_when>
    <thetext>Comment on attachment 120259
Patch

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

&gt;&gt; Source/WebCore/platform/audio/VectorMath.cpp:79
&gt;&gt; +#else
&gt; 
&gt; You need to invoke ::zvmul exactly with the same arguments as vDSP_zvmul()
&gt; 
&gt; and move lines 77:79 down to just after line 88
&gt; 
&gt; In other words ::zvmul() also needs to take DSPSplitComplex arguments (as opposed to our new VectorMath::zvmul() function...)

Not quite understand it, do you mean that the ::zvmul should be re-defined as VDSP_zvmul and import DSPSplitComplex into non-OS(DARWIN)?
or
add another zvmul definition below in VectorMath.h?
#if OS(DARWIN)
void vDSP_zvmul(const DSPSplitComplex *, vDSP_Stride ,const DSPSplitComplex *, vDSP_Stride, const DSPSplitComplex *, vDSP_Stride, vDSP_Length , int );
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525976</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-21 21:29:00 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Not quite understand it, do you mean that the ::zvmul should be re-defined as VDSP_zvmul and import DSPSplitComplex into non-OS(DARWIN)?
&gt; or
&gt; add another zvmul definition below in VectorMath.h?
&gt; #if OS(DARWIN)
&gt; void vDSP_zvmul(const DSPSplitComplex *, vDSP_Stride ,const DSPSplitComplex *, vDSP_Stride, const DSPSplitComplex *, vDSP_Stride, vDSP_Length , int );
&gt; #endif

It&apos;s easier if I just show you how the function should be defined:

void zvmul(const float* real1P, const float* imag1P, const float* real2P, const float* imag2P, float* realDestP, float* imagDestP, size_t framesToProcess)
{
    DSPSplitComplex sc1;
    DSPSplitComplex sc2;
    DSPSplitComplex dest;
    sc1.realp = real1P;
    sc1.imagp = imag1P;
    sc2.realp = real2P;
    sc2.imagp = imag2P;
    dest.realp = realDestP;
    dest.imagp = imagDestP;
#if defined(__ppc__) || defined(__i386__)
    ::zvmul(&amp;sc1, 1, &amp;sc2, 1, &amp;dest, 1, framesToProcess, 1);
#else
    vDSP_zvmul(&amp;sc1, 1, &amp;sc2, 1, &amp;dest, 1, framesToProcess, 1);
#endif
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525979</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-21 21:30:53 -0800</bug_when>
    <thetext>It&apos;s too bad we have to do this.  It&apos;s really just a hack/work-around for the way some macros are defined in &lt;Accelerate/Accelerat.h&gt;  The reason is explained in this comment in VectorMath.cpp:

// On the Mac we use the highly optimized versions in Accelerate.framework
// In 32-bit mode (__ppc__ or __i386__) &lt;Accelerate/Accelerate.h&gt; includes &lt;vecLib/vDSP_translate.h&gt; which defines macros of the same name as
// our namespaced function names, so we must handle this case differently. Other architectures (64bit, ARM, etc.) do not include this header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525994</commentid>
    <comment_count>15</comment_count>
      <attachid>120270</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-21 21:50:29 -0800</bug_when>
    <thetext>Created attachment 120270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525995</commentid>
    <comment_count>16</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-21 21:51:38 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; It&apos;s too bad we have to do this.  It&apos;s really just a hack/work-around for the way some macros are defined in &lt;Accelerate/Accelerat.h&gt;  The reason is explained in this comment in VectorMath.cpp:
&gt; 
&gt; // On the Mac we use the highly optimized versions in Accelerate.framework
&gt; // In 32-bit mode (__ppc__ or __i386__) &lt;Accelerate/Accelerate.h&gt; includes &lt;vecLib/vDSP_translate.h&gt; which defines macros of the same name as
&gt; // our namespaced function names, so we must handle this case differently. Other architectures (64bit, ARM, etc.) do not include this header file.

Got it. Thanks for explanation.
Patch is updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526082</commentid>
    <comment_count>17</comment_count>
      <attachid>120270</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 00:39:14 -0800</bug_when>
    <thetext>Comment on attachment 120270
Patch

Attachment 120270 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10986368

New failing tests:
fast/workers/storage/use-same-database-in-page-and-workers.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526106</commentid>
    <comment_count>18</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-22 02:11:10 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 120270 [details])
&gt; Attachment 120270 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/10986368
&gt; 
&gt; New failing tests:
&gt; fast/workers/storage/use-same-database-in-page-and-workers.html

Hi Roger,

My patch is failed to pass the tests in buildbots, but I am confused that these tests seems not have not too much relation with the change from my patch. I am not familiar with the chromium test framework so could you help me to check what`s the root cause of the building failure?
 
Thank you very much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526410</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-22 11:50:51 -0800</bug_when>
    <thetext>It&apos;s unlikely that it&apos;s related to your patch, and is probably some other recent change.  You can try re-uploading your patch to have it try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529220</commentid>
    <comment_count>20</comment_count>
      <attachid>121031</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-03 18:06:47 -0800</bug_when>
    <thetext>Created attachment 121031
Patch

Hi Roger,
  I re-upload the patch, please help to submit to commit-queue again, thank you~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529905</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 17:40:39 -0800</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529906</commentid>
    <comment_count>22</comment_count>
      <attachid>121031</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 17:42:22 -0800</bug_when>
    <thetext>Comment on attachment 121031
Patch

rs=me based on Chris&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530199</commentid>
    <comment_count>23</comment_count>
      <attachid>121031</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 04:54:20 -0800</bug_when>
    <thetext>Comment on attachment 121031
Patch

Clearing flags on attachment: 121031

Committed r104143: &lt;http://trac.webkit.org/changeset/104143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530200</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 04:54:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530215</commentid>
    <comment_count>25</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-01-05 05:27:37 -0800</bug_when>
    <thetext>Looks like this patch breaks the tree. See the following compilation error:

/Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:80:15:{80:17-80:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
     sc1.realp = real1P;
               ^ ~~~~~~
/Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:81:15:{81:17-81:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
     sc1.imagp = imag1P;
               ^ ~~~~~~
/Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:82:15:{82:17-82:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
     sc2.realp = real2P;
               ^ ~~~~~~
/Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:83:15:{83:17-83:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
     sc2.imagp = imag2P;
               ^ ~~~~~~

Any fix for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530382</commentid>
    <comment_count>26</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-05 10:18:10 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Looks like this patch breaks the tree. See the following compilation error:
&gt; 
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:80:15:{80:17-80:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc1.realp = real1P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:81:15:{81:17-81:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc1.imagp = imag1P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:82:15:{82:17-82:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc2.realp = real2P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:83:15:{83:17-83:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc2.imagp = imag2P;
&gt;                ^ ~~~~~~
&gt; 
&gt; Any fix for this?

Alpha: thanks for patching up these compilation failures in http://trac.webkit.org/changeset/104147 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530825</commentid>
    <comment_count>27</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-05 17:27:21 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Looks like this patch breaks the tree. See the following compilation error:
&gt; 
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:80:15:{80:17-80:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc1.realp = real1P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:81:15:{81:17-81:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc1.imagp = imag1P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:82:15:{82:17-82:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc2.realp = real2P;
&gt;                ^ ~~~~~~
&gt; /Volumes/Data/slave/lion-intel-leaks/build/Source/WebCore/platform/audio/VectorMath.cpp:83:15:{83:17-83:23}: error: assigning to &apos;float *&apos; from incompatible type &apos;const float *&apos; [3]
&gt;      sc2.imagp = imag2P;
&gt;                ^ ~~~~~~
&gt; 
&gt; Any fix for this?

Thanks for your patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119829</attachid>
            <date>2011-12-19 00:18:42 -0800</date>
            <delta_ts>2011-12-20 21:52:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>2947</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNGY5YmFlLi40ZDdjMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMTItMTkgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgU1NFIG9wdGltaXphdGlvbiBmb3IgRkZURnJhbWVGRk1QRUcuY3BwOjptdWx0aXBs
eSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg0
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGdl
dCBhYm91dCAzLjN4IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZvciBtdWx0aXBseSgpIGZ1bmN0
aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjptdWx0aXBseSk6CisKIDIwMTEtMTItMTgg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJ
T04ocjEwMTQ0NSk6IFtKU0NdIEdlbmVyYXRlZCBjb2RlIGZvciBjdXN0b20gZ2V0dGVycyBhbmQg
c2V0dGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVn
L0ZGVEZyYW1lRkZNUEVHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBl
Zy9GRlRGcmFtZUZGTVBFRy5jcHAKaW5kZXggMDMwZTE1YS4uMzdlZWYzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcu
Y3BwCkBAIC00Miw2ICs0MiwxMCBAQCBleHRlcm4gIkMiIHsKIAogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKKyNpZmRlZiBfX1NTRTJfXworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgaW50IGtNYXhGRlRQb3cyU2l6ZSA9
IDI0OwpAQCAtMTIxLDIxICsxMjUsNDggQEAgdm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3Qg
RkZURnJhbWUmIGZyYW1lKQogICAgIC8vIGZhY3RvciB3aWxsIG5lZWQgdG8gY2hhbmdlIHRvby4K
ICAgICBmbG9hdCBzY2FsZSA9IDAuNWY7CiAKKyAgICB1bnNpZ25lZCBoYWxmU2l6ZSA9IGZmdFNp
emUoKSAvIDI7CisjaWZkZWYgX19TU0UyX18gICAgICAgIAorICAgIF9fbTEyOCBtU2NhbGUgPSBf
bW1fc2V0X3BzMShzY2FsZSk7CisgICAgZmxvYXQgcmVhbDAgPSByZWFsUDFbMF07CisgICAgZmxv
YXQgaW1hZzAgPSBpbWFnUDFbMF07CisKKyAgICB1bnNpZ25lZCBlbmRTaXplID0gaGFsZlNpemUg
LSBoYWxmU2l6ZSAlIDQ7CisgICAgdW5zaWduZWQgaSA9IDA7IAorICAgIHdoaWxlIChpIDwgZW5k
U2l6ZSkgeworICAgICAgICBfX20xMjggcmVhbDEgPSBfbW1fbG9hZF9wcyhyZWFsUDEgKyBpKTsK
KyAgICAgICAgX19tMTI4IHJlYWwyID0gX21tX2xvYWRfcHMocmVhbFAyICsgaSk7CisgICAgICAg
IF9fbTEyOCBpbWFnMSA9IF9tbV9sb2FkX3BzKGltYWdQMSArIGkpOworICAgICAgICBfX20xMjgg
aW1hZzIgPSBfbW1fbG9hZF9wcyhpbWFnUDIgKyBpKTsKKyAgICAgICAgX19tMTI4IHJlYWwgPSBf
bW1fbXVsX3BzKHJlYWwxLCByZWFsMik7CisgICAgICAgIHJlYWwgPSBfbW1fc3ViX3BzKHJlYWws
IF9tbV9tdWxfcHMoaW1hZzEsIGltYWcyKSk7CisgICAgICAgIF9fbTEyOCBpbWFnID0gX21tX211
bF9wcyhyZWFsMSwgaW1hZzIpOworICAgICAgICBpbWFnID0gX21tX2FkZF9wcyhpbWFnLCBfbW1f
bXVsX3BzKGltYWcxLCByZWFsMikpOworICAgICAgICByZWFsMSA9IF9tbV9tdWxfcHMobVNjYWxl
LCByZWFsKTsKKyAgICAgICAgaW1hZzEgPSBfbW1fbXVsX3BzKG1TY2FsZSwgaW1hZyk7CisgICAg
ICAgIF9tbV9zdG9yZV9wcyhyZWFsUDEgKyBpLCByZWFsMSk7CisgICAgICAgIF9tbV9zdG9yZV9w
cyhpbWFnUDEgKyBpLCBpbWFnMSk7CisgICAgICAgIGkgKz0gNDsKKyAgICB9CisKKyAgICBmb3Ig
KDsgaSA8IGhhbGZTaXplOyArK2kpIHsKKyNlbHNlCiAgICAgLy8gTXVsdGlwbHkgdGhlIHBhY2tl
ZCBEQy9ueXF1aXN0IGNvbXBvbmVudAogICAgIHJlYWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQMlsw
XTsKICAgICBpbWFnUDFbMF0gKj0gc2NhbGUgKiBpbWFnUDJbMF07CiAKLSAgICAvLyBDb21wbGV4
IG11bHRpcGxpY2F0aW9uLiBJZiB0aGlzIGxvb3AgdHVybnMgb3V0IHRvIGJlIGhvdCB0aGVuCi0g
ICAgLy8gd2Ugc2hvdWxkIHVzZSBTU0Ugb3Igb3RoZXIgaW50cmluc2ljcyB0byBhY2NlbGVyYXRl
IGl0LgotICAgIHVuc2lnbmVkIGhhbGZTaXplID0gZmZ0U2l6ZSgpIC8gMjsKLQogICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBoYWxmU2l6ZTsgKytpKSB7CisjZW5kaWYKICAgICAgICAgZmxv
YXQgcmVhbFJlc3VsdCA9IHJlYWxQMVtpXSAqIHJlYWxQMltpXSAtIGltYWdQMVtpXSAqIGltYWdQ
MltpXTsKICAgICAgICAgZmxvYXQgaW1hZ1Jlc3VsdCA9IHJlYWxQMVtpXSAqIGltYWdQMltpXSAr
IGltYWdQMVtpXSAqIHJlYWxQMltpXTsKIAogICAgICAgICByZWFsUDFbaV0gPSBzY2FsZSAqIHJl
YWxSZXN1bHQ7CiAgICAgICAgIGltYWdQMVtpXSA9IHNjYWxlICogaW1hZ1Jlc3VsdDsKICAgICB9
CisjaWZkZWYgX19TU0UyX18KKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHNjYWxlICogcmVhbFAy
WzBdOworICAgIGltYWdQMVswXSA9IGltYWcwICogc2NhbGUgKiBpbWFnUDJbMF07CisjZW5kaWYK
IH0KIAogdm9pZCBGRlRGcmFtZTo6ZG9GRlQoZmxvYXQqIGRhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120142</attachid>
            <date>2011-12-20 21:52:57 -0800</date>
            <delta_ts>2011-12-21 19:23:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>4922</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzAwNjY1Li4yMzk3ODBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMTItMjAgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgU1NFIG9wdGltaXphdGlvbiBmb3IgRkZURnJhbWVGRk1QRUcuY3BwOjptdWx0aXBs
eSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg0
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IFNTRTIgb3B0aW1pemVkIGZ1bmN0aW9uIHp2bXVsIGluIFZlY3Rvck1hdGNoIGFuZCB1c2UgaXQg
aW4gbXVsdGlwbHkoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VmVjdG9yTWF0aDo6enZtdWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL1ZlY3Rvck1hdGguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9mZm1wZWcv
RkZURnJhbWVGRk1QRUcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6Om11bHRpcGx5
KToKKwogMjAxMS0xMi0yMCAgRXJpYyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBtX3RyaWdnZXJJZGxlUGFpbnRzIG5vdCByZXNldCBhZnRlciBhIGNv
bXBvc2l0ZUFuZFJlYWRiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9WZWN0b3JNYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rv
ck1hdGguY3BwCmluZGV4IDJlNmQxZTEuLjFhMTNkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguY3BwCkBAIC0yOTgsNiArMjk4LDQwIEBAIHZvaWQgdm11
bChjb25zdCBmbG9hdCogc291cmNlMVAsIGludCBzb3VyY2VTdHJpZGUxLCBjb25zdCBmbG9hdCog
c291cmNlMlAsIGludCBzCiAgICAgfQogfQogCit2b2lkIHp2bXVsKGNvbnN0IGZsb2F0KiByZWFs
MVAsIGNvbnN0IGZsb2F0KiBpbWFnMVAsIGNvbnN0IGZsb2F0KiByZWFsMlAsIGNvbnN0IGZsb2F0
KiBpbWFnMlAsIGZsb2F0KiByZWFsRGVzdFAsIGZsb2F0KiBpbWFnRGVzdFAsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQgaSA9IDA7CisjaWZkZWYgX19TU0UyX18KKyAg
ICAvLyBPbmx5IGhhbmRsZSB0aGUgdmVyeSBjb21tb24gY2FzZSB0aGF0IGFsbCBhZGRyZXNzZXMg
YXJlIDE2LWJ5dGUgYWxpZ25lZC4KKyAgICBpZiAoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocmVhbDFQKSAmIDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGltYWcxUCkgJiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihyZWFsMlApICYgMHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oaW1hZzJQKSAmIDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHJlYWxEZXN0UCkgJiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihpbWFnRGVzdFApICYgMHgwRikpIHsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIGVuZFNpemUgPSBmcmFtZXNUb1Byb2Nlc3MgLSBmcmFtZXNUb1Byb2Nlc3MgJSA0OworICAg
ICAgICB3aGlsZSAoaSA8IGVuZFNpemUpIHsKKyAgICAgICAgICAgIF9fbTEyOCByZWFsMSA9IF9t
bV9sb2FkX3BzKHJlYWwxUCArIGkpOworICAgICAgICAgICAgX19tMTI4IHJlYWwyID0gX21tX2xv
YWRfcHMocmVhbDJQICsgaSk7CisgICAgICAgICAgICBfX20xMjggaW1hZzEgPSBfbW1fbG9hZF9w
cyhpbWFnMVAgKyBpKTsKKyAgICAgICAgICAgIF9fbTEyOCBpbWFnMiA9IF9tbV9sb2FkX3BzKGlt
YWcyUCArIGkpOworICAgICAgICAgICAgX19tMTI4IHJlYWwgPSBfbW1fbXVsX3BzKHJlYWwxLCBy
ZWFsMik7CisgICAgICAgICAgICByZWFsID0gX21tX3N1Yl9wcyhyZWFsLCBfbW1fbXVsX3BzKGlt
YWcxLCBpbWFnMikpOworICAgICAgICAgICAgX19tMTI4IGltYWcgPSBfbW1fbXVsX3BzKHJlYWwx
LCBpbWFnMik7CisgICAgICAgICAgICBpbWFnID0gX21tX2FkZF9wcyhpbWFnLCBfbW1fbXVsX3Bz
KGltYWcxLCByZWFsMikpOworICAgICAgICAgICAgX21tX3N0b3JlX3BzKHJlYWxEZXN0UCArIGks
IHJlYWwpOworICAgICAgICAgICAgX21tX3N0b3JlX3BzKGltYWdEZXN0UCArIGksIGltYWcpOwor
ICAgICAgICAgICAgaSArPSA0OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgZm9yICg7
IGkgPCBmcmFtZXNUb1Byb2Nlc3M7ICsraSkgeworICAgICAgICByZWFsRGVzdFBbaV0gPSByZWFs
MVBbaV0gKiByZWFsMlBbaV0gLSBpbWFnMVBbaV0gKiBpbWFnMlBbaV07CisgICAgICAgIGltYWdE
ZXN0UFtpXSA9IHJlYWwxUFtpXSAqIGltYWcyUFtpXSArIGltYWcxUFtpXSAqIHJlYWwyUFtpXTsK
KyAgICB9Cit9CisKICNlbmRpZiAvLyBPUyhEQVJXSU4pCiAKIH0gLy8gbmFtZXNwYWNlIFZlY3Rv
ck1hdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1h
dGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguaAppbmRleCBh
M2E5MmU1Li41YWU4MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9WZWN0b3JNYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9y
TWF0aC5oCkBAIC0zNyw2ICszNyw5IEBAIHZvaWQgdmFkZChjb25zdCBmbG9hdCogc291cmNlMVAs
IGludCBzb3VyY2VTdHJpZGUxLCBjb25zdCBmbG9hdCogc291cmNlMlAsIGludCBzCiAvLyBGb3Ig
YW4gZWxlbWVudC1ieS1lbGVtZW50IG11bHRpcGx5IG9mIHR3byBmbG9hdCB2ZWN0b3JzLgogdm9p
ZCB2bXVsKGNvbnN0IGZsb2F0KiBzb3VyY2UxUCwgaW50IHNvdXJjZVN0cmlkZTEsIGNvbnN0IGZs
b2F0KiBzb3VyY2UyUCwgaW50IHNvdXJjZVN0cmlkZTIsIGZsb2F0KiBkZXN0UCwgaW50IGRlc3RT
dHJpZGUsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogCisvLyBNdWx0aXBsaWVzIHR3byBjb21w
bGV4IHZlY3RvcnMuCit2b2lkIHp2bXVsKGNvbnN0IGZsb2F0KiByZWFsMVAsIGNvbnN0IGZsb2F0
KiBpbWFnMVAsIGNvbnN0IGZsb2F0KiByZWFsMlAsIGNvbnN0IGZsb2F0KiBpbWFnMlAsIGZsb2F0
KiByZWFsRGVzdFAsIGZsb2F0KiBpbWFnRGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwor
CiB9IC8vIG5hbWVzcGFjZSBWZWN0b3JNYXRoCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZG
TVBFRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVG
Rk1QRUcuY3BwCmluZGV4IDAzMGUxNWEuLmVjMTdhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcApAQCAtMTIx
LDIxICsxMjEsMTcgQEAgdm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3QgRkZURnJhbWUmIGZy
YW1lKQogICAgIC8vIGZhY3RvciB3aWxsIG5lZWQgdG8gY2hhbmdlIHRvby4KICAgICBmbG9hdCBz
Y2FsZSA9IDAuNWY7CiAKLSAgICAvLyBNdWx0aXBseSB0aGUgcGFja2VkIERDL255cXVpc3QgY29t
cG9uZW50Ci0gICAgcmVhbFAxWzBdICo9IHNjYWxlICogcmVhbFAyWzBdOwotICAgIGltYWdQMVsw
XSAqPSBzY2FsZSAqIGltYWdQMlswXTsKLQotICAgIC8vIENvbXBsZXggbXVsdGlwbGljYXRpb24u
IElmIHRoaXMgbG9vcCB0dXJucyBvdXQgdG8gYmUgaG90IHRoZW4KLSAgICAvLyB3ZSBzaG91bGQg
dXNlIFNTRSBvciBvdGhlciBpbnRyaW5zaWNzIHRvIGFjY2VsZXJhdGUgaXQuCiAgICAgdW5zaWdu
ZWQgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBd
OworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGhhbGZTaXplOyArK2kpIHsKLSAgICAgICAgZmxvYXQgcmVhbFJlc3VsdCA9IHJlYWxQ
MVtpXSAqIHJlYWxQMltpXSAtIGltYWdQMVtpXSAqIGltYWdQMltpXTsKLSAgICAgICAgZmxvYXQg
aW1hZ1Jlc3VsdCA9IHJlYWxQMVtpXSAqIGltYWdQMltpXSArIGltYWdQMVtpXSAqIHJlYWxQMltp
XTsKKyAgICBWZWN0b3JNYXRoOjp6dm11bChyZWFsUDEsIGltYWdQMSwgcmVhbFAyLCBpbWFnUDIs
IHJlYWxQMSwgaW1hZ1AxLCBoYWxmU2l6ZSk7IAogCi0gICAgICAgIHJlYWxQMVtpXSA9IHNjYWxl
ICogcmVhbFJlc3VsdDsKLSAgICAgICAgaW1hZ1AxW2ldID0gc2NhbGUgKiBpbWFnUmVzdWx0Owot
ICAgIH0KKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0g
PSBpbWFnMCAqIGltYWdQMlswXTsKKworICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwg
JnNjYWxlLCByZWFsUDEsIDEsIGhhbGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFn
UDEsIDEsICZzY2FsZSwgaW1hZ1AxLCAxLCBoYWxmU2l6ZSk7CiB9CiAKIHZvaWQgRkZURnJhbWU6
OmRvRkZUKGZsb2F0KiBkYXRhKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120259</attachid>
            <date>2011-12-21 19:23:39 -0800</date>
            <delta_ts>2011-12-21 21:48:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>7703</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZDM2MDBkLi45YzU3NTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMTItMjEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgQWRkIGEgU1NFMiBvcHRpbWl6ZWQgZnVuY3Rpb24genZtdWwgaW4gVmVjdG9yTWF0
Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODQy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHp2
bXVsIGluIEZGVEZyYW1lRkZNUEVHLmNwcDo6bXVsdGlwbHkoKSBhbmQgRkZURnJhbWVNYWMuY3Bw
OjptdWx0aXBseSgpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWZWN0b3JNYXRoOjp6dm11bCk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vVmVjdG9yTWF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9G
RlRGcmFtZUZGTVBFRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkpOgorCiAyMDExLTEyLTIxICBDaHJpcyBHdWFu
ICA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgVXBzdHJlYW0gdGhl
IE11bHRpcGFydCBmZWF0dXJlIGluIEJsYWNrYmVycnkgcG9ydApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcAppbmRleCAyZTZkMWUxLi41ZWMzNzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcApAQCAtNzIsNiAr
NzIsMjQgQEAgdm9pZCB2bXVsKGNvbnN0IGZsb2F0KiBzb3VyY2UxUCwgaW50IHNvdXJjZVN0cmlk
ZTEsIGNvbnN0IGZsb2F0KiBzb3VyY2UyUCwgaW50IHMKICNlbmRpZgogfQogCit2b2lkIHp2bXVs
KGNvbnN0IGZsb2F0KiByZWFsMVAsIGNvbnN0IGZsb2F0KiBpbWFnMVAsIGNvbnN0IGZsb2F0KiBy
ZWFsMlAsIGNvbnN0IGZsb2F0KiBpbWFnMlAsIGZsb2F0KiByZWFsRGVzdFAsIGZsb2F0KiBpbWFn
RGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisjaWYgZGVmaW5lZChfX3BwY19fKSB8
fCBkZWZpbmVkKF9faTM4Nl9fKQorICAgIDo6enZtdWwocmVhbDFQLCBpbWFnMVAsIHJlYWwyUCwg
aW1hZzJQLCByZWFsRGVzdFAsIGltYWdEZXN0UCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyNlbHNlCisg
ICAgRFNQU3BsaXRDb21wbGV4IHNjMTsKKyAgICBEU1BTcGxpdENvbXBsZXggc2MyOworICAgIERT
UFNwbGl0Q29tcGxleCBkZXN0OworICAgIHNjMS5yZWFscCA9IHJlYWwxUDsKKyAgICBzYzEuaW1h
Z3AgPSBpbWFnMVA7CisgICAgc2MyLnJlYWxwID0gcmVhbDJQOworICAgIHNjMi5pbWFncCA9IGlt
YWcyUDsKKyAgICBkZXN0LnJlYWxwID0gcmVhbERlc3RQOworICAgIGRlc3QuaW1hZ3AgPSBpbWFn
RGVzdFA7CisgICAgdkRTUF96dm11bCgmc2MxLCAxLCAmc2MyLCAxLCAmZGVzdCwgMSwgZnJhbWVz
VG9Qcm9jZXNzLCAxKTsKKyNlbmRpZgorfQorCiAjZWxzZQogCiB2b2lkIHZzbXVsKGNvbnN0IGZs
b2F0KiBzb3VyY2VQLCBpbnQgc291cmNlU3RyaWRlLCBjb25zdCBmbG9hdCogc2NhbGUsIGZsb2F0
KiBkZXN0UCwgaW50IGRlc3RTdHJpZGUsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCkBAIC0yOTgs
NiArMzE2LDQxIEBAIHZvaWQgdm11bChjb25zdCBmbG9hdCogc291cmNlMVAsIGludCBzb3VyY2VT
dHJpZGUxLCBjb25zdCBmbG9hdCogc291cmNlMlAsIGludCBzCiAgICAgfQogfQogCit2b2lkIHp2
bXVsKGNvbnN0IGZsb2F0KiByZWFsMVAsIGNvbnN0IGZsb2F0KiBpbWFnMVAsIGNvbnN0IGZsb2F0
KiByZWFsMlAsIGNvbnN0IGZsb2F0KiBpbWFnMlAsIGZsb2F0KiByZWFsRGVzdFAsIGZsb2F0KiBp
bWFnRGVzdFAsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgdW5zaWduZWQgaSA9IDA7
CisjaWZkZWYgX19TU0UyX18KKyAgICAvLyBPbmx5IHVzZSB0aGUgU1NFIG9wdGltaXphdGlvbiBp
biB0aGUgdmVyeSBjb21tb24gY2FzZSB0aGF0IGFsbCBhZGRyZXNzZXMgYXJlIDE2LWJ5dGUgYWxp
Z25lZC4gCisgICAgLy8gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggdG8gdGhlIHNjYWxhciBjb2Rl
IGJlbG93LgorICAgIGlmICghKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZWFsMVApICYg
MHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW1hZzFQKSAm
IDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlYWwyUCkg
JiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbWFnMlAp
ICYgMHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVhbERl
c3RQKSAmIDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGlt
YWdEZXN0UCkgJiAweDBGKSkgeworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZW5kU2l6ZSA9
IGZyYW1lc1RvUHJvY2VzcyAtIGZyYW1lc1RvUHJvY2VzcyAlIDQ7CisgICAgICAgIHdoaWxlIChp
IDwgZW5kU2l6ZSkgeworICAgICAgICAgICAgX19tMTI4IHJlYWwxID0gX21tX2xvYWRfcHMocmVh
bDFQICsgaSk7CisgICAgICAgICAgICBfX20xMjggcmVhbDIgPSBfbW1fbG9hZF9wcyhyZWFsMlAg
KyBpKTsKKyAgICAgICAgICAgIF9fbTEyOCBpbWFnMSA9IF9tbV9sb2FkX3BzKGltYWcxUCArIGkp
OworICAgICAgICAgICAgX19tMTI4IGltYWcyID0gX21tX2xvYWRfcHMoaW1hZzJQICsgaSk7Cisg
ICAgICAgICAgICBfX20xMjggcmVhbCA9IF9tbV9tdWxfcHMocmVhbDEsIHJlYWwyKTsKKyAgICAg
ICAgICAgIHJlYWwgPSBfbW1fc3ViX3BzKHJlYWwsIF9tbV9tdWxfcHMoaW1hZzEsIGltYWcyKSk7
CisgICAgICAgICAgICBfX20xMjggaW1hZyA9IF9tbV9tdWxfcHMocmVhbDEsIGltYWcyKTsKKyAg
ICAgICAgICAgIGltYWcgPSBfbW1fYWRkX3BzKGltYWcsIF9tbV9tdWxfcHMoaW1hZzEsIHJlYWwy
KSk7CisgICAgICAgICAgICBfbW1fc3RvcmVfcHMocmVhbERlc3RQICsgaSwgcmVhbCk7CisgICAg
ICAgICAgICBfbW1fc3RvcmVfcHMoaW1hZ0Rlc3RQICsgaSwgaW1hZyk7CisgICAgICAgICAgICBp
ICs9IDQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBmb3IgKDsgaSA8IGZyYW1lc1Rv
UHJvY2VzczsgKytpKSB7CisgICAgICAgIHJlYWxEZXN0UFtpXSA9IHJlYWwxUFtpXSAqIHJlYWwy
UFtpXSAtIGltYWcxUFtpXSAqIGltYWcyUFtpXTsKKyAgICAgICAgaW1hZ0Rlc3RQW2ldID0gcmVh
bDFQW2ldICogaW1hZzJQW2ldICsgaW1hZzFQW2ldICogcmVhbDJQW2ldOworICAgIH0KK30KKwog
I2VuZGlmIC8vIE9TKERBUldJTikKIAogfSAvLyBuYW1lc3BhY2UgVmVjdG9yTWF0aApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5oCmluZGV4IGEzYTkyZTUuLjVhZTgw
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmgKQEAgLTM3
LDYgKzM3LDkgQEAgdm9pZCB2YWRkKGNvbnN0IGZsb2F0KiBzb3VyY2UxUCwgaW50IHNvdXJjZVN0
cmlkZTEsIGNvbnN0IGZsb2F0KiBzb3VyY2UyUCwgaW50IHMKIC8vIEZvciBhbiBlbGVtZW50LWJ5
LWVsZW1lbnQgbXVsdGlwbHkgb2YgdHdvIGZsb2F0IHZlY3RvcnMuCiB2b2lkIHZtdWwoY29uc3Qg
ZmxvYXQqIHNvdXJjZTFQLCBpbnQgc291cmNlU3RyaWRlMSwgY29uc3QgZmxvYXQqIHNvdXJjZTJQ
LCBpbnQgc291cmNlU3RyaWRlMiwgZmxvYXQqIGRlc3RQLCBpbnQgZGVzdFN0cmlkZSwgc2l6ZV90
IGZyYW1lc1RvUHJvY2Vzcyk7CiAKKy8vIE11bHRpcGxpZXMgdHdvIGNvbXBsZXggdmVjdG9ycy4K
K3ZvaWQgenZtdWwoY29uc3QgZmxvYXQqIHJlYWwxUCwgY29uc3QgZmxvYXQqIGltYWcxUCwgY29u
c3QgZmxvYXQqIHJlYWwyUCwgY29uc3QgZmxvYXQqIGltYWcyUCwgZmxvYXQqIHJlYWxEZXN0UCwg
ZmxvYXQqIGltYWdEZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKIH0gLy8gbmFtZXNw
YWNlIFZlY3Rvck1hdGgKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKaW5k
ZXggMDMwZTE1YS4uYWFmYmEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwCkBAIC0xMjEsMjEgKzEyMSwxOCBA
QCB2b2lkIEZGVEZyYW1lOjptdWx0aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCiAgICAgLy8g
ZmFjdG9yIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9vLgogICAgIGZsb2F0IHNjYWxlID0gMC41ZjsK
IAotICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKLSAgICBy
ZWFsUDFbMF0gKj0gc2NhbGUgKiByZWFsUDJbMF07Ci0gICAgaW1hZ1AxWzBdICo9IHNjYWxlICog
aW1hZ1AyWzBdOwotCi0gICAgLy8gQ29tcGxleCBtdWx0aXBsaWNhdGlvbi4gSWYgdGhpcyBsb29w
IHR1cm5zIG91dCB0byBiZSBob3QgdGhlbgotICAgIC8vIHdlIHNob3VsZCB1c2UgU1NFIG9yIG90
aGVyIGludHJpbnNpY3MgdG8gYWNjZWxlcmF0ZSBpdC4KICAgICB1bnNpZ25lZCBoYWxmU2l6ZSA9
IGZmdFNpemUoKSAvIDI7CisgICAgZmxvYXQgcmVhbDAgPSByZWFsUDFbMF07CisgICAgZmxvYXQg
aW1hZzAgPSBpbWFnUDFbMF07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgaGFsZlNp
emU7ICsraSkgewotICAgICAgICBmbG9hdCByZWFsUmVzdWx0ID0gcmVhbFAxW2ldICogcmVhbFAy
W2ldIC0gaW1hZ1AxW2ldICogaW1hZ1AyW2ldOwotICAgICAgICBmbG9hdCBpbWFnUmVzdWx0ID0g
cmVhbFAxW2ldICogaW1hZ1AyW2ldICsgaW1hZ1AxW2ldICogcmVhbFAyW2ldOworICAgIFZlY3Rv
ck1hdGg6Onp2bXVsKHJlYWxQMSwgaW1hZ1AxLCByZWFsUDIsIGltYWdQMiwgcmVhbFAxLCBpbWFn
UDEsIGhhbGZTaXplKTsgCiAKLSAgICAgICAgcmVhbFAxW2ldID0gc2NhbGUgKiByZWFsUmVzdWx0
OwotICAgICAgICBpbWFnUDFbaV0gPSBzY2FsZSAqIGltYWdSZXN1bHQ7Ci0gICAgfQorICAgIC8v
IE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0g
PSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsK
KworICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwgJnNjYWxlLCByZWFsUDEsIDEsIGhh
bGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFnUDEsIDEsICZzY2FsZSwgaW1hZ1Ax
LCAxLCBoYWxmU2l6ZSk7CiB9CiAKIHZvaWQgRkZURnJhbWU6OmRvRkZUKGZsb2F0KiBkYXRhKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAK
aW5kZXggMDA2NGRmNy4uMzcwZGVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAKICNpbmNsdWRl
ICJGRlRGcmFtZS5oIgogCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNvbnN0IGludCBrTWF4RkZUUG93MlNpemUgPSAyNDsKQEAgLTExMCwyNyArMTEy
LDE5IEBAIHZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKICAg
ICAvLyBUaGlzIGVuc3VyZXMgdGhlIHJpZ2h0IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBp
bnZlcnNlIEZGVAogICAgIGZsb2F0IHNjYWxlID0gMC41ZjsKIAotICAgIC8vIE11bHRpcGx5IHBh
Y2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJlYWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQ
MlswXTsKLSAgICBpbWFnUDFbMF0gKj0gc2NhbGUgKiBpbWFnUDJbMF07Ci0KLSAgICAvLyBNdWx0
aXBseSB0aGUgcmVzdCwgc2tpcHBpbmcgcGFja2VkIERDL055cXVpc3QgY29tcG9uZW50cwotICAg
IERTUFNwbGl0Q29tcGxleCBzYzEgPSBmcmFtZTEuZHNwU3BsaXRDb21wbGV4KCk7Ci0gICAgc2Mx
LnJlYWxwKys7Ci0gICAgc2MxLmltYWdwKys7Ci0KLSAgICBEU1BTcGxpdENvbXBsZXggc2MyID0g
ZnJhbWUyLmRzcFNwbGl0Q29tcGxleCgpOwotICAgIHNjMi5yZWFscCsrOwotICAgIHNjMi5pbWFn
cCsrOwotCiAgICAgdW5zaWduZWQgaGFsZlNpemUgPSBtX0ZGVFNpemUgLyAyOworICAgIGZsb2F0
IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOwogCiAgICAg
Ly8gQ29tcGxleCBtdWx0aXBseQotICAgIHZEU1BfenZtdWwoJnNjMSwgMSwgJnNjMiwgMSwgJnNj
MSwgMSwgaGFsZlNpemUgLSAxLCAxIC8qIG5vcm1hbCBtdWx0aXBsaWNhdGlvbiAqLyk7CisgICAg
VmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEs
IGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlx
dWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBp
bWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKIAotICAgIC8vIFdlJ3ZlIHByZXZpb3VzbHkg
c2NhbGVkIHRoZSBwYWNrZWQgcGFydCwgbm93IHNjYWxlIHRoZSByZXN0Li4uLi4KLSAgICB2RFNQ
X3ZzbXVsKHNjMS5yZWFscCwgMSwgJnNjYWxlLCBzYzEucmVhbHAsIDEsIGhhbGZTaXplIC0gMSk7
Ci0gICAgdkRTUF92c211bChzYzEuaW1hZ3AsIDEsICZzY2FsZSwgc2MxLmltYWdwLCAxLCBoYWxm
U2l6ZSAtIDEpOworICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwgJnNjYWxlLCByZWFs
UDEsIDEsIGhhbGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFnUDEsIDEsICZzY2Fs
ZSwgaW1hZ1AxLCAxLCBoYWxmU2l6ZSk7CiB9CiAKIHZvaWQgRkZURnJhbWU6OmRvRkZUKGZsb2F0
KiBkYXRhKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120270</attachid>
            <date>2011-12-21 21:50:29 -0800</date>
            <delta_ts>2012-01-03 18:02:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>8304</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYWU5NjM1Li45NWFiNzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMTItMjEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgQWRkIGEgU1NFMiBvcHRpbWl6ZWQgZnVuY3Rpb24genZtdWwgaW4gVmVjdG9yTWF0
Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODQy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHp2
bXVsIGluIEZGVEZyYW1lRkZNUEVHLmNwcDo6bXVsdGlwbHkoKSBhbmQgRkZURnJhbWVNYWMuY3Bw
OjptdWx0aXBseSgpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWZWN0b3JNYXRoOjp6dm11bCk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vVmVjdG9yTWF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9G
RlRGcmFtZUZGTVBFRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkpOgorCiAyMDExLTEyLTIxICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUd2VhayBhbmQgY29tbWVudCBzb21lIHRy
YW5zZm9ybS1yZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1ZlY3Rvck1hdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVj
dG9yTWF0aC5jcHAKaW5kZXggMmU2ZDFlMS4uOTRiYzc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKQEAgLTcyLDYgKzcyLDI0IEBAIHZvaWQgdm11
bChjb25zdCBmbG9hdCogc291cmNlMVAsIGludCBzb3VyY2VTdHJpZGUxLCBjb25zdCBmbG9hdCog
c291cmNlMlAsIGludCBzCiAjZW5kaWYKIH0KIAordm9pZCB6dm11bChjb25zdCBmbG9hdCogcmVh
bDFQLCBjb25zdCBmbG9hdCogaW1hZzFQLCBjb25zdCBmbG9hdCogcmVhbDJQLCBjb25zdCBmbG9h
dCogaW1hZzJQLCBmbG9hdCogcmVhbERlc3RQLCBmbG9hdCogaW1hZ0Rlc3RQLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQoreworICAgIERTUFNwbGl0Q29tcGxleCBzYzE7CisgICAgRFNQU3BsaXRD
b21wbGV4IHNjMjsKKyAgICBEU1BTcGxpdENvbXBsZXggZGVzdDsKKyAgICBzYzEucmVhbHAgPSBy
ZWFsMVA7CisgICAgc2MxLmltYWdwID0gaW1hZzFQOworICAgIHNjMi5yZWFscCA9IHJlYWwyUDsK
KyAgICBzYzIuaW1hZ3AgPSBpbWFnMlA7CisgICAgZGVzdC5yZWFscCA9IHJlYWxEZXN0UDsKKyAg
ICBkZXN0LmltYWdwID0gaW1hZ0Rlc3RQOworI2lmIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5l
ZChfX2kzODZfXykKKyAgICA6Onp2bXVsKCZzYzEsIDEsICZzYzIsIDEsICZkZXN0LCAxLCBmcmFt
ZXNUb1Byb2Nlc3MsIDEpOworI2Vsc2UKKyAgICB2RFNQX3p2bXVsKCZzYzEsIDEsICZzYzIsIDEs
ICZkZXN0LCAxLCBmcmFtZXNUb1Byb2Nlc3MsIDEpOworI2VuZGlmCit9CisKICNlbHNlCiAKIHZv
aWQgdnNtdWwoY29uc3QgZmxvYXQqIHNvdXJjZVAsIGludCBzb3VyY2VTdHJpZGUsIGNvbnN0IGZs
b2F0KiBzY2FsZSwgZmxvYXQqIGRlc3RQLCBpbnQgZGVzdFN0cmlkZSwgc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKQEAgLTI5OCw2ICszMTYsNDEgQEAgdm9pZCB2bXVsKGNvbnN0IGZsb2F0KiBzb3Vy
Y2UxUCwgaW50IHNvdXJjZVN0cmlkZTEsIGNvbnN0IGZsb2F0KiBzb3VyY2UyUCwgaW50IHMKICAg
ICB9CiB9CiAKK3ZvaWQgenZtdWwoY29uc3QgZmxvYXQqIHJlYWwxUCwgY29uc3QgZmxvYXQqIGlt
YWcxUCwgY29uc3QgZmxvYXQqIHJlYWwyUCwgY29uc3QgZmxvYXQqIGltYWcyUCwgZmxvYXQqIHJl
YWxEZXN0UCwgZmxvYXQqIGltYWdEZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAg
ICB1bnNpZ25lZCBpID0gMDsKKyNpZmRlZiBfX1NTRTJfXworICAgIC8vIE9ubHkgdXNlIHRoZSBT
U0Ugb3B0aW1pemF0aW9uIGluIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIHRoYXQgYWxsIGFkZHJlc3Nl
cyBhcmUgMTYtYnl0ZSBhbGlnbmVkLiAKKyAgICAvLyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCB0
byB0aGUgc2NhbGFyIGNvZGUgYmVsb3cuCisgICAgaWYgKCEocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHJlYWwxUCkgJiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihpbWFnMVApICYgMHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocmVhbDJQKSAmIDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGltYWcyUCkgJiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihyZWFsRGVzdFApICYgMHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW1hZ0Rlc3RQKSAmIDB4MEYpKSB7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBlbmRTaXplID0gZnJhbWVzVG9Qcm9jZXNzIC0gZnJhbWVzVG9Qcm9jZXNzICUgNDsK
KyAgICAgICAgd2hpbGUgKGkgPCBlbmRTaXplKSB7CisgICAgICAgICAgICBfX20xMjggcmVhbDEg
PSBfbW1fbG9hZF9wcyhyZWFsMVAgKyBpKTsKKyAgICAgICAgICAgIF9fbTEyOCByZWFsMiA9IF9t
bV9sb2FkX3BzKHJlYWwyUCArIGkpOworICAgICAgICAgICAgX19tMTI4IGltYWcxID0gX21tX2xv
YWRfcHMoaW1hZzFQICsgaSk7CisgICAgICAgICAgICBfX20xMjggaW1hZzIgPSBfbW1fbG9hZF9w
cyhpbWFnMlAgKyBpKTsKKyAgICAgICAgICAgIF9fbTEyOCByZWFsID0gX21tX211bF9wcyhyZWFs
MSwgcmVhbDIpOworICAgICAgICAgICAgcmVhbCA9IF9tbV9zdWJfcHMocmVhbCwgX21tX211bF9w
cyhpbWFnMSwgaW1hZzIpKTsKKyAgICAgICAgICAgIF9fbTEyOCBpbWFnID0gX21tX211bF9wcyhy
ZWFsMSwgaW1hZzIpOworICAgICAgICAgICAgaW1hZyA9IF9tbV9hZGRfcHMoaW1hZywgX21tX211
bF9wcyhpbWFnMSwgcmVhbDIpKTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9wcyhyZWFsRGVzdFAg
KyBpLCByZWFsKTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9wcyhpbWFnRGVzdFAgKyBpLCBpbWFn
KTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGZv
ciAoOyBpIDwgZnJhbWVzVG9Qcm9jZXNzOyArK2kpIHsKKyAgICAgICAgcmVhbERlc3RQW2ldID0g
cmVhbDFQW2ldICogcmVhbDJQW2ldIC0gaW1hZzFQW2ldICogaW1hZzJQW2ldOworICAgICAgICBp
bWFnRGVzdFBbaV0gPSByZWFsMVBbaV0gKiBpbWFnMlBbaV0gKyBpbWFnMVBbaV0gKiByZWFsMlBb
aV07CisgICAgfQorfQorCiAjZW5kaWYgLy8gT1MoREFSV0lOKQogCiB9IC8vIG5hbWVzcGFjZSBW
ZWN0b3JNYXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0
b3JNYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmgKaW5k
ZXggYTNhOTJlNS4uNWFlODBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vVmVjdG9yTWF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Zl
Y3Rvck1hdGguaApAQCAtMzcsNiArMzcsOSBAQCB2b2lkIHZhZGQoY29uc3QgZmxvYXQqIHNvdXJj
ZTFQLCBpbnQgc291cmNlU3RyaWRlMSwgY29uc3QgZmxvYXQqIHNvdXJjZTJQLCBpbnQgcwogLy8g
Rm9yIGFuIGVsZW1lbnQtYnktZWxlbWVudCBtdWx0aXBseSBvZiB0d28gZmxvYXQgdmVjdG9ycy4K
IHZvaWQgdm11bChjb25zdCBmbG9hdCogc291cmNlMVAsIGludCBzb3VyY2VTdHJpZGUxLCBjb25z
dCBmbG9hdCogc291cmNlMlAsIGludCBzb3VyY2VTdHJpZGUyLCBmbG9hdCogZGVzdFAsIGludCBk
ZXN0U3RyaWRlLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKIAorLy8gTXVsdGlwbGllcyB0d28g
Y29tcGxleCB2ZWN0b3JzLgordm9pZCB6dm11bChjb25zdCBmbG9hdCogcmVhbDFQLCBjb25zdCBm
bG9hdCogaW1hZzFQLCBjb25zdCBmbG9hdCogcmVhbDJQLCBjb25zdCBmbG9hdCogaW1hZzJQLCBm
bG9hdCogcmVhbERlc3RQLCBmbG9hdCogaW1hZ0Rlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKKwogfSAvLyBuYW1lc3BhY2UgVmVjdG9yTWF0aAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJh
bWVGRk1QRUcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZy
YW1lRkZNUEVHLmNwcAppbmRleCAwMzBlMTVhLi45Zjg5MzI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKQEAg
LTExNSwyNyArMTE1LDI0IEBAIHZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1l
JiBmcmFtZSkKICAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7CiAg
ICAgY29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOwogCisgICAgdW5zaWdu
ZWQgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBd
OworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOworCisgICAgVmVjdG9yTWF0aDo6enZtdWwo
cmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUp
OyAKKworICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAg
ICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAq
IGltYWdQMlswXTsKKwogICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5n
IG9mIHZlY0xpYiBvbiB0aGUgTWFjLgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2Nh
bGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgogICAgIC8vIEZJWE1FOiBpZiB3
ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKICAgICAvLyBm
YWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCiAgICAgZmxvYXQgc2NhbGUgPSAwLjVmOwog
Ci0gICAgLy8gTXVsdGlwbHkgdGhlIHBhY2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJl
YWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQMlswXTsKLSAgICBpbWFnUDFbMF0gKj0gc2NhbGUgKiBp
bWFnUDJbMF07Ci0KLSAgICAvLyBDb21wbGV4IG11bHRpcGxpY2F0aW9uLiBJZiB0aGlzIGxvb3Ag
dHVybnMgb3V0IHRvIGJlIGhvdCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIHVzZSBTU0Ugb3Igb3Ro
ZXIgaW50cmluc2ljcyB0byBhY2NlbGVyYXRlIGl0LgotICAgIHVuc2lnbmVkIGhhbGZTaXplID0g
ZmZ0U2l6ZSgpIC8gMjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBoYWxmU2l6ZTsg
KytpKSB7Ci0gICAgICAgIGZsb2F0IHJlYWxSZXN1bHQgPSByZWFsUDFbaV0gKiByZWFsUDJbaV0g
LSBpbWFnUDFbaV0gKiBpbWFnUDJbaV07Ci0gICAgICAgIGZsb2F0IGltYWdSZXN1bHQgPSByZWFs
UDFbaV0gKiBpbWFnUDJbaV0gKyBpbWFnUDFbaV0gKiByZWFsUDJbaV07Ci0KLSAgICAgICAgcmVh
bFAxW2ldID0gc2NhbGUgKiByZWFsUmVzdWx0OwotICAgICAgICBpbWFnUDFbaV0gPSBzY2FsZSAq
IGltYWdSZXN1bHQ7Ci0gICAgfQorICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwgJnNj
YWxlLCByZWFsUDEsIDEsIGhhbGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFnUDEs
IDEsICZzY2FsZSwgaW1hZ1AxLCAxLCBoYWxmU2l6ZSk7CiB9CiAKIHZvaWQgRkZURnJhbWU6OmRv
RkZUKGZsb2F0KiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0ZGVEZyYW1lTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9GRlRGcmFtZU1hYy5jcHAKaW5kZXggMDA2NGRmNy4uNmRmYmJlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCkBAIC0zNiw2ICsz
Niw4IEBACiAKICNpbmNsdWRlICJGRlRGcmFtZS5oIgogCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGludCBrTWF4RkZUUG93MlNpemUgPSAy
NDsKQEAgLTEwNiwzMSArMTA4LDIzIEBAIHZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZG
VEZyYW1lJiBmcmFtZSkKICAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRh
KCk7CiAgICAgY29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOwogCi0gICAg
Ly8gU2NhbGUgYWNjb3VudHMgZm9yIHZlY0xpYidzIHBlY3VsaWFyIHNjYWxpbmcKLSAgICAvLyBU
aGlzIGVuc3VyZXMgdGhlIHJpZ2h0IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBpbnZlcnNl
IEZGVAotICAgIGZsb2F0IHNjYWxlID0gMC41ZjsKLQotICAgIC8vIE11bHRpcGx5IHBhY2tlZCBE
Qy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJlYWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQMlswXTsK
LSAgICBpbWFnUDFbMF0gKj0gc2NhbGUgKiBpbWFnUDJbMF07Ci0KLSAgICAvLyBNdWx0aXBseSB0
aGUgcmVzdCwgc2tpcHBpbmcgcGFja2VkIERDL055cXVpc3QgY29tcG9uZW50cwotICAgIERTUFNw
bGl0Q29tcGxleCBzYzEgPSBmcmFtZTEuZHNwU3BsaXRDb21wbGV4KCk7Ci0gICAgc2MxLnJlYWxw
Kys7Ci0gICAgc2MxLmltYWdwKys7Ci0KLSAgICBEU1BTcGxpdENvbXBsZXggc2MyID0gZnJhbWUy
LmRzcFNwbGl0Q29tcGxleCgpOwotICAgIHNjMi5yZWFscCsrOwotICAgIHNjMi5pbWFncCsrOwot
CiAgICAgdW5zaWduZWQgaGFsZlNpemUgPSBtX0ZGVFNpemUgLyAyOworICAgIGZsb2F0IHJlYWww
ID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOwogCiAgICAgLy8gQ29t
cGxleCBtdWx0aXBseQotICAgIHZEU1BfenZtdWwoJnNjMSwgMSwgJnNjMiwgMSwgJnNjMSwgMSwg
aGFsZlNpemUgLSAxLCAxIC8qIG5vcm1hbCBtdWx0aXBsaWNhdGlvbiAqLyk7CisgICAgVmVjdG9y
TWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQ
MSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBj
b21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFb
MF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIGZvciB2ZWNM
aWIncyBwZWN1bGlhciBzY2FsaW5nCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSByaWdodCBzY2Fs
aW5nIGFsbCB0aGUgd2F5IGJhY2sgdG8gaW52ZXJzZSBGRlQKKyAgICBmbG9hdCBzY2FsZSA9IDAu
NWY7CiAKLSAgICAvLyBXZSd2ZSBwcmV2aW91c2x5IHNjYWxlZCB0aGUgcGFja2VkIHBhcnQsIG5v
dyBzY2FsZSB0aGUgcmVzdC4uLi4uCi0gICAgdkRTUF92c211bChzYzEucmVhbHAsIDEsICZzY2Fs
ZSwgc2MxLnJlYWxwLCAxLCBoYWxmU2l6ZSAtIDEpOwotICAgIHZEU1BfdnNtdWwoc2MxLmltYWdw
LCAxLCAmc2NhbGUsIHNjMS5pbWFncCwgMSwgaGFsZlNpemUgLSAxKTsKKyAgICBWZWN0b3JNYXRo
Ojp2c211bChyZWFsUDEsIDEsICZzY2FsZSwgcmVhbFAxLCAxLCBoYWxmU2l6ZSk7CisgICAgVmVj
dG9yTWF0aDo6dnNtdWwoaW1hZ1AxLCAxLCAmc2NhbGUsIGltYWdQMSwgMSwgaGFsZlNpemUpOwog
fQogCiB2b2lkIEZGVEZyYW1lOjpkb0ZGVChmbG9hdCogZGF0YSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121031</attachid>
            <date>2012-01-03 18:06:47 -0800</date>
            <delta_ts>2012-01-05 04:54:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>8343</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZmQ1OTkxLi5hMTk2NzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDEtMDMgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgQWRkIGEgU1NFMiBvcHRpbWl6ZWQgZnVuY3Rpb24genZtdWwgaW4gVmVjdG9yTWF0
Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODQy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHp2
bXVsIGluIEZGVEZyYW1lRkZNUEVHLmNwcDo6bXVsdGlwbHkoKSBhbmQgRkZURnJhbWVNYWMuY3Bw
OjptdWx0aXBseSgpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWZWN0b3JNYXRoOjp6dm11bCk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vVmVjdG9yTWF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2ZmbXBlZy9G
RlRGcmFtZUZGTVBFRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlwbHkpOgorCiAyMDEyLTAxLTAzICBXZWkgSmFtZXMg
IDxqYW1lcy53ZWlAaW50ZWwuY29tPgogCiAgICAgICAgIE9wdGltaXplIEF1ZGlvQnVmZmVyU291
cmNlTm9kZSBwcm9jZXNzIGJ5IGF2b2lkaW5nIGludGVycG9sYXRpb24gd2hlbiBwaXRjaFJhdGU9
PTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKaW5kZXgg
MmU2ZDFlMS4uOTRiYzc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vVmVjdG9yTWF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVj
dG9yTWF0aC5jcHAKQEAgLTcyLDYgKzcyLDI0IEBAIHZvaWQgdm11bChjb25zdCBmbG9hdCogc291
cmNlMVAsIGludCBzb3VyY2VTdHJpZGUxLCBjb25zdCBmbG9hdCogc291cmNlMlAsIGludCBzCiAj
ZW5kaWYKIH0KIAordm9pZCB6dm11bChjb25zdCBmbG9hdCogcmVhbDFQLCBjb25zdCBmbG9hdCog
aW1hZzFQLCBjb25zdCBmbG9hdCogcmVhbDJQLCBjb25zdCBmbG9hdCogaW1hZzJQLCBmbG9hdCog
cmVhbERlc3RQLCBmbG9hdCogaW1hZ0Rlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQorewor
ICAgIERTUFNwbGl0Q29tcGxleCBzYzE7CisgICAgRFNQU3BsaXRDb21wbGV4IHNjMjsKKyAgICBE
U1BTcGxpdENvbXBsZXggZGVzdDsKKyAgICBzYzEucmVhbHAgPSByZWFsMVA7CisgICAgc2MxLmlt
YWdwID0gaW1hZzFQOworICAgIHNjMi5yZWFscCA9IHJlYWwyUDsKKyAgICBzYzIuaW1hZ3AgPSBp
bWFnMlA7CisgICAgZGVzdC5yZWFscCA9IHJlYWxEZXN0UDsKKyAgICBkZXN0LmltYWdwID0gaW1h
Z0Rlc3RQOworI2lmIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykKKyAgICA6
Onp2bXVsKCZzYzEsIDEsICZzYzIsIDEsICZkZXN0LCAxLCBmcmFtZXNUb1Byb2Nlc3MsIDEpOwor
I2Vsc2UKKyAgICB2RFNQX3p2bXVsKCZzYzEsIDEsICZzYzIsIDEsICZkZXN0LCAxLCBmcmFtZXNU
b1Byb2Nlc3MsIDEpOworI2VuZGlmCit9CisKICNlbHNlCiAKIHZvaWQgdnNtdWwoY29uc3QgZmxv
YXQqIHNvdXJjZVAsIGludCBzb3VyY2VTdHJpZGUsIGNvbnN0IGZsb2F0KiBzY2FsZSwgZmxvYXQq
IGRlc3RQLCBpbnQgZGVzdFN0cmlkZSwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKQEAgLTI5OCw2
ICszMTYsNDEgQEAgdm9pZCB2bXVsKGNvbnN0IGZsb2F0KiBzb3VyY2UxUCwgaW50IHNvdXJjZVN0
cmlkZTEsIGNvbnN0IGZsb2F0KiBzb3VyY2UyUCwgaW50IHMKICAgICB9CiB9CiAKK3ZvaWQgenZt
dWwoY29uc3QgZmxvYXQqIHJlYWwxUCwgY29uc3QgZmxvYXQqIGltYWcxUCwgY29uc3QgZmxvYXQq
IHJlYWwyUCwgY29uc3QgZmxvYXQqIGltYWcyUCwgZmxvYXQqIHJlYWxEZXN0UCwgZmxvYXQqIGlt
YWdEZXN0UCwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICB1bnNpZ25lZCBpID0gMDsK
KyNpZmRlZiBfX1NTRTJfXworICAgIC8vIE9ubHkgdXNlIHRoZSBTU0Ugb3B0aW1pemF0aW9uIGlu
IHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUgMTYtYnl0ZSBhbGln
bmVkLiAKKyAgICAvLyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCB0byB0aGUgc2NhbGFyIGNvZGUg
YmVsb3cuCisgICAgaWYgKCEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlYWwxUCkgJiAw
eDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbWFnMVApICYg
MHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVhbDJQKSAm
IDB4MEYpCisgICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGltYWcyUCkg
JiAweDBGKQorICAgICAgICAmJiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZWFsRGVz
dFApICYgMHgwRikKKyAgICAgICAgJiYgIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW1h
Z0Rlc3RQKSAmIDB4MEYpKSB7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBlbmRTaXplID0g
ZnJhbWVzVG9Qcm9jZXNzIC0gZnJhbWVzVG9Qcm9jZXNzICUgNDsKKyAgICAgICAgd2hpbGUgKGkg
PCBlbmRTaXplKSB7CisgICAgICAgICAgICBfX20xMjggcmVhbDEgPSBfbW1fbG9hZF9wcyhyZWFs
MVAgKyBpKTsKKyAgICAgICAgICAgIF9fbTEyOCByZWFsMiA9IF9tbV9sb2FkX3BzKHJlYWwyUCAr
IGkpOworICAgICAgICAgICAgX19tMTI4IGltYWcxID0gX21tX2xvYWRfcHMoaW1hZzFQICsgaSk7
CisgICAgICAgICAgICBfX20xMjggaW1hZzIgPSBfbW1fbG9hZF9wcyhpbWFnMlAgKyBpKTsKKyAg
ICAgICAgICAgIF9fbTEyOCByZWFsID0gX21tX211bF9wcyhyZWFsMSwgcmVhbDIpOworICAgICAg
ICAgICAgcmVhbCA9IF9tbV9zdWJfcHMocmVhbCwgX21tX211bF9wcyhpbWFnMSwgaW1hZzIpKTsK
KyAgICAgICAgICAgIF9fbTEyOCBpbWFnID0gX21tX211bF9wcyhyZWFsMSwgaW1hZzIpOworICAg
ICAgICAgICAgaW1hZyA9IF9tbV9hZGRfcHMoaW1hZywgX21tX211bF9wcyhpbWFnMSwgcmVhbDIp
KTsKKyAgICAgICAgICAgIF9tbV9zdG9yZV9wcyhyZWFsRGVzdFAgKyBpLCByZWFsKTsKKyAgICAg
ICAgICAgIF9tbV9zdG9yZV9wcyhpbWFnRGVzdFAgKyBpLCBpbWFnKTsKKyAgICAgICAgICAgIGkg
Kz0gNDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGZvciAoOyBpIDwgZnJhbWVzVG9Q
cm9jZXNzOyArK2kpIHsKKyAgICAgICAgcmVhbERlc3RQW2ldID0gcmVhbDFQW2ldICogcmVhbDJQ
W2ldIC0gaW1hZzFQW2ldICogaW1hZzJQW2ldOworICAgICAgICBpbWFnRGVzdFBbaV0gPSByZWFs
MVBbaV0gKiBpbWFnMlBbaV0gKyBpbWFnMVBbaV0gKiByZWFsMlBbaV07CisgICAgfQorfQorCiAj
ZW5kaWYgLy8gT1MoREFSV0lOKQogCiB9IC8vIG5hbWVzcGFjZSBWZWN0b3JNYXRoCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmgKaW5kZXggYTNhOTJlNS4uNWFlODBk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguaApAQCAtMzcs
NiArMzcsOSBAQCB2b2lkIHZhZGQoY29uc3QgZmxvYXQqIHNvdXJjZTFQLCBpbnQgc291cmNlU3Ry
aWRlMSwgY29uc3QgZmxvYXQqIHNvdXJjZTJQLCBpbnQgcwogLy8gRm9yIGFuIGVsZW1lbnQtYnkt
ZWxlbWVudCBtdWx0aXBseSBvZiB0d28gZmxvYXQgdmVjdG9ycy4KIHZvaWQgdm11bChjb25zdCBm
bG9hdCogc291cmNlMVAsIGludCBzb3VyY2VTdHJpZGUxLCBjb25zdCBmbG9hdCogc291cmNlMlAs
IGludCBzb3VyY2VTdHJpZGUyLCBmbG9hdCogZGVzdFAsIGludCBkZXN0U3RyaWRlLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKIAorLy8gTXVsdGlwbGllcyB0d28gY29tcGxleCB2ZWN0b3JzLgor
dm9pZCB6dm11bChjb25zdCBmbG9hdCogcmVhbDFQLCBjb25zdCBmbG9hdCogaW1hZzFQLCBjb25z
dCBmbG9hdCogcmVhbDJQLCBjb25zdCBmbG9hdCogaW1hZzJQLCBmbG9hdCogcmVhbERlc3RQLCBm
bG9hdCogaW1hZ0Rlc3RQLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgVmVjdG9yTWF0aAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcAppbmRl
eCAwMzBlMTVhLi45Zjg5MzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAKQEAgLTExNSwyNyArMTE1LDI0IEBA
IHZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKICAgICBjb25z
dCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7CiAgICAgY29uc3QgZmxvYXQqIGlt
YWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOwogCisgICAgdW5zaWduZWQgaGFsZlNpemUgPSBmZnRT
aXplKCkgLyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcw
ID0gaW1hZ1AxWzBdOworCisgICAgVmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJl
YWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRp
cGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFs
MCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKwogICAg
IC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUg
TWFjLgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBi
YWNrIHRvIGludmVyc2UgRkZULgogICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxp
bmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKICAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRv
IGNoYW5nZSB0b28uCiAgICAgZmxvYXQgc2NhbGUgPSAwLjVmOwogCi0gICAgLy8gTXVsdGlwbHkg
dGhlIHBhY2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVudAotICAgIHJlYWxQMVswXSAqPSBzY2FsZSAq
IHJlYWxQMlswXTsKLSAgICBpbWFnUDFbMF0gKj0gc2NhbGUgKiBpbWFnUDJbMF07Ci0KLSAgICAv
LyBDb21wbGV4IG11bHRpcGxpY2F0aW9uLiBJZiB0aGlzIGxvb3AgdHVybnMgb3V0IHRvIGJlIGhv
dCB0aGVuCi0gICAgLy8gd2Ugc2hvdWxkIHVzZSBTU0Ugb3Igb3RoZXIgaW50cmluc2ljcyB0byBh
Y2NlbGVyYXRlIGl0LgotICAgIHVuc2lnbmVkIGhhbGZTaXplID0gZmZ0U2l6ZSgpIC8gMjsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBoYWxmU2l6ZTsgKytpKSB7Ci0gICAgICAgIGZs
b2F0IHJlYWxSZXN1bHQgPSByZWFsUDFbaV0gKiByZWFsUDJbaV0gLSBpbWFnUDFbaV0gKiBpbWFn
UDJbaV07Ci0gICAgICAgIGZsb2F0IGltYWdSZXN1bHQgPSByZWFsUDFbaV0gKiBpbWFnUDJbaV0g
KyBpbWFnUDFbaV0gKiByZWFsUDJbaV07Ci0KLSAgICAgICAgcmVhbFAxW2ldID0gc2NhbGUgKiBy
ZWFsUmVzdWx0OwotICAgICAgICBpbWFnUDFbaV0gPSBzY2FsZSAqIGltYWdSZXN1bHQ7Ci0gICAg
fQorICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwgJnNjYWxlLCByZWFsUDEsIDEsIGhh
bGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFnUDEsIDEsICZzY2FsZSwgaW1hZ1Ax
LCAxLCBoYWxmU2l6ZSk7CiB9CiAKIHZvaWQgRkZURnJhbWU6OmRvRkZUKGZsb2F0KiBkYXRhKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAK
aW5kZXggMDA2NGRmNy4uNmRmYmJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAKICNpbmNsdWRl
ICJGRlRGcmFtZS5oIgogCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNvbnN0IGludCBrTWF4RkZUUG93MlNpemUgPSAyNDsKQEAgLTEwNiwzMSArMTA4
LDIzIEBAIHZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKICAg
ICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7CiAgICAgY29uc3QgZmxv
YXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOwogCi0gICAgLy8gU2NhbGUgYWNjb3VudHMg
Zm9yIHZlY0xpYidzIHBlY3VsaWFyIHNjYWxpbmcKLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHJp
Z2h0IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBpbnZlcnNlIEZGVAotICAgIGZsb2F0IHNj
YWxlID0gMC41ZjsKLQotICAgIC8vIE11bHRpcGx5IHBhY2tlZCBEQy9ueXF1aXN0IGNvbXBvbmVu
dAotICAgIHJlYWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQMlswXTsKLSAgICBpbWFnUDFbMF0gKj0g
c2NhbGUgKiBpbWFnUDJbMF07Ci0KLSAgICAvLyBNdWx0aXBseSB0aGUgcmVzdCwgc2tpcHBpbmcg
cGFja2VkIERDL055cXVpc3QgY29tcG9uZW50cwotICAgIERTUFNwbGl0Q29tcGxleCBzYzEgPSBm
cmFtZTEuZHNwU3BsaXRDb21wbGV4KCk7Ci0gICAgc2MxLnJlYWxwKys7Ci0gICAgc2MxLmltYWdw
Kys7Ci0KLSAgICBEU1BTcGxpdENvbXBsZXggc2MyID0gZnJhbWUyLmRzcFNwbGl0Q29tcGxleCgp
OwotICAgIHNjMi5yZWFscCsrOwotICAgIHNjMi5pbWFncCsrOwotCiAgICAgdW5zaWduZWQgaGFs
ZlNpemUgPSBtX0ZGVFNpemUgLyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBdOworICAg
IGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOwogCiAgICAgLy8gQ29tcGxleCBtdWx0aXBseQotICAg
IHZEU1BfenZtdWwoJnNjMSwgMSwgJnNjMiwgMSwgJnNjMSwgMSwgaGFsZlNpemUgLSAxLCAxIC8q
IG5vcm1hbCBtdWx0aXBsaWNhdGlvbiAqLyk7CisgICAgVmVjdG9yTWF0aDo6enZtdWwocmVhbFAx
LCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUpOyAKKwor
ICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAgICByZWFs
UDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQ
MlswXTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIGZvciB2ZWNMaWIncyBwZWN1bGlhciBzY2Fs
aW5nCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSByaWdodCBzY2FsaW5nIGFsbCB0aGUgd2F5IGJh
Y2sgdG8gaW52ZXJzZSBGRlQKKyAgICBmbG9hdCBzY2FsZSA9IDAuNWY7CiAKLSAgICAvLyBXZSd2
ZSBwcmV2aW91c2x5IHNjYWxlZCB0aGUgcGFja2VkIHBhcnQsIG5vdyBzY2FsZSB0aGUgcmVzdC4u
Li4uCi0gICAgdkRTUF92c211bChzYzEucmVhbHAsIDEsICZzY2FsZSwgc2MxLnJlYWxwLCAxLCBo
YWxmU2l6ZSAtIDEpOwotICAgIHZEU1BfdnNtdWwoc2MxLmltYWdwLCAxLCAmc2NhbGUsIHNjMS5p
bWFncCwgMSwgaGFsZlNpemUgLSAxKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChyZWFsUDEsIDEs
ICZzY2FsZSwgcmVhbFAxLCAxLCBoYWxmU2l6ZSk7CisgICAgVmVjdG9yTWF0aDo6dnNtdWwoaW1h
Z1AxLCAxLCAmc2NhbGUsIGltYWdQMSwgMSwgaGFsZlNpemUpOwogfQogCiB2b2lkIEZGVEZyYW1l
Ojpkb0ZGVChmbG9hdCogZGF0YSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>