<?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>75126</bug_id>
          
          <creation_ts>2011-12-22 14:23:59 -0800</creation_ts>
          <short_desc>Add normalize attribute to ConvolverNode to disable normalization.</short_desc>
          <delta_ts>2012-01-11 09:12:31 -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>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>dslomov</cc>
    
    <cc>kbr</cc>
    
    <cc>ojan</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>526510</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-22 14:23:59 -0800</bug_when>
    <thetext>Add normalize attribute to ConvolverNode to disable normalization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526516</commentid>
    <comment_count>1</comment_count>
      <attachid>120381</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-22 14:31:53 -0800</bug_when>
    <thetext>Created attachment 120381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526518</commentid>
    <comment_count>2</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-22 14:33:03 -0800</bug_when>
    <thetext>Not ready for review;  tests are being written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526626</commentid>
    <comment_count>3</comment_count>
      <attachid>120406</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-22 16:27:32 -0800</bug_when>
    <thetext>Created attachment 120406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528843</commentid>
    <comment_count>4</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-03 10:41:52 -0800</bug_when>
    <thetext>Tests added.   To test the tail which should be zero but is not due to round-off, we break the tail into two pieces and check that the max is less than some threshold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528962</commentid>
    <comment_count>5</comment_count>
      <attachid>120406</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-03 12:34:02 -0800</bug_when>
    <thetext>Comment on attachment 120406
Patch

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

Ray, thanks for this patch, especially the layout test!  This particular test is important and will cover a lot of currently untested code relating to convolution and the FFTs.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Tests added

I would give details of test file added (convolution-mono-mono.html)

&gt; Source/WebCore/platform/audio/Reverb.cpp:97
&gt; +    // Only scale if we want normalization (and scale is ok).

WebKit style is to avoid comments which are obvious.  In this case line 98 is very clear

&gt; Source/WebCore/platform/audio/Reverb.cpp:104
&gt; +    // FIXME: What about roundoff?

I might add a little more detail in the FIXME:

// FIXME: consider if we should make a temporary scaled copy of impulseResponse instead of scaling it in-place due to loss of precision.

&gt; Source/WebCore/webaudio/ConvolverNode.cpp:50
&gt; +      m_normalize(true)

WebKit style is to put the comma &quot;,&quot; on line 50 (lined up with &quot;:&quot;) instead of at the end of line 49

&gt; Source/WebCore/webaudio/ConvolverNode.h:70
&gt; +    // for backward compatibility.

I wouldn&apos;t mention about backward compatibility.  It&apos;s by design

&gt; LayoutTests/webaudio/convolution-mono-mono-expected.txt:6
&gt; +PASS Test signal was correctly delayed.

&quot;correctly delayed&quot; should be something like &quot;correctly convolved&quot; (see comments below)

&gt; LayoutTests/webaudio/resources/convolution-testing.js:54
&gt; +            var diff = renderedData[i + 128] - referenceData[i];

The constant 128 is a &quot;magic&quot; constant representing the current latency of the convolution implementation.
We should define a constant for this at the top of the file with a comment describing why we&apos;re &quot;fudging&quot; this.
We should also write a WebKit bug tracking this issue - something like &quot;ConvolverNode should not incur processing latency&quot;

&gt; LayoutTests/webaudio/resources/convolution-testing.js:64
&gt; +        // silent.  But round-off prevents this from being completely

Instead of round-off, I would say &quot;phase errors&quot; in the final FFT due to precision limitations.
Also, if we go farther out it should be &quot;exactly zero&quot; and not &quot;even closer&quot;

&gt; LayoutTests/webaudio/resources/convolution-testing.js:73
&gt; +        var breakpoint = 12800;

Can you explain in more detail what you mean by &quot;two tail parts&quot;?

&gt; LayoutTests/webaudio/resources/convolution-testing.js:77
&gt; +        var threshold2 = 1e-7;

shouldn&apos;t we be seeing precisely zero for threshold2?  In other words, after we&apos;ve gone past the influence of the signal and the last FFT (phase errors) we
should be generating exactly zero.  This would be my intuition - interested in what we&apos;re actually seeing here?

&gt; LayoutTests/webaudio/resources/convolution-testing.js:78
&gt; +        for (var i = referenceData.length + 128; i &lt; referenceData.length + breakpoint; ++i) {

see comment about &quot;magic constant&quot; 128 above

&gt; LayoutTests/webaudio/resources/convolution-testing.js:79
&gt; +            var mag = Math.abs(renderedData[i]);

&quot;mag&quot; may be a poor choice of name here since it seems to be short for &quot;magnitude&quot; which has connotations of frequency-domain.  But, we&apos;re dealing with a time-domain sequence.

&gt; LayoutTests/webaudio/resources/convolution-testing.js:80
&gt; +            if (mag &gt; tailMax1) {

no brackets on single-line if(), here and in similar places

&gt; LayoutTests/webaudio/resources/convolution-testing.js:88
&gt; +        //console.log(&quot;Max1 = &quot; + tailMax1);

please remove commented-out line

&gt; LayoutTests/webaudio/resources/convolution-testing.js:97
&gt; +                // alert(i + &quot;: renderedData[i] = &quot; + renderedData[i]);

please remove commented-out line

&gt; LayoutTests/webaudio/resources/convolution-testing.js:100
&gt; +        //console.log(&quot;Max2 = &quot; + tailMax2);

please remove commented-out line

&gt; LayoutTests/webaudio/resources/convolution-testing.js:108
&gt; +        var maxDeviationFraction = maxDelta / valueAtMaxDelta;

Although we calculate this value, it doesn&apos;t look like we&apos;re checking it against a threshold to make sure the triangular portion is &quot;within the zone&quot;
This is probably the most important part of the test.  Similar to lines 119:123 we should have either say &quot;Triangular portion correctly convolved.&quot; 

Also, see line 119 where &quot;success&quot; is never changed to false anywhere in this code

&gt; LayoutTests/webaudio/resources/convolution-testing.js:117
&gt; +        // }

please remove commented-out lines

&gt; LayoutTests/webaudio/resources/convolution-testing.js:120
&gt; +            testPassed(&quot;Test signal was correctly delayed.&quot;);

Do we want the message to say &quot;correctly delayed&quot; or &quot;correctly convolved&quot;????</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529242</commentid>
    <comment_count>6</comment_count>
      <attachid>121037</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-03 18:53:45 -0800</bug_when>
    <thetext>Created attachment 121037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529247</commentid>
    <comment_count>7</comment_count>
      <attachid>120406</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-03 19:03:18 -0800</bug_when>
    <thetext>Comment on attachment 120406
Patch

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

&gt;&gt; Source/WebCore/platform/audio/Reverb.cpp:97
&gt;&gt; +    // Only scale if we want normalization (and scale is ok).
&gt; 
&gt; WebKit style is to avoid comments which are obvious.  In this case line 98 is very clear

Deleted.

&gt;&gt; Source/WebCore/platform/audio/Reverb.cpp:104
&gt;&gt; +    // FIXME: What about roundoff?
&gt; 
&gt; I might add a little more detail in the FIXME:
&gt; 
&gt; // FIXME: consider if we should make a temporary scaled copy of impulseResponse instead of scaling it in-place due to loss of precision.

Comment updated.

&gt;&gt; Source/WebCore/webaudio/ConvolverNode.cpp:50
&gt;&gt; +      m_normalize(true)
&gt; 
&gt; WebKit style is to put the comma &quot;,&quot; on line 50 (lined up with &quot;:&quot;) instead of at the end of line 49

Oops.  Done.

&gt;&gt; Source/WebCore/webaudio/ConvolverNode.h:70
&gt;&gt; +    // for backward compatibility.
&gt; 
&gt; I wouldn&apos;t mention about backward compatibility.  It&apos;s by design

Deleted.

&gt;&gt; LayoutTests/webaudio/convolution-mono-mono-expected.txt:6
&gt;&gt; +PASS Test signal was correctly delayed.
&gt; 
&gt; &quot;correctly delayed&quot; should be something like &quot;correctly convolved&quot; (see comments below)

Changed to correctly convolved.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:54
&gt;&gt; +            var diff = renderedData[i + 128] - referenceData[i];
&gt; 
&gt; The constant 128 is a &quot;magic&quot; constant representing the current latency of the convolution implementation.
&gt; We should define a constant for this at the top of the file with a comment describing why we&apos;re &quot;fudging&quot; this.
&gt; We should also write a WebKit bug tracking this issue - something like &quot;ConvolverNode should not incur processing latency&quot;

Constant defined and used as needed.   But tracking bug not entered yet.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:64
&gt;&gt; +        // silent.  But round-off prevents this from being completely
&gt; 
&gt; Instead of round-off, I would say &quot;phase errors&quot; in the final FFT due to precision limitations.
&gt; Also, if we go farther out it should be &quot;exactly zero&quot; and not &quot;even closer&quot;

Why just phase errors?  Surely there are magnitude errors as well.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:73
&gt;&gt; +        var breakpoint = 12800;
&gt; 
&gt; Can you explain in more detail what you mean by &quot;two tail parts&quot;?

Comments added that explain this better, I hope.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:77
&gt;&gt; +        var threshold2 = 1e-7;
&gt; 
&gt; shouldn&apos;t we be seeing precisely zero for threshold2?  In other words, after we&apos;ve gone past the influence of the signal and the last FFT (phase errors) we
&gt; should be generating exactly zero.  This would be my intuition - interested in what we&apos;re actually seeing here?

My mistake.  The first version had the breakpoint low enough that the samples after the breakpoint were not zero.  But in this version, I actually selected the breakpoint so that they are zero.  Threshold updated to 0.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:79
&gt;&gt; +            var mag = Math.abs(renderedData[i]);
&gt; 
&gt; &quot;mag&quot; may be a poor choice of name here since it seems to be short for &quot;magnitude&quot; which has connotations of frequency-domain.  But, we&apos;re dealing with a time-domain sequence.

I thought the context (Math.abs) made it clear this is the magnitude of the number.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:88
&gt;&gt; +        //console.log(&quot;Max1 = &quot; + tailMax1);
&gt; 
&gt; please remove commented-out line

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:97
&gt;&gt; +                // alert(i + &quot;: renderedData[i] = &quot; + renderedData[i]);
&gt; 
&gt; please remove commented-out line

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:100
&gt;&gt; +        //console.log(&quot;Max2 = &quot; + tailMax2);
&gt; 
&gt; please remove commented-out line

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:108
&gt;&gt; +        var maxDeviationFraction = maxDelta / valueAtMaxDelta;
&gt; 
&gt; Although we calculate this value, it doesn&apos;t look like we&apos;re checking it against a threshold to make sure the triangular portion is &quot;within the zone&quot;
&gt; This is probably the most important part of the test.  Similar to lines 119:123 we should have either say &quot;Triangular portion correctly convolved.&quot; 
&gt; 
&gt; Also, see line 119 where &quot;success&quot; is never changed to false anywhere in this code

Fixed.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:117
&gt;&gt; +        // }
&gt; 
&gt; please remove commented-out lines

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:120
&gt;&gt; +            testPassed(&quot;Test signal was correctly delayed.&quot;);
&gt; 
&gt; Do we want the message to say &quot;correctly delayed&quot; or &quot;correctly convolved&quot;????

Changed to &quot;correctly convolved&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529248</commentid>
    <comment_count>8</comment_count>
      <attachid>121039</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-03 19:03:56 -0800</bug_when>
    <thetext>Created attachment 121039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529688</commentid>
    <comment_count>9</comment_count>
      <attachid>121039</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 13:05:32 -0800</bug_when>
    <thetext>Comment on attachment 121039
Patch

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

Ray, this looks really good!  I&apos;ve added a couple of nits and some comments about re-arranging the order of a couple of tests (and adding one new one).

&gt; Source/WebCore/platform/audio/Reverb.cpp:97
&gt; +    if (normalize &amp;&amp; scale)

I would move this second if() up into the body of the first if() and just make this:

if (scale)

&gt; Source/WebCore/platform/audio/Reverb.cpp:105
&gt; +    // place.

typo: &quot;isntead&quot;

nit: I&apos;d also consider re-wrapping these comment lines to be more similar in length to the other lines in this file, some of which are quite long.

&gt; Source/WebCore/webaudio/ConvolverNode.h:57
&gt; +    // Normalize or not.

Comment seems a little obvious and perhaps not needed.

&gt; LayoutTests/webaudio/convolution-mono-mono-expected.txt:7
&gt; +PASS Triangular portion of convolution is correct

The order of these tests seems a little odd.  I would expect it would scan through the signal from start to finish and output test results in time order.

There&apos;s an extra test would should be added to verify that the leading 128 sample-frames (due to latency) are zero.  This test is important since garbage
could potentially be there and we&apos;re not checking for it right now.  I&apos;d suggest tests in this order:

1. Initial part of signal is zero due to expected latency in processing.
2. Main convolution result is triangular.
3. First part of tail of convolution after triangular portion is very close to zero.
4. Rendered signal at end of convolution is silent.

&gt; LayoutTests/webaudio/convolution-mono-mono.html:25
&gt; +        

This is a *really* great test.  It would be nice to have just a few lines of comments here describing at a very high level what we&apos;re doing in this test.
For example, it would be nice to say that we&apos;re convolving a square-pulse with another square-pulse and expect the result to be triangular.

&gt; LayoutTests/webaudio/resources/convolution-testing.js:9
&gt; +// convolver.  

Please add:

// https://bugs.webkit.org/show_bug.cgi?id=75564

&gt; LayoutTests/webaudio/resources/convolution-testing.js:55
&gt; +

Please add test that initial (latency) 128 sample-frames are zero.

&gt; LayoutTests/webaudio/resources/convolution-testing.js:67
&gt; +        

Please move line 91 and the actual 123:128 to this point in the file.  Right now &quot;allowedDeviationFraction&quot; is lumped in with the other constants
although it&apos;s part of a completely different test which can be done right here (for proper time order of tests).

the &quot;allowedDeviationFraction&quot; declaration should have an explanatory comment about what it is and how the value was determined.

&gt; LayoutTests/webaudio/resources/convolution-testing.js:128
&gt; +        }

Please see comments above about re-arranging time order of the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529811</commentid>
    <comment_count>10</comment_count>
      <attachid>121170</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-04 15:14:01 -0800</bug_when>
    <thetext>Created attachment 121170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529815</commentid>
    <comment_count>11</comment_count>
      <attachid>121039</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-04 15:17:37 -0800</bug_when>
    <thetext>Comment on attachment 121039
Patch

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

&gt;&gt; Source/WebCore/platform/audio/Reverb.cpp:105
&gt;&gt; +    // place.
&gt; 
&gt; typo: &quot;isntead&quot;
&gt; 
&gt; nit: I&apos;d also consider re-wrapping these comment lines to be more similar in length to the other lines in this file, some of which are quite long.

Typo fixed and these lines are approximately the same length as the first line instead of being much shorter.

&gt;&gt; Source/WebCore/webaudio/ConvolverNode.h:57
&gt;&gt; +    // Normalize or not.
&gt; 
&gt; Comment seems a little obvious and perhaps not needed.

Deleted.

&gt;&gt; LayoutTests/webaudio/convolution-mono-mono-expected.txt:7
&gt;&gt; +PASS Triangular portion of convolution is correct
&gt; 
&gt; The order of these tests seems a little odd.  I would expect it would scan through the signal from start to finish and output test results in time order.
&gt; 
&gt; There&apos;s an extra test would should be added to verify that the leading 128 sample-frames (due to latency) are zero.  This test is important since garbage
&gt; could potentially be there and we&apos;re not checking for it right now.  I&apos;d suggest tests in this order:
&gt; 
&gt; 1. Initial part of signal is zero due to expected latency in processing.
&gt; 2. Main convolution result is triangular.
&gt; 3. First part of tail of convolution after triangular portion is very close to zero.
&gt; 4. Rendered signal at end of convolution is silent.

Tests have been rearranged to output the results in the order suggested.  Test for the initial latency also added.

&gt;&gt; LayoutTests/webaudio/convolution-mono-mono.html:25
&gt;&gt; +        
&gt; 
&gt; This is a *really* great test.  It would be nice to have just a few lines of comments here describing at a very high level what we&apos;re doing in this test.
&gt; For example, it would be nice to say that we&apos;re convolving a square-pulse with another square-pulse and expect the result to be triangular.

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:9
&gt;&gt; +// convolver.  
&gt; 
&gt; Please add:
&gt; 
&gt; // https://bugs.webkit.org/show_bug.cgi?id=75564

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:55
&gt;&gt; +
&gt; 
&gt; Please add test that initial (latency) 128 sample-frames are zero.

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:67
&gt;&gt; +        
&gt; 
&gt; Please move line 91 and the actual 123:128 to this point in the file.  Right now &quot;allowedDeviationFraction&quot; is lumped in with the other constants
&gt; although it&apos;s part of a completely different test which can be done right here (for proper time order of tests).
&gt; 
&gt; the &quot;allowedDeviationFraction&quot; declaration should have an explanatory comment about what it is and how the value was determined.

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:128
&gt;&gt; +        }
&gt; 
&gt; Please see comments above about re-arranging time order of the tests.

Tests reordered as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529843</commentid>
    <comment_count>12</comment_count>
      <attachid>121170</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 15:49:04 -0800</bug_when>
    <thetext>Comment on attachment 121170
Patch

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

Looks good, but please fix indentation nit.

&gt; Source/WebCore/platform/audio/Reverb.cpp:95
&gt; +      scale = calculateNormalizationScale(impulseResponse);

nit: indentation should be four spaces here instead of two</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529848</commentid>
    <comment_count>13</comment_count>
      <attachid>121182</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-04 15:55:37 -0800</bug_when>
    <thetext>Created attachment 121182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529849</commentid>
    <comment_count>14</comment_count>
      <attachid>121170</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-04 15:56:22 -0800</bug_when>
    <thetext>Comment on attachment 121170
Patch

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

&gt;&gt; Source/WebCore/platform/audio/Reverb.cpp:95
&gt;&gt; +      scale = calculateNormalizationScale(impulseResponse);
&gt; 
&gt; nit: indentation should be four spaces here instead of two

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529852</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 15:57:57 -0800</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529864</commentid>
    <comment_count>16</comment_count>
      <attachid>121182</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-04 16:15:49 -0800</bug_when>
    <thetext>Comment on attachment 121182
Patch

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

The code and test look good overall, but I think the test should undergo one more revision. Feel free to upload another patch. r=me

&gt; LayoutTests/webaudio/convolution-mono-mono.html:19
&gt; +// produce a triangular pulse.  We verify the result is correct we

We verifiy -&gt; To verify

&gt; LayoutTests/webaudio/resources/convolution-testing.js:152
&gt; +        }

It may be worth factoring all of the code above this point into a separate function which returns a boolean indicating its success. That way you can use early returns to abort the test if any step goes wrong rather than setting the &quot;success&quot; variable in several places throughout the test (and executing code that&apos;s going to fail anyway if earlier portions of the test failed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530450</commentid>
    <comment_count>17</comment_count>
      <attachid>121182</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 11:15:49 -0800</bug_when>
    <thetext>Comment on attachment 121182
Patch

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

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:152
&gt;&gt; +        }
&gt; 
&gt; It may be worth factoring all of the code above this point into a separate function which returns a boolean indicating its success. That way you can use early returns to abort the test if any step goes wrong rather than setting the &quot;success&quot; variable in several places throughout the test (and executing code that&apos;s going to fail anyway if earlier portions of the test failed).

Putting these in a separate function is a good idea.  I will do that.  However, I think the only test worth exiting early is the initial latency test.  If that&apos;s wrong, everything after will be wrong.  The other tests  have experimentally determined thresholds, so I think it&apos;s worth continuing since it&apos;s not much more work.  Failing the triangle doesn&apos;t imply the tail will fail, and vice versa.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530464</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-05 11:23:09 -0800</bug_when>
    <thetext>I think it&apos;s better to *not* exit early for any of the tests, since different combinations of failures might provide clues as to what the regression is.  Failure in one test does not necessarily mean another test will fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530613</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-05 14:04:42 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I think it&apos;s better to *not* exit early for any of the tests, since different combinations of failures might provide clues as to what the regression is.  Failure in one test does not necessarily mean another test will fail.

I leave this to your best judgment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530697</commentid>
    <comment_count>20</comment_count>
      <attachid>121348</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 15:29:44 -0800</bug_when>
    <thetext>Created attachment 121348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530700</commentid>
    <comment_count>21</comment_count>
      <attachid>121182</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-05 15:31:33 -0800</bug_when>
    <thetext>Comment on attachment 121182
Patch

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

&gt;&gt; LayoutTests/webaudio/convolution-mono-mono.html:19
&gt;&gt; +// produce a triangular pulse.  We verify the result is correct we
&gt; 
&gt; We verifiy -&gt; To verify

Fixed.

&gt;&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:152
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; It may be worth factoring all of the code above this point into a separate function which returns a boolean indicating its success. That way you can use early returns to abort the test if any step goes wrong rather than setting the &quot;success&quot; variable in several places throughout the test (and executing code that&apos;s going to fail anyway if earlier portions of the test failed).
&gt; 
&gt; Putting these in a separate function is a good idea.  I will do that.  However, I think the only test worth exiting early is the initial latency test.  If that&apos;s wrong, everything after will be wrong.  The other tests  have experimentally determined thresholds, so I think it&apos;s worth continuing since it&apos;s not much more work.  Failing the triangle doesn&apos;t imply the tail will fail, and vice versa.

Each test is now in its own function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530910</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-05 21:02:39 -0800</bug_when>
    <thetext>Hi Ray, sorry to pile on a last minute change, but can you have a look at my last comment in the IPP patch:
https://bugs.webkit.org/show_bug.cgi?id=75522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530914</commentid>
    <comment_count>23</comment_count>
      <attachid>121348</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-05 21:09:04 -0800</bug_when>
    <thetext>Comment on attachment 121348
Patch

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

&gt; LayoutTests/webaudio/resources/convolution-testing.js:93
&gt; +        testFailed(&quot;Triangular portion of convolution is not incorrect.  Max deviation = &quot; + maxDeviationFraction + &quot; at &quot; + maxDeltaIndex);

&quot;is not incorrect&quot; -&gt; &quot;is not correct&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531164</commentid>
    <comment_count>24</comment_count>
      <attachid>121447</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 10:48:49 -0800</bug_when>
    <thetext>Created attachment 121447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531169</commentid>
    <comment_count>25</comment_count>
      <attachid>121348</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 10:51:48 -0800</bug_when>
    <thetext>Comment on attachment 121348
Patch

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

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:93
&gt;&gt; +        testFailed(&quot;Triangular portion of convolution is not incorrect.  Max deviation = &quot; + maxDeviationFraction + &quot; at &quot; + maxDeltaIndex);
&gt; 
&gt; &quot;is not incorrect&quot; -&gt; &quot;is not correct&quot;

Fixed.

Also, I&apos;ve changed the thresholds so that the tests will pass on OSX.  The thresholds and such are now in &quot;dB&quot; units, relative to the max of the triangular pulse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531174</commentid>
    <comment_count>26</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 11:04:05 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 121348 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121348&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:93
&gt; &gt;&gt; +        testFailed(&quot;Triangular portion of convolution is not incorrect.  Max deviation = &quot; + maxDeviationFraction + &quot; at &quot; + maxDeltaIndex);
&gt; &gt; 
&gt; &gt; &quot;is not incorrect&quot; -&gt; &quot;is not correct&quot;
&gt; 
&gt; Fixed.
&gt; 
&gt; Also, I&apos;ve changed the thresholds so that the tests will pass on OSX.  The thresholds and such are now in &quot;dB&quot; units, relative to the max of the triangular pulse.

This test is failing on windows.  According to the test, the triangular pulse is way off.  Need to investigate why....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531214</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-06 11:45:18 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Also, I&apos;ve changed the thresholds so that the tests will pass on OSX.  The thresholds and such are now in &quot;dB&quot; units, relative to the max of the triangular pulse.
&gt; 
&gt; This test is failing on windows.  According to the test, the triangular pulse is way off.  Need to investigate why....

That&apos;s strange.  It should be going through the same FFmpeg FFT, running on same/similar hardware as the Linux one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531413</commentid>
    <comment_count>28</comment_count>
      <attachid>121447</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-06 14:36:33 -0800</bug_when>
    <thetext>Comment on attachment 121447
Patch

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

Looks good to me if these comments are addressed.  I suspect the problems you&apos;re seeing on Windows may be related to a local build issue, and think we should get this patch landed.  If you still have your doubts about Windows, then you can also an appropriate line to LayoutTests/platform/chromium/test_expectations.txt and include that as part of this patch.

&gt; LayoutTests/webaudio/resources/convolution-testing.js:69
&gt; +function db20(x) {

This name is quite odd.  Please use something like &quot;linearToDecibels()&quot; which is the name we use in platform/audio/AudioUtilities.h

&gt; LayoutTests/webaudio/resources/convolution-testing.js:96
&gt; +    var maxDeviationFraction = db20(maxDelta / valueAtMaxDelta);

These variables should now be named &quot;allowedDeviationDecibels&quot; and &quot;maxDeviationDecibels&quot; since you have changed the units of comparison</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531423</commentid>
    <comment_count>29</comment_count>
      <attachid>121447</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-06 14:48:35 -0800</bug_when>
    <thetext>Comment on attachment 121447
Patch

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

&gt; LayoutTests/webaudio/resources/convolution-testing.js:95
&gt; +    var allowedDeviationFraction = db20(2.1e-7);

Please see comment below about &quot;express empirical constant directly in decibels&quot;

&gt; LayoutTests/webaudio/resources/convolution-testing.js:130
&gt; +    var threshold1 = db20(0.002/refMax);

.002  needs to be adjusted slightly higher so that the IPP code will pass.  Also, I was hoping you would define this empirical constant directly in decibels, instead of converting from a scalar value.
That way we can tell at a glance &quot;how far down in the noise&quot; in dB we can tolerate.  In other words, express this as a hard-coded constant in dB.  As it now stands the constant 0.002 is only in relation to refMax,
so it&apos;s hard to say what this means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531431</commentid>
    <comment_count>30</comment_count>
      <attachid>121503</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 15:04:07 -0800</bug_when>
    <thetext>Created attachment 121503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531436</commentid>
    <comment_count>31</comment_count>
      <attachid>121447</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 15:10:21 -0800</bug_when>
    <thetext>Comment on attachment 121447
Patch

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

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:69
&gt;&gt; +function db20(x) {
&gt; 
&gt; This name is quite odd.  Please use something like &quot;linearToDecibels()&quot; which is the name we use in platform/audio/AudioUtilities.h

Changed.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:96
&gt;&gt; +    var maxDeviationFraction = db20(maxDelta / valueAtMaxDelta);
&gt; 
&gt; These variables should now be named &quot;allowedDeviationDecibels&quot; and &quot;maxDeviationDecibels&quot; since you have changed the units of comparison

Done.

&gt;&gt; LayoutTests/webaudio/resources/convolution-testing.js:130
&gt;&gt; +    var threshold1 = db20(0.002/refMax);
&gt; 
&gt; .002  needs to be adjusted slightly higher so that the IPP code will pass.  Also, I was hoping you would define this empirical constant directly in decibels, instead of converting from a scalar value.
&gt; That way we can tell at a glance &quot;how far down in the noise&quot; in dB we can tolerate.  In other words, express this as a hard-coded constant in dB.  As it now stands the constant 0.002 is only in relation to refMax,
&gt; so it&apos;s hard to say what this means.

I prefer to have the IPP patch update this with a new value instead of doing it now.

But the new thresholds are now just numbers instead of conversions to dB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531464</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-06 15:40:37 -0800</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531473</commentid>
    <comment_count>33</comment_count>
      <attachid>121503</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-06 15:53:41 -0800</bug_when>
    <thetext>Comment on attachment 121503
Patch

Fine with me if it&apos;s fine with Chris, but this patch must be rebaselined against TOT; note the EWS failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531490</commentid>
    <comment_count>34</comment_count>
      <attachid>121517</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 16:16:30 -0800</bug_when>
    <thetext>Created attachment 121517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531494</commentid>
    <comment_count>35</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 16:17:56 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 121503 [details])
&gt; Fine with me if it&apos;s fine with Chris, but this patch must be rebaselined against TOT; note the EWS failures.

Rebaseline done.  I also removed the change to test_expectations.txt as recommended by Chris.  We&apos;re hoping for the best on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531544</commentid>
    <comment_count>36</comment_count>
      <attachid>121517</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-06 17:42:51 -0800</bug_when>
    <thetext>Comment on attachment 121517
Patch

EWS results look good. rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532420</commentid>
    <comment_count>37</comment_count>
      <attachid>121517</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 12:24:14 -0800</bug_when>
    <thetext>Comment on attachment 121517
Patch

Clearing flags on attachment: 121517

Committed r104476: &lt;http://trac.webkit.org/changeset/104476&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532421</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 12:24:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532487</commentid>
    <comment_count>39</comment_count>
      <attachid>121182</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-09 13:31:59 -0800</bug_when>
    <thetext>Comment on attachment 121182
Patch

Cleared review? from obsolete attachment 121182 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532492</commentid>
    <comment_count>40</comment_count>
      <attachid>121348</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-09 13:32:49 -0800</bug_when>
    <thetext>Comment on attachment 121348
Patch

Cleared review? from obsolete attachment 121348 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533744</commentid>
    <comment_count>41</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-11 01:34:38 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 121517 [details])
&gt; Clearing flags on attachment: 121517
&gt; 
&gt; Committed r104476: &lt;http://trac.webkit.org/changeset/104476&gt;

Just a note, WebAudio tests need to override the WebKitWebAudioEnabled LayoutTestController preference, it has to be set to 1. It&apos;s easy to forget when writing new tests it seems :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533944</commentid>
    <comment_count>42</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 09:12:31 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #37)
&gt; &gt; (From update of attachment 121517 [details] [details])
&gt; &gt; Clearing flags on attachment: 121517
&gt; &gt; 
&gt; &gt; Committed r104476: &lt;http://trac.webkit.org/changeset/104476&gt;
&gt; 
&gt; Just a note, WebAudio tests need to override the WebKitWebAudioEnabled LayoutTestController preference, it has to be set to 1. It&apos;s easy to forget when writing new tests it seems :(

Thanks for the info.  I didn&apos;t know that.  See https://bugs.webkit.org/show_bug.cgi?id=76066.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120381</attachid>
            <date>2011-12-22 14:31:53 -0800</date>
            <delta_ts>2011-12-22 16:27:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20111222143152.patch</filename>
            <type>text/plain</type>
            <size>6280</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk0N2M2ZjNjYmExNzFi
N2ExYWJhMWU0MmUzOGIwZGQxYmQ5ZjgxNS4uNTU5YjIxYWU0MWI0MDM0MjI1ZTVmM2U2NmRhMWVl
YzBjMDYwZGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTEyLTIyICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gcHJvZ3Jlc3MuLi4gKE9P
UFMhKQorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJldmVyYjo6UmV2ZXJiKTogQWRkIGV4dHJhIGFyZyB0byBpbmRpY2F0ZSB3aGV0aGVy
CisgICAgICAgIG5vcm1hbGl6YXRpb24gaXMgZW5hYmxlZCBvciBub3QsIGFuZCBkbyBpdC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmIuaDogVXBkYXRlIGRlY2xhcmF0aW9uLgorICAg
ICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZSk6IEluaXRpYWxpemUgYXR0cmlidXRlICh0bworICAg
ICAgICB0cnVlKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnNldEJ1ZmZlcik6
IENhbGwgUmV2ZXJiIHdpdGgKKyAgICAgICAgbm9ybWFsaXphdGlvbiBhcmd1bWVudC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2
ZXJOb2RlOjpub3JtYWxpemUpOiBOZXcgbWV0aG9kIHRvIHJldHVybgorICAgICAgICBub3JtYWxp
emF0aW9uLiAKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnNldE5vcm1hbGl6ZSk6
ICBOZXcgbWV0aG9kIHRvIHNldAorICAgICAgICBub3JtYWxpemF0aW9uLiAKKyAgICAgICAgKiB3
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbDogQWRkIG5vcm1hbGl6ZSBhdHRyaWJ1dGUuCisKIDIw
MTEtMTItMjEgIE1hdHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEFkZCBhbGwgSUNVIGxhbmd1YWdlcyB0byBMb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKaW5kZXggYjYyMDRm
ZmY3MzFjYTVlYzkyZjc4YmVmNDIwN2Y2YmY3NWNmZjFhYi4uYmJjYTEwOTBhYTJlMTViZjA5NzA3
ZGNiYjVjMTAwZjlmZDU2MmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwCkBAIC04NywxNiArODcsMjIgQEAgc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVOb3JtYWxp
emF0aW9uU2NhbGUoQXVkaW9CdXMqIHJlc3BvbnNlKQogICAgIHJldHVybiBzY2FsZTsKIH0KIAot
UmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNs
aWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29s
IHVzZUJhY2tncm91bmRUaHJlYWRzKQorUmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VS
ZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzLCBib29sIG5vcm1h
bGl6ZSkKIHsKLSAgICBkb3VibGUgc2NhbGUgPSBjYWxjdWxhdGVOb3JtYWxpemF0aW9uU2NhbGUo
aW1wdWxzZVJlc3BvbnNlKTsKLSAgICBpZiAoc2NhbGUpCisgICAgZG91YmxlIHNjYWxlID0gMTsK
KworICAgIGlmIChub3JtYWxpemUpCisgICAgICAgIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXph
dGlvblNjYWxlKGltcHVsc2VSZXNwb25zZSk7CisKKyAgICAvLyBPbmx5IHNjYWxlIGlmIHdlIHdh
bnQgbm9ybWFsaXphdGlvbiAoYW5kIHNjYWxlIGlzIG9rKS4KKyAgICBpZiAobm9ybWFsaXplICYm
IHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKHNjYWxlKTsKIAogICAgIGlu
aXRpYWxpemUoaW1wdWxzZVJlc3BvbnNlLCByZW5kZXJTbGljZVNpemUsIG1heEZGVFNpemUsIG51
bWJlck9mQ2hhbm5lbHMsIHVzZUJhY2tncm91bmRUaHJlYWRzKTsKIAotICAgIC8vIFVuZG8gc2Nh
bGluZyBzaW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiBvbiBp
bXB1bHNlUmVzcG9uc2UKLSAgICBpZiAoc2NhbGUpCisgICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNl
IHRoaXMgc2hvdWxkbid0IGJlIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIG9uIGltcHVsc2VSZXNw
b25zZS4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCByb3VuZG9mZj8KKyAgICBpZiAobm9ybWFs
aXplICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEuMCAvIHNjYWxl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRleCAyNmY1Zjhl
NjRlOGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTliZjY4NTBhOTAx
MzE5YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIu
aApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1lU2l6ZSA9IDI1
NiB9OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhpbnQsIHNvIHRo
ZSBGRlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUgc2FtZSB0aW1l
ICh2ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQpLgotICAgIFJl
dmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VT
aXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNl
QmFja2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNl
QnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90
IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJvb2wgbm9ybWFs
aXplKTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyog
ZGVzdGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZvaWQgcmVzZXQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5kZXggMzE1ODM1
NjE5NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uZGYzMTkwYjY4NDdlN2FhYjNlYjI3
NjljYmE4OWU3YjgxYjczMzNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5jcHAKQEAgLTQ2LDcgKzQ2LDggQEAgY29uc3Qgc2l6ZV90IE1heEZGVFNpemUgPSAzMjc2
ODsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUo
Y29udGV4dCwgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KSwKKyAgICAgIG1fbm9ybWFsaXplKHRydWUpCiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3
IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVPdXRwdXQodGhpcywgMikpKTsKQEAgLTEzNCw3ICsxMzUsNyBAQCB2b2lkIENvbnZvbHZl
ck5vZGU6OnNldEJ1ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQogICAgIAogICAgIC8vIENyZWF0
ZSB0aGUgcmV2ZXJiIHdpdGggdGhlIGdpdmVuIGltcHVsc2UgcmVzcG9uc2UuCiAgICAgYm9vbCB1
c2VCYWNrZ3JvdW5kVGhyZWFkcyA9ICFjb250ZXh0KCktPmlzT2ZmbGluZUNvbnRleHQoKTsKLSAg
ICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJiKCZidWZmZXJCdXMs
IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6ZSwgMiwgdXNlQmFj
a2dyb3VuZFRocmVhZHMpKTsKKyAgICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihu
ZXcgUmV2ZXJiKCZidWZmZXJCdXMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywg
TWF4RkZUU2l6ZSwgMiwgdXNlQmFja2dyb3VuZFRocmVhZHMsIG1fbm9ybWFsaXplKSk7CiAKICAg
ICB7CiAgICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGggcHJvY2VzcygpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCmluZGV4IGZiMjlkNWM1ZDI4N2I5MGJlNDUwNjY3NWYz
NTViZmJiYjc4NDNkOWUuLjQ1ZTJmYjZjMDQ3NTY5NzdkZmRmZWQ2NzdiZmI4ZDg5MjQ2ZDJkOGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKQEAgLTU0LDYgKzU0LDkg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0QnVmZmVyKEF1ZGlvQnVmZmVyKik7CiAgICAgQXVkaW9C
dWZmZXIqIGJ1ZmZlcigpOwogCisgICAgLy8gTm9ybWFsaXplIG9yIG5vdC4KKyAgICBib29sIG5v
cm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CisgICAgdm9pZCBzZXROb3Jt
YWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KIHByaXZh
dGU6CiAgICAgQ29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsK
IApAQCAtNjIsNiArNjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoaXMgc3luY2hyb25pemVz
IGR5bmFtaWMgY2hhbmdlcyB0byB0aGUgY29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRo
IHByb2Nlc3MoKS4KICAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAgICAvLyBO
b3JtYWxpemUgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3Igbm90LiBTaG91bGQgZGVmYXVsdCB0byB0
cnVlCisgICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgYm9vbCBtX25vcm1h
bGl6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwKaW5kZXggZDNlYjQ3NWYwYzc1YjM4NDU3NDQyNGJiOTFmOTIw
MzUwYjY5ZTcyZS4uYzY1OGJkYzE5ZWI1ZDYyYzgwNzU2Y2FmN2M5ZGE2ZDVhM2ViNGNlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKQEAgLTI5LDUgKzI5LDYg
QEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBDb252b2x2ZXJO
b2RlIDogQXVkaW9Ob2RlIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21TZXR0ZXJdIEF1
ZGlvQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwog
ICAgIH07CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120406</attachid>
            <date>2011-12-22 16:27:32 -0800</date>
            <delta_ts>2012-01-03 19:03:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20111222162730.patch</filename>
            <type>text/plain</type>
            <size>13878</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk0N2M2ZjNjYmExNzFi
N2ExYWJhMWU0MmUzOGIwZGQxYmQ5ZjgxNS4uNDQwYzU0ZTA0ZDg5MzJkODgyNmI3ZDA0YjA0MjJi
YTYzYWIyYWQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTEyLTIyICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQKKworICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXZl
cmI6OlJldmVyYik6IEFkZCBleHRyYSBhcmcgdG8gaW5kaWNhdGUgd2hldGhlcgorICAgICAgICBu
b3JtYWxpemF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LCBhbmQgZG8gaXQuCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiLmg6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiB3ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6
OkNvbnZvbHZlck5vZGUpOiBJbml0aWFsaXplIGF0dHJpYnV0ZSAodG8KKyAgICAgICAgdHJ1ZSku
CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIpOiBDYWxsIFJldmVy
YiB3aXRoCisgICAgICAgIG5vcm1hbGl6YXRpb24gYXJndW1lbnQuCisgICAgICAgICogd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6bm9y
bWFsaXplKTogTmV3IG1ldGhvZCB0byByZXR1cm4KKyAgICAgICAgbm9ybWFsaXphdGlvbi4gCisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpzZXROb3JtYWxpemUpOiAgTmV3IG1ldGhv
ZCB0byBzZXQKKyAgICAgICAgbm9ybWFsaXphdGlvbi4gCisgICAgICAgICogd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5pZGw6IEFkZCBub3JtYWxpemUgYXR0cmlidXRlLgorICAgICAgICAqIExheW91
dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby5odG1sOgorICAgICAgICAqIExh
eW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3Rp
bmcuanM6CisgICAgICAgIFRlc3QgZm9yIGNvbnZvbHV0aW9uLiAgVGVzdHMgb25seSB3b3JrIHdo
ZW4gbm9ybWFsaXphdGlvbiBpcworICAgICAgICBkaXNhYmxlZC4gCisKIDIwMTEtMTItMjEgIE1h
dHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBhbGwg
SUNVIGxhbmd1YWdlcyB0byBMb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKaW5kZXggYjYyMDRmZmY3MzFjYTVlYzky
Zjc4YmVmNDIwN2Y2YmY3NWNmZjFhYi4uYmJjYTEwOTBhYTJlMTViZjA5NzA3ZGNiYjVjMTAwZjlm
ZDU2MmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCkBAIC04
NywxNiArODcsMjIgQEAgc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVOb3JtYWxpemF0aW9uU2NhbGUo
QXVkaW9CdXMqIHJlc3BvbnNlKQogICAgIHJldHVybiBzY2FsZTsKIH0KIAotUmV2ZXJiOjpSZXZl
cmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6
ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91
bmRUaHJlYWRzKQorUmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZSwgc2l6
ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNo
YW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzLCBib29sIG5vcm1hbGl6ZSkKIHsKLSAg
ICBkb3VibGUgc2NhbGUgPSBjYWxjdWxhdGVOb3JtYWxpemF0aW9uU2NhbGUoaW1wdWxzZVJlc3Bv
bnNlKTsKLSAgICBpZiAoc2NhbGUpCisgICAgZG91YmxlIHNjYWxlID0gMTsKKworICAgIGlmIChu
b3JtYWxpemUpCisgICAgICAgIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKGlt
cHVsc2VSZXNwb25zZSk7CisKKyAgICAvLyBPbmx5IHNjYWxlIGlmIHdlIHdhbnQgbm9ybWFsaXph
dGlvbiAoYW5kIHNjYWxlIGlzIG9rKS4KKyAgICBpZiAobm9ybWFsaXplICYmIHNjYWxlKQogICAg
ICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKHNjYWxlKTsKIAogICAgIGluaXRpYWxpemUoaW1w
dWxzZVJlc3BvbnNlLCByZW5kZXJTbGljZVNpemUsIG1heEZGVFNpemUsIG51bWJlck9mQ2hhbm5l
bHMsIHVzZUJhY2tncm91bmRUaHJlYWRzKTsKIAotICAgIC8vIFVuZG8gc2NhbGluZyBzaW5jZSB0
aGlzIHNob3VsZG4ndCBiZSBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNlUmVzcG9u
c2UKLSAgICBpZiAoc2NhbGUpCisgICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNlIHRoaXMgc2hvdWxk
bid0IGJlIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIG9uIGltcHVsc2VSZXNwb25zZS4KKyAgICAv
LyBGSVhNRTogV2hhdCBhYm91dCByb3VuZG9mZj8KKyAgICBpZiAobm9ybWFsaXplICYmIHNjYWxl
KQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEuMCAvIHNjYWxlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRleCAyNmY1ZjhlNjRlOGRmNmRkZWRl
YWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTliZjY4NTBhOTAxMzE5YzJjYjlkNGJk
NGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaApAQCAtNDMsNyAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1lU2l6ZSA9IDI1NiB9OwogCiAgICAg
Ly8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhpbnQsIHNvIHRoZSBGRlRzIGNhbiBi
ZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lICh2ZXJ5IGJhZCB3
aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQpLgotICAgIFJldmVyYihBdWRpb0J1
cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3Qg
bWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRo
cmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXpl
X3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hh
bm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJvb2wgbm9ybWFsaXplKTsKIAogICAg
IHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25C
dXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZvaWQgcmVzZXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5kZXggMzE1ODM1NjE5NzFhNjk5YmIz
MGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uZGYzMTkwYjY4NDdlN2FhYjNlYjI3NjljYmE4OWU3Yjgx
YjczMzNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAg
LTQ2LDcgKzQ2LDggQEAgY29uc3Qgc2l6ZV90IE1heEZGVFNpemUgPSAzMjc2ODsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQq
IGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2Ft
cGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSwKKyAgICAgIG1f
bm9ybWFsaXplKHRydWUpCiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlu
cHV0KHRoaXMpKSk7CiAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQo
dGhpcywgMikpKTsKQEAgLTEzNCw3ICsxMzUsNyBAQCB2b2lkIENvbnZvbHZlck5vZGU6OnNldEJ1
ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgcmV2ZXJi
IHdpdGggdGhlIGdpdmVuIGltcHVsc2UgcmVzcG9uc2UuCiAgICAgYm9vbCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcyA9ICFjb250ZXh0KCktPmlzT2ZmbGluZUNvbnRleHQoKTsKLSAgICBPd25QdHI8UmV2
ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJiKCZidWZmZXJCdXMsIEF1ZGlvTm9kZTo6
UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6ZSwgMiwgdXNlQmFja2dyb3VuZFRocmVh
ZHMpKTsKKyAgICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJiKCZi
dWZmZXJCdXMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6ZSwg
MiwgdXNlQmFja2dyb3VuZFRocmVhZHMsIG1fbm9ybWFsaXplKSk7CiAKICAgICB7CiAgICAgICAg
IC8vIFN5bmNocm9uaXplIHdpdGggcHJvY2VzcygpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5oCmluZGV4IGZiMjlkNWM1ZDI4N2I5MGJlNDUwNjY3NWYzNTViZmJiYjc4NDNk
OWUuLjQ1ZTJmYjZjMDQ3NTY5NzdkZmRmZWQ2NzdiZmI4ZDg5MjQ2ZDJkOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKQEAgLTU0LDYgKzU0LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0QnVmZmVyKEF1ZGlvQnVmZmVyKik7CiAgICAgQXVkaW9CdWZmZXIqIGJ1ZmZl
cigpOwogCisgICAgLy8gTm9ybWFsaXplIG9yIG5vdC4KKyAgICBib29sIG5vcm1hbGl6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CisgICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBu
b3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KIHByaXZhdGU6CiAgICAgQ29u
dm9sdmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApAQCAtNjIsNiAr
NjUsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMgY2hh
bmdlcyB0byB0aGUgY29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3MoKS4K
ICAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAgICAvLyBOb3JtYWxpemUgdGhl
IGltcHVsc2UgcmVzcG9uc2Ugb3Igbm90LiBTaG91bGQgZGVmYXVsdCB0byB0cnVlCisgICAgLy8g
Zm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgYm9vbCBtX25vcm1hbGl6ZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0NvbnZvbHZlck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5pZGwKaW5kZXggZDNlYjQ3NWYwYzc1YjM4NDU3NDQyNGJiOTFmOTIwMzUwYjY5ZTcyZS4u
YzY1OGJkYzE5ZWI1ZDYyYzgwNzU2Y2FmN2M5ZGE2ZDVhM2ViNGNlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKQEAgLTI5LDUgKzI5LDYgQEAgbW9kdWxlIGF1
ZGlvIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBDb252b2x2ZXJOb2RlIDogQXVkaW9O
b2RlIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVyIGJ1
ZmZlcjsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwogICAgIH07CiB9CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDU1MGEwOGMxMjBhNjhhNWMwZjc3NDg0OWVjMjZmMzE1
YTkyZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRp
b24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUZXN0cyBDb252b2x2
ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5uZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9u
c2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5kZXJlZCBzaWduYWwg
YWZ0ZXIgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCitQQVNTIFRlc3Qgc2lnbmFsIHdh
cyBjb3JyZWN0bHkgZGVsYXllZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8uaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1v
bm8tbW9uby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlNjJjMDQxMmI2ODY4YWFjMDYxODcxY2E2MWRmNjc4
ZmE5MjAxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8uaHRtbApAQCAtMCwwICsxLDU1IEBACis8IURPQ1RZUEUgaHRtbD4KKwor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2NvbnZvbHV0aW9uLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKwor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQ29udm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEg
bW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNlLiIpOworCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8g
Y29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2Ft
cGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgdmFyIHNx
dWFyZVB1bHNlID0gY3JlYXRlU3F1YXJlUHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhG
cmFtZXMpOworICAgIHZhciB0cmlhbmdsZVB1bHNlID0gY3JlYXRlVHJpYW5nbGVQdWxzZUJ1ZmZl
cihjb250ZXh0LCAyICogcHVsc2VMZW5ndGhGcmFtZXMpOworICAgIAorICAgIHZhciBidWZmZXJT
b3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIGJ1ZmZlclNvdXJjZS5i
dWZmZXIgPSBzcXVhcmVQdWxzZTsKKyAgICAKKyAgICB2YXIgY29udm9sdmVyID0gY29udGV4dC5j
cmVhdGVDb252b2x2ZXIoKTsKKyAgICBjb252b2x2ZXIubm9ybWFsaXplID0gZmFsc2U7CisgICAg
Y29udm9sdmVyLmJ1ZmZlciA9IHNxdWFyZVB1bHNlOworCisgICAgYnVmZmVyU291cmNlLmNvbm5l
Y3QoY29udm9sdmVyKTsKKyAgICBjb252b2x2ZXIuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9u
KTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisgICAgCisgICAgY29udGV4dC5vbmNv
bXBsZXRlID0gY2hlY2tDb252b2x2ZWRSZXN1bHQodHJpYW5nbGVQdWxzZSk7CisgICAgY29udGV4
dC5zdGFydFJlbmRlcmluZygpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlYmE1MzhkNWI2N2E0MmRmNDA3MWE5OTdlOTNlY2Q1NDc4M2YzZjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24t
dGVzdGluZy5qcwpAQCAtMCwwICsxLDEyNyBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOwor
Cit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7Cit2YXIgcHVsc2VMZW5ndGhTZWNvbmRzID0g
MTsKK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3RoU2Vjb25kcyAqIHNhbXBsZVJh
dGU7CisKK2Z1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZy
YW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIo
MSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgbiA9
IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5u
ZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgIGRh
dGFbaV0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisvLyBUaGUgdHJpYW5n
bGUgYnVmZmVyIGhvbGRzIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgdGhlIGNvbnZvbHV0aW9uLgor
Ly8gSXQgbGluZWFybHkgcmFtcHMgdXAgZnJvbSAwIHRvIGl0cyBtYXhpbXVtIHZhbHVlIChhdCB0
aGUgY2VudGVyKSB0aGVuIGxpbmVhcmx5IHJhbXBzIGRvd24gdG8gMC4KKy8vIFRoZSBjZW50ZXIg
dmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSB0d28gc3F1YXJlIHB1bHNl
cyBvdmVybGFwIHRoZSBtb3N0LgorZnVuY3Rpb24gY3JlYXRlVHJpYW5nbGVQdWxzZUJ1ZmZlcihj
b250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRl
eHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUp
OworCisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGhhbGZMZW5ndGgg
PSBuIC8gMjsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwor
ICAgIAorICAgIHZhciBtYXhWYWx1ZSA9IGhhbGZMZW5ndGg7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGhhbGZMZW5ndGg7ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IGkgKyAxOworCisgICAg
Zm9yICh2YXIgaSA9IGhhbGZMZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBu
IC0gaSAtIDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKK2Z1bmN0aW9uIGNoZWNr
Q29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgdmFyIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7
CisKKyAgICAgICAgdmFyIHJlZmVyZW5jZURhdGEgPSB0cmlhbmdsZVB1bHNlLmdldENoYW5uZWxE
YXRhKDApOworICAgICAgICB2YXIgcmVuZGVyZWREYXRhID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hh
bm5lbERhdGEoMCk7CisgICAgCisgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAg
ICAgICAgdmFyIG4gPSByZW5kZXJlZEJ1ZmZlci5sZW5ndGg7CisKKyAgICAgICAgdmFyIG1heERl
bHRhID0gMDsKKyAgICAgICAgdmFyIHZhbHVlQXRNYXhEZWx0YSA9IDA7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlRGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
dmFyIGRpZmYgPSByZW5kZXJlZERhdGFbaSArIDEyOF0gLSByZWZlcmVuY2VEYXRhW2ldOworICAg
ICAgICAgICAgdmFyIHggPSBNYXRoLmFicyhkaWZmKTsKKyAgICAgICAgICAgIGlmICh4ID4gbWF4
RGVsdGEpIHsKKyAgICAgICAgICAgICAgICBtYXhEZWx0YSA9IHg7CisgICAgICAgICAgICAgICAg
dmFsdWVBdE1heERlbHRhID0gcmVmZXJlbmNlRGF0YVtpXTsKKyAgICAgICAgICAgICAgICBtYXhE
ZWx0YUluZGV4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgcG9ydGlvbiBhZnRlciBjb252b2x2ZWQgcG9ydGlvbiBpcyB0
b3RhbGx5CisgICAgICAgIC8vIHNpbGVudC4gIEJ1dCByb3VuZC1vZmYgcHJldmVudHMgdGhpcyBm
cm9tIGJlaW5nIGNvbXBsZXRlbHkKKyAgICAgICAgLy8gdHJ1ZS4gIEF0IHRoZSBlbmQgb2YgdGhl
IHRyaWFuZ2xlLCBpdCBzaG91bGQgYmUgY2xvc2UgdG8KKyAgICAgICAgLy8gemVyby4gIElmIHdl
IGdvIGZhcnRoZXIgb3V0LCBpdCBzaG91bGQgYmUgZXZlbiBjbG9zZXIuCisKKyAgICAgICAgdmFy
IGlzRmluYWxQb3J0aW9uU2lsZW50ID0gdHJ1ZTsKKyAgICAgICAgdmFyIHRhaWxNYXgxID0gMDsK
KworICAgICAgICAvLyBicmVha3BvaW50IGlzIHBvaW50IGRpdmlkaW5nIHRoZSB0d28gdGFpbCBw
YXJ0cyB3ZSdyZQorICAgICAgICAvLyBsb29raW5nIGF0LiAgRXhwZXJpbWVudGFsbHkgZGV0ZXJt
aW5lZC4KKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSAxMjgwMDsKKyAgICAgICAgLy8gVGhlc2Ug
dmFsdWVzIHdlcmUgZGV0ZXJtaW5lZCBieSBsb29raW5nIGF0IHRhaWxNYXgxIGFuZAorICAgICAg
ICAvLyB0YWlsTWF4Mi4KKyAgICAgICAgdmFyIHRocmVzaG9sZDEgPSAwLjAwMjsKKyAgICAgICAg
dmFyIHRocmVzaG9sZDIgPSAxZS03OworICAgICAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlRGF0
YS5sZW5ndGggKyAxMjg7IGkgPCByZWZlcmVuY2VEYXRhLmxlbmd0aCArIGJyZWFrcG9pbnQ7ICsr
aSkgeworICAgICAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKHJlbmRlcmVkRGF0YVtpXSk7Cisg
ICAgICAgICAgICBpZiAobWFnID4gdGFpbE1heDEpIHsKKyAgICAgICAgICAgICAgICB0YWlsTWF4
MSA9IG1hZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWcgPiB0aHJlc2hvbGQx
KSB7CisgICAgICAgICAgICAgICAgaXNGaW5hbFBvcnRpb25TaWxlbnQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vY29uc29sZS5sb2coIk1heDEgPSAiICsg
dGFpbE1heDEpOworICAgICAgICB2YXIgdGFpbE1heDIgPSAwOworICAgICAgICBmb3IgKHZhciBp
ID0gcmVmZXJlbmNlRGF0YS5sZW5ndGggKyBicmVha3BvaW50OyBpIDwgcmVuZGVyZWRCdWZmZXIu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBtYWcgPSBNYXRoLmFicyhyZW5kZXJlZERh
dGFbaV0pOworICAgICAgICAgICAgaWYgKG1hZyA+IHRhaWxNYXgyKSB7CisgICAgICAgICAgICAg
ICAgdGFpbE1heDIgPSBtYWc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5h
YnMocmVuZGVyZWREYXRhW2ldKSA+IHRocmVzaG9sZDIpIHsKKyAgICAgICAgICAgICAgICBpc0Zp
bmFsUG9ydGlvblNpbGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIGFsZXJ0KGkgKyAi
OiByZW5kZXJlZERhdGFbaV0gPSAiICsgcmVuZGVyZWREYXRhW2ldKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAvL2NvbnNvbGUubG9nKCJNYXgyID0gIiArIHRhaWxNYXgyKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChpc0ZpbmFsUG9ydGlvblNpbGVudCkgeworICAgICAgICAg
ICAgdGVzdFBhc3NlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24g
aXMgc2lsZW50LiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgi
UmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24gc2hvdWxkIGJlIHNpbGVu
dC4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIG1heERldmlhdGlvbkZyYWN0
aW9uID0gbWF4RGVsdGEgLyB2YWx1ZUF0TWF4RGVsdGE7CisKKyAgICAgICAgLy9jb25zb2xlLmxv
ZygibiA9ICIgKyBuICsgIiA6IG1heERlbHRhID0gIiArIG1heERlbHRhICsgIiA6IHZhbHVlQXRN
YXhEZWx0YSA9ICIgKyB2YWx1ZUF0TWF4RGVsdGEgKyAiIDogbWF4RGVsdGFJbmRleCA9ICIgKyBt
YXhEZWx0YUluZGV4ICsgIiA6IG1heERldmlhdGlvbkZyYWN0aW9uID0gIiArIG1heERldmlhdGlv
bkZyYWN0aW9uKTsKKworICAgICAgICAvLyBmb3IgKHZhciBpID0gbWF4RGVsdGFJbmRleCAtIDQ7
IGkgPCBtYXhEZWx0YUluZGV4ICsgNDsgKytpKSB7CisgICAgICAgIC8vIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVmZXJlbmNlRGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICAvLyAgICAgdmFyIGQx
ID0gcmVuZGVyZWREYXRhW2kgKyAxMjhdOworICAgICAgICAvLyAgICAgdmFyIGQyID0gcmVmZXJl
bmNlRGF0YVtpXTsKKyAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGkgKyAiOiAiICsgZDEgKyAi
LCAiICsgZDIpOworICAgICAgICAvLyB9CisgICAgICAgIAorICAgICAgICBpZiAoc3VjY2Vzcykg
eworICAgICAgICAgICAgdGVzdFBhc3NlZCgiVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBkZWxh
eWVkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGVzdCBz
aWduYWwgd2FzIG5vdCBjb3JyZWN0bHkgZGVsYXllZC4iKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121037</attachid>
            <date>2012-01-03 18:53:45 -0800</date>
            <delta_ts>2012-01-03 19:03:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120103185344.patch</filename>
            <type>text/plain</type>
            <size>14231</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQzMWU3NTU1M2EwNWQx
YjBlNzAxY2Q4ODY4MDRmOTBmNDc1ZDg0Zi4uODljYjEzODQ0NTM0YzFiYjhkMTUxYjA4MThjNWMy
ZmMzZjg2YzIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTAzICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZWJhc2VsaW5lZCBydW4tYmluZGluZ3Mt
dGVzdHMgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmlu
ZGV4IGI2MjA0ZmZmNzMxY2E1ZWM5MmY3OGJlZjQyMDdmNmJmNzVjZmYxYWIuLjViMTk1YmQ3YjZj
M2I2NTNlOTEyNDcwMzY3ZWEzNTFkZWExZDgxMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiLmNwcApAQCAtODcsMTYgKzg3LDIzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3Vs
YXRlTm9ybWFsaXphdGlvblNjYWxlKEF1ZGlvQnVzKiByZXNwb25zZSkKICAgICByZXR1cm4gc2Nh
bGU7CiB9CiAKLVJldmVyYjo6UmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykKK1JldmVyYjo6UmV2ZXJiKEF1ZGlvQnVz
KiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRT
aXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywg
Ym9vbCBub3JtYWxpemUpCiB7Ci0gICAgZG91YmxlIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXph
dGlvblNjYWxlKGltcHVsc2VSZXNwb25zZSk7Ci0gICAgaWYgKHNjYWxlKQorICAgIGRvdWJsZSBz
Y2FsZSA9IDE7CisKKyAgICBpZiAobm9ybWFsaXplKQorICAgICAgICBzY2FsZSA9IGNhbGN1bGF0
ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1bHNlUmVzcG9uc2UpOworCisgICAgaWYgKG5vcm1hbGl6
ZSAmJiBzY2FsZSkKICAgICAgICAgaW1wdWxzZVJlc3BvbnNlLT5zY2FsZShzY2FsZSk7CiAKICAg
ICBpbml0aWFsaXplKGltcHVsc2VSZXNwb25zZSwgcmVuZGVyU2xpY2VTaXplLCBtYXhGRlRTaXpl
LCBudW1iZXJPZkNoYW5uZWxzLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcyk7CiAKLSAgICAvLyBVbmRv
IHNjYWxpbmcgc2luY2UgdGhpcyBzaG91bGRuJ3QgYmUgYSBkZXN0cnVjdGl2ZSBvcGVyYXRpb24g
b24gaW1wdWxzZVJlc3BvbnNlCi0gICAgaWYgKHNjYWxlKQorICAgIC8vIFVuZG8gc2NhbGluZyBz
aW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNl
UmVzcG9uc2UuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgcm91bmRvZmY/IFBlcmhhcHMgY29u
c2lkZXIgbWFraW5nIGEKKyAgICAvLyB0ZW1wb3Jhcnkgc2NhbGVkIGNvcHkgaXNudGVhZCBvZiBz
Y2FsaW5nIGFuZCB1bnNjYWxpbmcgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBpZiAobm9ybWFsaXpl
ICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEuMCAvIHNjYWxlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRleCAyNmY1ZjhlNjRl
OGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTliZjY4NTBhOTAxMzE5
YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1lU2l6ZSA9IDI1NiB9
OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhpbnQsIHNvIHRoZSBG
RlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lICh2
ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQpLgotICAgIFJldmVy
YihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXpl
LCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFj
a2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVm
ZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJvb2wgbm9ybWFsaXpl
KTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVz
dGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZvaWQgcmVzZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5kZXggMzE1ODM1NjE5
NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uNmFmYzA5NWJjZGIwYjRkM2JhOWRjNjk1
NmI1YTgwZjk0MzI0ZTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb252b2x2ZXJO
b2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9ub3JtYWxp
emUodHJ1ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhp
cykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAy
KSkpOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1
ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0
aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KICAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRz
ID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0cjxSZXZlcmI+IHJl
dmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNz
aW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykpOwor
ICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1
cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VC
YWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKIAogICAgIHsKICAgICAgICAgLy8gU3lu
Y2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1ZjM1NWJmYmJiNzg0M2Q5ZS4uNTlj
NmViMTg1M2Y3ODVkNDgzZWU5NTAxMmNkYzU3ODk1MDdlYmM2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRpb0J1ZmZlciogYnVmZmVyKCk7CiAK
KyAgICAvLyBOb3JtYWxpemUgb3Igbm90LgorICAgIGJvb2wgbm9ybWFsaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub3JtYWxpemU7IH0KKyAgICB2b2lkIHNldE5vcm1hbGl6ZShib29sIG5vcm1hbGl6
ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQogcHJpdmF0ZToKICAgICBDb252b2x2ZXJO
b2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCkBAIC02Miw2ICs2NSw5IEBA
IHByaXZhdGU6CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBkeW5hbWljIGNoYW5nZXMgdG8g
dGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBwcm9jZXNzKCkuCiAgICAgbXV0
YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2NrOworCisgICAgLy8gTm9ybWFsaXplIHRoZSBpbXB1bHNl
IHJlc3BvbnNlIG9yIG5vdC4gTXVzdCBkZWZhdWx0IHRvIHRydWUuCisgICAgYm9vbCBtX25vcm1h
bGl6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwKaW5kZXggZDNlYjQ3NWYwYzc1YjM4NDU3NDQyNGJiOTFmOTIw
MzUwYjY5ZTcyZS4uYzY1OGJkYzE5ZWI1ZDYyYzgwNzU2Y2FmN2M5ZGE2ZDVhM2ViNGNlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKQEAgLTI5LDUgKzI5LDYg
QEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBDb252b2x2ZXJO
b2RlIDogQXVkaW9Ob2RlIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21TZXR0ZXJdIEF1
ZGlvQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwog
ICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1t
b25vLW1vbm8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24t
bW9uby1tb25vLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2IzMGY1NTliYTg1NDFlOTkwMDEx
NWNkMTEyN2UzZjBlYzEyOGYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitU
ZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5uZWwgd2l0aCBtb25vIGlt
cHVsc2UgcmVzcG9uc2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBGaXJz
dCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsCitQQVNT
IFJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4KK1BB
U1MgVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QKK1BBU1MgVGVz
dCBzaWduYWwgd2FzIGNvcnJlY3RseSBjb252b2x2ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9j
b252b2x1dGlvbi1tb25vLW1vbm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTYyYzA0MTJiNjg2OGFhYzA2
MTg3MWNhNjFkZjY3OGZhOTIwMWJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPCFET0NU
WVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIENvbnZvbHZlck5vZGUg
cHJvY2Vzc2luZyBhIG1vbm8gY2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNwb25zZS4iKTsK
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBv
ZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgIHZhciBzcXVhcmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQs
IHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFu
Z2xlUHVsc2VCdWZmZXIoY29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAg
ICB2YXIgYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBi
dWZmZXJTb3VyY2UuYnVmZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZl
ciA9IGNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9
IGZhbHNlOworICAgIGNvbnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZl
clNvdXJjZS5jb25uZWN0KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4
dC5kZXN0aW5hdGlvbik7CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAg
IGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2Up
OworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9u
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24t
dGVzdGluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTEwMjVhODBmNjZjNjhiMWZhZDRiNmQ5YTc4M2ZlYTRl
NGYwY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2Vz
L2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxMzUgQEAKK3ZhciBzYW1wbGVSYXRl
ID0gNDQxMDAuMDsKKwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVu
Z3RoU2Vjb25kcyA9IDE7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29u
ZHMgKiBzYW1wbGVSYXRlOworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4
IHNhbXBsZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMg
aW50byBhY2NvdW50IHdoZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2
ZXIuICAKK3ZhciBjb252b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKKworZnVuY3Rpb24gY3JlYXRl
U3F1YXJlUHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIg
YXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwg
Y29udGV4dC5zYW1wbGVSYXRlKTsKKworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOwor
ICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IDE7CisKKyAgICByZXR1
cm4gYXVkaW9CdWZmZXI7Cit9CisKKy8vIFRoZSB0cmlhbmdsZSBidWZmZXIgaG9sZHMgdGhlIGV4
cGVjdGVkIHJlc3VsdCBvZiB0aGUgY29udm9sdXRpb24uCisvLyBJdCBsaW5lYXJseSByYW1wcyB1
cCBmcm9tIDAgdG8gaXRzIG1heGltdW0gdmFsdWUgKGF0IHRoZSBjZW50ZXIpIHRoZW4gbGluZWFy
bHkgcmFtcHMgZG93biB0byAwLgorLy8gVGhlIGNlbnRlciB2YWx1ZSBjb3JyZXNwb25kcyB0byB0
aGUgcG9pbnQgd2hlcmUgdGhlIHR3byBzcXVhcmUgcHVsc2VzIG92ZXJsYXAgdGhlIG1vc3QuCitm
dW5jdGlvbiBjcmVhdGVUcmlhbmdsZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVu
Z3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2Ft
cGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgbiA9IGF1ZGlv
QnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgaGFsZkxlbmd0aCA9IG4gLyAyOworICAgIHZhciBkYXRh
ID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgdmFyIG1heFZhbHVl
ID0gaGFsZkxlbmd0aDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFsZkxlbmd0aDsgKytp
KQorICAgICAgICBkYXRhW2ldID0gaSArIDE7CisKKyAgICBmb3IgKHZhciBpID0gaGFsZkxlbmd0
aDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IG4gLSBpIC0gMTsKKworICAgIHJldHVy
biBhdWRpb0J1ZmZlcjsKK30KKworZnVuY3Rpb24gY2hlY2tDb252b2x2ZWRSZXN1bHQodHJpYW5n
bGVQdWxzZSkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcmVu
ZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKworICAgICAgICB2YXIgcmVmZXJl
bmNlRGF0YSA9IHRyaWFuZ2xlUHVsc2UuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgICAgIHZhciBy
ZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICAKKyAg
ICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgICAgICB2YXIgbiA9IHJlbmRlcmVk
QnVmZmVyLmxlbmd0aDsKKworICAgICAgICB2YXIgbWF4RGVsdGEgPSAwOworICAgICAgICB2YXIg
dmFsdWVBdE1heERlbHRhID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVu
Y2VEYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkRGF0
YVtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlRGF0YVtpXTsKKyAgICAgICAg
ICAgIHZhciB4ID0gTWF0aC5hYnMoZGlmZik7CisgICAgICAgICAgICBpZiAoeCA+IG1heERlbHRh
KSB7CisgICAgICAgICAgICAgICAgbWF4RGVsdGEgPSB4OworICAgICAgICAgICAgICAgIHZhbHVl
QXRNYXhEZWx0YSA9IHJlZmVyZW5jZURhdGFbaV07CisgICAgICAgICAgICAgICAgbWF4RGVsdGFJ
bmRleCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHBvcnRpb24gYWZ0ZXIgY29udm9sdmVkIHBvcnRpb24gaXMgdG90YWxs
eQorICAgICAgICAvLyBzaWxlbnQuICBCdXQgcm91bmQtb2ZmIHByZXZlbnRzIHRoaXMgZnJvbSBi
ZWluZyBjb21wbGV0ZWx5CisgICAgICAgIC8vIHRydWUuICBBdCB0aGUgZW5kIG9mIHRoZSB0cmlh
bmdsZSwgaXQgc2hvdWxkIGJlIGNsb3NlIHRvCisgICAgICAgIC8vIHplcm8uICBJZiB3ZSBnbyBm
YXJ0aGVyIG91dCwgaXQgc2hvdWxkIGJlIGV2ZW4gY2xvc2VyIGFuZAorICAgICAgICAvLyBldmVu
dHVhbGx5IHplcm8uCisKKyAgICAgICAgdmFyIGlzRmluYWxQb3J0aW9uU2lsZW50ID0gdHJ1ZTsK
KworICAgICAgICAvLyBGb3IgdGhlIHRhaWwgb2YgdGhlIGNvbnZvbHV0aW9uICh3aGVyZSB0aGUg
cmVzdWx0IHdvdWxkIGJlCisgICAgICAgIC8vIHRoZW9yZXRpY2FsbHkgemVybyksIHdlIHBhcnRp
dGlvbiB0aGUgdGFpbCBpbnRvIHR3bworICAgICAgICAvLyBwYXJ0cy4gIFRoZSBmaXJzdCBpcyB0
aGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFpbCwKKyAgICAgICAgLy8gd2hlcmUgd2UgdG9s
ZXJhdGUgYSBzbWFsbCBidXQgbm9uLXplcm8gdmFsdWUuICBUaGUgc2Vjb25kIHBhcnQgaXMKKyAg
ICAgICAgLy8gZmFydGhlciBhbG9uZyB0aGUgdGFpbCB3aGVyZSB0aGUgcmVzdWx0IHNob3VsZCBi
ZSB6ZXJvLgorICAgICAgICAKKyAgICAgICAgLy8gYnJlYWtwb2ludCBpcyBwb2ludCBkaXZpZGlu
ZyB0aGUgZmlyc3QgdHdvIHRhaWwgcGFydHMgd2UncmUKKyAgICAgICAgLy8gbG9va2luZyBhdC4g
IEV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgIHZhciB0YWlsMU1heCA9IDA7Cisg
ICAgICAgIHZhciB0YWlsMk1heCA9IDA7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gMTI4MDA7
CisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCB0
YWlsMU1heCBhbmQKKyAgICAgICAgLy8gdGFpbDJNYXguCisgICAgICAgIHZhciB0aHJlc2hvbGQx
ID0gMC4wMDI7CisgICAgICAgIHZhciB0aHJlc2hvbGQyID0gMDsKKyAgICAgICAgdmFyIGFsbG93
ZWREZXZpYXRpb25GcmFjdGlvbiA9IDIuNWUtNzsKKworICAgICAgICBmb3IgKHZhciBpID0gcmVm
ZXJlbmNlRGF0YS5sZW5ndGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZURh
dGEubGVuZ3RoICsgYnJlYWtwb2ludDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbWFnID0gTWF0
aC5hYnMocmVuZGVyZWREYXRhW2ldKTsKKyAgICAgICAgICAgIGlmIChtYWcgPiB0YWlsMU1heCkg
eworICAgICAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFnOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRhaWwxTWF4IDwgdGhyZXNob2xkMSkgeworICAgICAgICAgICAg
dGVzdFBhc3NlZCgiRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHN1ZmZpY2ll
bnRseSBzbWFsbCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgi
Rmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21h
bGwiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5j
ZURhdGEubGVuZ3RoICsgYnJlYWtwb2ludDsgaSA8IHJlbmRlcmVkRGF0YS5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgaWYgKE1hdGguYWJzKHJlbmRlcmVkRGF0YVtpXSkgPiAwKSB7CisgICAg
ICAgICAgICAgICAgaXNGaW5hbFBvcnRpb25TaWxlbnQgPSBmYWxzZTsgCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChpc0ZpbmFsUG9ydGlvblNpbGVudCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiUmVuZGVy
ZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc2lsZW50LiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVy
IHRhaWwgb2YgY29udm9sdXRpb24gc2hvdWxkIGJlIHNpbGVudC4iKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdmFyIG1heERldmlhdGlvbkZyYWN0aW9uID0gbWF4RGVsdGEgLyB2YWx1
ZUF0TWF4RGVsdGE7CisKKyAgICAgICAgaWYgKG1heERldmlhdGlvbkZyYWN0aW9uIDwgYWxsb3dl
ZERldmlhdGlvbkZyYWN0aW9uKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUcmlhbmd1bGFy
IHBvcnRpb24gb2YgY29udm9sdXRpb24gaXMgY29ycmVjdCIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9u
IGlzIG5vdCBpbmNvcnJlY3QiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0
bHkgY29udm9sdmVkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiVGVzdCBzaWduYWwgd2FzIG5vdCBjb3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAgICB9
CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121039</attachid>
            <date>2012-01-03 19:03:56 -0800</date>
            <delta_ts>2012-01-04 15:17:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120103190354.patch</filename>
            <type>text/plain</type>
            <size>14321</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQzMWU3NTU1M2EwNWQx
YjBlNzAxY2Q4ODY4MDRmOTBmNDc1ZDg0Zi4uODljYjEzODQ0NTM0YzFiYjhkMTUxYjA4MThjNWMy
ZmMzZjg2YzIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTAzICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZWJhc2VsaW5lZCBydW4tYmluZGluZ3Mt
dGVzdHMgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmlu
ZGV4IGI2MjA0ZmZmNzMxY2E1ZWM5MmY3OGJlZjQyMDdmNmJmNzVjZmYxYWIuLjViMTk1YmQ3YjZj
M2I2NTNlOTEyNDcwMzY3ZWEzNTFkZWExZDgxMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiLmNwcApAQCAtODcsMTYgKzg3LDIzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3Vs
YXRlTm9ybWFsaXphdGlvblNjYWxlKEF1ZGlvQnVzKiByZXNwb25zZSkKICAgICByZXR1cm4gc2Nh
bGU7CiB9CiAKLVJldmVyYjo6UmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykKK1JldmVyYjo6UmV2ZXJiKEF1ZGlvQnVz
KiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRT
aXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywg
Ym9vbCBub3JtYWxpemUpCiB7Ci0gICAgZG91YmxlIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXph
dGlvblNjYWxlKGltcHVsc2VSZXNwb25zZSk7Ci0gICAgaWYgKHNjYWxlKQorICAgIGRvdWJsZSBz
Y2FsZSA9IDE7CisKKyAgICBpZiAobm9ybWFsaXplKQorICAgICAgICBzY2FsZSA9IGNhbGN1bGF0
ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1bHNlUmVzcG9uc2UpOworCisgICAgaWYgKG5vcm1hbGl6
ZSAmJiBzY2FsZSkKICAgICAgICAgaW1wdWxzZVJlc3BvbnNlLT5zY2FsZShzY2FsZSk7CiAKICAg
ICBpbml0aWFsaXplKGltcHVsc2VSZXNwb25zZSwgcmVuZGVyU2xpY2VTaXplLCBtYXhGRlRTaXpl
LCBudW1iZXJPZkNoYW5uZWxzLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcyk7CiAKLSAgICAvLyBVbmRv
IHNjYWxpbmcgc2luY2UgdGhpcyBzaG91bGRuJ3QgYmUgYSBkZXN0cnVjdGl2ZSBvcGVyYXRpb24g
b24gaW1wdWxzZVJlc3BvbnNlCi0gICAgaWYgKHNjYWxlKQorICAgIC8vIFVuZG8gc2NhbGluZyBz
aW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNl
UmVzcG9uc2UuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgcm91bmRvZmY/IFBlcmhhcHMgY29u
c2lkZXIgbWFraW5nIGEKKyAgICAvLyB0ZW1wb3Jhcnkgc2NhbGVkIGNvcHkgaXNudGVhZCBvZiBz
Y2FsaW5nIGFuZCB1bnNjYWxpbmcgaW4KKyAgICAvLyBwbGFjZS4KKyAgICBpZiAobm9ybWFsaXpl
ICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEuMCAvIHNjYWxlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRleCAyNmY1ZjhlNjRl
OGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTliZjY4NTBhOTAxMzE5
YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1lU2l6ZSA9IDI1NiB9
OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhpbnQsIHNvIHRoZSBG
RlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lICh2
ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQpLgotICAgIFJldmVy
YihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXpl
LCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFj
a2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVm
ZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJvb2wgbm9ybWFsaXpl
KTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVz
dGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZvaWQgcmVzZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5kZXggMzE1ODM1NjE5
NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uNmFmYzA5NWJjZGIwYjRkM2JhOWRjNjk1
NmI1YTgwZjk0MzI0ZTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb252b2x2ZXJO
b2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9ub3JtYWxp
emUodHJ1ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhp
cykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAy
KSkpOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1
ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0
aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KICAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRz
ID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0cjxSZXZlcmI+IHJl
dmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNz
aW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykpOwor
ICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1
cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VC
YWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKIAogICAgIHsKICAgICAgICAgLy8gU3lu
Y2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1ZjM1NWJmYmJiNzg0M2Q5ZS4uNTlj
NmViMTg1M2Y3ODVkNDgzZWU5NTAxMmNkYzU3ODk1MDdlYmM2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRpb0J1ZmZlciogYnVmZmVyKCk7CiAK
KyAgICAvLyBOb3JtYWxpemUgb3Igbm90LgorICAgIGJvb2wgbm9ybWFsaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub3JtYWxpemU7IH0KKyAgICB2b2lkIHNldE5vcm1hbGl6ZShib29sIG5vcm1hbGl6
ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQogcHJpdmF0ZToKICAgICBDb252b2x2ZXJO
b2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCkBAIC02Miw2ICs2NSw5IEBA
IHByaXZhdGU6CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBkeW5hbWljIGNoYW5nZXMgdG8g
dGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBwcm9jZXNzKCkuCiAgICAgbXV0
YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2NrOworCisgICAgLy8gTm9ybWFsaXplIHRoZSBpbXB1bHNl
IHJlc3BvbnNlIG9yIG5vdC4gTXVzdCBkZWZhdWx0IHRvIHRydWUuCisgICAgYm9vbCBtX25vcm1h
bGl6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwKaW5kZXggZDNlYjQ3NWYwYzc1YjM4NDU3NDQyNGJiOTFmOTIw
MzUwYjY5ZTcyZS4uYzY1OGJkYzE5ZWI1ZDYyYzgwNzU2Y2FmN2M5ZGE2ZDVhM2ViNGNlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKQEAgLTI5LDUgKzI5LDYg
QEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBDb252b2x2ZXJO
b2RlIDogQXVkaW9Ob2RlIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21TZXR0ZXJdIEF1
ZGlvQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwog
ICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1t
b25vLW1vbm8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24t
bW9uby1tb25vLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2IzMGY1NTliYTg1NDFlOTkwMDEx
NWNkMTEyN2UzZjBlYzEyOGYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitU
ZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5uZWwgd2l0aCBtb25vIGlt
cHVsc2UgcmVzcG9uc2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBGaXJz
dCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsCitQQVNT
IFJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4KK1BB
U1MgVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QKK1BBU1MgVGVz
dCBzaWduYWwgd2FzIGNvcnJlY3RseSBjb252b2x2ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9j
b252b2x1dGlvbi1tb25vLW1vbm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTYyYzA0MTJiNjg2OGFhYzA2
MTg3MWNhNjFkZjY3OGZhOTIwMWJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPCFET0NU
WVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIENvbnZvbHZlck5vZGUg
cHJvY2Vzc2luZyBhIG1vbm8gY2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNwb25zZS4iKTsK
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBv
ZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgIHZhciBzcXVhcmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQs
IHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFu
Z2xlUHVsc2VCdWZmZXIoY29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAg
ICB2YXIgYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBi
dWZmZXJTb3VyY2UuYnVmZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZl
ciA9IGNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9
IGZhbHNlOworICAgIGNvbnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZl
clNvdXJjZS5jb25uZWN0KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4
dC5kZXN0aW5hdGlvbik7CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAg
IGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2Up
OworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9u
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24t
dGVzdGluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDlhY2RlNTZmN2VmNWI4ZjEwMTQ3MjAxY2ExNzUyNjdi
YWIxMTAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2Vz
L2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxMzggQEAKK3ZhciBzYW1wbGVSYXRl
ID0gNDQxMDAuMDsKKwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVu
Z3RoU2Vjb25kcyA9IDE7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29u
ZHMgKiBzYW1wbGVSYXRlOworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4
IHNhbXBsZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMg
aW50byBhY2NvdW50IHdoZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2
ZXIuICAKK3ZhciBjb252b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKKworZnVuY3Rpb24gY3JlYXRl
U3F1YXJlUHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIg
YXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwg
Y29udGV4dC5zYW1wbGVSYXRlKTsKKworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOwor
ICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IDE7CisKKyAgICByZXR1
cm4gYXVkaW9CdWZmZXI7Cit9CisKKy8vIFRoZSB0cmlhbmdsZSBidWZmZXIgaG9sZHMgdGhlIGV4
cGVjdGVkIHJlc3VsdCBvZiB0aGUgY29udm9sdXRpb24uCisvLyBJdCBsaW5lYXJseSByYW1wcyB1
cCBmcm9tIDAgdG8gaXRzIG1heGltdW0gdmFsdWUgKGF0IHRoZSBjZW50ZXIpIHRoZW4gbGluZWFy
bHkgcmFtcHMgZG93biB0byAwLgorLy8gVGhlIGNlbnRlciB2YWx1ZSBjb3JyZXNwb25kcyB0byB0
aGUgcG9pbnQgd2hlcmUgdGhlIHR3byBzcXVhcmUgcHVsc2VzIG92ZXJsYXAgdGhlIG1vc3QuCitm
dW5jdGlvbiBjcmVhdGVUcmlhbmdsZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVu
Z3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2Ft
cGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgbiA9IGF1ZGlv
QnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgaGFsZkxlbmd0aCA9IG4gLyAyOworICAgIHZhciBkYXRh
ID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgdmFyIG1heFZhbHVl
ID0gaGFsZkxlbmd0aDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFsZkxlbmd0aDsgKytp
KQorICAgICAgICBkYXRhW2ldID0gaSArIDE7CisKKyAgICBmb3IgKHZhciBpID0gaGFsZkxlbmd0
aDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IG4gLSBpIC0gMTsKKworICAgIHJldHVy
biBhdWRpb0J1ZmZlcjsKK30KKworZnVuY3Rpb24gY2hlY2tDb252b2x2ZWRSZXN1bHQodHJpYW5n
bGVQdWxzZSkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcmVu
ZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKworICAgICAgICB2YXIgcmVmZXJl
bmNlRGF0YSA9IHRyaWFuZ2xlUHVsc2UuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgICAgIHZhciBy
ZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICAKKyAg
ICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgICAgICB2YXIgbiA9IHJlbmRlcmVk
QnVmZmVyLmxlbmd0aDsKKworICAgICAgICB2YXIgbWF4RGVsdGEgPSAwOworICAgICAgICB2YXIg
dmFsdWVBdE1heERlbHRhID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVu
Y2VEYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkRGF0
YVtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlRGF0YVtpXTsKKyAgICAgICAg
ICAgIHZhciB4ID0gTWF0aC5hYnMoZGlmZik7CisgICAgICAgICAgICBpZiAoeCA+IG1heERlbHRh
KSB7CisgICAgICAgICAgICAgICAgbWF4RGVsdGEgPSB4OworICAgICAgICAgICAgICAgIHZhbHVl
QXRNYXhEZWx0YSA9IHJlZmVyZW5jZURhdGFbaV07CisgICAgICAgICAgICAgICAgbWF4RGVsdGFJ
bmRleCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHBvcnRpb24gYWZ0ZXIgY29udm9sdmVkIHBvcnRpb24gaXMgdG90YWxs
eQorICAgICAgICAvLyBzaWxlbnQuICBCdXQgcm91bmQtb2ZmIHByZXZlbnRzIHRoaXMgZnJvbSBi
ZWluZyBjb21wbGV0ZWx5CisgICAgICAgIC8vIHRydWUuICBBdCB0aGUgZW5kIG9mIHRoZSB0cmlh
bmdsZSwgaXQgc2hvdWxkIGJlIGNsb3NlIHRvCisgICAgICAgIC8vIHplcm8uICBJZiB3ZSBnbyBm
YXJ0aGVyIG91dCwgaXQgc2hvdWxkIGJlIGV2ZW4gY2xvc2VyIGFuZAorICAgICAgICAvLyBldmVu
dHVhbGx5IHplcm8uCisKKyAgICAgICAgdmFyIGlzRmluYWxQb3J0aW9uU2lsZW50ID0gdHJ1ZTsK
KworICAgICAgICAvLyBGb3IgdGhlIHRhaWwgb2YgdGhlIGNvbnZvbHV0aW9uICh3aGVyZSB0aGUg
cmVzdWx0IHdvdWxkIGJlCisgICAgICAgIC8vIHRoZW9yZXRpY2FsbHkgemVybyksIHdlIHBhcnRp
dGlvbiB0aGUgdGFpbCBpbnRvIHR3bworICAgICAgICAvLyBwYXJ0cy4gIFRoZSBmaXJzdCBpcyB0
aGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFpbCwKKyAgICAgICAgLy8gd2hlcmUgd2UgdG9s
ZXJhdGUgYSBzbWFsbCBidXQgbm9uLXplcm8gdmFsdWUuICBUaGUgc2Vjb25kIHBhcnQgaXMKKyAg
ICAgICAgLy8gZmFydGhlciBhbG9uZyB0aGUgdGFpbCB3aGVyZSB0aGUgcmVzdWx0IHNob3VsZCBi
ZSB6ZXJvLgorICAgICAgICAKKyAgICAgICAgLy8gYnJlYWtwb2ludCBpcyBwb2ludCBkaXZpZGlu
ZyB0aGUgZmlyc3QgdHdvIHRhaWwgcGFydHMgd2UncmUKKyAgICAgICAgLy8gbG9va2luZyBhdC4g
IEV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgIHZhciB0YWlsMU1heCA9IDA7Cisg
ICAgICAgIHZhciB0YWlsMk1heCA9IDA7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gMTI4MDA7
CisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGRldGVybWluZWQgYnkgbG9va2luZyBhdCB0
YWlsMU1heCBhbmQKKyAgICAgICAgLy8gdGFpbDJNYXguCisgICAgICAgIHZhciB0aHJlc2hvbGQx
ID0gMC4wMDI7CisgICAgICAgIHZhciB0aHJlc2hvbGQyID0gMDsKKyAgICAgICAgdmFyIGFsbG93
ZWREZXZpYXRpb25GcmFjdGlvbiA9IDIuNWUtNzsKKworICAgICAgICBmb3IgKHZhciBpID0gcmVm
ZXJlbmNlRGF0YS5sZW5ndGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZURh
dGEubGVuZ3RoICsgYnJlYWtwb2ludDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbWFnID0gTWF0
aC5hYnMocmVuZGVyZWREYXRhW2ldKTsKKyAgICAgICAgICAgIGlmIChtYWcgPiB0YWlsMU1heCkg
eworICAgICAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFnOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRhaWwxTWF4IDwgdGhyZXNob2xkMSkgeworICAgICAgICAgICAg
dGVzdFBhc3NlZCgiRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHN1ZmZpY2ll
bnRseSBzbWFsbCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Rmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21h
bGwiKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZURhdGEubGVuZ3RoICsgYnJlYWtwb2ludDsg
aSA8IHJlbmRlcmVkRGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKE1hdGguYWJz
KHJlbmRlcmVkRGF0YVtpXSkgPiAwKSB7CisgICAgICAgICAgICAgICAgaXNGaW5hbFBvcnRpb25T
aWxlbnQgPSBmYWxzZTsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc0ZpbmFsUG9ydGlvblNpbGVudCkgewor
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29u
dm9sdXRpb24gaXMgc2lsZW50LiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24gc2hvdWxk
IGJlIHNpbGVudC4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdmFyIG1heERldmlhdGlvbkZyYWN0aW9uID0gbWF4RGVsdGEgLyB2
YWx1ZUF0TWF4RGVsdGE7CisKKyAgICAgICAgaWYgKG1heERldmlhdGlvbkZyYWN0aW9uIDwgYWxs
b3dlZERldmlhdGlvbkZyYWN0aW9uKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUcmlhbmd1
bGFyIHBvcnRpb24gb2YgY29udm9sdXRpb24gaXMgY29ycmVjdCIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0
aW9uIGlzIG5vdCBpbmNvcnJlY3QiKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGVzdCBzaWduYWwgd2FzIG5vdCBj
b3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121170</attachid>
            <date>2012-01-04 15:14:01 -0800</date>
            <delta_ts>2012-01-04 15:56:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120104151400.patch</filename>
            <type>text/plain</type>
            <size>15945</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uM2Y3NTdlZTczNmQxYmFjYzFiMGEwMzgxMWJhZTcw
M2MwZmRhOTdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTA0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBVc2Ugb25lIGJpZyBwcmludGYgY29tbWFuZCBpbnN0ZWFkIG9mIG1hbnkg
Y2hhaW5lZCBlY2hvIGNvbW1hbmRzIHRvIGdlbmVyYXRlIGlkbF9maWxlcy50bXAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmluZGV4IGI2MjA0ZmZmNzMxY2E1ZWM5MmY3
OGJlZjQyMDdmNmJmNzVjZmYxYWIuLjU0OWYwMWFiNDg3ZGE5YzhjMTgwNDAwNjY0MTQ4ODAyZmM5
YTU3NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcApAQCAtODcs
MTYgKzg3LDIzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKEF1
ZGlvQnVzKiByZXNwb25zZSkKICAgICByZXR1cm4gc2NhbGU7CiB9CiAKLVJldmVyYjo6UmV2ZXJi
KEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVf
dCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcykKK1JldmVyYjo6UmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgYm9vbCBub3JtYWxpemUpCiB7Ci0gICAg
ZG91YmxlIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKGltcHVsc2VSZXNwb25z
ZSk7Ci0gICAgaWYgKHNjYWxlKQorICAgIGRvdWJsZSBzY2FsZSA9IDE7CisKKyAgICBpZiAobm9y
bWFsaXplKSB7CisgICAgICBzY2FsZSA9IGNhbGN1bGF0ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1
bHNlUmVzcG9uc2UpOworCisgICAgICBpZiAoc2NhbGUpCiAgICAgICAgIGltcHVsc2VSZXNwb25z
ZS0+c2NhbGUoc2NhbGUpOworICAgIH0KIAogICAgIGluaXRpYWxpemUoaW1wdWxzZVJlc3BvbnNl
LCByZW5kZXJTbGljZVNpemUsIG1heEZGVFNpemUsIG51bWJlck9mQ2hhbm5lbHMsIHVzZUJhY2tn
cm91bmRUaHJlYWRzKTsKIAotICAgIC8vIFVuZG8gc2NhbGluZyBzaW5jZSB0aGlzIHNob3VsZG4n
dCBiZSBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNlUmVzcG9uc2UKLSAgICBpZiAo
c2NhbGUpCisgICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNlIHRoaXMgc2hvdWxkbid0IGJlIGEgZGVz
dHJ1Y3RpdmUgb3BlcmF0aW9uIG9uIGltcHVsc2VSZXNwb25zZS4KKyAgICAvLyBGSVhNRTogV2hh
dCBhYm91dCByb3VuZG9mZj8gUGVyaGFwcyBjb25zaWRlciBtYWtpbmcgYSB0ZW1wb3Jhcnkgc2Nh
bGVkIGNvcHkKKyAgICAvLyBpbnN0ZWFkIG9mIHNjYWxpbmcgYW5kIHVuc2NhbGluZyBpbiBwbGFj
ZS4KKyAgICBpZiAobm9ybWFsaXplICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2Ut
PnNjYWxlKDEuMCAvIHNjYWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmIuaAppbmRleCAyNmY1ZjhlNjRlOGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYy
ZTBiNzA5ZTliZjY4NTBhOTAxMzE5YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7
IE1heEZyYW1lU2l6ZSA9IDI1NiB9OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVu
ZGVyaW5nIGhpbnQsIHNvIHRoZSBGRlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1
ciBhdCB0aGUgc2FtZSB0aW1lICh2ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGlt
ZSB0aHJlYWQpLgotICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBz
aXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9m
Q2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1
cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3Qg
bWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRo
cmVhZHMsIGJvb2wgbm9ybWFsaXplKTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291
cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OwogICAgIHZvaWQgcmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9k
ZS5jcHAKaW5kZXggMzE1ODM1NjE5NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uNmFm
YzA5NWJjZGIwYjRkM2JhOWRjNjk1NmI1YTgwZjk0MzI0ZTkzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29u
dGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlKQorICAgICwgbV9ub3JtYWxpemUodHJ1ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihu
ZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1
ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgQ29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgCiAgICAgLy8gQ3Jl
YXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KICAgICBib29s
IHVzZUJhY2tncm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwot
ICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1
cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VC
YWNrZ3JvdW5kVGhyZWFkcykpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRy
KG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVz
LCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKIAog
ICAgIHsKICAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1
ZjM1NWJmYmJiNzg0M2Q5ZS4uMTJmNDE3MjgxOWEwMGU1ZjA4N2FkOTk2NmEyMzQ0ZGE2ZDQyMmZi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRp
b0J1ZmZlciogYnVmZmVyKCk7CiAKKyAgICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9ybWFsaXplOyB9CisgICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsg
bV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KIHByaXZhdGU6CiAgICAgQ29udm9sdmVyTm9kZShB
dWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApAQCAtNjIsNiArNjQsOSBAQCBwcml2
YXRlOgogCiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBj
b252b2x1dGlvbiBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2VzcygpLgogICAgIG11dGFibGUg
TXV0ZXggbV9wcm9jZXNzTG9jazsKKworICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxzZSByZXNw
b25zZSBvciBub3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgorICAgIGJvb2wgbV9ub3JtYWxpemU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaWRsCmluZGV4IGQzZWI0NzVmMGM3NWIzODQ1NzQ0MjRiYjkxZjkyMDM1MGI2
OWU3MmUuLmM2NThiZGMxOWViNWQ2MmM4MDc1NmNhZjdjOWRhNmQ1YTNlYjRjZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCkBAIC0yOSw1ICsyOSw2IEBAIG1v
ZHVsZSBhdWRpbyB7CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gQ29udm9sdmVyTm9kZSA6
IEF1ZGlvTm9kZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tU2V0dGVyXSBBdWRpb0J1
ZmZlciBidWZmZXI7CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIG5vcm1hbGl6ZTsKICAgICB9
OwogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1t
b25vLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0
NDM3NTNhNTZhNzM1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Nv
bnZvbHV0aW9uLW1vbm8tbW9uby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMg
Q29udm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNl
IHJlc3BvbnNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgSW5pdGlhbCBs
YXRlbmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuCitQQVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBv
ZiBjb252b2x1dGlvbiBpcyBjb3JyZWN0LgorUEFTUyBGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29u
dm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLgorUEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0
ZXIgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBj
b3JyZWN0bHkgY29udm9sdmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0
aW9uLW1vbm8tbW9uby5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9u
by1tb25vLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFkN2UzMGY1ZTRjMGM4ZGY3YjcwNGMyOTllYjhmNTAz
MzY5OTI1ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0
aW9uLW1vbm8tbW9uby5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
Y29udm9sdXRpb24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8
ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBt
b25vIGNoYW5uZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuIik7CisKKy8vIFRvIHRlc3Qg
dGhlIGNvbnZvbHZlciwgd2UgY29udm9sdmUgdHdvIHNxdWFyZSBwdWxzZXMgdG9nZXRoZXIgdG8K
Ky8vIHByb2R1Y2UgYSB0cmlhbmd1bGFyIHB1bHNlLiAgV2UgdmVyaWZ5IHRoZSByZXN1bHQgaXMg
Y29ycmVjdCB3ZQorLy8gY2hlY2sgc2V2ZXJhbCBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgRmlyc3Qs
IHdlIG1ha2Ugc3VyZSB0aGUgaW5pdGlhbAorLy8gcGFydCBvZiB0aGUgcmVzdWx0IGlzIHplcm8g
KGR1ZSB0byB0aGUgbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyKS4KKy8vIE5leHQsIHRoZSB0cmlh
bmd1bGFyIHB1bHNlIHNob3VsZCBtYXRjaCB0aGUgdGhlb3JldGljYWwgcmVzdWx0IHRvCisvLyB3
aXRoaW4gc29tZSByb3VuZG9mZi4gIEFmdGVyIHRoZSB0cmlhbmd1bGFyIHB1bHNlLCB0aGUgcmVz
dWx0CisvLyBzaG91bGQgYmUgZXhhY3RseSB6ZXJvLCBidXQgcm91bmQtb2ZmIHByZXZlbnRzIHRo
YXQuICBXZSBtYWtlIHN1cmUKKy8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBwdWxzZSBpcyBzdWZmaWNp
ZW50bHkgY2xvc2UgdG8gemVyby4gIEZpbmFsbHksCisvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBl
eGFjdGx5IHplcm8gYmVjYXVzZSB0aGUgaW5wdXRzIGFyZSBleGFjdGx5CisvLyB6ZXJvLgorZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5l
IGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0
KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAg
IHZhciBzcXVhcmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNl
TGVuZ3RoRnJhbWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFuZ2xlUHVs
c2VCdWZmZXIoY29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAgICB2YXIg
YnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBidWZmZXJT
b3VyY2UuYnVmZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZlciA9IGNv
bnRleHQuY3JlYXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9IGZhbHNl
OworICAgIGNvbnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZlclNvdXJj
ZS5jb25uZWN0KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4dC5kZXN0
aW5hdGlvbik7CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAgIGNvbnRl
eHQub25jb21wbGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpOworICAg
IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3Rp
bmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGlu
Zy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MzUxNTExN2NmNjhiOGM4Y2RiMGE0ZDUzYjdiZmYxZGZlYzExYWRm
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZv
bHV0aW9uLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxNjIgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQx
MDAuMDsKKwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vj
b25kcyA9IDE7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBz
YW1wbGVSYXRlOworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBs
ZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBh
Y2NvdW50IHdoZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2ZXIuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCit2YXIgY29u
dm9sdmVEZWxheVNhbXBsZXMgPSAxMjg7CisKK2Z1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVm
ZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0g
Y29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxl
UmF0ZSk7CisKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YSA9
IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVy
OworfQorCisvLyBUaGUgdHJpYW5nbGUgYnVmZmVyIGhvbGRzIHRoZSBleHBlY3RlZCByZXN1bHQg
b2YgdGhlIGNvbnZvbHV0aW9uLgorLy8gSXQgbGluZWFybHkgcmFtcHMgdXAgZnJvbSAwIHRvIGl0
cyBtYXhpbXVtIHZhbHVlIChhdCB0aGUgY2VudGVyKSB0aGVuIGxpbmVhcmx5IHJhbXBzIGRvd24g
dG8gMC4KKy8vIFRoZSBjZW50ZXIgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHBvaW50IHdoZXJl
IHRoZSB0d28gc3F1YXJlIHB1bHNlcyBvdmVybGFwIHRoZSBtb3N0LgorZnVuY3Rpb24gY3JlYXRl
VHJpYW5nbGVQdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZh
ciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3Ro
LCBjb250ZXh0LnNhbXBsZVJhdGUpOworCisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7
CisgICAgdmFyIGhhbGZMZW5ndGggPSBuIC8gMjsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVmZmVy
LmdldENoYW5uZWxEYXRhKDApOworICAgIAorICAgIHZhciBtYXhWYWx1ZSA9IGhhbGZMZW5ndGg7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbGZMZW5ndGg7ICsraSkKKyAgICAgICAgZGF0
YVtpXSA9IGkgKyAxOworCisgICAgZm9yICh2YXIgaSA9IGhhbGZMZW5ndGg7IGkgPCBuOyArK2kp
CisgICAgICAgIGRhdGFbaV0gPSBuIC0gaSAtIDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7
Cit9CisKK2Z1bmN0aW9uIGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHJlbmRlcmVkQnVmZmVyID0g
ZXZlbnQucmVuZGVyZWRCdWZmZXI7CisKKyAgICAgICAgdmFyIHJlZmVyZW5jZURhdGEgPSB0cmlh
bmdsZVB1bHNlLmdldENoYW5uZWxEYXRhKDApOworICAgICAgICB2YXIgcmVuZGVyZWREYXRhID0g
cmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgICAgIHZhciBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAKKyAgICAgICAgdmFyIG4gPSByZW5kZXJlZEJ1ZmZlci5sZW5ndGg7
CisKKyAgICAgICAgdmFyIG1heERlbHRhID0gMDsKKyAgICAgICAgdmFyIHZhbHVlQXRNYXhEZWx0
YSA9IDA7CisKKyAgICAgICAgLy8gVmVyaWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3RseSB6
ZXJvIGJlY2F1c2Ugb2YgdGhlCisgICAgICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlci4K
KworICAgICAgICB2YXIgaW5pdGlhbFplcm8gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNvbnZvbHZlRGVsYXlTYW1wbGVzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChyZW5k
ZXJlZERhdGFbaV0gIT0gMCkgeworICAgICAgICAgICAgICAgIGluaXRpYWxaZXJvID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW5pdGlhbFplcm8pIHsKKyAgICAgICAgICB0ZXN0UGFzc2VkKCJJbml0aWFsIGxh
dGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICB0ZXN0RmFpbGVkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIG5vdCBzaWxl
bnQuIik7CisgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVmVyaWZ5IHRoZSB0cmlhbmd1bGFyIHB1bHNlIGlzIGFjdHVhbGx5IHRyaWFuZ3VsYXIKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VEYXRhLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICB2YXIgZGlmZiA9IHJlbmRlcmVkRGF0YVtpICsgY29udm9sdmVEZWxheVNhbXBs
ZXNdIC0gcmVmZXJlbmNlRGF0YVtpXTsKKyAgICAgICAgICAgIHZhciB4ID0gTWF0aC5hYnMoZGlm
Zik7CisgICAgICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CisgICAgICAgICAgICAgICAgbWF4
RGVsdGEgPSB4OworICAgICAgICAgICAgICAgIHZhbHVlQXRNYXhEZWx0YSA9IHJlZmVyZW5jZURh
dGFbaV07CisgICAgICAgICAgICAgICAgbWF4RGVsdGFJbmRleCA9IGk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24gd2FzIGRl
dGVybWluZWQgZXhwZXJpbWVudGFsbHkuICBJdAorICAgICAgICAvLyBpcyB0aGUgdGhyZXNob2xk
IG9mIHRoZSByZWxhdGl2ZSBlcnJvciBhdCB0aGUgbWF4aW11bQorICAgICAgICAvLyBkaWZmZXJl
bmNlIGJldHdlZW4gdGhlIHRydWUgdHJpYW5ndWxhciBwdWxzZSBhbmQgdGhlCisgICAgICAgIC8v
IHJlbmRlcmVkIHB1bHNlLgorICAgICAgICB2YXIgYWxsb3dlZERldmlhdGlvbkZyYWN0aW9uID0g
MS41ZS03OworICAgICAgICB2YXIgbWF4RGV2aWF0aW9uRnJhY3Rpb24gPSBtYXhEZWx0YSAvIHZh
bHVlQXRNYXhEZWx0YTsKKworICAgICAgICBpZiAobWF4RGV2aWF0aW9uRnJhY3Rpb24gPCBhbGxv
d2VkRGV2aWF0aW9uRnJhY3Rpb24pIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRyaWFuZ3Vs
YXIgcG9ydGlvbiBvZiBjb252b2x1dGlvbiBpcyBjb3JyZWN0LiIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0
aW9uIGlzIG5vdCBpbmNvcnJlY3QuICBNYXggZGV2aWF0aW9uID0gIiArIG1heERldmlhdGlvbkZy
YWN0aW9uKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcG9ydGlvbiBhZnRlciBjb252b2x2ZWQgcG9y
dGlvbiBpcyB0b3RhbGx5CisgICAgICAgIC8vIHNpbGVudC4gIEJ1dCByb3VuZC1vZmYgcHJldmVu
dHMgdGhpcyBmcm9tIGJlaW5nIGNvbXBsZXRlbHkKKyAgICAgICAgLy8gdHJ1ZS4gIEF0IHRoZSBl
bmQgb2YgdGhlIHRyaWFuZ2xlLCBpdCBzaG91bGQgYmUgY2xvc2UgdG8KKyAgICAgICAgLy8gemVy
by4gIElmIHdlIGdvIGZhcnRoZXIgb3V0LCBpdCBzaG91bGQgYmUgZXZlbiBjbG9zZXIgYW5kCisg
ICAgICAgIC8vIGV2ZW50dWFsbHkgemVyby4KKworICAgICAgICB2YXIgaXNGaW5hbFBvcnRpb25T
aWxlbnQgPSB0cnVlOworCisgICAgICAgIC8vIEZvciB0aGUgdGFpbCBvZiB0aGUgY29udm9sdXRp
b24gKHdoZXJlIHRoZSByZXN1bHQgd291bGQgYmUKKyAgICAgICAgLy8gdGhlb3JldGljYWxseSB6
ZXJvKSwgd2UgcGFydGl0aW9uIHRoZSB0YWlsIGludG8gdHdvCisgICAgICAgIC8vIHBhcnRzLiAg
VGhlIGZpcnN0IGlzIHRoZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWlsLAorICAgICAgICAv
LyB3aGVyZSB3ZSB0b2xlcmF0ZSBhIHNtYWxsIGJ1dCBub24temVybyB2YWx1ZS4gIFRoZSBzZWNv
bmQgcGFydCBpcworICAgICAgICAvLyBmYXJ0aGVyIGFsb25nIHRoZSB0YWlsIHdoZXJlIHRoZSBy
ZXN1bHQgc2hvdWxkIGJlIHplcm8uCisgICAgICAgIAorICAgICAgICAvLyBicmVha3BvaW50IGlz
IHBvaW50IGRpdmlkaW5nIHRoZSBmaXJzdCB0d28gdGFpbCBwYXJ0cyB3ZSdyZQorICAgICAgICAv
LyBsb29raW5nIGF0LiAgRXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAgdmFyIHRh
aWwxTWF4ID0gMDsKKyAgICAgICAgdmFyIHRhaWwyTWF4ID0gMDsKKyAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSAxMjgwMDsKKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgZGV0ZXJtaW5lZCBi
eSBsb29raW5nIGF0IHRhaWwxTWF4IGFuZAorICAgICAgICAvLyB0YWlsMk1heC4KKyAgICAgICAg
dmFyIHRocmVzaG9sZDEgPSAwLjAwMjsKKyAgICAgICAgdmFyIHRocmVzaG9sZDIgPSAwOworCisg
ICAgICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2VEYXRhLmxlbmd0aCArIGNvbnZvbHZlRGVsYXlT
YW1wbGVzOyBpIDwgcmVmZXJlbmNlRGF0YS5sZW5ndGggKyBicmVha3BvaW50OyArK2kpIHsKKyAg
ICAgICAgICAgIHZhciBtYWcgPSBNYXRoLmFicyhyZW5kZXJlZERhdGFbaV0pOworICAgICAgICAg
ICAgaWYgKG1hZyA+IHRhaWwxTWF4KSB7CisgICAgICAgICAgICAgICAgdGFpbDFNYXggPSBtYWc7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFpbDFNYXggPCB0aHJl
c2hvbGQxKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJGaXJzdCBwYXJ0IG9mIHRhaWwgb2Yg
Y29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLiIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9u
IGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIgKyB0YWlsMU1heCk7CisgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkg
PSByZWZlcmVuY2VEYXRhLmxlbmd0aCArIGJyZWFrcG9pbnQ7IGkgPCByZW5kZXJlZERhdGEubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhyZW5kZXJlZERhdGFbaV0pID4g
MCkgeworICAgICAgICAgICAgICAgIGlzRmluYWxQb3J0aW9uU2lsZW50ID0gZmFsc2U7IAorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNGaW5hbFBvcnRpb25TaWxlbnQpIHsKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIlJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4i
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlJlbmRlcmVkIHNp
Z25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIHNob3VsZCBiZSBzaWxlbnQuIik7CisgICAg
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUZXN0IHNpZ25hbCB3YXMgY29y
cmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RG
YWlsZWQoIlRlc3Qgc2lnbmFsIHdhcyBub3QgY29ycmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121182</attachid>
            <date>2012-01-04 15:55:37 -0800</date>
            <delta_ts>2012-01-09 13:31:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120104155536.patch</filename>
            <type>text/plain</type>
            <size>15993</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uM2Y3NTdlZTczNmQxYmFjYzFiMGEwMzgxMWJhZTcw
M2MwZmRhOTdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTA0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBVc2Ugb25lIGJpZyBwcmludGYgY29tbWFuZCBpbnN0ZWFkIG9mIG1hbnkg
Y2hhaW5lZCBlY2hvIGNvbW1hbmRzIHRvIGdlbmVyYXRlIGlkbF9maWxlcy50bXAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmluZGV4IGI2MjA0ZmZmNzMxY2E1ZWM5MmY3
OGJlZjQyMDdmNmJmNzVjZmYxYWIuLjJiNzg3ZWJmMzM2ZDY3NmRlYzdmNDAxNTIwYzExODdhNGNj
NWQxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcApAQCAtODcs
MTYgKzg3LDIzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKEF1
ZGlvQnVzKiByZXNwb25zZSkKICAgICByZXR1cm4gc2NhbGU7CiB9CiAKLVJldmVyYjo6UmV2ZXJi
KEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVf
dCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcykKK1JldmVyYjo6UmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgYm9vbCBub3JtYWxpemUpCiB7Ci0gICAg
ZG91YmxlIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKGltcHVsc2VSZXNwb25z
ZSk7Ci0gICAgaWYgKHNjYWxlKQotICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKHNjYWxl
KTsKKyAgICBkb3VibGUgc2NhbGUgPSAxOworCisgICAgaWYgKG5vcm1hbGl6ZSkgeworICAgICAg
ICBzY2FsZSA9IGNhbGN1bGF0ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1bHNlUmVzcG9uc2UpOwor
CisgICAgICAgIGlmIChzY2FsZSkKKyAgICAgICAgICAgIGltcHVsc2VSZXNwb25zZS0+c2NhbGUo
c2NhbGUpOworICAgIH0KIAogICAgIGluaXRpYWxpemUoaW1wdWxzZVJlc3BvbnNlLCByZW5kZXJT
bGljZVNpemUsIG1heEZGVFNpemUsIG51bWJlck9mQ2hhbm5lbHMsIHVzZUJhY2tncm91bmRUaHJl
YWRzKTsKIAotICAgIC8vIFVuZG8gc2NhbGluZyBzaW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRl
c3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNlUmVzcG9uc2UKLSAgICBpZiAoc2NhbGUpCisg
ICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNlIHRoaXMgc2hvdWxkbid0IGJlIGEgZGVzdHJ1Y3RpdmUg
b3BlcmF0aW9uIG9uIGltcHVsc2VSZXNwb25zZS4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBy
b3VuZG9mZj8gUGVyaGFwcyBjb25zaWRlciBtYWtpbmcgYSB0ZW1wb3Jhcnkgc2NhbGVkIGNvcHkK
KyAgICAvLyBpbnN0ZWFkIG9mIHNjYWxpbmcgYW5kIHVuc2NhbGluZyBpbiBwbGFjZS4KKyAgICBp
ZiAobm9ybWFsaXplICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEu
MCAvIHNjYWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRl
eCAyNmY1ZjhlNjRlOGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTli
ZjY4NTBhOTAxMzE5YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1l
U2l6ZSA9IDI1NiB9OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhp
bnQsIHNvIHRoZSBGRlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUg
c2FtZSB0aW1lICh2ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQp
LgotICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVu
ZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMs
IGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxz
ZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6
ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJv
b2wgbm9ybWFsaXplKTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBB
dWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZv
aWQgcmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5k
ZXggMzE1ODM1NjE5NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uNmFmYzA5NWJjZGIw
YjRkM2JhOWRjNjk1NmI1YTgwZjk0MzI0ZTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAg
ICwgbV9ub3JtYWxpemUodHJ1ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91
dHB1dCh0aGlzLCAyKSkpOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6
c2V0QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBy
ZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KICAgICBib29sIHVzZUJhY2tn
cm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0
cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9O
b2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcykpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZl
cmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRT
aXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKIAogICAgIHsKICAg
ICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1ZjM1NWJmYmJi
Nzg0M2Q5ZS4uMTJmNDE3MjgxOWEwMGU1ZjA4N2FkOTk2NmEyMzQ0ZGE2ZDQyMmZiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRpb0J1ZmZlciog
YnVmZmVyKCk7CiAKKyAgICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFs
aXplOyB9CisgICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxp
emUgPSBub3JtYWxpemU7IH0KIHByaXZhdGU6CiAgICAgQ29udm9sdmVyTm9kZShBdWRpb0NvbnRl
eHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApAQCAtNjIsNiArNjQsOSBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlv
biBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2VzcygpLgogICAgIG11dGFibGUgTXV0ZXggbV9w
cm9jZXNzTG9jazsKKworICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxzZSByZXNwb25zZSBvciBu
b3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgorICAgIGJvb2wgbV9ub3JtYWxpemU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuaWRsCmluZGV4IGQzZWI0NzVmMGM3NWIzODQ1NzQ0MjRiYjkxZjkyMDM1MGI2OWU3MmUuLmM2
NThiZGMxOWViNWQ2MmM4MDc1NmNhZjdjOWRhNmQ1YTNlYjRjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCkBAIC0yOSw1ICsyOSw2IEBAIG1vZHVsZSBhdWRp
byB7CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gQ29udm9sdmVyTm9kZSA6IEF1ZGlvTm9k
ZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tU2V0dGVyXSBBdWRpb0J1ZmZlciBidWZm
ZXI7CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIG5vcm1hbGl6ZTsKICAgICB9OwogfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZh
NzM1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9u
LW1vbm8tbW9uby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgQ29udm9sdmVy
Tm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNl
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgSW5pdGlhbCBsYXRlbmN5IG9m
IGNvbnZvbHZlciBpcyBzaWxlbnQuCitQQVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1
dGlvbiBpcyBjb3JyZWN0LgorUEFTUyBGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24g
aXMgc3VmZmljaWVudGx5IHNtYWxsLgorUEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBv
ZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkg
Y29udm9sdmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTFkN2UzMGY1ZTRjMGM4ZGY3YjcwNGMyOTllYjhmNTAzMzY5OTI1ZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29udm9sdXRp
b24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5u
ZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuIik7CisKKy8vIFRvIHRlc3QgdGhlIGNvbnZv
bHZlciwgd2UgY29udm9sdmUgdHdvIHNxdWFyZSBwdWxzZXMgdG9nZXRoZXIgdG8KKy8vIHByb2R1
Y2UgYSB0cmlhbmd1bGFyIHB1bHNlLiAgV2UgdmVyaWZ5IHRoZSByZXN1bHQgaXMgY29ycmVjdCB3
ZQorLy8gY2hlY2sgc2V2ZXJhbCBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgRmlyc3QsIHdlIG1ha2Ug
c3VyZSB0aGUgaW5pdGlhbAorLy8gcGFydCBvZiB0aGUgcmVzdWx0IGlzIHplcm8gKGR1ZSB0byB0
aGUgbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyKS4KKy8vIE5leHQsIHRoZSB0cmlhbmd1bGFyIHB1
bHNlIHNob3VsZCBtYXRjaCB0aGUgdGhlb3JldGljYWwgcmVzdWx0IHRvCisvLyB3aXRoaW4gc29t
ZSByb3VuZG9mZi4gIEFmdGVyIHRoZSB0cmlhbmd1bGFyIHB1bHNlLCB0aGUgcmVzdWx0CisvLyBz
aG91bGQgYmUgZXhhY3RseSB6ZXJvLCBidXQgcm91bmQtb2ZmIHByZXZlbnRzIHRoYXQuICBXZSBt
YWtlIHN1cmUKKy8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBwdWxzZSBpcyBzdWZmaWNpZW50bHkgY2xv
c2UgdG8gemVyby4gIEZpbmFsbHksCisvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBleGFjdGx5IHpl
cm8gYmVjYXVzZSB0aGUgaW5wdXRzIGFyZSBleGFjdGx5CisvLyB6ZXJvLgorZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNv
bnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBs
ZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIHZhciBzcXVh
cmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJh
bWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFuZ2xlUHVsc2VCdWZmZXIo
Y29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAgICB2YXIgYnVmZmVyU291
cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBidWZmZXJTb3VyY2UuYnVm
ZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZlciA9IGNvbnRleHQuY3Jl
YXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9IGZhbHNlOworICAgIGNv
bnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0
KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7
CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpOworICAgIGNvbnRleHQu
c3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MzUxNTExN2NmNjhiOGM4Y2RiMGE0ZDUzYjdiZmYxZGZlYzExYWRmCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKQEAgLTAsMCArMSwxNjIgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKwor
dmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vjb25kcyA9IDE7
Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1wbGVSYXRl
OworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBsZXMgaW4gdGhl
IGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdo
ZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2ZXIuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCit2YXIgY29udm9sdmVEZWxh
eVNhbXBsZXMgPSAxMjg7CisKK2Z1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRl
eHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5j
cmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisK
KyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVm
ZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kp
CisgICAgICAgIGRhdGFbaV0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisv
LyBUaGUgdHJpYW5nbGUgYnVmZmVyIGhvbGRzIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgdGhlIGNv
bnZvbHV0aW9uLgorLy8gSXQgbGluZWFybHkgcmFtcHMgdXAgZnJvbSAwIHRvIGl0cyBtYXhpbXVt
IHZhbHVlIChhdCB0aGUgY2VudGVyKSB0aGVuIGxpbmVhcmx5IHJhbXBzIGRvd24gdG8gMC4KKy8v
IFRoZSBjZW50ZXIgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSB0d28g
c3F1YXJlIHB1bHNlcyBvdmVybGFwIHRoZSBtb3N0LgorZnVuY3Rpb24gY3JlYXRlVHJpYW5nbGVQ
dWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1
ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0
LnNhbXBsZVJhdGUpOworCisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFy
IGhhbGZMZW5ndGggPSBuIC8gMjsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5u
ZWxEYXRhKDApOworICAgIAorICAgIHZhciBtYXhWYWx1ZSA9IGhhbGZMZW5ndGg7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhhbGZMZW5ndGg7ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IGkg
KyAxOworCisgICAgZm9yICh2YXIgaSA9IGhhbGZMZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAg
IGRhdGFbaV0gPSBuIC0gaSAtIDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKK2Z1
bmN0aW9uIGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVu
ZGVyZWRCdWZmZXI7CisKKyAgICAgICAgdmFyIHJlZmVyZW5jZURhdGEgPSB0cmlhbmdsZVB1bHNl
LmdldENoYW5uZWxEYXRhKDApOworICAgICAgICB2YXIgcmVuZGVyZWREYXRhID0gcmVuZGVyZWRC
dWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1
ZTsKKyAgICAKKyAgICAgICAgdmFyIG4gPSByZW5kZXJlZEJ1ZmZlci5sZW5ndGg7CisKKyAgICAg
ICAgdmFyIG1heERlbHRhID0gMDsKKyAgICAgICAgdmFyIHZhbHVlQXRNYXhEZWx0YSA9IDA7CisK
KyAgICAgICAgLy8gVmVyaWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3RseSB6ZXJvIGJlY2F1
c2Ugb2YgdGhlCisgICAgICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlci4KKworICAgICAg
ICB2YXIgaW5pdGlhbFplcm8gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNv
bnZvbHZlRGVsYXlTYW1wbGVzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlZERhdGFb
aV0gIT0gMCkgeworICAgICAgICAgICAgICAgIGluaXRpYWxaZXJvID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aW5pdGlhbFplcm8pIHsKKyAgICAgICAgICB0ZXN0UGFzc2VkKCJJbml0aWFsIGxhdGVuY3kgb2Yg
Y29udm9sdmVyIGlzIHNpbGVudC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0ZXN0
RmFpbGVkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIG5vdCBzaWxlbnQuIik7Cisg
ICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVmVyaWZ5
IHRoZSB0cmlhbmd1bGFyIHB1bHNlIGlzIGFjdHVhbGx5IHRyaWFuZ3VsYXIKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VEYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICB2YXIgZGlmZiA9IHJlbmRlcmVkRGF0YVtpICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVm
ZXJlbmNlRGF0YVtpXTsKKyAgICAgICAgICAgIHZhciB4ID0gTWF0aC5hYnMoZGlmZik7CisgICAg
ICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CisgICAgICAgICAgICAgICAgbWF4RGVsdGEgPSB4
OworICAgICAgICAgICAgICAgIHZhbHVlQXRNYXhEZWx0YSA9IHJlZmVyZW5jZURhdGFbaV07Cisg
ICAgICAgICAgICAgICAgbWF4RGVsdGFJbmRleCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24gd2FzIGRldGVybWluZWQg
ZXhwZXJpbWVudGFsbHkuICBJdAorICAgICAgICAvLyBpcyB0aGUgdGhyZXNob2xkIG9mIHRoZSBy
ZWxhdGl2ZSBlcnJvciBhdCB0aGUgbWF4aW11bQorICAgICAgICAvLyBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHRydWUgdHJpYW5ndWxhciBwdWxzZSBhbmQgdGhlCisgICAgICAgIC8vIHJlbmRlcmVk
IHB1bHNlLgorICAgICAgICB2YXIgYWxsb3dlZERldmlhdGlvbkZyYWN0aW9uID0gMS41ZS03Owor
ICAgICAgICB2YXIgbWF4RGV2aWF0aW9uRnJhY3Rpb24gPSBtYXhEZWx0YSAvIHZhbHVlQXRNYXhE
ZWx0YTsKKworICAgICAgICBpZiAobWF4RGV2aWF0aW9uRnJhY3Rpb24gPCBhbGxvd2VkRGV2aWF0
aW9uRnJhY3Rpb24pIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRyaWFuZ3VsYXIgcG9ydGlv
biBvZiBjb252b2x1dGlvbiBpcyBjb3JyZWN0LiIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIG5v
dCBpbmNvcnJlY3QuICBNYXggZGV2aWF0aW9uID0gIiArIG1heERldmlhdGlvbkZyYWN0aW9uKTsK
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgcG9ydGlvbiBhZnRlciBjb252b2x2ZWQgcG9ydGlvbiBpcyB0
b3RhbGx5CisgICAgICAgIC8vIHNpbGVudC4gIEJ1dCByb3VuZC1vZmYgcHJldmVudHMgdGhpcyBm
cm9tIGJlaW5nIGNvbXBsZXRlbHkKKyAgICAgICAgLy8gdHJ1ZS4gIEF0IHRoZSBlbmQgb2YgdGhl
IHRyaWFuZ2xlLCBpdCBzaG91bGQgYmUgY2xvc2UgdG8KKyAgICAgICAgLy8gemVyby4gIElmIHdl
IGdvIGZhcnRoZXIgb3V0LCBpdCBzaG91bGQgYmUgZXZlbiBjbG9zZXIgYW5kCisgICAgICAgIC8v
IGV2ZW50dWFsbHkgemVyby4KKworICAgICAgICB2YXIgaXNGaW5hbFBvcnRpb25TaWxlbnQgPSB0
cnVlOworCisgICAgICAgIC8vIEZvciB0aGUgdGFpbCBvZiB0aGUgY29udm9sdXRpb24gKHdoZXJl
IHRoZSByZXN1bHQgd291bGQgYmUKKyAgICAgICAgLy8gdGhlb3JldGljYWxseSB6ZXJvKSwgd2Ug
cGFydGl0aW9uIHRoZSB0YWlsIGludG8gdHdvCisgICAgICAgIC8vIHBhcnRzLiAgVGhlIGZpcnN0
IGlzIHRoZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWlsLAorICAgICAgICAvLyB3aGVyZSB3
ZSB0b2xlcmF0ZSBhIHNtYWxsIGJ1dCBub24temVybyB2YWx1ZS4gIFRoZSBzZWNvbmQgcGFydCBp
cworICAgICAgICAvLyBmYXJ0aGVyIGFsb25nIHRoZSB0YWlsIHdoZXJlIHRoZSByZXN1bHQgc2hv
dWxkIGJlIHplcm8uCisgICAgICAgIAorICAgICAgICAvLyBicmVha3BvaW50IGlzIHBvaW50IGRp
dmlkaW5nIHRoZSBmaXJzdCB0d28gdGFpbCBwYXJ0cyB3ZSdyZQorICAgICAgICAvLyBsb29raW5n
IGF0LiAgRXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAgdmFyIHRhaWwxTWF4ID0g
MDsKKyAgICAgICAgdmFyIHRhaWwyTWF4ID0gMDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSAx
MjgwMDsKKyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIHdlcmUgZGV0ZXJtaW5lZCBieSBsb29raW5n
IGF0IHRhaWwxTWF4IGFuZAorICAgICAgICAvLyB0YWlsMk1heC4KKyAgICAgICAgdmFyIHRocmVz
aG9sZDEgPSAwLjAwMjsKKyAgICAgICAgdmFyIHRocmVzaG9sZDIgPSAwOworCisgICAgICAgIGZv
ciAodmFyIGkgPSByZWZlcmVuY2VEYXRhLmxlbmd0aCArIGNvbnZvbHZlRGVsYXlTYW1wbGVzOyBp
IDwgcmVmZXJlbmNlRGF0YS5sZW5ndGggKyBicmVha3BvaW50OyArK2kpIHsKKyAgICAgICAgICAg
IHZhciBtYWcgPSBNYXRoLmFicyhyZW5kZXJlZERhdGFbaV0pOworICAgICAgICAgICAgaWYgKG1h
ZyA+IHRhaWwxTWF4KSB7CisgICAgICAgICAgICAgICAgdGFpbDFNYXggPSBtYWc7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFpbDFNYXggPCB0aHJlc2hvbGQxKSB7
CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRp
b24gaXMgc3VmZmljaWVudGx5IHNtYWxsLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBz
dWZmaWNpZW50bHkgc21hbGw6ICIgKyB0YWlsMU1heCk7CisgICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSByZWZlcmVu
Y2VEYXRhLmxlbmd0aCArIGJyZWFrcG9pbnQ7IGkgPCByZW5kZXJlZERhdGEubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChNYXRoLmFicyhyZW5kZXJlZERhdGFbaV0pID4gMCkgeworICAg
ICAgICAgICAgICAgIGlzRmluYWxQb3J0aW9uU2lsZW50ID0gZmFsc2U7IAorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNGaW5hbFBvcnRpb25TaWxlbnQpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlJlbmRl
cmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4iKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlJlbmRlcmVkIHNpZ25hbCBhZnRl
ciB0YWlsIG9mIGNvbnZvbHV0aW9uIHNob3VsZCBiZSBzaWxlbnQuIik7CisgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGNv
bnZvbHZlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRl
c3Qgc2lnbmFsIHdhcyBub3QgY29ycmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121348</attachid>
            <date>2012-01-05 15:29:44 -0800</date>
            <delta_ts>2012-01-09 13:32:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120105152943.patch</filename>
            <type>text/plain</type>
            <size>16658</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uM2Y3NTdlZTczNmQxYmFjYzFiMGEwMzgxMWJhZTcw
M2MwZmRhOTdmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTA0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBVc2Ugb25lIGJpZyBwcmludGYgY29tbWFuZCBpbnN0ZWFkIG9mIG1hbnkg
Y2hhaW5lZCBlY2hvIGNvbW1hbmRzIHRvIGdlbmVyYXRlIGlkbF9maWxlcy50bXAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCmluZGV4IGI2MjA0ZmZmNzMxY2E1ZWM5MmY3
OGJlZjQyMDdmNmJmNzVjZmYxYWIuLjJiNzg3ZWJmMzM2ZDY3NmRlYzdmNDAxNTIwYzExODdhNGNj
NWQxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcApAQCAtODcs
MTYgKzg3LDIzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKEF1
ZGlvQnVzKiByZXNwb25zZSkKICAgICByZXR1cm4gc2NhbGU7CiB9CiAKLVJldmVyYjo6UmV2ZXJi
KEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVf
dCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcykKK1JldmVyYjo6UmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgYm9vbCBub3JtYWxpemUpCiB7Ci0gICAg
ZG91YmxlIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxlKGltcHVsc2VSZXNwb25z
ZSk7Ci0gICAgaWYgKHNjYWxlKQotICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKHNjYWxl
KTsKKyAgICBkb3VibGUgc2NhbGUgPSAxOworCisgICAgaWYgKG5vcm1hbGl6ZSkgeworICAgICAg
ICBzY2FsZSA9IGNhbGN1bGF0ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1bHNlUmVzcG9uc2UpOwor
CisgICAgICAgIGlmIChzY2FsZSkKKyAgICAgICAgICAgIGltcHVsc2VSZXNwb25zZS0+c2NhbGUo
c2NhbGUpOworICAgIH0KIAogICAgIGluaXRpYWxpemUoaW1wdWxzZVJlc3BvbnNlLCByZW5kZXJT
bGljZVNpemUsIG1heEZGVFNpemUsIG51bWJlck9mQ2hhbm5lbHMsIHVzZUJhY2tncm91bmRUaHJl
YWRzKTsKIAotICAgIC8vIFVuZG8gc2NhbGluZyBzaW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRl
c3RydWN0aXZlIG9wZXJhdGlvbiBvbiBpbXB1bHNlUmVzcG9uc2UKLSAgICBpZiAoc2NhbGUpCisg
ICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNlIHRoaXMgc2hvdWxkbid0IGJlIGEgZGVzdHJ1Y3RpdmUg
b3BlcmF0aW9uIG9uIGltcHVsc2VSZXNwb25zZS4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBy
b3VuZG9mZj8gUGVyaGFwcyBjb25zaWRlciBtYWtpbmcgYSB0ZW1wb3Jhcnkgc2NhbGVkIGNvcHkK
KyAgICAvLyBpbnN0ZWFkIG9mIHNjYWxpbmcgYW5kIHVuc2NhbGluZyBpbiBwbGFjZS4KKyAgICBp
ZiAobm9ybWFsaXplICYmIHNjYWxlKQogICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxlKDEu
MCAvIHNjYWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaAppbmRl
eCAyNmY1ZjhlNjRlOGRmNmRkZWRlYWVmYTJjZDM0MTNmYzRmNWZjYjExLi5mMTYyZTBiNzA5ZTli
ZjY4NTBhOTAxMzE5YzJjYjlkNGJkNGVhMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9SZXZlcmIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgZW51bSB7IE1heEZyYW1l
U2l6ZSA9IDI1NiB9OwogCiAgICAgLy8gcmVuZGVyU2xpY2VTaXplIGlzIGEgcmVuZGVyaW5nIGhp
bnQsIHNvIHRoZSBGRlRzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gbm90IGFsbCBvY2N1ciBhdCB0aGUg
c2FtZSB0aW1lICh2ZXJ5IGJhZCB3aGVuIHJlbmRlcmluZyBvbiBhIHJlYWwtdGltZSB0aHJlYWQp
LgotICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVu
ZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMs
IGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMpOworICAgIFJldmVyYihBdWRpb0J1cyogaW1wdWxz
ZVJlc3BvbnNlQnVmZmVyLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6
ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJv
b2wgbm9ybWFsaXplKTsKIAogICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBB
dWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZv
aWQgcmVzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKaW5k
ZXggMzE1ODM1NjE5NzFhNjk5YmIzMGM1YTI4YzFhZmMyYWFjYjFkNjNmNC4uNmFmYzA5NWJjZGIw
YjRkM2JhOWRjNjk1NmI1YTgwZjk0MzI0ZTkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAg
ICwgbV9ub3JtYWxpemUodHJ1ZSkKIHsKICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlSW5wdXQodGhpcykpKTsKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91
dHB1dCh0aGlzLCAyKSkpOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6
c2V0QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBy
ZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KICAgICBib29sIHVzZUJhY2tn
cm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0
cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9O
b2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcykpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZl
cmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRT
aXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKIAogICAgIHsKICAg
ICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgKaW5kZXggZmIyOWQ1YzVkMjg3YjkwYmU0NTA2Njc1ZjM1NWJmYmJi
Nzg0M2Q5ZS4uMTJmNDE3MjgxOWEwMGU1ZjA4N2FkOTk2NmEyMzQ0ZGE2ZDQyMmZiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKICAgICBBdWRpb0J1ZmZlciog
YnVmZmVyKCk7CiAKKyAgICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFs
aXplOyB9CisgICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxp
emUgPSBub3JtYWxpemU7IH0KIHByaXZhdGU6CiAgICAgQ29udm9sdmVyTm9kZShBdWRpb0NvbnRl
eHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApAQCAtNjIsNiArNjQsOSBAQCBwcml2YXRlOgogCiAg
ICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlv
biBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2VzcygpLgogICAgIG11dGFibGUgTXV0ZXggbV9w
cm9jZXNzTG9jazsKKworICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxzZSByZXNwb25zZSBvciBu
b3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgorICAgIGJvb2wgbV9ub3JtYWxpemU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuaWRsCmluZGV4IGQzZWI0NzVmMGM3NWIzODQ1NzQ0MjRiYjkxZjkyMDM1MGI2OWU3MmUuLmM2
NThiZGMxOWViNWQ2MmM4MDc1NmNhZjdjOWRhNmQ1YTNlYjRjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCkBAIC0yOSw1ICsyOSw2IEBAIG1vZHVsZSBhdWRp
byB7CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gQ29udm9sdmVyTm9kZSA6IEF1ZGlvTm9k
ZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tU2V0dGVyXSBBdWRpb0J1ZmZlciBidWZm
ZXI7CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIG5vcm1hbGl6ZTsKICAgICB9OwogfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZh
NzM1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9u
LW1vbm8tbW9uby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgQ29udm9sdmVy
Tm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNl
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgSW5pdGlhbCBsYXRlbmN5IG9m
IGNvbnZvbHZlciBpcyBzaWxlbnQuCitQQVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1
dGlvbiBpcyBjb3JyZWN0LgorUEFTUyBGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24g
aXMgc3VmZmljaWVudGx5IHNtYWxsLgorUEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBv
ZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkg
Y29udm9sdmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2ZjYTcwOTdjNDZhM2E2NTEzNTBiZWFlZTRhMDVjZjY2NzRkYTZkZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29udm9sdXRp
b24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5u
ZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuIik7CisKKy8vIFRvIHRlc3QgdGhlIGNvbnZv
bHZlciwgd2UgY29udm9sdmUgdHdvIHNxdWFyZSBwdWxzZXMgdG9nZXRoZXIgdG8KKy8vIHByb2R1
Y2UgYSB0cmlhbmd1bGFyIHB1bHNlLiAgVG8gdmVyaWZ5IHRoZSByZXN1bHQgaXMgY29ycmVjdCB3
ZQorLy8gY2hlY2sgc2V2ZXJhbCBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgRmlyc3QsIHdlIG1ha2Ug
c3VyZSB0aGUgaW5pdGlhbAorLy8gcGFydCBvZiB0aGUgcmVzdWx0IGlzIHplcm8gKGR1ZSB0byB0
aGUgbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyKS4KKy8vIE5leHQsIHRoZSB0cmlhbmd1bGFyIHB1
bHNlIHNob3VsZCBtYXRjaCB0aGUgdGhlb3JldGljYWwgcmVzdWx0IHRvCisvLyB3aXRoaW4gc29t
ZSByb3VuZG9mZi4gIEFmdGVyIHRoZSB0cmlhbmd1bGFyIHB1bHNlLCB0aGUgcmVzdWx0CisvLyBz
aG91bGQgYmUgZXhhY3RseSB6ZXJvLCBidXQgcm91bmQtb2ZmIHByZXZlbnRzIHRoYXQuICBXZSBt
YWtlIHN1cmUKKy8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBwdWxzZSBpcyBzdWZmaWNpZW50bHkgY2xv
c2UgdG8gemVyby4gIEZpbmFsbHksCisvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBleGFjdGx5IHpl
cm8gYmVjYXVzZSB0aGUgaW5wdXRzIGFyZSBleGFjdGx5CisvLyB6ZXJvLgorZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNv
bnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBs
ZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIHZhciBzcXVh
cmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJh
bWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFuZ2xlUHVsc2VCdWZmZXIo
Y29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAgICB2YXIgYnVmZmVyU291
cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBidWZmZXJTb3VyY2UuYnVm
ZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZlciA9IGNvbnRleHQuY3Jl
YXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9IGZhbHNlOworICAgIGNv
bnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0
KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7
CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpOworICAgIGNvbnRleHQu
c3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMzk3MzFmODZhNmU5ZjM1NjJhNGQyNTExZDI2NjAwNTE2MDE0MjAyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKQEAgLTAsMCArMSwxOTYgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKwor
dmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vjb25kcyA9IDE7
Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1wbGVSYXRl
OworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBsZXMgaW4gdGhl
IGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdo
ZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2ZXIuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCit2YXIgY29udm9sdmVEZWxh
eVNhbXBsZXMgPSAxMjg7CisKK2Z1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRl
eHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5j
cmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisK
KyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVm
ZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kp
CisgICAgICAgIGRhdGFbaV0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisv
LyBUaGUgdHJpYW5nbGUgYnVmZmVyIGhvbGRzIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgdGhlIGNv
bnZvbHV0aW9uLgorLy8gSXQgbGluZWFybHkgcmFtcHMgdXAgZnJvbSAwIHRvIGl0cyBtYXhpbXVt
IHZhbHVlIChhdCB0aGUgY2VudGVyKQorLy8gdGhlbiBsaW5lYXJseSByYW1wcyBkb3duIHRvIDAu
ICBUaGUgY2VudGVyIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gcG9pbnQgd2hlcmUgdGhl
IHR3byBzcXVhcmUgcHVsc2VzIG92ZXJsYXAgdGhlIG1vc3QuCitmdW5jdGlvbiBjcmVhdGVUcmlh
bmdsZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1
ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNv
bnRleHQuc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAg
ICB2YXIgaGFsZkxlbmd0aCA9IG4gLyAyOworICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0
Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYWxmTGVuZ3Ro
OyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBpICsgMTsKKworICAgIGZvciAodmFyIGkgPSBoYWxm
TGVuZ3RoOyBpIDwgbjsgKytpKQorICAgICAgICBkYXRhW2ldID0gbiAtIGkgLSAxOworCisgICAg
cmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisvLyBWZXJpZnkgdGhhdCB0aGUgaW5pdGlhbCBsYXRl
bmN5IG9mIHRoZSBjb252b2x2ZXIgaXMgZXhhY3RseSB6ZXJvLgorLy8gUmV0dXJuIHRydWUgaWYg
c28uCitmdW5jdGlvbiBjaGVja0xhdGVuY3koZGF0YSkgeworICAgIHZhciBpc1plcm8gPSB0cnVl
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb252b2x2ZURlbGF5U2FtcGxlczsgKytpKSB7
CisgICAgICAgIGlmIChkYXRhW2ldICE9IDApIHsKKyAgICAgICAgICAgIGlzWmVybyA9IGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNaZXJv
KSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkluaXRpYWwgbGF0ZW5jeSBvZiBjb252b2x2ZXIgaXMg
c2lsZW50LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkluaXRpYWwgbGF0
ZW5jeSBvZiBjb252b2x2ZXIgaXMgbm90IHNpbGVudC4iKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aXNaZXJvOworfQorCisvLyBWZXJpZnkgdGhhdCB0aGUgcmVuZGVyZWQgcmVzdWx0IGlzIHZlcnkg
Y2xvc2UgdG8gdGhlIHJlZmVyZW5jZQorLy8gdHJpYW5ndWxhciBwdWxzZS4KK2Z1bmN0aW9uIGNo
ZWNrVHJpYW5ndWxhclB1bHNlKHJlbmRlcmVkLCByZWZlcmVuY2UpIHsKKyAgICB2YXIgbWF0Y2gg
PSB0cnVlOworICAgIHZhciBtYXhEZWx0YSA9IDA7CisgICAgdmFyIHZhbHVlQXRNYXhEZWx0YSA9
IDA7CisgICAgdmFyIG1heERlbHRhSW5kZXggPSAwOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByZWZlcmVuY2UubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGRpZmYgPSByZW5kZXJlZFtp
ICsgY29udm9sdmVEZWxheVNhbXBsZXNdIC0gcmVmZXJlbmNlW2ldOworICAgICAgICB2YXIgeCA9
IE1hdGguYWJzKGRpZmYpOworICAgICAgICBpZiAoeCA+IG1heERlbHRhKSB7CisgICAgICAgICAg
ICBtYXhEZWx0YSA9IHg7CisgICAgICAgICAgICB2YWx1ZUF0TWF4RGVsdGEgPSByZWZlcmVuY2Vb
aV07CisgICAgICAgICAgICBtYXhEZWx0YUluZGV4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIGFsbG93ZWREZXZpYXRpb25GcmFjdGlvbiB3YXMgZGV0ZXJtaW5lZCBleHBlcmltZW50
YWxseS4gIEl0CisgICAgLy8gaXMgdGhlIHRocmVzaG9sZCBvZiB0aGUgcmVsYXRpdmUgZXJyb3Ig
YXQgdGhlIG1heGltdW0KKyAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRydWUgdHJpYW5n
dWxhciBwdWxzZSBhbmQgdGhlCisgICAgLy8gcmVuZGVyZWQgcHVsc2UuCisgICAgdmFyIGFsbG93
ZWREZXZpYXRpb25GcmFjdGlvbiA9IDEuNWUtNzsKKyAgICB2YXIgbWF4RGV2aWF0aW9uRnJhY3Rp
b24gPSBtYXhEZWx0YSAvIHZhbHVlQXRNYXhEZWx0YTsKKworICAgIGlmIChtYXhEZXZpYXRpb25G
cmFjdGlvbiA8PSBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24pIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QuIik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZv
bHV0aW9uIGlzIG5vdCBpbmNvcnJlY3QuICBNYXggZGV2aWF0aW9uID0gIiArIG1heERldmlhdGlv
bkZyYWN0aW9uICsgIiBhdCAiICsgbWF4RGVsdGFJbmRleCk7CisgICAgICAgIG1hdGNoID0gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoOworfSAgICAgICAgCisKKy8vIFZlcmlmeSB0
aGF0IHRoZSByZW5kZXJlZCBkYXRhIGlzIGNsb3NlIHRvIHplcm8gZm9yIHRoZSBmaXJzdCBwYXJ0
CisvLyBvZiB0aGUgdGFpbC4KK2Z1bmN0aW9uIGNoZWNrVGFpbDEoZGF0YSwgcmVmZXJlbmNlLCBi
cmVha3BvaW50KSB7CisgICAgdmFyIGlzWmVybyA9IHRydWU7CisgICAgdmFyIHRhaWwxTWF4ID0g
MDsKKyAgICAvLyBUaGlzIHRocmVzaG9sZCBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkIGJ5
IGV4YW1pbmluZyB0aGUKKyAgICAvLyB2YWx1ZSBvZiB0YWlsMU1heC4KKyAgICB2YXIgdGhyZXNo
b2xkMSA9IDAuMDAyOworCisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5ndGggKyBjb252
b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVha3BvaW50OyArK2kp
IHsKKyAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKGRhdGFbaV0pOworICAgICAgICBpZiAobWFn
ID4gdGFpbDFNYXgpIHsKKyAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFnOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHRhaWwxTWF4IDw9IHRocmVzaG9sZDEpIHsKKyAgICAgICAgdGVzdFBh
c3NlZCgiRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHN1ZmZpY2llbnRseSBz
bWFsbC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJGaXJzdCBwYXJ0IG9m
IHRhaWwgb2YgY29udm9sdXRpb24gaXMgbm90IHN1ZmZpY2llbnRseSBzbWFsbDogIiArIHRhaWwx
TWF4KTsKKyAgICAgICAgaXNaZXJvID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGlzWmVy
bzsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSB0YWlsIG9mIHRo
ZSBjb252b2x1dGlvbiBpcworLy8gZXhhY3RseSB6ZXJvLgorZnVuY3Rpb24gY2hlY2tUYWlsMihk
YXRhLCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKKyAgICB2YXIgaXNaZXJvID0gdHJ1ZTsKKyAg
ICB2YXIgdGFpbDJNYXggPSAwOworICAgIC8vIEZvciB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHRh
aWwsIHRoZSBtYXhpbXVtIHZhbHVlIHNob3VsZCBiZQorICAgIC8vIGV4YWN0bHkgemVyby4KKyAg
ICB2YXIgdGhyZXNob2xkMiA9IDA7CisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5ndGgg
KyBicmVha3BvaW50OyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoTWF0aC5h
YnMoZGF0YVtpXSkgPiAwKSB7CisgICAgICAgICAgICBpc1plcm8gPSBmYWxzZTsgCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc1plcm8pIHsKKyAgICAg
ICAgdGVzdFBhc3NlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRpb24g
aXMgc2lsZW50LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlJlbmRlcmVk
IHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIHNob3VsZCBiZSBzaWxlbnQuIik7Cisg
ICAgfQorCisgICAgcmV0dXJuIGlzWmVybzsKK30KKworZnVuY3Rpb24gY2hlY2tDb252b2x2ZWRS
ZXN1bHQodHJpYW5nbGVQdWxzZSkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICB2YXIgcmVuZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKworICAgICAg
ICB2YXIgcmVmZXJlbmNlRGF0YSA9IHRyaWFuZ2xlUHVsc2UuZ2V0Q2hhbm5lbERhdGEoMCk7Cisg
ICAgICAgIHZhciByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgw
KTsKKyAgICAKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgICAgICAvLyBW
ZXJpZnkgdGhlIGluaXRpYWwgcGFydCBpcyBleGFjdGx5IHplcm8gYmVjYXVzZSBvZiB0aGUKKyAg
ICAgICAgLy8gbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyLgorCisgICAgICAgIHN1Y2Nlc3MgPSBz
dWNjZXNzICYmIGNoZWNrTGF0ZW5jeShyZW5kZXJlZERhdGEpOworCisgICAgICAgIC8vIFZlcmlm
eSB0aGUgdHJpYW5ndWxhciBwdWxzZSBpcyBhY3R1YWxseSB0cmlhbmd1bGFyLgorCisgICAgICAg
IHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVHJpYW5ndWxhclB1bHNlKHJlbmRlcmVkRGF0YSwg
cmVmZXJlbmNlRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBwb3J0
aW9uIGFmdGVyIGNvbnZvbHZlZCBwb3J0aW9uIGlzIHRvdGFsbHkKKyAgICAgICAgLy8gc2lsZW50
LiAgQnV0IHJvdW5kLW9mZiBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgY29tcGxldGVseQorICAg
ICAgICAvLyB0cnVlLiAgQXQgdGhlIGVuZCBvZiB0aGUgdHJpYW5nbGUsIGl0IHNob3VsZCBiZSBj
bG9zZSB0bworICAgICAgICAvLyB6ZXJvLiAgSWYgd2UgZ28gZmFydGhlciBvdXQsIGl0IHNob3Vs
ZCBiZSBldmVuIGNsb3NlciBhbmQKKyAgICAgICAgLy8gZXZlbnR1YWxseSB6ZXJvLgorCisgICAg
ICAgIC8vIEZvciB0aGUgdGFpbCBvZiB0aGUgY29udm9sdXRpb24gKHdoZXJlIHRoZSByZXN1bHQg
d291bGQgYmUKKyAgICAgICAgLy8gdGhlb3JldGljYWxseSB6ZXJvKSwgd2UgcGFydGl0aW9uIHRo
ZSB0YWlsIGludG8gdHdvCisgICAgICAgIC8vIHBhcnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWlsLAorICAgICAgICAvLyB3aGVyZSB3ZSB0b2xlcmF0ZSBh
IHNtYWxsIGJ1dCBub24temVybyB2YWx1ZS4gIFRoZSBzZWNvbmQgcGFydCBpcworICAgICAgICAv
LyBmYXJ0aGVyIGFsb25nIHRoZSB0YWlsIHdoZXJlIHRoZSByZXN1bHQgc2hvdWxkIGJlIHplcm8u
CisgICAgICAgIAorICAgICAgICAvLyBicmVha3BvaW50IGlzIHRoZSBwb2ludCBkaXZpZGluZyB0
aGUgZmlyc3QgdHdvIHRhaWwgcGFydHMKKyAgICAgICAgLy8gd2UncmUgbG9va2luZyBhdC4gIEV4
cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgIHZhciBicmVha3BvaW50ID0gMTI4MDA7
CisKKyAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tUYWlsMShyZW5kZXJlZERhdGEs
IHJlZmVyZW5jZURhdGEsIGJyZWFrcG9pbnQpOworICAgICAgICAKKyAgICAgICAgc3VjY2VzcyA9
IHN1Y2Nlc3MgJiYgY2hlY2tUYWlsMihyZW5kZXJlZERhdGEsIHJlZmVyZW5jZURhdGEsIGJyZWFr
cG9pbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGVzdCBzaWduYWwgd2FzIG5vdCBj
b3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121447</attachid>
            <date>2012-01-06 10:48:49 -0800</date>
            <delta_ts>2012-01-06 15:10:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120106104848.patch</filename>
            <type>text/plain</type>
            <size>17037</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJmOWM4NjI0ZThlOWM0
ZmZhMjMwODI2YWU1OWZlNTU3NTZhNDEyMC4uZTBlMDU5ZjQyNDY0ZGJjMTkxNTBjOWNiZjc4M2Zk
ZjBiNDA3YTNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuIAorCiAyMDEyLTAxLTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyIHNob3VsZCBiZSBtb3JlIGZ1
bGwtc2VydmljZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKaW5kZXgg
YjYyMDRmZmY3MzFjYTVlYzkyZjc4YmVmNDIwN2Y2YmY3NWNmZjFhYi4uMmI3ODdlYmYzMzZkNjc2
ZGVjN2Y0MDE1MjBjMTE4N2E0Y2M1ZDE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vUmV2ZXJiLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmIuY3BwCkBAIC04NywxNiArODcsMjMgQEAgc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVO
b3JtYWxpemF0aW9uU2NhbGUoQXVkaW9CdXMqIHJlc3BvbnNlKQogICAgIHJldHVybiBzY2FsZTsK
IH0KIAotUmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJl
bmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
LCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzKQorUmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGlt
cHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUs
IHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzLCBib29s
IG5vcm1hbGl6ZSkKIHsKLSAgICBkb3VibGUgc2NhbGUgPSBjYWxjdWxhdGVOb3JtYWxpemF0aW9u
U2NhbGUoaW1wdWxzZVJlc3BvbnNlKTsKLSAgICBpZiAoc2NhbGUpCi0gICAgICAgIGltcHVsc2VS
ZXNwb25zZS0+c2NhbGUoc2NhbGUpOworICAgIGRvdWJsZSBzY2FsZSA9IDE7CisKKyAgICBpZiAo
bm9ybWFsaXplKSB7CisgICAgICAgIHNjYWxlID0gY2FsY3VsYXRlTm9ybWFsaXphdGlvblNjYWxl
KGltcHVsc2VSZXNwb25zZSk7CisKKyAgICAgICAgaWYgKHNjYWxlKQorICAgICAgICAgICAgaW1w
dWxzZVJlc3BvbnNlLT5zY2FsZShzY2FsZSk7CisgICAgfQogCiAgICAgaW5pdGlhbGl6ZShpbXB1
bHNlUmVzcG9uc2UsIHJlbmRlclNsaWNlU2l6ZSwgbWF4RkZUU2l6ZSwgbnVtYmVyT2ZDaGFubmVs
cywgdXNlQmFja2dyb3VuZFRocmVhZHMpOwogCi0gICAgLy8gVW5kbyBzY2FsaW5nIHNpbmNlIHRo
aXMgc2hvdWxkbid0IGJlIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIG9uIGltcHVsc2VSZXNwb25z
ZQotICAgIGlmIChzY2FsZSkKKyAgICAvLyBVbmRvIHNjYWxpbmcgc2luY2UgdGhpcyBzaG91bGRu
J3QgYmUgYSBkZXN0cnVjdGl2ZSBvcGVyYXRpb24gb24gaW1wdWxzZVJlc3BvbnNlLgorICAgIC8v
IEZJWE1FOiBXaGF0IGFib3V0IHJvdW5kb2ZmPyBQZXJoYXBzIGNvbnNpZGVyIG1ha2luZyBhIHRl
bXBvcmFyeSBzY2FsZWQgY29weQorICAgIC8vIGluc3RlYWQgb2Ygc2NhbGluZyBhbmQgdW5zY2Fs
aW5nIGluIHBsYWNlLgorICAgIGlmIChub3JtYWxpemUgJiYgc2NhbGUpCiAgICAgICAgIGltcHVs
c2VSZXNwb25zZS0+c2NhbGUoMS4wIC8gc2NhbGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1JldmVyYi5oCmluZGV4IDI2ZjVmOGU2NGU4ZGY2ZGRlZGVhZWZhMmNkMzQxM2ZjNGY1
ZmNiMTEuLmYxNjJlMGI3MDllOWJmNjg1MGE5MDEzMTljMmNiOWQ0YmQ0ZWEyOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoK
ICAgICBlbnVtIHsgTWF4RnJhbWVTaXplID0gMjU2IH07CiAKICAgICAvLyByZW5kZXJTbGljZVNp
emUgaXMgYSByZW5kZXJpbmcgaGludCwgc28gdGhlIEZGVHMgY2FuIGJlIG9wdGltaXplZCB0byBu
b3QgYWxsIG9jY3VyIGF0IHRoZSBzYW1lIHRpbWUgKHZlcnkgYmFkIHdoZW4gcmVuZGVyaW5nIG9u
IGEgcmVhbC10aW1lIHRocmVhZCkuCi0gICAgUmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9u
c2VCdWZmZXIsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXpl
X3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcyk7CisgICAgUmV2
ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2VCdWZmZXIsIHNpemVfdCByZW5kZXJTbGljZVNp
emUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VC
YWNrZ3JvdW5kVGhyZWFkcywgYm9vbCBub3JtYWxpemUpOwogCiAgICAgdm9pZCBwcm9jZXNzKEF1
ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9D
b252b2x2ZXJOb2RlLmNwcAppbmRleCAzMTU4MzU2MTk3MWE2OTliYjMwYzVhMjhjMWFmYzJhYWNi
MWQ2M2Y0Li42YWZjMDk1YmNkYjBiNGQzYmE5ZGM2OTU2YjVhODBmOTQzMjRlOTNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcApAQCAtNDcsNiArNDcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbnZvbHZlck5vZGU6OkNvbnZvbHZlck5vZGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX25vcm1hbGl6ZSh0cnVlKQogewogICAgIGFkZElucHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwogICAgIGFkZE91dHB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CkBAIC0xMzQsNyArMTM1LDcgQEAg
dm9pZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikKICAgICAK
ICAgICAvLyBDcmVhdGUgdGhlIHJldmVyYiB3aXRoIHRoZSBnaXZlbiBpbXB1bHNlIHJlc3BvbnNl
LgogICAgIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMgPSAhY29udGV4dCgpLT5pc09mZmxpbmVD
b250ZXh0KCk7Ci0gICAgT3duUHRyPFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIobmV3IFJldmVy
YigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIE1heEZGVFNp
emUsIDIsIHVzZUJhY2tncm91bmRUaHJlYWRzKSk7CisgICAgT3duUHRyPFJldmVyYj4gcmV2ZXJi
ID0gYWRvcHRQdHIobmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdT
aXplSW5GcmFtZXMsIE1heEZGVFNpemUsIDIsIHVzZUJhY2tncm91bmRUaHJlYWRzLCBtX25vcm1h
bGl6ZSkpOwogCiAgICAgewogICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAppbmRleCBmYjI5ZDVjNWQyODdi
OTBiZTQ1MDY2NzVmMzU1YmZiYmI3ODQzZDllLi4xMmY0MTcyODE5YTAwZTVmMDg3YWQ5OTY2YTIz
NDRkYTZkNDIyZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCkBA
IC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJ1ZmZlcihBdWRpb0J1ZmZlciop
OwogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIoKTsKIAorICAgIGJvb2wgbm9ybWFsaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KKyAgICB2b2lkIHNldE5vcm1hbGl6ZShib29sIG5v
cm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQogcHJpdmF0ZToKICAgICBDb252
b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwogCkBAIC02Miw2ICs2
NCw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBkeW5hbWljIGNoYW5n
ZXMgdG8gdGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBwcm9jZXNzKCkuCiAg
ICAgbXV0YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2NrOworCisgICAgLy8gTm9ybWFsaXplIHRoZSBp
bXB1bHNlIHJlc3BvbnNlIG9yIG5vdC4gTXVzdCBkZWZhdWx0IHRvIHRydWUuCisgICAgYm9vbCBt
X25vcm1hbGl6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKaW5kZXggZDNlYjQ3NWYwYzc1YjM4NDU3NDQyNGJi
OTFmOTIwMzUwYjY5ZTcyZS4uYzY1OGJkYzE5ZWI1ZDYyYzgwNzU2Y2FmN2M5ZGE2ZDVhM2ViNGNl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKQEAgLTI5LDUg
KzI5LDYgQEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBDb252
b2x2ZXJOb2RlIDogQXVkaW9Ob2RlIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21TZXR0
ZXJdIEF1ZGlvQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFs
aXplOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9s
dXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzA1ZjY2MWMzYTI4NmM0
ODU3MzZjYTQ1YTQ0Mzc1M2E1NmE3MzVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEz
IEBACitUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5uZWwgd2l0aCBt
b25vIGltcHVsc2UgcmVzcG9uc2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFT
UyBJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlzIHNpbGVudC4KK1BBU1MgVHJpYW5ndWxh
ciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIGNvcnJlY3QuCitQQVNTIEZpcnN0IHBhcnQgb2Yg
dGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNpZW50bHkgc21hbGwuCitQQVNTIFJlbmRlcmVk
IHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4KK1BBU1MgVGVzdCBz
aWduYWwgd2FzIGNvcnJlY3RseSBjb252b2x2ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252
b2x1dGlvbi1tb25vLW1vbm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmNhNzA5N2M0NmEzYTY1MTM1MGJl
YWVlNGEwNWNmNjY3NGRhNmRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBF
IGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKwor
PGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIENvbnZvbHZlck5vZGUgcHJv
Y2Vzc2luZyBhIG1vbm8gY2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNwb25zZS4iKTsKKwor
Ly8gVG8gdGVzdCB0aGUgY29udm9sdmVyLCB3ZSBjb252b2x2ZSB0d28gc3F1YXJlIHB1bHNlcyB0
b2dldGhlciB0bworLy8gcHJvZHVjZSBhIHRyaWFuZ3VsYXIgcHVsc2UuICBUbyB2ZXJpZnkgdGhl
IHJlc3VsdCBpcyBjb3JyZWN0IHdlCisvLyBjaGVjayBzZXZlcmFsIHBhcnRzIG9mIHRoZSByZXN1
bHQuICBGaXJzdCwgd2UgbWFrZSBzdXJlIHRoZSBpbml0aWFsCisvLyBwYXJ0IG9mIHRoZSByZXN1
bHQgaXMgemVybyAoZHVlIHRvIHRoZSBsYXRlbmN5IGluIHRoZSBjb252b2x2ZXIpLgorLy8gTmV4
dCwgdGhlIHRyaWFuZ3VsYXIgcHVsc2Ugc2hvdWxkIG1hdGNoIHRoZSB0aGVvcmV0aWNhbCByZXN1
bHQgdG8KKy8vIHdpdGhpbiBzb21lIHJvdW5kb2ZmLiAgQWZ0ZXIgdGhlIHRyaWFuZ3VsYXIgcHVs
c2UsIHRoZSByZXN1bHQKKy8vIHNob3VsZCBiZSBleGFjdGx5IHplcm8sIGJ1dCByb3VuZC1vZmYg
cHJldmVudHMgdGhhdC4gIFdlIG1ha2Ugc3VyZQorLy8gdGhlIHBhcnQgYWZ0ZXIgdGhlIHB1bHNl
IGlzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB6ZXJvLiAgRmluYWxseSwKKy8vIHRoZSByZXN1bHQg
c2hvdWxkIGJlIGV4YWN0bHkgemVybyBiZWNhdXNlIHRoZSBpbnB1dHMgYXJlIGV4YWN0bHkKKy8v
IHplcm8uCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAg
IAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3Jl
YXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRB
dWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJh
dGUpOworCisgICAgdmFyIHNxdWFyZVB1bHNlID0gY3JlYXRlU3F1YXJlUHVsc2VCdWZmZXIoY29u
dGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworICAgIHZhciB0cmlhbmdsZVB1bHNlID0gY3JlYXRl
VHJpYW5nbGVQdWxzZUJ1ZmZlcihjb250ZXh0LCAyICogcHVsc2VMZW5ndGhGcmFtZXMpOworICAg
IAorICAgIHZhciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwor
ICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKyAgICAKKyAgICB2YXIgY29u
dm9sdmVyID0gY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTsKKyAgICBjb252b2x2ZXIubm9ybWFs
aXplID0gZmFsc2U7CisgICAgY29udm9sdmVyLmJ1ZmZlciA9IHNxdWFyZVB1bHNlOworCisgICAg
YnVmZmVyU291cmNlLmNvbm5lY3QoY29udm9sdmVyKTsKKyAgICBjb252b2x2ZXIuY29ubmVjdChj
b250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7CisgICAg
CisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tDb252b2x2ZWRSZXN1bHQodHJpYW5nbGVQ
dWxzZSk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitydW5UZXN0KCk7Citz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9s
dXRpb24tdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1
dGlvbi10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZTBkNWUxYjNhOTg5MzY1ZWU0M2YxMWE4Zjcx
M2E1NDJmOTFmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNv
dXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpAQCAtMCwwICsxLDIxMyBAQAordmFyIHNhbXBs
ZVJhdGUgPSA0NDEwMC4wOworCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7Cit2YXIgcHVs
c2VMZW5ndGhTZWNvbmRzID0gMTsKK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3Ro
U2Vjb25kcyAqIHNhbXBsZVJhdGU7CisKKy8vIFRoZSBjb252b2x2ZXIgaGFzIGEgbGF0ZW5jeSBv
ZiAxMjggc2FtcGxlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24uCisvLyBXZSBuZWVkIHRvIHRha2Ug
dGhpcyBpbnRvIGFjY291bnQgd2hlbiB2ZXJpZnlpbmcgdGhlIG91dHB1dCBvZiB0aGUKKy8vIGNv
bnZvbHZlci4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2
NC4KK3ZhciBjb252b2x2ZURlbGF5U2FtcGxlcyA9IDEyODsKKworZnVuY3Rpb24gY3JlYXRlU3F1
YXJlUHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIgYXVk
aW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29u
dGV4dC5zYW1wbGVSYXRlKTsKKworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAg
IHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IDE7CisKKyAgICByZXR1cm4g
YXVkaW9CdWZmZXI7Cit9CisKKy8vIFRoZSB0cmlhbmdsZSBidWZmZXIgaG9sZHMgdGhlIGV4cGVj
dGVkIHJlc3VsdCBvZiB0aGUgY29udm9sdXRpb24uCisvLyBJdCBsaW5lYXJseSByYW1wcyB1cCBm
cm9tIDAgdG8gaXRzIG1heGltdW0gdmFsdWUgKGF0IHRoZSBjZW50ZXIpCisvLyB0aGVuIGxpbmVh
cmx5IHJhbXBzIGRvd24gdG8gMC4gIFRoZSBjZW50ZXIgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhl
CisvLyBwb2ludCB3aGVyZSB0aGUgdHdvIHNxdWFyZSBwdWxzZXMgb3ZlcmxhcCB0aGUgbW9zdC4K
K2Z1bmN0aW9uIGNyZWF0ZVRyaWFuZ2xlUHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVM
ZW5ndGgpIHsKKyAgICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBz
YW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKworICAgIHZhciBuID0gYXVk
aW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBoYWxmTGVuZ3RoID0gbiAvIDI7CisgICAgdmFyIGRh
dGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICAKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGhhbGZMZW5ndGg7ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IGkgKyAxOworCisg
ICAgZm9yICh2YXIgaSA9IGhhbGZMZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAgIGRhdGFbaV0g
PSBuIC0gaSAtIDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKKy8vIFZlcmlmeSB0
aGF0IHRoZSBpbml0aWFsIGxhdGVuY3kgb2YgdGhlIGNvbnZvbHZlciBpcyBleGFjdGx5IHplcm8u
CisvLyBSZXR1cm4gdHJ1ZSBpZiBzby4KK2Z1bmN0aW9uIGNoZWNrTGF0ZW5jeShkYXRhKSB7Cisg
ICAgdmFyIGlzWmVybyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZvbHZl
RGVsYXlTYW1wbGVzOyArK2kpIHsKKyAgICAgICAgaWYgKGRhdGFbaV0gIT0gMCkgeworICAgICAg
ICAgICAgaXNaZXJvID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChpc1plcm8pIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiSW5pdGlhbCBsYXRl
bmN5IG9mIGNvbnZvbHZlciBpcyBzaWxlbnQuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiSW5pdGlhbCBsYXRlbmN5IG9mIGNvbnZvbHZlciBpcyBub3Qgc2lsZW50LiIpOwor
ICAgIH0KKworICAgIHJldHVybiBpc1plcm87Cit9CisKK2Z1bmN0aW9uIGxvZzEwKHgpIHsKKyAg
cmV0dXJuIE1hdGgubG9nKHgpL01hdGguTE4xMDsKK30KKworZnVuY3Rpb24gZGIyMCh4KSB7Cisg
IHJldHVybiAyMCpsb2cxMCh4KTsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHJlbmRlcmVkIHJl
c3VsdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSByZWZlcmVuY2UKKy8vIHRyaWFuZ3VsYXIgcHVsc2Uu
CitmdW5jdGlvbiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZCwgcmVmZXJlbmNlKSB7Cisg
ICAgdmFyIG1hdGNoID0gdHJ1ZTsKKyAgICB2YXIgbWF4RGVsdGEgPSAwOworICAgIHZhciB2YWx1
ZUF0TWF4RGVsdGEgPSAwOworICAgIHZhciBtYXhEZWx0YUluZGV4ID0gMDsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBkaWZm
ID0gcmVuZGVyZWRbaSArIGNvbnZvbHZlRGVsYXlTYW1wbGVzXSAtIHJlZmVyZW5jZVtpXTsKKyAg
ICAgICAgdmFyIHggPSBNYXRoLmFicyhkaWZmKTsKKyAgICAgICAgaWYgKHggPiBtYXhEZWx0YSkg
eworICAgICAgICAgICAgbWF4RGVsdGEgPSB4OworICAgICAgICAgICAgdmFsdWVBdE1heERlbHRh
ID0gcmVmZXJlbmNlW2ldOworICAgICAgICAgICAgbWF4RGVsdGFJbmRleCA9IGk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24gd2FzIGRldGVybWlu
ZWQgZXhwZXJpbWVudGFsbHkuICBJdAorICAgIC8vIGlzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIHJl
bGF0aXZlIGVycm9yIGF0IHRoZSBtYXhpbXVtCisgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRo
ZSB0cnVlIHRyaWFuZ3VsYXIgcHVsc2UgYW5kIHRoZQorICAgIC8vIHJlbmRlcmVkIHB1bHNlLgor
ICAgIHZhciBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24gPSBkYjIwKDIuMWUtNyk7CisgICAgdmFy
IG1heERldmlhdGlvbkZyYWN0aW9uID0gZGIyMChtYXhEZWx0YSAvIHZhbHVlQXRNYXhEZWx0YSk7
CisKKyAgICBpZiAobWF4RGV2aWF0aW9uRnJhY3Rpb24gPD0gYWxsb3dlZERldmlhdGlvbkZyYWN0
aW9uKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1
dGlvbiBpcyBjb3JyZWN0LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlRy
aWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1dGlvbiBpcyBub3QgY29ycmVjdC4gIE1heCBkZXZp
YXRpb24gPSAiICsgbWF4RGV2aWF0aW9uRnJhY3Rpb24gKyAiIGRCIGF0ICIgKyBtYXhEZWx0YUlu
ZGV4KTsKKyAgICAgICAgbWF0Y2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2g7
Cit9ICAgICAgICAKKworLy8gVmVyaWZ5IHRoYXQgdGhlIHJlbmRlcmVkIGRhdGEgaXMgY2xvc2Ug
dG8gemVybyBmb3IgdGhlIGZpcnN0IHBhcnQKKy8vIG9mIHRoZSB0YWlsLgorZnVuY3Rpb24gY2hl
Y2tUYWlsMShkYXRhLCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKKyAgICB2YXIgaXNaZXJvID0g
dHJ1ZTsKKyAgICB2YXIgdGFpbDFNYXggPSAwOworCisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5j
ZS5sZW5ndGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBi
cmVha3BvaW50OyArK2kpIHsKKyAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKGRhdGFbaV0pOwor
ICAgICAgICBpZiAobWFnID4gdGFpbDFNYXgpIHsKKyAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFn
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGV0J3MgZmluZCB0aGUgcGVhayBvZiB0aGUg
cmVmZXJlbmNlIChldmVuIHRob3VnaCB3ZSBrbm93IGEKKyAgICAvLyBwcmlvcmkgd2hhdCBpdCBp
cykuCisgICAgdmFyIHJlZk1heCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVu
Y2UubGVuZ3RoOyArK2kpIHsKKyAgICAgIHJlZk1heCA9IE1hdGgubWF4KHJlZk1heCwgTWF0aC5h
YnMocmVmZXJlbmNlW2ldKSk7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlc2hvbGQgaXMgZXhw
ZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgdGhlCisgICAgLy8gdmFsdWUgb2Yg
dGFpbDFNYXguCisgICAgdmFyIHRocmVzaG9sZDEgPSBkYjIwKDAuMDAyL3JlZk1heCk7CisKKyAg
ICB0YWlsMU1heCA9IGRiMjAodGFpbDFNYXgvcmVmTWF4KTsKKyAgICBpZiAodGFpbDFNYXggPD0g
dGhyZXNob2xkMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJGaXJzdCBwYXJ0IG9mIHRhaWwgb2Yg
Y29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxsLiIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHRlc3RGYWlsZWQoIkZpcnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBub3Qg
c3VmZmljaWVudGx5IHNtYWxsOiAiICsgdGFpbDFNYXggKyAiIGRCIik7CisgICAgICAgIGlzWmVy
byA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBpc1plcm87Cit9CisKKy8vIFZlcmlmeSB0
aGF0IHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgdGFpbCBvZiB0aGUgY29udm9sdXRpb24gaXMKKy8v
IGV4YWN0bHkgemVyby4KK2Z1bmN0aW9uIGNoZWNrVGFpbDIoZGF0YSwgcmVmZXJlbmNlLCBicmVh
a3BvaW50KSB7CisgICAgdmFyIGlzWmVybyA9IHRydWU7CisgICAgdmFyIHRhaWwyTWF4ID0gMDsK
KyAgICAvLyBGb3IgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSB0YWlsLCB0aGUgbWF4aW11bSB2YWx1
ZSBzaG91bGQgYmUKKyAgICAvLyBleGFjdGx5IHplcm8uCisgICAgdmFyIHRocmVzaG9sZDIgPSAw
OworICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVuZ3RoICsgYnJlYWtwb2ludDsgaSA8IGRh
dGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKE1hdGguYWJzKGRhdGFbaV0pID4gMCkgewor
ICAgICAgICAgICAgaXNaZXJvID0gZmFsc2U7IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoaXNaZXJvKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlJlbmRl
cmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIHNpbGVudC4iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBv
ZiBjb252b2x1dGlvbiBzaG91bGQgYmUgc2lsZW50LiIpOworICAgIH0KKworICAgIHJldHVybiBp
c1plcm87Cit9CisKK2Z1bmN0aW9uIGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2Up
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHJlbmRlcmVkQnVm
ZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CisKKyAgICAgICAgdmFyIHJlZmVyZW5jZURhdGEg
PSB0cmlhbmdsZVB1bHNlLmdldENoYW5uZWxEYXRhKDApOworICAgICAgICB2YXIgcmVuZGVyZWRE
YXRhID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgICAgIHZh
ciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICAgICAgLy8gVmVyaWZ5IHRoZSBpbml0aWFsIHBh
cnQgaXMgZXhhY3RseSB6ZXJvIGJlY2F1c2Ugb2YgdGhlCisgICAgICAgIC8vIGxhdGVuY3kgaW4g
dGhlIGNvbnZvbHZlci4KKworICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja0xhdGVu
Y3kocmVuZGVyZWREYXRhKTsKKworICAgICAgICAvLyBWZXJpZnkgdGhlIHRyaWFuZ3VsYXIgcHVs
c2UgaXMgYWN0dWFsbHkgdHJpYW5ndWxhci4KKworICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAm
JiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZERhdGEsIHJlZmVyZW5jZURhdGEpOworICAg
ICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcG9ydGlvbiBhZnRlciBjb252b2x2ZWQg
cG9ydGlvbiBpcyB0b3RhbGx5CisgICAgICAgIC8vIHNpbGVudC4gIEJ1dCByb3VuZC1vZmYgcHJl
dmVudHMgdGhpcyBmcm9tIGJlaW5nIGNvbXBsZXRlbHkKKyAgICAgICAgLy8gdHJ1ZS4gIEF0IHRo
ZSBlbmQgb2YgdGhlIHRyaWFuZ2xlLCBpdCBzaG91bGQgYmUgY2xvc2UgdG8KKyAgICAgICAgLy8g
emVyby4gIElmIHdlIGdvIGZhcnRoZXIgb3V0LCBpdCBzaG91bGQgYmUgZXZlbiBjbG9zZXIgYW5k
CisgICAgICAgIC8vIGV2ZW50dWFsbHkgemVyby4KKworICAgICAgICAvLyBGb3IgdGhlIHRhaWwg
b2YgdGhlIGNvbnZvbHV0aW9uICh3aGVyZSB0aGUgcmVzdWx0IHdvdWxkIGJlCisgICAgICAgIC8v
IHRoZW9yZXRpY2FsbHkgemVybyksIHdlIHBhcnRpdGlvbiB0aGUgdGFpbCBpbnRvIHR3bworICAg
ICAgICAvLyBwYXJ0cy4gIFRoZSBmaXJzdCBpcyB0aGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg
dGFpbCwKKyAgICAgICAgLy8gd2hlcmUgd2UgdG9sZXJhdGUgYSBzbWFsbCBidXQgbm9uLXplcm8g
dmFsdWUuICBUaGUgc2Vjb25kIHBhcnQgaXMKKyAgICAgICAgLy8gZmFydGhlciBhbG9uZyB0aGUg
dGFpbCB3aGVyZSB0aGUgcmVzdWx0IHNob3VsZCBiZSB6ZXJvLgorICAgICAgICAKKyAgICAgICAg
Ly8gYnJlYWtwb2ludCBpcyB0aGUgcG9pbnQgZGl2aWRpbmcgdGhlIGZpcnN0IHR3byB0YWlsIHBh
cnRzCisgICAgICAgIC8vIHdlJ3JlIGxvb2tpbmcgYXQuICBFeHBlcmltZW50YWxseSBkZXRlcm1p
bmVkLgorICAgICAgICB2YXIgYnJlYWtwb2ludCA9IDEyODAwOworCisgICAgICAgIHN1Y2Nlc3Mg
PSBzdWNjZXNzICYmIGNoZWNrVGFpbDEocmVuZGVyZWREYXRhLCByZWZlcmVuY2VEYXRhLCBicmVh
a3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVGFp
bDIocmVuZGVyZWREYXRhLCByZWZlcmVuY2VEYXRhLCBicmVha3BvaW50KTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUZXN0IHNpZ25h
bCB3YXMgY29ycmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIlRlc3Qgc2lnbmFsIHdhcyBub3QgY29ycmVjdGx5IGNvbnZvbHZlZC4i
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121503</attachid>
            <date>2012-01-06 15:04:07 -0800</date>
            <delta_ts>2012-01-06 16:16:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120106150406.patch</filename>
            <type>text/plain</type>
            <size>18086</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJmOWM4NjI0ZThlOWM0
ZmZhMjMwODI2YWU1OWZlNTU3NTZhNDEyMC4uODFjNzk2MzM5MzUzYTQ0MTAxZTM4YWVmZDU0MmUw
YmZkM2VkOGZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuCisgICAgICAgICogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVz
dF9leHBlY3RhdGlvbnMudHh0OgorICAgICAgICBEaXNhYmxlIHRlc3Qgb24gd2luZG93cy4gIEl0
IGZhaWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLgorCiAyMDEyLTAxLTA2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVy
IHNob3VsZCBiZSBtb3JlIGZ1bGwtc2VydmljZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYi5jcHAKaW5kZXggYjYyMDRmZmY3MzFjYTVlYzkyZjc4YmVmNDIwN2Y2YmY3NWNmZjFh
Yi4uMmI3ODdlYmYzMzZkNjc2ZGVjN2Y0MDE1MjBjMTE4N2E0Y2M1ZDE1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwCkBAIC04NywxNiArODcsMjMgQEAgc3RhdGlj
IGRvdWJsZSBjYWxjdWxhdGVOb3JtYWxpemF0aW9uU2NhbGUoQXVkaW9CdXMqIHJlc3BvbnNlKQog
ICAgIHJldHVybiBzY2FsZTsKIH0KIAotUmV2ZXJiOjpSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VS
ZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzKQorUmV2ZXJiOjpS
ZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwg
c2l6ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tn
cm91bmRUaHJlYWRzLCBib29sIG5vcm1hbGl6ZSkKIHsKLSAgICBkb3VibGUgc2NhbGUgPSBjYWxj
dWxhdGVOb3JtYWxpemF0aW9uU2NhbGUoaW1wdWxzZVJlc3BvbnNlKTsKLSAgICBpZiAoc2NhbGUp
Ci0gICAgICAgIGltcHVsc2VSZXNwb25zZS0+c2NhbGUoc2NhbGUpOworICAgIGRvdWJsZSBzY2Fs
ZSA9IDE7CisKKyAgICBpZiAobm9ybWFsaXplKSB7CisgICAgICAgIHNjYWxlID0gY2FsY3VsYXRl
Tm9ybWFsaXphdGlvblNjYWxlKGltcHVsc2VSZXNwb25zZSk7CisKKyAgICAgICAgaWYgKHNjYWxl
KQorICAgICAgICAgICAgaW1wdWxzZVJlc3BvbnNlLT5zY2FsZShzY2FsZSk7CisgICAgfQogCiAg
ICAgaW5pdGlhbGl6ZShpbXB1bHNlUmVzcG9uc2UsIHJlbmRlclNsaWNlU2l6ZSwgbWF4RkZUU2l6
ZSwgbnVtYmVyT2ZDaGFubmVscywgdXNlQmFja2dyb3VuZFRocmVhZHMpOwogCi0gICAgLy8gVW5k
byBzY2FsaW5nIHNpbmNlIHRoaXMgc2hvdWxkbid0IGJlIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9u
IG9uIGltcHVsc2VSZXNwb25zZQotICAgIGlmIChzY2FsZSkKKyAgICAvLyBVbmRvIHNjYWxpbmcg
c2luY2UgdGhpcyBzaG91bGRuJ3QgYmUgYSBkZXN0cnVjdGl2ZSBvcGVyYXRpb24gb24gaW1wdWxz
ZVJlc3BvbnNlLgorICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IHJvdW5kb2ZmPyBQZXJoYXBzIGNv
bnNpZGVyIG1ha2luZyBhIHRlbXBvcmFyeSBzY2FsZWQgY29weQorICAgIC8vIGluc3RlYWQgb2Yg
c2NhbGluZyBhbmQgdW5zY2FsaW5nIGluIHBsYWNlLgorICAgIGlmIChub3JtYWxpemUgJiYgc2Nh
bGUpCiAgICAgICAgIGltcHVsc2VSZXNwb25zZS0+c2NhbGUoMS4wIC8gc2NhbGUpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5oCmluZGV4IDI2ZjVmOGU2NGU4ZGY2ZGRl
ZGVhZWZhMmNkMzQxM2ZjNGY1ZmNiMTEuLmYxNjJlMGI3MDllOWJmNjg1MGE5MDEzMTljMmNiOWQ0
YmQ0ZWEyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
Yi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5oCkBAIC00Myw3
ICs0Myw3IEBAIHB1YmxpYzoKICAgICBlbnVtIHsgTWF4RnJhbWVTaXplID0gMjU2IH07CiAKICAg
ICAvLyByZW5kZXJTbGljZVNpemUgaXMgYSByZW5kZXJpbmcgaGludCwgc28gdGhlIEZGVHMgY2Fu
IGJlIG9wdGltaXplZCB0byBub3QgYWxsIG9jY3VyIGF0IHRoZSBzYW1lIHRpbWUgKHZlcnkgYmFk
IHdoZW4gcmVuZGVyaW5nIG9uIGEgcmVhbC10aW1lIHRocmVhZCkuCi0gICAgUmV2ZXJiKEF1ZGlv
QnVzKiBpbXB1bHNlUmVzcG9uc2VCdWZmZXIsIHNpemVfdCByZW5kZXJTbGljZVNpemUsIHNpemVf
dCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcyk7CisgICAgUmV2ZXJiKEF1ZGlvQnVzKiBpbXB1bHNlUmVzcG9uc2VCdWZmZXIsIHNp
emVfdCByZW5kZXJTbGljZVNpemUsIHNpemVfdCBtYXhGRlRTaXplLCBzaXplX3QgbnVtYmVyT2ZD
aGFubmVscywgYm9vbCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgYm9vbCBub3JtYWxpemUpOwogCiAg
ICAgdm9pZCBwcm9jZXNzKEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlv
bkJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAppbmRleCAzMTU4MzU2MTk3MWE2OTli
YjMwYzVhMjhjMWFmYzJhYWNiMWQ2M2Y0Li42YWZjMDk1YmNkYjBiNGQzYmE5ZGM2OTU2YjVhODBm
OTQzMjRlOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcApA
QCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbnZvbHZlck5vZGU6OkNv
bnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAg
IDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX25vcm1hbGl6ZSh0cnVl
KQogewogICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwog
ICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CkBA
IC0xMzQsNyArMTM1LDcgQEAgdm9pZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZm
ZXIqIGJ1ZmZlcikKICAgICAKICAgICAvLyBDcmVhdGUgdGhlIHJldmVyYiB3aXRoIHRoZSBnaXZl
biBpbXB1bHNlIHJlc3BvbnNlLgogICAgIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMgPSAhY29u
dGV4dCgpLT5pc09mZmxpbmVDb250ZXh0KCk7Ci0gICAgT3duUHRyPFJldmVyYj4gcmV2ZXJiID0g
YWRvcHRQdHIobmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXpl
SW5GcmFtZXMsIE1heEZGVFNpemUsIDIsIHVzZUJhY2tncm91bmRUaHJlYWRzKSk7CisgICAgT3du
UHRyPFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIobmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRp
b05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIE1heEZGVFNpemUsIDIsIHVzZUJhY2tncm91
bmRUaHJlYWRzLCBtX25vcm1hbGl6ZSkpOwogCiAgICAgewogICAgICAgICAvLyBTeW5jaHJvbml6
ZSB3aXRoIHByb2Nlc3MoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApp
bmRleCBmYjI5ZDVjNWQyODdiOTBiZTQ1MDY2NzVmMzU1YmZiYmI3ODQzZDllLi4xMmY0MTcyODE5
YTAwZTVmMDg3YWQ5OTY2YTIzNDRkYTZkNDIyZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJ1
ZmZlcihBdWRpb0J1ZmZlciopOwogICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIoKTsKIAorICAgIGJv
b2wgbm9ybWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KKyAgICB2b2lkIHNl
dE5vcm1hbGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQog
cHJpdmF0ZToKICAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwogCkBAIC02Miw2ICs2NCw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGlzIHN5bmNocm9u
aXplcyBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ug
d2l0aCBwcm9jZXNzKCkuCiAgICAgbXV0YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2NrOworCisgICAg
Ly8gTm9ybWFsaXplIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9yIG5vdC4gTXVzdCBkZWZhdWx0IHRv
IHRydWUuCisgICAgYm9vbCBtX25vcm1hbGl6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKaW5kZXggZDNlYjQ3
NWYwYzc1YjM4NDU3NDQyNGJiOTFmOTIwMzUwYjY5ZTcyZS4uYzY1OGJkYzE5ZWI1ZDYyYzgwNzU2
Y2FmN2M5ZGE2ZDVhM2ViNGNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5pZGwKQEAgLTI5LDUgKzI5LDYgQEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgR2VuZXJh
dGVUb0pTCiAgICAgXSBDb252b2x2ZXJOb2RlIDogQXVkaW9Ob2RlIHsKICAgICAgICAgYXR0cmli
dXRlIFtKU0NDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgYXR0cmli
dXRlIGJvb2xlYW4gbm9ybWFsaXplOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggYTNiZmVjYTBkMGY1
NjA3NjYyZGU3ODVjNjU5Njg5MTNhZTIxZDZmOS4uODVmZWZhZGY0ZTk0MWZlZGE3YTNhODkwMGVi
YzMxZWM2NzZlMDkwMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dApAQCAtMzg4NCwzICszODg0LDExIEBAIEJVR1dLNzU2MzMg
OiBmYXN0L21lZGlhL3ZpZXdwb3J0LW1lZGlhLXF1ZXJ5Lmh0bWwgPSBQQVNTIElNQUdFK1RFWFQK
IEJVR1dLNzU1MDUgOiBtZWRpYS9tZWRpYS1kb2N1bWVudC1hdWRpby1yZXBhaW50Lmh0bWwgPSBJ
TUFHRQogCiBCVUdXSzc1Njk2IE1BQyBMSU5VWCBERUJVRzogc3ZnL3RleHQvdGV4dC1zdHlsZS1y
ZWNhbGMtY3Jhc2guaHRtbCA9IFBBU1MgVElNRU9VVAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2ViIEF1
ZGlvCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisvLyBUaGlzIHNob3VsZCBwYXNzIGJ1dCBkb2Vzbid0IG9uIHdp
bmRvd3MgZm9yIHNvbWUgcmVhc29uLiAgSXQncyBub3QKKy8vIGV2ZW4gY2xvc2UuCitCVUdXSzc1
MTI2IE1BQyA6IHdlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby5odG1sID0gUEFTUwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODcwNWY2NjFjM2EyODZjNDg1NzM2Y2E0NWE0NDM3NTNhNTZh
NzM1YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9u
LW1vbm8tbW9uby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgQ29udm9sdmVy
Tm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFubmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNl
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgSW5pdGlhbCBsYXRlbmN5IG9m
IGNvbnZvbHZlciBpcyBzaWxlbnQuCitQQVNTIFRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1
dGlvbiBpcyBjb3JyZWN0LgorUEFTUyBGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24g
aXMgc3VmZmljaWVudGx5IHNtYWxsLgorUEFTUyBSZW5kZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBv
ZiBjb252b2x1dGlvbiBpcyBzaWxlbnQuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkg
Y29udm9sdmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vY29udm9sdXRpb24tbW9uby1tb25vLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2ZjYTcwOTdjNDZhM2E2NTEzNTBiZWFlZTRhMDVjZjY2NzRkYTZkZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8t
bW9uby5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29udm9sdXRp
b24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0cyBDb252b2x2ZXJOb2RlIHByb2Nlc3NpbmcgYSBtb25vIGNoYW5u
ZWwgd2l0aCBtb25vIGltcHVsc2UgcmVzcG9uc2UuIik7CisKKy8vIFRvIHRlc3QgdGhlIGNvbnZv
bHZlciwgd2UgY29udm9sdmUgdHdvIHNxdWFyZSBwdWxzZXMgdG9nZXRoZXIgdG8KKy8vIHByb2R1
Y2UgYSB0cmlhbmd1bGFyIHB1bHNlLiAgVG8gdmVyaWZ5IHRoZSByZXN1bHQgaXMgY29ycmVjdCB3
ZQorLy8gY2hlY2sgc2V2ZXJhbCBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgRmlyc3QsIHdlIG1ha2Ug
c3VyZSB0aGUgaW5pdGlhbAorLy8gcGFydCBvZiB0aGUgcmVzdWx0IGlzIHplcm8gKGR1ZSB0byB0
aGUgbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyKS4KKy8vIE5leHQsIHRoZSB0cmlhbmd1bGFyIHB1
bHNlIHNob3VsZCBtYXRjaCB0aGUgdGhlb3JldGljYWwgcmVzdWx0IHRvCisvLyB3aXRoaW4gc29t
ZSByb3VuZG9mZi4gIEFmdGVyIHRoZSB0cmlhbmd1bGFyIHB1bHNlLCB0aGUgcmVzdWx0CisvLyBz
aG91bGQgYmUgZXhhY3RseSB6ZXJvLCBidXQgcm91bmQtb2ZmIHByZXZlbnRzIHRoYXQuICBXZSBt
YWtlIHN1cmUKKy8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBwdWxzZSBpcyBzdWZmaWNpZW50bHkgY2xv
c2UgdG8gemVyby4gIEZpbmFsbHksCisvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBleGFjdGx5IHpl
cm8gYmVjYXVzZSB0aGUgaW5wdXRzIGFyZSBleGFjdGx5CisvLyB6ZXJvLgorZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNv
bnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBs
ZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIHZhciBzcXVh
cmVQdWxzZSA9IGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJh
bWVzKTsKKyAgICB2YXIgdHJpYW5nbGVQdWxzZSA9IGNyZWF0ZVRyaWFuZ2xlUHVsc2VCdWZmZXIo
Y29udGV4dCwgMiAqIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICAKKyAgICB2YXIgYnVmZmVyU291
cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBidWZmZXJTb3VyY2UuYnVm
ZmVyID0gc3F1YXJlUHVsc2U7CisgICAgCisgICAgdmFyIGNvbnZvbHZlciA9IGNvbnRleHQuY3Jl
YXRlQ29udm9sdmVyKCk7CisgICAgY29udm9sdmVyLm5vcm1hbGl6ZSA9IGZhbHNlOworICAgIGNv
bnZvbHZlci5idWZmZXIgPSBzcXVhcmVQdWxzZTsKKworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0
KGNvbnZvbHZlcik7CisgICAgY29udm9sdmVyLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7
CisKKyAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOworICAgIAorICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IGNoZWNrQ29udm9sdmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpOworICAgIGNvbnRleHQu
c3RhcnRSZW5kZXJpbmcoKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvY29udm9sdXRpb24tdGVzdGluZy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMWQyNzE0OGExMWE4MWZkYTZhMjY4MWFjZTg1YTFjMzU1ODYzNTVjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKQEAgLTAsMCArMSwyMTMgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKwor
dmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vjb25kcyA9IDE7
Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1wbGVSYXRl
OworCisvLyBUaGUgY29udm9sdmVyIGhhcyBhIGxhdGVuY3kgb2YgMTI4IHNhbXBsZXMgaW4gdGhl
IGltcGxlbWVudGF0aW9uLgorLy8gV2UgbmVlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdo
ZW4gdmVyaWZ5aW5nIHRoZSBvdXRwdXQgb2YgdGhlCisvLyBjb252b2x2ZXIuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjQuCit2YXIgY29udm9sdmVEZWxh
eVNhbXBsZXMgPSAxMjg7CisKK2Z1bmN0aW9uIGNyZWF0ZVNxdWFyZVB1bHNlQnVmZmVyKGNvbnRl
eHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5j
cmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisK
KyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVm
ZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kp
CisgICAgICAgIGRhdGFbaV0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisv
LyBUaGUgdHJpYW5nbGUgYnVmZmVyIGhvbGRzIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgdGhlIGNv
bnZvbHV0aW9uLgorLy8gSXQgbGluZWFybHkgcmFtcHMgdXAgZnJvbSAwIHRvIGl0cyBtYXhpbXVt
IHZhbHVlIChhdCB0aGUgY2VudGVyKQorLy8gdGhlbiBsaW5lYXJseSByYW1wcyBkb3duIHRvIDAu
ICBUaGUgY2VudGVyIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZQorLy8gcG9pbnQgd2hlcmUgdGhl
IHR3byBzcXVhcmUgcHVsc2VzIG92ZXJsYXAgdGhlIG1vc3QuCitmdW5jdGlvbiBjcmVhdGVUcmlh
bmdsZVB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1
ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNv
bnRleHQuc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAg
ICB2YXIgaGFsZkxlbmd0aCA9IG4gLyAyOworICAgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0
Q2hhbm5lbERhdGEoMCk7CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYWxmTGVuZ3Ro
OyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBpICsgMTsKKworICAgIGZvciAodmFyIGkgPSBoYWxm
TGVuZ3RoOyBpIDwgbjsgKytpKQorICAgICAgICBkYXRhW2ldID0gbiAtIGkgLSAxOworCisgICAg
cmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisvLyBWZXJpZnkgdGhhdCB0aGUgaW5pdGlhbCBsYXRl
bmN5IG9mIHRoZSBjb252b2x2ZXIgaXMgZXhhY3RseSB6ZXJvLgorLy8gUmV0dXJuIHRydWUgaWYg
c28uCitmdW5jdGlvbiBjaGVja0xhdGVuY3koZGF0YSkgeworICAgIHZhciBpc1plcm8gPSB0cnVl
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb252b2x2ZURlbGF5U2FtcGxlczsgKytpKSB7
CisgICAgICAgIGlmIChkYXRhW2ldICE9IDApIHsKKyAgICAgICAgICAgIGlzWmVybyA9IGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNaZXJv
KSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkluaXRpYWwgbGF0ZW5jeSBvZiBjb252b2x2ZXIgaXMg
c2lsZW50LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkluaXRpYWwgbGF0
ZW5jeSBvZiBjb252b2x2ZXIgaXMgbm90IHNpbGVudC4iKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aXNaZXJvOworfQorCitmdW5jdGlvbiBsb2cxMCh4KSB7CisgIHJldHVybiBNYXRoLmxvZyh4KS9N
YXRoLkxOMTA7Cit9CisKK2Z1bmN0aW9uIGxpbmVhclRvRGVjaWJlbCh4KSB7CisgIHJldHVybiAy
MCpsb2cxMCh4KTsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHJlbmRlcmVkIHJlc3VsdCBpcyB2
ZXJ5IGNsb3NlIHRvIHRoZSByZWZlcmVuY2UKKy8vIHRyaWFuZ3VsYXIgcHVsc2UuCitmdW5jdGlv
biBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZCwgcmVmZXJlbmNlKSB7CisgICAgdmFyIG1h
dGNoID0gdHJ1ZTsKKyAgICB2YXIgbWF4RGVsdGEgPSAwOworICAgIHZhciB2YWx1ZUF0TWF4RGVs
dGEgPSAwOworICAgIHZhciBtYXhEZWx0YUluZGV4ID0gMDsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBkaWZmID0gcmVuZGVy
ZWRbaSArIGNvbnZvbHZlRGVsYXlTYW1wbGVzXSAtIHJlZmVyZW5jZVtpXTsKKyAgICAgICAgdmFy
IHggPSBNYXRoLmFicyhkaWZmKTsKKyAgICAgICAgaWYgKHggPiBtYXhEZWx0YSkgeworICAgICAg
ICAgICAgbWF4RGVsdGEgPSB4OworICAgICAgICAgICAgdmFsdWVBdE1heERlbHRhID0gcmVmZXJl
bmNlW2ldOworICAgICAgICAgICAgbWF4RGVsdGFJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBhbGxvd2VkRGV2aWF0aW9uRnJhY3Rpb24gd2FzIGRldGVybWluZWQgZXhwZXJp
bWVudGFsbHkuICBJdAorICAgIC8vIGlzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIHJlbGF0aXZlIGVy
cm9yIGF0IHRoZSBtYXhpbXVtCisgICAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0cnVlIHRy
aWFuZ3VsYXIgcHVsc2UgYW5kIHRoZQorICAgIC8vIHJlbmRlcmVkIHB1bHNlLgorICAgIHZhciBh
bGxvd2VkRGV2aWF0aW9uRGVjaWJlbHMgPSAtMTMzLjU7CisgICAgdmFyIG1heERldmlhdGlvbkRl
Y2liZWxzID0gbGluZWFyVG9EZWNpYmVsKG1heERlbHRhIC8gdmFsdWVBdE1heERlbHRhKTsKKwor
ICAgIGlmIChtYXhEZXZpYXRpb25EZWNpYmVscyA8PSBhbGxvd2VkRGV2aWF0aW9uRGVjaWJlbHMp
IHsKKyAgICAgICAgdGVzdFBhc3NlZCgiVHJpYW5ndWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9u
IGlzIGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVHJpYW5n
dWxhciBwb3J0aW9uIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBjb3JyZWN0LiAgTWF4IGRldmlhdGlv
biA9ICIgKyBtYXhEZXZpYXRpb25EZWNpYmVscyArICIgZEIgYXQgIiArIG1heERlbHRhSW5kZXgp
OworICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKK30g
ICAgICAgIAorCisvLyBWZXJpZnkgdGhhdCB0aGUgcmVuZGVyZWQgZGF0YSBpcyBjbG9zZSB0byB6
ZXJvIGZvciB0aGUgZmlyc3QgcGFydAorLy8gb2YgdGhlIHRhaWwuCitmdW5jdGlvbiBjaGVja1Rh
aWwxKGRhdGEsIHJlZmVyZW5jZSwgYnJlYWtwb2ludCkgeworICAgIHZhciBpc1plcm8gPSB0cnVl
OworICAgIHZhciB0YWlsMU1heCA9IDA7CisKKyAgICBmb3IgKHZhciBpID0gcmVmZXJlbmNlLmxl
bmd0aCArIGNvbnZvbHZlRGVsYXlTYW1wbGVzOyBpIDwgcmVmZXJlbmNlLmxlbmd0aCArIGJyZWFr
cG9pbnQ7ICsraSkgeworICAgICAgICB2YXIgbWFnID0gTWF0aC5hYnMoZGF0YVtpXSk7CisgICAg
ICAgIGlmIChtYWcgPiB0YWlsMU1heCkgeworICAgICAgICAgICAgdGFpbDFNYXggPSBtYWc7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMZXQncyBmaW5kIHRoZSBwZWFrIG9mIHRoZSByZWZl
cmVuY2UgKGV2ZW4gdGhvdWdoIHdlIGtub3cgYQorICAgIC8vIHByaW9yaSB3aGF0IGl0IGlzKS4K
KyAgICB2YXIgcmVmTWF4ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZmVyZW5jZS5s
ZW5ndGg7ICsraSkgeworICAgICAgcmVmTWF4ID0gTWF0aC5tYXgocmVmTWF4LCBNYXRoLmFicyhy
ZWZlcmVuY2VbaV0pKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRocmVzaG9sZCBpcyBleHBlcmlt
ZW50YWxseSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyB0aGUKKyAgICAvLyB2YWx1ZSBvZiB0YWls
MU1heERlY2liZWxzLgorICAgIHZhciB0aHJlc2hvbGQxID0gLTE0Ni43OworCisgICAgdmFyIHRh
aWwxTWF4RGVjaWJlbHMgPSBsaW5lYXJUb0RlY2liZWwodGFpbDFNYXgvcmVmTWF4KTsKKyAgICBp
ZiAodGFpbDFNYXhEZWNpYmVscyA8PSB0aHJlc2hvbGQxKSB7CisgICAgICAgIHRlc3RQYXNzZWQo
IkZpcnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNpZW50bHkgc21hbGwu
Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3QgcGFydCBvZiB0YWls
IG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIgKyB0YWlsMU1heCAr
ICIgZEIiKTsKKyAgICAgICAgaXNaZXJvID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGlz
WmVybzsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSB0YWlsIG9m
IHRoZSBjb252b2x1dGlvbiBpcworLy8gZXhhY3RseSB6ZXJvLgorZnVuY3Rpb24gY2hlY2tUYWls
MihkYXRhLCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKKyAgICB2YXIgaXNaZXJvID0gdHJ1ZTsK
KyAgICB2YXIgdGFpbDJNYXggPSAwOworICAgIC8vIEZvciB0aGUgc2Vjb25kIHBhcnQgb2YgdGhl
IHRhaWwsIHRoZSBtYXhpbXVtIHZhbHVlIHNob3VsZCBiZQorICAgIC8vIGV4YWN0bHkgemVyby4K
KyAgICB2YXIgdGhyZXNob2xkMiA9IDA7CisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5sZW5n
dGggKyBicmVha3BvaW50OyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoTWF0
aC5hYnMoZGF0YVtpXSkgPiAwKSB7CisgICAgICAgICAgICBpc1plcm8gPSBmYWxzZTsgCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc1plcm8pIHsKKyAg
ICAgICAgdGVzdFBhc3NlZCgiUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwgb2YgY29udm9sdXRp
b24gaXMgc2lsZW50LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlJlbmRl
cmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0aW9uIHNob3VsZCBiZSBzaWxlbnQuIik7
CisgICAgfQorCisgICAgcmV0dXJuIGlzWmVybzsKK30KKworZnVuY3Rpb24gY2hlY2tDb252b2x2
ZWRSZXN1bHQodHJpYW5nbGVQdWxzZSkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICB2YXIgcmVuZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKworICAg
ICAgICB2YXIgcmVmZXJlbmNlRGF0YSA9IHRyaWFuZ2xlUHVsc2UuZ2V0Q2hhbm5lbERhdGEoMCk7
CisgICAgICAgIHZhciByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0
YSgwKTsKKyAgICAKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIAorICAgICAgICAv
LyBWZXJpZnkgdGhlIGluaXRpYWwgcGFydCBpcyBleGFjdGx5IHplcm8gYmVjYXVzZSBvZiB0aGUK
KyAgICAgICAgLy8gbGF0ZW5jeSBpbiB0aGUgY29udm9sdmVyLgorCisgICAgICAgIHN1Y2Nlc3Mg
PSBzdWNjZXNzICYmIGNoZWNrTGF0ZW5jeShyZW5kZXJlZERhdGEpOworCisgICAgICAgIC8vIFZl
cmlmeSB0aGUgdHJpYW5ndWxhciBwdWxzZSBpcyBhY3R1YWxseSB0cmlhbmd1bGFyLgorCisgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVHJpYW5ndWxhclB1bHNlKHJlbmRlcmVkRGF0
YSwgcmVmZXJlbmNlRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBw
b3J0aW9uIGFmdGVyIGNvbnZvbHZlZCBwb3J0aW9uIGlzIHRvdGFsbHkKKyAgICAgICAgLy8gc2ls
ZW50LiAgQnV0IHJvdW5kLW9mZiBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgY29tcGxldGVseQor
ICAgICAgICAvLyB0cnVlLiAgQXQgdGhlIGVuZCBvZiB0aGUgdHJpYW5nbGUsIGl0IHNob3VsZCBi
ZSBjbG9zZSB0bworICAgICAgICAvLyB6ZXJvLiAgSWYgd2UgZ28gZmFydGhlciBvdXQsIGl0IHNo
b3VsZCBiZSBldmVuIGNsb3NlciBhbmQKKyAgICAgICAgLy8gZXZlbnR1YWxseSB6ZXJvLgorCisg
ICAgICAgIC8vIEZvciB0aGUgdGFpbCBvZiB0aGUgY29udm9sdXRpb24gKHdoZXJlIHRoZSByZXN1
bHQgd291bGQgYmUKKyAgICAgICAgLy8gdGhlb3JldGljYWxseSB6ZXJvKSwgd2UgcGFydGl0aW9u
IHRoZSB0YWlsIGludG8gdHdvCisgICAgICAgIC8vIHBhcnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBh
dCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWlsLAorICAgICAgICAvLyB3aGVyZSB3ZSB0b2xlcmF0
ZSBhIHNtYWxsIGJ1dCBub24temVybyB2YWx1ZS4gIFRoZSBzZWNvbmQgcGFydCBpcworICAgICAg
ICAvLyBmYXJ0aGVyIGFsb25nIHRoZSB0YWlsIHdoZXJlIHRoZSByZXN1bHQgc2hvdWxkIGJlIHpl
cm8uCisgICAgICAgIAorICAgICAgICAvLyBicmVha3BvaW50IGlzIHRoZSBwb2ludCBkaXZpZGlu
ZyB0aGUgZmlyc3QgdHdvIHRhaWwgcGFydHMKKyAgICAgICAgLy8gd2UncmUgbG9va2luZyBhdC4g
IEV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgIHZhciBicmVha3BvaW50ID0gMTI4
MDA7CisKKyAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgY2hlY2tUYWlsMShyZW5kZXJlZERh
dGEsIHJlZmVyZW5jZURhdGEsIGJyZWFrcG9pbnQpOworICAgICAgICAKKyAgICAgICAgc3VjY2Vz
cyA9IHN1Y2Nlc3MgJiYgY2hlY2tUYWlsMihyZW5kZXJlZERhdGEsIHJlZmVyZW5jZURhdGEsIGJy
ZWFrcG9pbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
IHRlc3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgY29udm9sdmVkLiIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVGVzdCBzaWduYWwgd2FzIG5v
dCBjb3JyZWN0bHkgY29udm9sdmVkLiIpOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121517</attachid>
            <date>2012-01-06 16:16:30 -0800</date>
            <delta_ts>2012-01-09 12:24:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75126-20120106161629.patch</filename>
            <type>text/plain</type>
            <size>17061</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk4NDE0Nzc5MWIyZjVk
MWM5ZWI5NDdhYmEyZmQyODg1MzVmNzVlZS4uMzE4MzIwZGZhMTA1ZjYzMThiNjZhZGFlYWEwNzBi
NjEzMWMzOWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTAzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgbm9ybWFsaXplIGF0dHJp
YnV0ZSB0byBDb252b2x2ZXJOb2RlIHRvIGRpc2FibGUgbm9ybWFsaXphdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgYWRkZWQgaW4gY29u
dm9sdXRpb24tbW9uby1tb25vLmh0bWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiOjpSZXZlcmIpOiBBZGQgZXh0cmEgYXJn
IHRvIGluZGljYXRlIHdoZXRoZXIKKyAgICAgICAgbm9ybWFsaXphdGlvbiBpcyBlbmFibGVkIG9y
IG5vdCwgYW5kIGRvIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYi5oOiBVcGRh
dGUgZGVjbGFyYXRpb24uCisgICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKTogSW5pdGlhbGl6
ZSBhdHRyaWJ1dGUgKHRvCisgICAgICAgIHRydWUpLgorICAgICAgICAoV2ViQ29yZTo6Q29udm9s
dmVyTm9kZTo6c2V0QnVmZmVyKTogQ2FsbCBSZXZlcmIgd2l0aAorICAgICAgICBub3JtYWxpemF0
aW9uIGFyZ3VtZW50LgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6Om5vcm1hbGl6ZSk6IE5ldyBtZXRob2QgdG8gcmV0
dXJuCisgICAgICAgIG5vcm1hbGl6YXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVy
Tm9kZTo6c2V0Tm9ybWFsaXplKTogIE5ldyBtZXRob2QgdG8gc2V0CisgICAgICAgIG5vcm1hbGl6
YXRpb24uIAorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBBZGQgbm9ybWFs
aXplIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8uaHRtbDoKKyAgICAgICAgKiBMYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1
dGlvbi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIExheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzOgorICAgICAgICBUZXN0IGZvciBj
b252b2x1dGlvbi4gIFRlc3RzIG9ubHkgd29yayB3aGVuIG5vcm1hbGl6YXRpb24gaXMKKyAgICAg
ICAgZGlzYWJsZWQuCisKIDIwMTItMDEtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBSZW1vdmUgdW51c2VkIE93bkZhc3RNYWxsb2NQdHIgY2xhc3MuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmNwcAppbmRleCBiNjIwNGZmZjczMWNhNWVjOTJm
NzhiZWY0MjA3ZjZiZjc1Y2ZmMWFiLi4yYjc4N2ViZjMzNmQ2NzZkZWM3ZjQwMTUyMGMxMTg3YTRj
YzVkMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYi5jcHAKQEAgLTg3
LDE2ICs4NywyMyBAQCBzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZU5vcm1hbGl6YXRpb25TY2FsZShB
dWRpb0J1cyogcmVzcG9uc2UpCiAgICAgcmV0dXJuIHNjYWxlOwogfQogCi1SZXZlcmI6OlJldmVy
YihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpY2VTaXplLCBzaXpl
X3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgdXNlQmFja2dyb3Vu
ZFRocmVhZHMpCitSZXZlcmI6OlJldmVyYihBdWRpb0J1cyogaW1wdWxzZVJlc3BvbnNlLCBzaXpl
X3QgcmVuZGVyU2xpY2VTaXplLCBzaXplX3QgbWF4RkZUU2l6ZSwgc2l6ZV90IG51bWJlck9mQ2hh
bm5lbHMsIGJvb2wgdXNlQmFja2dyb3VuZFRocmVhZHMsIGJvb2wgbm9ybWFsaXplKQogewotICAg
IGRvdWJsZSBzY2FsZSA9IGNhbGN1bGF0ZU5vcm1hbGl6YXRpb25TY2FsZShpbXB1bHNlUmVzcG9u
c2UpOwotICAgIGlmIChzY2FsZSkKLSAgICAgICAgaW1wdWxzZVJlc3BvbnNlLT5zY2FsZShzY2Fs
ZSk7CisgICAgZG91YmxlIHNjYWxlID0gMTsKKworICAgIGlmIChub3JtYWxpemUpIHsKKyAgICAg
ICAgc2NhbGUgPSBjYWxjdWxhdGVOb3JtYWxpemF0aW9uU2NhbGUoaW1wdWxzZVJlc3BvbnNlKTsK
KworICAgICAgICBpZiAoc2NhbGUpCisgICAgICAgICAgICBpbXB1bHNlUmVzcG9uc2UtPnNjYWxl
KHNjYWxlKTsKKyAgICB9CiAKICAgICBpbml0aWFsaXplKGltcHVsc2VSZXNwb25zZSwgcmVuZGVy
U2xpY2VTaXplLCBtYXhGRlRTaXplLCBudW1iZXJPZkNoYW5uZWxzLCB1c2VCYWNrZ3JvdW5kVGhy
ZWFkcyk7CiAKLSAgICAvLyBVbmRvIHNjYWxpbmcgc2luY2UgdGhpcyBzaG91bGRuJ3QgYmUgYSBk
ZXN0cnVjdGl2ZSBvcGVyYXRpb24gb24gaW1wdWxzZVJlc3BvbnNlCi0gICAgaWYgKHNjYWxlKQor
ICAgIC8vIFVuZG8gc2NhbGluZyBzaW5jZSB0aGlzIHNob3VsZG4ndCBiZSBhIGRlc3RydWN0aXZl
IG9wZXJhdGlvbiBvbiBpbXB1bHNlUmVzcG9uc2UuCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQg
cm91bmRvZmY/IFBlcmhhcHMgY29uc2lkZXIgbWFraW5nIGEgdGVtcG9yYXJ5IHNjYWxlZCBjb3B5
CisgICAgLy8gaW5zdGVhZCBvZiBzY2FsaW5nIGFuZCB1bnNjYWxpbmcgaW4gcGxhY2UuCisgICAg
aWYgKG5vcm1hbGl6ZSAmJiBzY2FsZSkKICAgICAgICAgaW1wdWxzZVJlc3BvbnNlLT5zY2FsZSgx
LjAgLyBzY2FsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmgKaW5k
ZXggMjZmNWY4ZTY0ZThkZjZkZGVkZWFlZmEyY2QzNDEzZmM0ZjVmY2IxMS4uZjE2MmUwYjcwOWU5
YmY2ODUwYTkwMTMxOWMyY2I5ZDRiZDRlYTI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIGVudW0geyBNYXhGcmFt
ZVNpemUgPSAyNTYgfTsKIAogICAgIC8vIHJlbmRlclNsaWNlU2l6ZSBpcyBhIHJlbmRlcmluZyBo
aW50LCBzbyB0aGUgRkZUcyBjYW4gYmUgb3B0aW1pemVkIHRvIG5vdCBhbGwgb2NjdXIgYXQgdGhl
IHNhbWUgdGltZSAodmVyeSBiYWQgd2hlbiByZW5kZXJpbmcgb24gYSByZWFsLXRpbWUgdGhyZWFk
KS4KLSAgICBSZXZlcmIoQXVkaW9CdXMqIGltcHVsc2VSZXNwb25zZUJ1ZmZlciwgc2l6ZV90IHJl
bmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNpemUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxz
LCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzKTsKKyAgICBSZXZlcmIoQXVkaW9CdXMqIGltcHVs
c2VSZXNwb25zZUJ1ZmZlciwgc2l6ZV90IHJlbmRlclNsaWNlU2l6ZSwgc2l6ZV90IG1heEZGVFNp
emUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzLCBi
b29sIG5vcm1hbGl6ZSk7CiAKICAgICB2b2lkIHByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZUJ1cywg
QXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2
b2lkIHJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCmlu
ZGV4IDMxNTgzNTYxOTcxYTY5OWJiMzBjNWEyOGMxYWZjMmFhY2IxZDYzZjQuLjZhZmMwOTViY2Ri
MGI0ZDNiYTlkYzY5NTZiNWE4MGY5NDMyNGU5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCiAgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKKyAg
ICAsIG1fbm9ybWFsaXplKHRydWUpCiB7CiAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlv
Tm9kZUlucHV0KHRoaXMpKSk7CiAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVP
dXRwdXQodGhpcywgMikpKTsKQEAgLTEzNCw3ICsxMzUsNyBAQCB2b2lkIENvbnZvbHZlck5vZGU6
OnNldEJ1ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQogICAgIAogICAgIC8vIENyZWF0ZSB0aGUg
cmV2ZXJiIHdpdGggdGhlIGdpdmVuIGltcHVsc2UgcmVzcG9uc2UuCiAgICAgYm9vbCB1c2VCYWNr
Z3JvdW5kVGhyZWFkcyA9ICFjb250ZXh0KCktPmlzT2ZmbGluZUNvbnRleHQoKTsKLSAgICBPd25Q
dHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2ZXJiKCZidWZmZXJCdXMsIEF1ZGlv
Tm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZUU2l6ZSwgMiwgdXNlQmFja2dyb3Vu
ZFRocmVhZHMpKTsKKyAgICBPd25QdHI8UmV2ZXJiPiByZXZlcmIgPSBhZG9wdFB0cihuZXcgUmV2
ZXJiKCZidWZmZXJCdXMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcywgTWF4RkZU
U2l6ZSwgMiwgdXNlQmFja2dyb3VuZFRocmVhZHMsIG1fbm9ybWFsaXplKSk7CiAKICAgICB7CiAg
ICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGggcHJvY2VzcygpLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5oCmluZGV4IGZiMjlkNWM1ZDI4N2I5MGJlNDUwNjY3NWYzNTViZmJi
Yjc4NDNkOWUuLjEyZjQxNzI4MTlhMDBlNWYwODdhZDk5NjZhMjM0NGRhNmQ0MjJmYjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKQEAgLTU0LDYgKzU0LDggQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QnVmZmVyKEF1ZGlvQnVmZmVyKik7CiAgICAgQXVkaW9CdWZmZXIq
IGJ1ZmZlcigpOwogCisgICAgYm9vbCBub3JtYWxpemUoKSBjb25zdCB7IHJldHVybiBtX25vcm1h
bGl6ZTsgfQorICAgIHZvaWQgc2V0Tm9ybWFsaXplKGJvb2wgbm9ybWFsaXplKSB7IG1fbm9ybWFs
aXplID0gbm9ybWFsaXplOyB9CiBwcml2YXRlOgogICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250
ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKQEAgLTYyLDYgKzY0LDkgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUgY29udm9sdXRp
b24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3MoKS4KICAgICBtdXRhYmxlIE11dGV4IG1f
cHJvY2Vzc0xvY2s7CisKKyAgICAvLyBOb3JtYWxpemUgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3Ig
bm90LiBNdXN0IGRlZmF1bHQgdG8gdHJ1ZS4KKyAgICBib29sIG1fbm9ybWFsaXplOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmlkbAppbmRleCBkM2ViNDc1ZjBjNzViMzg0NTc0NDI0YmI5MWY5MjAzNTBiNjllNzJlLi5j
NjU4YmRjMTllYjVkNjJjODA3NTZjYWY3YzlkYTZkNWEzZWI0Y2UzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbApAQCAtMjksNSArMjksNiBAQCBtb2R1bGUgYXVk
aW8gewogICAgICAgICBHZW5lcmF0ZVRvSlMKICAgICBdIENvbnZvbHZlck5vZGUgOiBBdWRpb05v
ZGUgewogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbVNldHRlcl0gQXVkaW9CdWZmZXIgYnVm
ZmVyOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBub3JtYWxpemU7CiAgICAgfTsKIH0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25vLW1vbm8tZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3MDVmNjYxYzNhMjg2YzQ4NTczNmNhNDVhNDQzNzUzYTU2
YTczNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlv
bi1tb25vLW1vbm8tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIENvbnZvbHZl
ck5vZGUgcHJvY2Vzc2luZyBhIG1vbm8gY2hhbm5lbCB3aXRoIG1vbm8gaW1wdWxzZSByZXNwb25z
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEluaXRpYWwgbGF0ZW5jeSBv
ZiBjb252b2x2ZXIgaXMgc2lsZW50LgorUEFTUyBUcmlhbmd1bGFyIHBvcnRpb24gb2YgY29udm9s
dXRpb24gaXMgY29ycmVjdC4KK1BBU1MgRmlyc3QgcGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9u
IGlzIHN1ZmZpY2llbnRseSBzbWFsbC4KK1BBU1MgUmVuZGVyZWQgc2lnbmFsIGFmdGVyIHRhaWwg
b2YgY29udm9sdXRpb24gaXMgc2lsZW50LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5
IGNvbnZvbHZlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25v
LW1vbm8uaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2NvbnZvbHV0aW9uLW1vbm8tbW9uby5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdmY2E3MDk3YzQ2YTNhNjUxMzUwYmVhZWU0YTA1Y2Y2Njc0ZGE2ZGYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9jb252b2x1dGlvbi1tb25v
LW1vbm8uaHRtbApAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbnZvbHV0
aW9uLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdHMgQ29udm9sdmVyTm9kZSBwcm9jZXNzaW5nIGEgbW9ubyBjaGFu
bmVsIHdpdGggbW9ubyBpbXB1bHNlIHJlc3BvbnNlLiIpOworCisvLyBUbyB0ZXN0IHRoZSBjb252
b2x2ZXIsIHdlIGNvbnZvbHZlIHR3byBzcXVhcmUgcHVsc2VzIHRvZ2V0aGVyIHRvCisvLyBwcm9k
dWNlIGEgdHJpYW5ndWxhciBwdWxzZS4gIFRvIHZlcmlmeSB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qg
d2UKKy8vIGNoZWNrIHNldmVyYWwgcGFydHMgb2YgdGhlIHJlc3VsdC4gIEZpcnN0LCB3ZSBtYWtl
IHN1cmUgdGhlIGluaXRpYWwKKy8vIHBhcnQgb2YgdGhlIHJlc3VsdCBpcyB6ZXJvIChkdWUgdG8g
dGhlIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlcikuCisvLyBOZXh0LCB0aGUgdHJpYW5ndWxhciBw
dWxzZSBzaG91bGQgbWF0Y2ggdGhlIHRoZW9yZXRpY2FsIHJlc3VsdCB0bworLy8gd2l0aGluIHNv
bWUgcm91bmRvZmYuICBBZnRlciB0aGUgdHJpYW5ndWxhciBwdWxzZSwgdGhlIHJlc3VsdAorLy8g
c2hvdWxkIGJlIGV4YWN0bHkgemVybywgYnV0IHJvdW5kLW9mZiBwcmV2ZW50cyB0aGF0LiAgV2Ug
bWFrZSBzdXJlCisvLyB0aGUgcGFydCBhZnRlciB0aGUgcHVsc2UgaXMgc3VmZmljaWVudGx5IGNs
b3NlIHRvIHplcm8uICBGaW5hbGx5LAorLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgZXhhY3RseSB6
ZXJvIGJlY2F1c2UgdGhlIGlucHV0cyBhcmUgZXhhY3RseQorLy8gemVyby4KK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICB2YXIgc3F1
YXJlUHVsc2UgPSBjcmVhdGVTcXVhcmVQdWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZy
YW1lcyk7CisgICAgdmFyIHRyaWFuZ2xlUHVsc2UgPSBjcmVhdGVUcmlhbmdsZVB1bHNlQnVmZmVy
KGNvbnRleHQsIDIgKiBwdWxzZUxlbmd0aEZyYW1lcyk7CisgICAgCisgICAgdmFyIGJ1ZmZlclNv
dXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291cmNlLmJ1
ZmZlciA9IHNxdWFyZVB1bHNlOworICAgIAorICAgIHZhciBjb252b2x2ZXIgPSBjb250ZXh0LmNy
ZWF0ZUNvbnZvbHZlcigpOworICAgIGNvbnZvbHZlci5ub3JtYWxpemUgPSBmYWxzZTsKKyAgICBj
b252b2x2ZXIuYnVmZmVyID0gc3F1YXJlUHVsc2U7CisKKyAgICBidWZmZXJTb3VyY2UuY29ubmVj
dChjb252b2x2ZXIpOworICAgIGNvbnZvbHZlci5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24p
OworCisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKyAgICAKKyAgICBjb250ZXh0Lm9uY29t
cGxldGUgPSBjaGVja0NvbnZvbHZlZFJlc3VsdCh0cmlhbmdsZVB1bHNlKTsKKyAgICBjb250ZXh0
LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10ZXN0aW5nLmpzIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDFkMjcxNDhhMTFhODFmZGE2YTI2ODFhY2U4NWExYzM1NTg2MzU1YwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10
ZXN0aW5nLmpzCkBAIC0wLDAgKzEsMjEzIEBACit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisK
K3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gODsKK3ZhciBwdWxzZUxlbmd0aFNlY29uZHMgPSAx
OwordmFyIHB1bHNlTGVuZ3RoRnJhbWVzID0gcHVsc2VMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0
ZTsKKworLy8gVGhlIGNvbnZvbHZlciBoYXMgYSBsYXRlbmN5IG9mIDEyOCBzYW1wbGVzIGluIHRo
ZSBpbXBsZW1lbnRhdGlvbi4KKy8vIFdlIG5lZWQgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCB3
aGVuIHZlcmlmeWluZyB0aGUgb3V0cHV0IG9mIHRoZQorLy8gY29udm9sdmVyLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTY0LgordmFyIGNvbnZvbHZlRGVs
YXlTYW1wbGVzID0gMTI4OworCitmdW5jdGlvbiBjcmVhdGVTcXVhcmVQdWxzZUJ1ZmZlcihjb250
ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQu
Y3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOwor
CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGEgPSBhdWRpb0J1
ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytp
KQorICAgICAgICBkYXRhW2ldID0gMTsKKworICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKwor
Ly8gVGhlIHRyaWFuZ2xlIGJ1ZmZlciBob2xkcyB0aGUgZXhwZWN0ZWQgcmVzdWx0IG9mIHRoZSBj
b252b2x1dGlvbi4KKy8vIEl0IGxpbmVhcmx5IHJhbXBzIHVwIGZyb20gMCB0byBpdHMgbWF4aW11
bSB2YWx1ZSAoYXQgdGhlIGNlbnRlcikKKy8vIHRoZW4gbGluZWFybHkgcmFtcHMgZG93biB0byAw
LiAgVGhlIGNlbnRlciB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUKKy8vIHBvaW50IHdoZXJlIHRo
ZSB0d28gc3F1YXJlIHB1bHNlcyBvdmVybGFwIHRoZSBtb3N0LgorZnVuY3Rpb24gY3JlYXRlVHJp
YW5nbGVQdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZhciBh
dWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBj
b250ZXh0LnNhbXBsZVJhdGUpOworCisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7Cisg
ICAgdmFyIGhhbGZMZW5ndGggPSBuIC8gMjsKKyAgICB2YXIgZGF0YSA9IGF1ZGlvQnVmZmVyLmdl
dENoYW5uZWxEYXRhKDApOworICAgIAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFsZkxlbmd0
aDsgKytpKQorICAgICAgICBkYXRhW2ldID0gaSArIDE7CisKKyAgICBmb3IgKHZhciBpID0gaGFs
Zkxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IG4gLSBpIC0gMTsKKworICAg
IHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIGluaXRpYWwgbGF0
ZW5jeSBvZiB0aGUgY29udm9sdmVyIGlzIGV4YWN0bHkgemVyby4KKy8vIFJldHVybiB0cnVlIGlm
IHNvLgorZnVuY3Rpb24gY2hlY2tMYXRlbmN5KGRhdGEpIHsKKyAgICB2YXIgaXNaZXJvID0gdHJ1
ZTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udm9sdmVEZWxheVNhbXBsZXM7ICsraSkg
eworICAgICAgICBpZiAoZGF0YVtpXSAhPSAwKSB7CisgICAgICAgICAgICBpc1plcm8gPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzWmVy
bykgeworICAgICAgICB0ZXN0UGFzc2VkKCJJbml0aWFsIGxhdGVuY3kgb2YgY29udm9sdmVyIGlz
IHNpbGVudC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJJbml0aWFsIGxh
dGVuY3kgb2YgY29udm9sdmVyIGlzIG5vdCBzaWxlbnQuIik7CisgICAgfQorCisgICAgcmV0dXJu
IGlzWmVybzsKK30KKworZnVuY3Rpb24gbG9nMTAoeCkgeworICByZXR1cm4gTWF0aC5sb2coeCkv
TWF0aC5MTjEwOworfQorCitmdW5jdGlvbiBsaW5lYXJUb0RlY2liZWwoeCkgeworICByZXR1cm4g
MjAqbG9nMTAoeCk7Cit9CisKKy8vIFZlcmlmeSB0aGF0IHRoZSByZW5kZXJlZCByZXN1bHQgaXMg
dmVyeSBjbG9zZSB0byB0aGUgcmVmZXJlbmNlCisvLyB0cmlhbmd1bGFyIHB1bHNlLgorZnVuY3Rp
b24gY2hlY2tUcmlhbmd1bGFyUHVsc2UocmVuZGVyZWQsIHJlZmVyZW5jZSkgeworICAgIHZhciBt
YXRjaCA9IHRydWU7CisgICAgdmFyIG1heERlbHRhID0gMDsKKyAgICB2YXIgdmFsdWVBdE1heERl
bHRhID0gMDsKKyAgICB2YXIgbWF4RGVsdGFJbmRleCA9IDA7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJlZmVyZW5jZS5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgZGlmZiA9IHJlbmRl
cmVkW2kgKyBjb252b2x2ZURlbGF5U2FtcGxlc10gLSByZWZlcmVuY2VbaV07CisgICAgICAgIHZh
ciB4ID0gTWF0aC5hYnMoZGlmZik7CisgICAgICAgIGlmICh4ID4gbWF4RGVsdGEpIHsKKyAgICAg
ICAgICAgIG1heERlbHRhID0geDsKKyAgICAgICAgICAgIHZhbHVlQXRNYXhEZWx0YSA9IHJlZmVy
ZW5jZVtpXTsKKyAgICAgICAgICAgIG1heERlbHRhSW5kZXggPSBpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gYWxsb3dlZERldmlhdGlvbkZyYWN0aW9uIHdhcyBkZXRlcm1pbmVkIGV4cGVy
aW1lbnRhbGx5LiAgSXQKKyAgICAvLyBpcyB0aGUgdGhyZXNob2xkIG9mIHRoZSByZWxhdGl2ZSBl
cnJvciBhdCB0aGUgbWF4aW11bQorICAgIC8vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHJ1ZSB0
cmlhbmd1bGFyIHB1bHNlIGFuZCB0aGUKKyAgICAvLyByZW5kZXJlZCBwdWxzZS4KKyAgICB2YXIg
YWxsb3dlZERldmlhdGlvbkRlY2liZWxzID0gLTEzMy41OworICAgIHZhciBtYXhEZXZpYXRpb25E
ZWNpYmVscyA9IGxpbmVhclRvRGVjaWJlbChtYXhEZWx0YSAvIHZhbHVlQXRNYXhEZWx0YSk7CisK
KyAgICBpZiAobWF4RGV2aWF0aW9uRGVjaWJlbHMgPD0gYWxsb3dlZERldmlhdGlvbkRlY2liZWxz
KSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlRyaWFuZ3VsYXIgcG9ydGlvbiBvZiBjb252b2x1dGlv
biBpcyBjb3JyZWN0LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlRyaWFu
Z3VsYXIgcG9ydGlvbiBvZiBjb252b2x1dGlvbiBpcyBub3QgY29ycmVjdC4gIE1heCBkZXZpYXRp
b24gPSAiICsgbWF4RGV2aWF0aW9uRGVjaWJlbHMgKyAiIGRCIGF0ICIgKyBtYXhEZWx0YUluZGV4
KTsKKyAgICAgICAgbWF0Y2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2g7Cit9
ICAgICAgICAKKworLy8gVmVyaWZ5IHRoYXQgdGhlIHJlbmRlcmVkIGRhdGEgaXMgY2xvc2UgdG8g
emVybyBmb3IgdGhlIGZpcnN0IHBhcnQKKy8vIG9mIHRoZSB0YWlsLgorZnVuY3Rpb24gY2hlY2tU
YWlsMShkYXRhLCByZWZlcmVuY2UsIGJyZWFrcG9pbnQpIHsKKyAgICB2YXIgaXNaZXJvID0gdHJ1
ZTsKKyAgICB2YXIgdGFpbDFNYXggPSAwOworCisgICAgZm9yICh2YXIgaSA9IHJlZmVyZW5jZS5s
ZW5ndGggKyBjb252b2x2ZURlbGF5U2FtcGxlczsgaSA8IHJlZmVyZW5jZS5sZW5ndGggKyBicmVh
a3BvaW50OyArK2kpIHsKKyAgICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKGRhdGFbaV0pOworICAg
ICAgICBpZiAobWFnID4gdGFpbDFNYXgpIHsKKyAgICAgICAgICAgIHRhaWwxTWF4ID0gbWFnOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGV0J3MgZmluZCB0aGUgcGVhayBvZiB0aGUgcmVm
ZXJlbmNlIChldmVuIHRob3VnaCB3ZSBrbm93IGEKKyAgICAvLyBwcmlvcmkgd2hhdCBpdCBpcyku
CisgICAgdmFyIHJlZk1heCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2Uu
bGVuZ3RoOyArK2kpIHsKKyAgICAgIHJlZk1heCA9IE1hdGgubWF4KHJlZk1heCwgTWF0aC5hYnMo
cmVmZXJlbmNlW2ldKSk7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlc2hvbGQgaXMgZXhwZXJp
bWVudGFsbHkgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgdGhlCisgICAgLy8gdmFsdWUgb2YgdGFp
bDFNYXhEZWNpYmVscy4KKyAgICB2YXIgdGhyZXNob2xkMSA9IC0xNDYuNzsKKworICAgIHZhciB0
YWlsMU1heERlY2liZWxzID0gbGluZWFyVG9EZWNpYmVsKHRhaWwxTWF4L3JlZk1heCk7CisgICAg
aWYgKHRhaWwxTWF4RGVjaWJlbHMgPD0gdGhyZXNob2xkMSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCJGaXJzdCBwYXJ0IG9mIHRhaWwgb2YgY29udm9sdXRpb24gaXMgc3VmZmljaWVudGx5IHNtYWxs
LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkZpcnN0IHBhcnQgb2YgdGFp
bCBvZiBjb252b2x1dGlvbiBpcyBub3Qgc3VmZmljaWVudGx5IHNtYWxsOiAiICsgdGFpbDFNYXgg
KyAiIGRCIik7CisgICAgICAgIGlzWmVybyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBp
c1plcm87Cit9CisKKy8vIFZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgdGFpbCBv
ZiB0aGUgY29udm9sdXRpb24gaXMKKy8vIGV4YWN0bHkgemVyby4KK2Z1bmN0aW9uIGNoZWNrVGFp
bDIoZGF0YSwgcmVmZXJlbmNlLCBicmVha3BvaW50KSB7CisgICAgdmFyIGlzWmVybyA9IHRydWU7
CisgICAgdmFyIHRhaWwyTWF4ID0gMDsKKyAgICAvLyBGb3IgdGhlIHNlY29uZCBwYXJ0IG9mIHRo
ZSB0YWlsLCB0aGUgbWF4aW11bSB2YWx1ZSBzaG91bGQgYmUKKyAgICAvLyBleGFjdGx5IHplcm8u
CisgICAgdmFyIHRocmVzaG9sZDIgPSAwOworICAgIGZvciAodmFyIGkgPSByZWZlcmVuY2UubGVu
Z3RoICsgYnJlYWtwb2ludDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKE1h
dGguYWJzKGRhdGFbaV0pID4gMCkgeworICAgICAgICAgICAgaXNaZXJvID0gZmFsc2U7IAorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNaZXJvKSB7Cisg
ICAgICAgIHRlc3RQYXNzZWQoIlJlbmRlcmVkIHNpZ25hbCBhZnRlciB0YWlsIG9mIGNvbnZvbHV0
aW9uIGlzIHNpbGVudC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSZW5k
ZXJlZCBzaWduYWwgYWZ0ZXIgdGFpbCBvZiBjb252b2x1dGlvbiBzaG91bGQgYmUgc2lsZW50LiIp
OworICAgIH0KKworICAgIHJldHVybiBpc1plcm87Cit9CisKK2Z1bmN0aW9uIGNoZWNrQ29udm9s
dmVkUmVzdWx0KHRyaWFuZ2xlUHVsc2UpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgdmFyIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CisKKyAg
ICAgICAgdmFyIHJlZmVyZW5jZURhdGEgPSB0cmlhbmdsZVB1bHNlLmdldENoYW5uZWxEYXRhKDAp
OworICAgICAgICB2YXIgcmVuZGVyZWREYXRhID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERh
dGEoMCk7CisgICAgCisgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICAgICAg
Ly8gVmVyaWZ5IHRoZSBpbml0aWFsIHBhcnQgaXMgZXhhY3RseSB6ZXJvIGJlY2F1c2Ugb2YgdGhl
CisgICAgICAgIC8vIGxhdGVuY3kgaW4gdGhlIGNvbnZvbHZlci4KKworICAgICAgICBzdWNjZXNz
ID0gc3VjY2VzcyAmJiBjaGVja0xhdGVuY3kocmVuZGVyZWREYXRhKTsKKworICAgICAgICAvLyBW
ZXJpZnkgdGhlIHRyaWFuZ3VsYXIgcHVsc2UgaXMgYWN0dWFsbHkgdHJpYW5ndWxhci4KKworICAg
ICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjaGVja1RyaWFuZ3VsYXJQdWxzZShyZW5kZXJlZERh
dGEsIHJlZmVyZW5jZURhdGEpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
cG9ydGlvbiBhZnRlciBjb252b2x2ZWQgcG9ydGlvbiBpcyB0b3RhbGx5CisgICAgICAgIC8vIHNp
bGVudC4gIEJ1dCByb3VuZC1vZmYgcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNvbXBsZXRlbHkK
KyAgICAgICAgLy8gdHJ1ZS4gIEF0IHRoZSBlbmQgb2YgdGhlIHRyaWFuZ2xlLCBpdCBzaG91bGQg
YmUgY2xvc2UgdG8KKyAgICAgICAgLy8gemVyby4gIElmIHdlIGdvIGZhcnRoZXIgb3V0LCBpdCBz
aG91bGQgYmUgZXZlbiBjbG9zZXIgYW5kCisgICAgICAgIC8vIGV2ZW50dWFsbHkgemVyby4KKwor
ICAgICAgICAvLyBGb3IgdGhlIHRhaWwgb2YgdGhlIGNvbnZvbHV0aW9uICh3aGVyZSB0aGUgcmVz
dWx0IHdvdWxkIGJlCisgICAgICAgIC8vIHRoZW9yZXRpY2FsbHkgemVybyksIHdlIHBhcnRpdGlv
biB0aGUgdGFpbCBpbnRvIHR3bworICAgICAgICAvLyBwYXJ0cy4gIFRoZSBmaXJzdCBpcyB0aGUg
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFpbCwKKyAgICAgICAgLy8gd2hlcmUgd2UgdG9sZXJh
dGUgYSBzbWFsbCBidXQgbm9uLXplcm8gdmFsdWUuICBUaGUgc2Vjb25kIHBhcnQgaXMKKyAgICAg
ICAgLy8gZmFydGhlciBhbG9uZyB0aGUgdGFpbCB3aGVyZSB0aGUgcmVzdWx0IHNob3VsZCBiZSB6
ZXJvLgorICAgICAgICAKKyAgICAgICAgLy8gYnJlYWtwb2ludCBpcyB0aGUgcG9pbnQgZGl2aWRp
bmcgdGhlIGZpcnN0IHR3byB0YWlsIHBhcnRzCisgICAgICAgIC8vIHdlJ3JlIGxvb2tpbmcgYXQu
ICBFeHBlcmltZW50YWxseSBkZXRlcm1pbmVkLgorICAgICAgICB2YXIgYnJlYWtwb2ludCA9IDEy
ODAwOworCisgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNoZWNrVGFpbDEocmVuZGVyZWRE
YXRhLCByZWZlcmVuY2VEYXRhLCBicmVha3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIHN1Y2Nl
c3MgPSBzdWNjZXNzICYmIGNoZWNrVGFpbDIocmVuZGVyZWREYXRhLCByZWZlcmVuY2VEYXRhLCBi
cmVha3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCJUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlRlc3Qgc2lnbmFsIHdhcyBu
b3QgY29ycmVjdGx5IGNvbnZvbHZlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>