<?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>75767</bug_id>
          
          <creation_ts>2012-01-06 21:55:09 -0800</creation_ts>
          <short_desc>EQUALPOWER panner incorrectly computes gain</short_desc>
          <delta_ts>2012-01-23 09:23:37 -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>kbr</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>531592</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 21:55:09 -0800</bug_when>
    <thetext>The formula to compute the left gain for the EQUALPOWER panner is incorrect.  When the azimuth is 0, the gain is 0.5.  It should be 1/sqrt(2).  It should be a cosine curve between -90 and 90 deg, with a gain of 1/sqrt(2) at an azimuth of 0.

This needs to be fixed before 75126 can be committed with its tests.  (That will also indirectly verify that the EQUALPOWER panner works in at least one case.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532300</commentid>
    <comment_count>1</comment_count>
      <attachid>121684</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-09 10:37:52 -0800</bug_when>
    <thetext>Created attachment 121684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532304</commentid>
    <comment_count>2</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-09 10:39:20 -0800</bug_when>
    <thetext>I think the patch implements the correct formula.   The desiredGainL is 1 when azimuth is fully left, 0.707 when centered and 0 when azimuth is fully right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532348</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-09 11:18:56 -0800</bug_when>
    <thetext>Now&apos;s a good time to add a layout test for the equal-power panner in this patch.  You should be able to use a similar approach to the distance-model layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532353</commentid>
    <comment_count>4</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-09 11:22:59 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Now&apos;s a good time to add a layout test for the equal-power panner in this patch.  You should be able to use a similar approach to the distance-model layout test.

Ok.  Is the formula correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532383</commentid>
    <comment_count>5</comment_count>
      <attachid>121684</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-09 11:45:52 -0800</bug_when>
    <thetext>Comment on attachment 121684
Patch

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

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:87
&gt; +    double desiredGainL = cos(piDouble * desiredPanPosition / 2);

The formula looks good.  Maybe better as:

cos(0.5 * piDouble * desiredPanPosition)

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:88
&gt;      double desiredGainR = sqrt(1.0 - desiredGainL*desiredGainL);

The right gain can be more symmetric by using sin():

sin(0.5 * piDouble * desiredPanPosition)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533164</commentid>
    <comment_count>6</comment_count>
      <attachid>121864</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 10:18:02 -0800</bug_when>
    <thetext>Created attachment 121864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533169</commentid>
    <comment_count>7</comment_count>
      <attachid>121684</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 10:22:17 -0800</bug_when>
    <thetext>Comment on attachment 121684
Patch

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

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:87
&gt;&gt; +    double desiredGainL = cos(piDouble * desiredPanPosition / 2);
&gt; 
&gt; The formula looks good.  Maybe better as:
&gt; 
&gt; cos(0.5 * piDouble * desiredPanPosition)

Done.

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:88
&gt;&gt;      double desiredGainR = sqrt(1.0 - desiredGainL*desiredGainL);
&gt; 
&gt; The right gain can be more symmetric by using sin():
&gt; 
&gt; sin(0.5 * piDouble * desiredPanPosition)

Done.  (I had thought about that, but left it as is, assuming you had a reason for doing the sqrt form.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534182</commentid>
    <comment_count>8</comment_count>
      <attachid>122082</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 13:06:56 -0800</bug_when>
    <thetext>Created attachment 122082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534185</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 13:08:21 -0800</bug_when>
    <thetext>Minor update.  Need to include audio-testing.js in test, and the changelog for the tests was missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535078</commentid>
    <comment_count>10</comment_count>
      <attachid>122082</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 12:48:13 -0800</bug_when>
    <thetext>Comment on attachment 122082
Patch

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

This test is testing quite a lot more than it needs to.  I think some of these tests could later be valuable to check the dot(), cross(), etc. are all working correctly.  So, let&apos;s save all that stuff aside for later more specific tests.

This test can be extremely simple (vastly more simple than now).  Just sample an angle (azimuth) between -90 and +90 degrees.  Use the cos()/sin() to convert to x,y coordinates (and make z be zero).  And then validate that the scaled impulse is rendered according to the equal-power formula.

&gt; LayoutTests/webaudio/panner-equalpower.html:29
&gt; +          var threshold = .00019;

Similar to the distance tests - I would just make the threshold internal to the .js file - but also give the threshold a more descriptive name and/or comment

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:3
&gt; +var renderLengthSeconds = 8;

8 seconds is very long for this test - could a fraction of a second

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:5
&gt; +var pulseLengthFrames = pulseLengthSeconds * sampleRate;

pulseLengthSeconds is unused - please remove

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:25
&gt; +function createImpulseBuffer(context, sampleFrameLength) {

See comment in distance-model tests -- this function can be moved into audio-testing.js

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:69
&gt; +var distanceModelFunction = [linearDistance, inverseDistance, exponentialDistance];

The distance functions 38:69 are not used - please remove here and all other places with unused code...

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:105
&gt; +  for (var k = 0; k &lt; nodesToCreate; ++k) {

Please simplify loops into a single loop (so that startSource() is not a separate function) similar to distance-model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535212</commentid>
    <comment_count>11</comment_count>
      <attachid>122318</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 15:13:15 -0800</bug_when>
    <thetext>Created attachment 122318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535213</commentid>
    <comment_count>12</comment_count>
      <attachid>122082</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 15:14:43 -0800</bug_when>
    <thetext>Comment on attachment 122082
Patch

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

&gt;&gt; LayoutTests/webaudio/panner-equalpower.html:29
&gt;&gt; +          var threshold = .00019;
&gt; 
&gt; Similar to the distance tests - I would just make the threshold internal to the .js file - but also give the threshold a more descriptive name and/or comment

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:3
&gt;&gt; +var renderLengthSeconds = 8;
&gt; 
&gt; 8 seconds is very long for this test - could a fraction of a second

Arranged to be just long enough for all of the nodes that are created.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:5
&gt;&gt; +var pulseLengthFrames = pulseLengthSeconds * sampleRate;
&gt; 
&gt; pulseLengthSeconds is unused - please remove

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:25
&gt;&gt; +function createImpulseBuffer(context, sampleFrameLength) {
&gt; 
&gt; See comment in distance-model tests -- this function can be moved into audio-testing.js

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:69
&gt;&gt; +var distanceModelFunction = [linearDistance, inverseDistance, exponentialDistance];
&gt; 
&gt; The distance functions 38:69 are not used - please remove here and all other places with unused code...

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:105
&gt;&gt; +  for (var k = 0; k &lt; nodesToCreate; ++k) {
&gt; 
&gt; Please simplify loops into a single loop (so that startSource() is not a separate function) similar to distance-model

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535232</commentid>
    <comment_count>13</comment_count>
      <attachid>122318</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 15:43:44 -0800</bug_when>
    <thetext>Comment on attachment 122318
Patch

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

&gt; Source/WebCore/webaudio/AudioPannerNode.h:63
&gt; +    

It looks like you accidentally included the changes for the distance constants in this patch:
AudioPannerNode.h
AudioPannerNode.idl

please remove

&gt; LayoutTests/webaudio/panner-equalpower.html:29
&gt; +          var tempPanner = context.createPanner();

I wouldn&apos;t bother passing tempPanner.EQUALPOWER panner model in as a constant.  The test itself in the .js file is ignoring this value anyway, and it&apos;s
unlikely that a similar approach will be useful for testing, for example, HRTF (there are other approaches for that).

So easiest to delete 28:29, and remove 2nd argument to createTestAndRun() below

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:10
&gt; +var timeStep = 0.001;

Should lines 9:10 be defined before line 4, and then use &quot;timeStep&quot; instead of hard-coded value in line 4?

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:76
&gt; +  var maxRelativeError = .00019;

Better to define this threshold inside checkResult() instead of passing it as an argument.

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:78
&gt; +  context.oncomplete = checkResult(pannerModel, maxRelativeError);

I&apos;m not sure that we can leverage this code for other panning models (like HRTF), so easier to remove pannerModel.  And then we don&apos;t need the &quot;closures&quot; (inner function)

and can simplify to:

context.oncomplete = checkResult;

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:87
&gt; +  return 90 - angle * 180 / Math.PI;

nit: Indentation here and in the whole file seems to be 2, but it should be 4

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:94
&gt; +  var panPosition = (azimuth + 90)/180;

nit: spaces around /

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:103
&gt; +  return function(event) {

see comments about model and inner function above

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:111
&gt; +    // Max (relative) error and the index of the maxima for the left

Can we have a blank line before lines 111, 117, 119, etc.  I&apos;m not sure if it&apos;s a formal WebKit style guideline, but it would definitely be more in-line with other code in WebKit (in general)

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:128
&gt; +                                          position[impulseCount].z);

This distance gain is always going to be 1.0 (at a distance of 1) for all distance models, isn&apos;t it?

If so, then let&apos;s just get rid of the linearDistance() function and this variable.

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:137
&gt; +        var errorR = Math.abs(renderedRight[k] - expectedR)/Math.abs(expectedR);

nit: spaces around /</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535262</commentid>
    <comment_count>14</comment_count>
      <attachid>122332</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 16:11:16 -0800</bug_when>
    <thetext>Created attachment 122332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535265</commentid>
    <comment_count>15</comment_count>
      <attachid>122318</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 16:15:17 -0800</bug_when>
    <thetext>Comment on attachment 122318
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioPannerNode.h:63
&gt;&gt; +    
&gt; 
&gt; It looks like you accidentally included the changes for the distance constants in this patch:
&gt; AudioPannerNode.h
&gt; AudioPannerNode.idl
&gt; 
&gt; please remove

Oops.  Done.

&gt;&gt; LayoutTests/webaudio/panner-equalpower.html:29
&gt;&gt; +          var tempPanner = context.createPanner();
&gt; 
&gt; I wouldn&apos;t bother passing tempPanner.EQUALPOWER panner model in as a constant.  The test itself in the .js file is ignoring this value anyway, and it&apos;s
&gt; unlikely that a similar approach will be useful for testing, for example, HRTF (there are other approaches for that).
&gt; 
&gt; So easiest to delete 28:29, and remove 2nd argument to createTestAndRun() below

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:10
&gt;&gt; +var timeStep = 0.001;
&gt; 
&gt; Should lines 9:10 be defined before line 4, and then use &quot;timeStep&quot; instead of hard-coded value in line 4?

They were actually unrelated but coincidentally the same, but I updated as you suggested.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:76
&gt;&gt; +  var maxRelativeError = .00019;
&gt; 
&gt; Better to define this threshold inside checkResult() instead of passing it as an argument.

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:78
&gt;&gt; +  context.oncomplete = checkResult(pannerModel, maxRelativeError);
&gt; 
&gt; I&apos;m not sure that we can leverage this code for other panning models (like HRTF), so easier to remove pannerModel.  And then we don&apos;t need the &quot;closures&quot; (inner function)
&gt; 
&gt; and can simplify to:
&gt; 
&gt; context.oncomplete = checkResult;

Done.  (With some simplification of checkResult not to return a function, but be the actual function.)

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:87
&gt;&gt; +  return 90 - angle * 180 / Math.PI;
&gt; 
&gt; nit: Indentation here and in the whole file seems to be 2, but it should be 4

Fixed.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:94
&gt;&gt; +  var panPosition = (azimuth + 90)/180;
&gt; 
&gt; nit: spaces around /

Fixed.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:103
&gt;&gt; +  return function(event) {
&gt; 
&gt; see comments about model and inner function above

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:111
&gt;&gt; +    // Max (relative) error and the index of the maxima for the left
&gt; 
&gt; Can we have a blank line before lines 111, 117, 119, etc.  I&apos;m not sure if it&apos;s a formal WebKit style guideline, but it would definitely be more in-line with other code in WebKit (in general)

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:128
&gt;&gt; +                                          position[impulseCount].z);
&gt; 
&gt; This distance gain is always going to be 1.0 (at a distance of 1) for all distance models, isn&apos;t it?
&gt; 
&gt; If so, then let&apos;s just get rid of the linearDistance() function and this variable.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535276</commentid>
    <comment_count>16</comment_count>
      <attachid>122335</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 16:20:26 -0800</bug_when>
    <thetext>Created attachment 122335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535278</commentid>
    <comment_count>17</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 16:21:16 -0800</bug_when>
    <thetext>Forgot to update the expected results with the changes from the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535298</commentid>
    <comment_count>18</comment_count>
      <attachid>122335</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 16:48:23 -0800</bug_when>
    <thetext>Comment on attachment 122335
Patch

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

Looks great overall - thanks Ray!  Just a couple of comment nits and question about 0 value

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:32
&gt; +    var angleStep = Math.PI / (nodeCount + 1);  // nodeCount + 1 so we don&apos;t go past 180 deg.

nit: single space before comment

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:42
&gt; +        panner[k].distanceModel = 0;    // Linear distance model.

nit: single space before comment

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:46
&gt; +        // produce 0 which messes up our check routine.

I don&apos;t understand why we avoid 0.  -- oh I see it&apos;s because of:
// Relative error in the gain.

Can&apos;t we simply use absolute error checking instead of relative so we can handle the 0 and not have to worry about this type of work-around.
We *do* actually want to check hard-pan left in the test (and hard-pan right)

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:70
&gt; +// is -90 deg.

Seems like there&apos;s plenty of room to not wrap this comment (based on length of other lines in this file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535384</commentid>
    <comment_count>19</comment_count>
      <attachid>122335</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 19:21:03 -0800</bug_when>
    <thetext>Comment on attachment 122335
Patch

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

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:46
&gt;&gt; +        // produce 0 which messes up our check routine.
&gt; 
&gt; I don&apos;t understand why we avoid 0.  -- oh I see it&apos;s because of:
&gt; // Relative error in the gain.
&gt; 
&gt; Can&apos;t we simply use absolute error checking instead of relative so we can handle the 0 and not have to worry about this type of work-around.
&gt; We *do* actually want to check hard-pan left in the test (and hard-pan right)

We avoid zero because we search for non-zero values due to the noteOn bug.   Originally, I was only searching the left channel, but now that both channels are searched, this restriction is gone since both channels are never simultaneously zero (where the impulses should be).   And then we do need to get rid of the relative error computation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535398</commentid>
    <comment_count>20</comment_count>
      <attachid>122335</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 19:52:31 -0800</bug_when>
    <thetext>Comment on attachment 122335
Patch

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

&gt;&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:46
&gt;&gt;&gt; +        // produce 0 which messes up our check routine.
&gt;&gt; 
&gt;&gt; I don&apos;t understand why we avoid 0.  -- oh I see it&apos;s because of:
&gt;&gt; // Relative error in the gain.
&gt;&gt; 
&gt;&gt; Can&apos;t we simply use absolute error checking instead of relative so we can handle the 0 and not have to worry about this type of work-around.
&gt;&gt; We *do* actually want to check hard-pan left in the test (and hard-pan right)
&gt; 
&gt; We avoid zero because we search for non-zero values due to the noteOn bug.   Originally, I was only searching the left channel, but now that both channels are searched, this restriction is gone since both channels are never simultaneously zero (where the impulses should be).   And then we do need to get rid of the relative error computation.

I see - that makes sense.  Then since the restriction is gone (can check if either left or right is non-zero) we can switch to absolute thresholds.  
Seems like an easy fix, and makes this test easier to understand and also tests the edges (which we should)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535414</commentid>
    <comment_count>21</comment_count>
      <attachid>122335</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 20:44:26 -0800</bug_when>
    <thetext>Comment on attachment 122335
Patch

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

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:155
&gt; +        testPassed(&quot;Left channel panner values are correct.&quot;);

&quot;panner values&quot; -&gt; &quot;gain values&quot;

&quot;gain&quot; seems more descriptive of what we&apos;re actually testing

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:157
&gt; +        testFailed(&quot;Left channel panner values are incorrect.  Max rel error = &quot; + maxErrorL + &quot; at time &quot; + maxErrorIndexL / sampleRate + &quot; (threshold = &quot; + maxAllowedRelativeError + &quot;)&quot;);

ditto

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:162
&gt; +        testPassed(&quot;Right channel panner values are correct.&quot;);

ditto

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:164
&gt; +        testFailed(&quot;Right channel panner values are incorrect.  Max rel error = &quot; + maxErrorR + &quot; at time &quot; + maxErrorIndexR / sampleRate + &quot; (threshold = &quot; + maxAllowedRelativeError + &quot;)&quot;);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535727</commentid>
    <comment_count>22</comment_count>
      <attachid>122439</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 09:23:22 -0800</bug_when>
    <thetext>Created attachment 122439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535729</commentid>
    <comment_count>23</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 09:25:40 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=122439) [details]
&gt; Patch

All comments are fixed.  We now test for panning full left and right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535764</commentid>
    <comment_count>24</comment_count>
      <attachid>122439</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-13 10:18:17 -0800</bug_when>
    <thetext>Comment on attachment 122439
Patch

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

Thanks Ray, this looks fine if my two comments are addressed.

&gt; LayoutTests/webaudio/panner-equalpower.html:17
&gt; +      function runTest() {

Can we add a few sentences of high-level comment describing the testing approach: move from azimuth -90 -&gt; +90 tracing a semi-circle at a distance of 1, etc.

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:114
&gt; +        // We assume that the left and right channels start at the same instance.

instance -&gt; instant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535813</commentid>
    <comment_count>25</comment_count>
      <attachid>122464</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 11:05:33 -0800</bug_when>
    <thetext>Created attachment 122464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535816</commentid>
    <comment_count>26</comment_count>
      <attachid>122439</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 11:07:17 -0800</bug_when>
    <thetext>Comment on attachment 122439
Patch

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

&gt;&gt; LayoutTests/webaudio/panner-equalpower.html:17
&gt;&gt; +      function runTest() {
&gt; 
&gt; Can we add a few sentences of high-level comment describing the testing approach: move from azimuth -90 -&gt; +90 tracing a semi-circle at a distance of 1, etc.

Done.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:114
&gt;&gt; +        // We assume that the left and right channels start at the same instance.
&gt; 
&gt; instance -&gt; instant

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535923</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-13 13:00:38 -0800</bug_when>
    <thetext>I&apos;m assuming you&apos;ve tested that the test fails without the fix in EqualPowerPanner.cpp (and now passes with it).

Looks Good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535929</commentid>
    <comment_count>28</comment_count>
      <attachid>122464</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-13 13:05:33 -0800</bug_when>
    <thetext>Comment on attachment 122464
Patch

Nice test! rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535939</commentid>
    <comment_count>29</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 13:17:42 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; I&apos;m assuming you&apos;ve tested that the test fails without the fix in EqualPowerPanner.cpp (and now passes with it).

Not recently, so I tested again just now.  Test fails as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535984</commentid>
    <comment_count>30</comment_count>
      <attachid>122464</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 14:18:54 -0800</bug_when>
    <thetext>Comment on attachment 122464
Patch

Clearing flags on attachment: 122464

Committed r104987: &lt;http://trac.webkit.org/changeset/104987&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535985</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 14:19:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121684</attachid>
            <date>2012-01-09 10:37:52 -0800</date>
            <delta_ts>2012-01-10 10:22:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120109103751.patch</filename>
            <type>text/plain</type>
            <size>1576</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uNzQwNjcwZjI2YWQ4NmY4MzZiMjNiMTliY2E1MWMw
MWUwNjU0NTI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdpbGwgYmUgKGluZGlyZWN0bHkpIHRlc3RlZCB3aGVuIGRlcGVuZGVu
dCBidWcgNzQyNzMgaXMgdGVzdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRXF1YWxQ
b3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2VyUGFubmVyOjpwYW4p
OiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEwNDQxOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQ
b3dlclBhbm5lci5jcHAKaW5kZXggMTNhMTlkNmNkNDQ1MWQ3YjJmOTg4MmI1MGM0ZWQ5ZTAwMzIw
YjNiNi4uODFhNjdkM2YyMDcxZjBhYmRhODBjYjU0NDQ4NDU3ZDAzOTMyNDdlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4oZG91YmxlIGF6aW11dGgs
IGRvdWJsZSAvKmVsZXZhdGlvbiovLCBBdWRpb0J1cyogaW5wdXQKICAgICAvLyBQYW4gc21vb3Ro
bHkgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdpdGggYXppbXV0aCBnb2luZyBmcm9tIC05MCAtPiArOTAg
ZGVncmVlcy4KICAgICBkb3VibGUgZGVzaXJlZFBhblBvc2l0aW9uID0gKGF6aW11dGggKyA5MCkg
LyAxODA7CiAKLSAgICBkb3VibGUgZGVzaXJlZEdhaW5MID0gMC41ICogY29zKHBpRG91YmxlICog
ZGVzaXJlZFBhblBvc2l0aW9uKSArIDAuNTsKKyAgICBkb3VibGUgZGVzaXJlZEdhaW5MID0gY29z
KHBpRG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9uIC8gMik7CiAgICAgZG91YmxlIGRlc2lyZWRH
YWluUiA9IHNxcnQoMS4wIC0gZGVzaXJlZEdhaW5MKmRlc2lyZWRHYWluTCk7CiAKICAgICAvLyBE
b24ndCBkZS16aXBwZXIgb24gZmlyc3QgcmVuZGVyIGNhbGwuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121864</attachid>
            <date>2012-01-10 10:18:02 -0800</date>
            <delta_ts>2012-01-11 13:06:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120110101801.patch</filename>
            <type>text/plain</type>
            <size>14621</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uMTRkYTNlZmEwMGRhMDNkZWZhMGVkOWNkYzQxNTk2
ZTk0NGRmMzg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExheW91dCB0ZXN0IGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2Vy
UGFubmVyOjpwYW4pOiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0wOSAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjEwNDQxOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAKaW5kZXggMTNhMTlkNmNkNDQ1MWQ3YjJmOTg4MmI1
MGM0ZWQ5ZTAwMzIwYjNiNi4uMGRhNzYyMjM2NDA5MTcyYTU4NDU2ZmYwYjZkZDcyZmU1OGJjNzg0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBh
bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBh
bm5lci5jcHAKQEAgLTg0LDggKzg0LDggQEAgdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4oZG91
YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBBdWRpb0J1cyogaW5wdXQKICAgICAv
LyBQYW4gc21vb3RobHkgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdpdGggYXppbXV0aCBnb2luZyBmcm9t
IC05MCAtPiArOTAgZGVncmVlcy4KICAgICBkb3VibGUgZGVzaXJlZFBhblBvc2l0aW9uID0gKGF6
aW11dGggKyA5MCkgLyAxODA7CiAKLSAgICBkb3VibGUgZGVzaXJlZEdhaW5MID0gMC41ICogY29z
KHBpRG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9uKSArIDAuNTsKLSAgICBkb3VibGUgZGVzaXJl
ZEdhaW5SID0gc3FydCgxLjAgLSBkZXNpcmVkR2FpbkwqZGVzaXJlZEdhaW5MKTsKKyAgICBkb3Vi
bGUgZGVzaXJlZEdhaW5MID0gY29zKDAuNSAqIHBpRG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9u
KTsKKyAgICBkb3VibGUgZGVzaXJlZEdhaW5SID0gc2luKDAuNSAqIHBpRG91YmxlICogZGVzaXJl
ZFBhblBvc2l0aW9uKTsKIAogICAgIC8vIERvbid0IGRlLXppcHBlciBvbiBmaXJzdCByZW5kZXIg
Y2FsbC4KICAgICBpZiAobV9pc0ZpcnN0UmVuZGVyKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTliOTBh
YTAyMGVmNDU4OWI1MGY5Yzc1YzkxNGE5ODhlMDMzZjQxOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDEyIEBACitUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBtb2RlbCBvZiBBdWRpb1Bhbm5lck5v
ZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBOdW1iZXIgb2Ygbm9kZXMg
aXMgY29ycmVjdC4KK1BBU1MgTGVmdCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJlIGNvcnJlY3Qu
CitQQVNTIFJpZ2h0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgRXF1
YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQgZm9yIHBhbm5lciBtb2RlbCAwCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxOGZlN2ZjYjU3NzI5
ZWFmOGEyNmY0ZWQ5N2Q1OWUyOGNjMmY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+
Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwv
aGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAg
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRp
b24oIlRlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsK
KworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAg
ICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJl
bmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgLy8gVGhyZXNob2xk
IGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgICAgdmFyIHRocmVzaG9sZCA9IC4w
MDAxOTsKKworICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5vZGUgc28gd2UgY2FuIGdldCB0aGUg
ZGlzdGFuY2UgbW9kZWwgYW5kCisgICAgICAgICAgLy8gcGFubmluZyBtb2RlbCB2YWx1ZXMuLgor
ICAgICAgICAgIHZhciB0ZW1wUGFubmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKworICAg
ICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5MSU5FQVJfRElTVEFO
Q0UsIHRlbXBQYW5uZXIuRVFVQUxQT1dFUiwgbm9kZXNUb0NyZWF0ZSwgdGhyZXNob2xkKTsKKyAg
ICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5nLmpz
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5nLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ0MGYyMGU2MzUwNmM2MTAxMzNkZTJjMWQxMmM2ZTU3YmEyOGRlOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1v
ZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwyOTcgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAu
MDsKKwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vjb25k
cyA9IDE7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1w
bGVSYXRlOworCisvLyBIb3cgbWFueSBwYW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVz
dAordmFyIG5vZGVzVG9DcmVhdGUgPSAxMDA7CisKKy8vIFRpbWUgc3RlcCB3aGVuIGVhY2ggcGFu
bmVyIG5vZGUgc3RhcnRzLgordmFyIHRpbWVTdGVwID0gMC4wNTsKKworLy8gVGhlc2UgYXJlIGds
b2JhbCBtb3N0bHkgZm9yIGRlYnVnZ2luZy4KK3ZhciBjb250ZXh0OwordmFyIGltcHVsc2U7Cit2
YXIgYnVmZmVyU291cmNlOwordmFyIHBhbm5lcjsKK3ZhciBwb3NpdGlvbjsKK3ZhciB0aW1lOwor
ICAgICAgCit2YXIgcmVuZGVyZWRCdWZmZXI7Cit2YXIgcmVuZGVyZWRMZWZ0OwordmFyIHJlbmRl
cmVkUmlnaHQ7CisKK2Z1bmN0aW9uIGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxl
RnJhbWVMZW5ndGgpIHsKKyAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIo
MSwgMTAwMCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5n
dGg7CisgIHZhciBkYXRhTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgIGZv
ciAodmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7CisgICAgZGF0YUxba10gPSAwOworICB9CisgIGRh
dGFMWzBdID0gMTsKKworICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKKy8vIEZvciB0aGUgcmVj
b3JkLCB0aGVzZSBkaXN0YW5jZSBmb3JtdWxhcyB3ZXJlIHRha2VuIGZyb20gdGhlIE9wZW5BTAor
Ly8gc3BlYywgbm90IHRoZSBjb2RlLgorZnVuY3Rpb24gbGluZWFyRGlzdGFuY2UocGFubmVyLCB4
LCB5LCB6KSB7CisgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAq
IHopOworICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2Up
OworICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICB2YXIgZ2FpbiA9ICgx
IC0gcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkgLyAocGFubmVyLm1h
eERpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSk7CisKKyAgcmV0dXJuIGdhaW47Cit9CisK
K2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7CisgIHZhciBk
aXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopOworICBkaXN0YW5jZSA9
IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICB2YXIgcm9sbG9mZiA9
IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICB2YXIgZ2FpbiA9IE1hdGgucG93KGRpc3RhbmNlL3Bh
bm5lci5yZWZEaXN0YW5jZSwgLXJvbGxvZmYpOworCisgIHJldHVybiBnYWluOworfQorCitmdW5j
dGlvbiBpbnZlcnNlRGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7CisgIHZhciBkaXN0YW5jZSA9
IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopOworICBkaXN0YW5jZSA9IE1hdGgubWlu
KGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICB2YXIgcm9sbG9mZiA9IHBhbm5lci5y
b2xsb2ZmRmFjdG9yOworICB2YXIgZ2FpbiA9IHBhbm5lci5yZWZEaXN0YW5jZSAvIChwYW5uZXIu
cmVmRGlzdGFuY2UgKyByb2xsb2ZmICogKGRpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSk7
CisKKyAgcmV0dXJuIGdhaW47Cit9CisKKy8vIFRoaXMgYXJyYXkgbXVzdCBiZSBhcnJhbmdlZCBp
biB0aGUgbnVtZXJpYyBvcmRlciBvZiB0aGUgZGlzdGFuY2UKKy8vIG1vZGVsIHZhbHVlcy4KK3Zh
ciBkaXN0YW5jZU1vZGVsRnVuY3Rpb24gPSBbbGluZWFyRGlzdGFuY2UsIGludmVyc2VEaXN0YW5j
ZSwgZXhwb25lbnRpYWxEaXN0YW5jZV07CisKK2Z1bmN0aW9uIGNyZWF0ZUdyYXBoKGNvbnRleHQs
IGRpc3RhbmNlTW9kZWwsIG5vZGVDb3VudCkgeworICAvLyBDcmVhdGUgYWxsIHRoZSBzb3VyY2Vz
LCB3aGljaCBhcmUgaW1wdWxzZXMuCisgIGJ1ZmZlclNvdXJjZSA9IG5ldyBBcnJheShub2RlQ291
bnQpOworICBmb3IgKHZhciBrID0gMDsgayA8IG5vZGVDb3VudDsgKytrKSB7CisgICAgYnVmZmVy
U291cmNlW2tdID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBpbXB1bHNlID0g
Y3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisgICAgYnVm
ZmVyU291cmNlW2tdLmJ1ZmZlciA9IGltcHVsc2U7CisgIH0KKworICAvLyBDcmVhdGUgYWxsIHRo
ZSBwYW5uZXJzLgorICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgcG9zaXRpb24g
PSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgdmFyIGFuZ2xlU3RlcCA9IE1hdGguUEkgLyBub2Rl
Q291bnQ7CisgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsKKyAgICBwYW5u
ZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgIHBhbm5lcltrXS5wYW5uaW5nTW9k
ZWwgPSBwYW5uZXIuRVFVQUxQT1dFUjsKKyAgICBwYW5uZXJba10uZGlzdGFuY2VNb2RlbCA9IGRp
c3RhbmNlTW9kZWw7CisgICAgLy8gVGhlIHBvc2l0aW9uIGlzIHRoZSBhbmdsZSB1bmlmb3JtbHkg
c3BhY2VkIGJldHdlZW4gMCBhbmQgMTgwCisgICAgLy8gZGVnLCBidXQgd2Ugd2FudCB0byBhdm9p
ZCAwIGJlY2F1c2UgdGhlIGVxdWFsIHBvd2VyIHBhbm5lciB3aWxsCisgICAgLy8gcHJvZHVjZSAw
IHdoaWNoIG1lc3NlcyB1cCBvdXIgY2hlY2sgcm91dGluZS4KKyAgICBwb3NpdGlvbltrXSA9IGFu
Z2xlU3RlcCAqIChrICsgMS8yKTsKKyAgICBwYW5uZXJba10uc2V0UG9zaXRpb24oTWF0aC5jb3Mo
cG9zaXRpb25ba10pLCAwLCBNYXRoLnNpbihwb3NpdGlvbltrXSkpOworICB9CisKKyAgLy8gQ29u
bmVjdCB0aGUgc291cmNlcyBhbmQgcGFubmVycy4KKyAgZm9yICh2YXIgayA9IDA7IGsgPCBub2Rl
Q291bnQ7ICsraykgeworICAgIGJ1ZmZlclNvdXJjZVtrXS5jb25uZWN0KHBhbm5lcltrXSk7Cisg
ICAgcGFubmVyW2tdLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgIH0KK30KKworZnVu
Y3Rpb24gc3RhcnRTb3VyY2VzKCkgeworICAvLyBUdXJuIG9uIGVhY2ggc291cmNlIGF0IHVuaWZv
cm0gaW50ZXJ2YWxzLgorICB0aW1lID0gbmV3IEFycmF5KG5vZGVzVG9DcmVhdGUpOworICBmb3Ig
KHZhciBrID0gMDsgayA8IG5vZGVzVG9DcmVhdGU7ICsraykgeworICAgIHRpbWVba10gPSBrICog
dGltZVN0ZXA7CisgICAgYnVmZmVyU291cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgfQorfQor
CitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWwsIHBhbm5l
ck1vZGVsLCBub2RlcywgdGhyZXNob2xkKSB7CisgIGNyZWF0ZUdyYXBoKGNvbnRleHQsIGRpc3Rh
bmNlTW9kZWwsIG5vZGVzKTsKKyAgc3RhcnRTb3VyY2VzKCk7CisKKyAgY29udGV4dC5vbmNvbXBs
ZXRlID0gY2hlY2tSZXN1bHQocGFubmVyTW9kZWwsIHRocmVzaG9sZCwgZmFsc2UpOworICBjb250
ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIE5vcm1hbGl6ZSBhIHZlY3RvciB0byB1bml0
IGxlbmd0aC4KK2Z1bmN0aW9uIG5vcm1hbGl6ZSh2KSB7CisgIHZhciBsZW5ndGggPSBNYXRoLnNx
cnQodi54ICogdi54ICsgdi55ICogdi55ICsgdi56ICogdi56KTsKKyAgcmV0dXJuIHt4IDogdi54
IC8gbGVuZ3RoLCB5IDogdi55IC8gbGVuZ3RoLCB6IDogdi56IC8gbGVuZ3RofTsKK30KKworLy8g
VmVjdG9yIGRvdCBwcm9kdWN0IGJldHdlZW4gdjEgYW5kIHYyLgorZnVuY3Rpb24gZG90KHYxLCB2
MikgeworICByZXR1cm4gdjEueCAqIHYyLnggKyB2MS55ICogdjIueSArIHYxLnogKiB2Mi56Owor
fQorCisvLyBWZWN0b3IgY3Jvc3MgcHJvZHVjdCBhIFggYi4KK2Z1bmN0aW9uIGNyb3NzKGEsIGIp
IHsKKyAgcmV0dXJuIHt4IDogYS55ICogYi56IC0gYS56ICogYi55LAorICAgICAgICAgIHkgOiBh
LnogKiBiLnggLSBhLnggKiBiLnosCisgICAgICAgICAgeiA6IGEueCAqIGIueSAtIGEueSAqIGIu
eH07Cit9CisKKy8vIFZlY3RvciBkaWZmZXJlbmNlOiAgYSAtIGIKK2Z1bmN0aW9uIHN1YihhLCBi
KSB7CisgIHJldHVybiB7eCA6IGEueCAtIGIueCwgeSA6IGEueSAtIGIueSwgeiA6IGEueiAtIGIu
en07Cit9CisKKy8vIFNjYWxlIGEgdmVjdG9yIHYgYnkgdGhlIHNjYWxhciB2YWx1ZSBzLgorZnVu
Y3Rpb24gc2NhbGFyTXVsdChzLCB2KSB7CisgIHJldHVybiB7eCA6IHMgKiB2LngsIHkgOiBzICog
di55LCB6IDogcyAqIHYuen07Cit9CisKK2Z1bmN0aW9uIGdldEF6aW11dGgoYW5nbGUpIHsKKyAg
Ly8gQ29tcHV0ZSB0aGUgYXppbXV0aC4gIFNlZSBnZXRBemltdXRoRWxldmF0aW9uIGluIEF1ZGlv
UGFubmVyTm9kZS5jcHAuCisgIC8vCisgIC8vIFNob3VsZCB3ZSByZW1vdmUgdGhpcyBjb21wbGlj
YXRlZCBjb21wdXRhdGlvbj8gIFRoZSBkZWZhdWx0CisgIC8vIHZhbHVlcyBmb3IgZXZlcnl0aGlu
ZyBhbGxvdyBtb3N0IG9mIHRoaXMgdG8gYmUgcmVtb3ZlZCwgYnV0IHdlCisgIC8vIGluY2x1ZGUg
dGhpcyBqdXN0IHRvIGJlIHN1cmUgd2UgY29tcHV0ZSB0aGUgYXppbXV0aCBjb3JyZWN0bHkuCisg
IHZhciBsaXN0ZW5lclBvc2l0aW9uID0ge3ggOiAwLCB5IDogMCwgeiA6IDB9OworICB2YXIgc291
cmNlTGlzdGVuZXIgPSBzdWIoe3ggOiBNYXRoLmNvcyhhbmdsZSksIHkgOiAwLCB6IDogTWF0aC5z
aW4oYW5nbGUpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyUG9zaXRpb24p
OworICB2YXIgbGlzdGVuZXJGcm9udCA9IHt4IDogMCwgeSA6IDAsIHogOiAtMX07CisgIHZhciBs
aXN0ZW5lclVwID0ge3ggOiAwLCB5IDogMSwgeiA6IDB9OworICB2YXIgbGlzdGVuZXJSaWdodCA9
IGNyb3NzKGxpc3RlbmVyRnJvbnQsIGxpc3RlbmVyVXApOworICBsaXN0ZW5lclJpZ2h0ID0gbm9y
bWFsaXplKGxpc3RlbmVyUmlnaHQpOworICB2YXIgbGlzdGVuZXJGcm9udE5vcm0gPSBub3JtYWxp
emUobGlzdGVuZXJGcm9udCk7CisgIHZhciB1cCA9IGNyb3NzKGxpc3RlbmVyUmlnaHQsIGxpc3Rl
bmVyRnJvbnROb3JtKTsKKyAgdmFyIHVwUHJvamVjdGlvbiA9IGRvdChzb3VyY2VMaXN0ZW5lciwg
dXApOworICB2YXIgcHJvamVjdGVkU291cmNlID0gbm9ybWFsaXplKHN1Yihzb3VyY2VMaXN0ZW5l
ciwgc2NhbGFyTXVsdCh1cFByb2plY3Rpb24sIHVwKSkpOworICAKKyAgdmFyIGF6aW11dGggPSAx
ODAgKiBNYXRoLmFjb3MoZG90KHByb2plY3RlZFNvdXJjZSwgbGlzdGVuZXJSaWdodCkpIC8gTWF0
aC5QSTsKKyAgdmFyIGZyb250QmFjayA9IGRvdChwcm9qZWN0ZWRTb3VyY2UsIGxpc3RlbmVyRnJv
bnROb3JtKTsKKworICBpZiAoZnJvbnRCYWNrIDwgMCkgeworICAgIGF6aW11dGggPSAzNjAgLSBh
emltdXRoOworICB9CisgIGlmICgoYXppbXV0aCA+PSAwKSAmJiAoYXppbXV0aCA8PSAyNzApKSB7
CisgICAgYXppbXV0aCA9IDkwIC0gYXppbXV0aDsKKyAgfSBlbHNlIHsKKyAgICBhemltdXRoID0g
NDUwIC0gYXppbXV0aDsKKyAgfQorICByZXR1cm4gYXppbXV0aDsKK30KKworLy8gVGhlIGdhaW4g
Y2F1c2VkIGJ5IHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWwKK2Z1bmN0aW9uIGVxdWFsUG93
ZXJHYWluKGFuZ2xlKSB7CisgIHZhciBhemltdXRoID0gZ2V0QXppbXV0aChhbmdsZSk7CisKKyAg
aWYgKGF6aW11dGggPCAtOTApIHsKKyAgICBhemltdXRoID0gLTE4MCAtIGF6aW11dGg7CisgIH0g
ZWxzZSBpZiAoYXppbXV0aCA+IDkwKSB7CisgICAgYXppbXV0aCA9IDE4MCAtIGF6aW11dGg7Cisg
IH0KKworICB2YXIgcGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKS8xODA7CisKKyAgdmFyIGdh
aW5MID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgdmFyIGdhaW5S
ID0gTWF0aC5zaW4oMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKworICByZXR1cm4geyBs
ZWZ0IDogZ2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKK30KKworZnVuY3Rpb24gY2hlY2tSZXN1bHQo
bW9kZWwsIHRocmVzaG9sZCwgZGVidWcpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgcmVuZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICByZW5kZXJlZExl
ZnQgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICByZW5kZXJlZFJpZ2h0
ID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSk7CisKKyAgICB2YXIgc3VjY2VzcyA9
IHRydWU7CisgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIGZvdW5kIGluIHRoZSByZW5kZXJlZCBy
ZXN1bHQuCisgICAgdmFyIGltcHVsc2VDb3VudCA9IDA7CisgICAgLy8gTWF4IChyZWxhdGl2ZSkg
ZXJyb3IgYW5kIHRoZSBpbmRleCBvZiB0aGUgbWF4aW1hIGZvciB0aGUgbGVmdAorICAgIC8vIGFu
ZCByaWdodCBjaGFubmVscy4KKyAgICB2YXIgbWF4RXJyb3JMID0gMDsKKyAgICB2YXIgbWF4RXJy
b3JJbmRleEwgPSAwOworICAgIHZhciBtYXhFcnJvclIgPSAwOworICAgIHZhciBtYXhFcnJvcklu
ZGV4UiA9IDA7CisgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHRoYXQgZG9uJ3QgbWF0Y2ggb3Vy
IGV4cGVjdGVkIGxvY2F0aW9ucy4KKyAgICAvLyAoRm9yIGRlYnVnZ2luZykuCisgICAgdmFyIHRp
bWVDb3VudCA9IDA7CisgICAgLy8gTG9jYXRpb25zIG9mIHdoZXJlIHRoZSBpbXB1bHNlcyBhcmVu
J3QgYXQgdGhlIGV4cGVjdGVkIGxvY2F0aW9ucy4KKyAgICB2YXIgdGltZUVycm9ycyA9IG5ldyBB
cnJheSgpOworCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZExlZnQubGVuZ3RoOyAr
K2spIHsKKyAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVs
cyBzdGFydCBhdCB0aGUgc2FtZSBpbnN0YW5jZS4KKyAgICAgIGlmIChyZW5kZXJlZExlZnRba10g
IT0gMCkgeworICAgICAgICB2YXIgZEZ1bmN0aW9uID0gZGlzdGFuY2VNb2RlbEZ1bmN0aW9uW3Bh
bm5lcltpbXB1bHNlQ291bnRdLmRpc3RhbmNlTW9kZWxdOworICAgICAgICB2YXIgZEdhaW4gPSBk
RnVuY3Rpb24ocGFubmVyW2ltcHVsc2VDb3VudF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYXRoLmNvcyhwb3NpdGlvbltpbXB1bHNlQ291bnRdKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbihw
b3NpdGlvbltpbXB1bHNlQ291bnRdKSk7CisKKyAgICAgICAgLy8gVGhlIGV4cGVjdGVkIGdhaW4g
Zm9yIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscy4KKyAgICAgICAgdmFyIGV4cGVjdGVkTCA9
IGRHYWluICogZXF1YWxQb3dlckdhaW4ocG9zaXRpb25baW1wdWxzZUNvdW50XSkubGVmdDsKKyAg
ICAgICAgdmFyIGV4cGVjdGVkUiA9IGRHYWluICogZXF1YWxQb3dlckdhaW4ocG9zaXRpb25baW1w
dWxzZUNvdW50XSkucmlnaHQ7CisKKyAgICAgICAgLy8gUmVsYXRpdmUgZXJyb3IgaW4gdGhlIGdh
aW4uCisgICAgICAgIHZhciBlcnJvckwgPSBNYXRoLmFicyhyZW5kZXJlZExlZnRba10gLSBleHBl
Y3RlZEwpL01hdGguYWJzKGV4cGVjdGVkTCk7CisgICAgICAgIHZhciBlcnJvclIgPSBNYXRoLmFi
cyhyZW5kZXJlZFJpZ2h0W2tdIC0gZXhwZWN0ZWRSKS9NYXRoLmFicyhleHBlY3RlZFIpOworICAg
ICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICBjb25zb2xlLmxvZygiTGVmdDogICIgKyBrICsg
IjogIiArIHJlbmRlcmVkTGVmdFtrXSArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZEwgKyAiLCBy
ZWwgPSAiLCBlcnJvckwgKyAiKSIpOworICAgICAgICAgIGNvbnNvbGUubG9nKCJSaWdodDogIiAr
IGsgKyAiOiAiICsgcmVuZGVyZWRSaWdodFtrXSArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZFIg
KyAiLCByZWwgPSAiLCBlcnJvclIgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIGlmIChNYXRo
LmFicyhlcnJvckwpID4gbWF4RXJyb3JMKSB7CisgICAgICAgICAgbWF4RXJyb3JMID0gTWF0aC5h
YnMoZXJyb3JMKTsKKyAgICAgICAgICBtYXhFcnJvckluZGV4TCA9IGltcHVsc2VDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoTWF0aC5hYnMoZXJyb3JSKSA+IG1heEVycm9yUikgeworICAg
ICAgICAgIG1heEVycm9yUiA9IE1hdGguYWJzKGVycm9yUik7CisgICAgICAgICAgbWF4RXJyb3JJ
bmRleFIgPSBpbXB1bHNlQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3IgZGVidWdn
aW5nLiAgS2VlcCB0cmFjayBvZiB0aGUgaW1wdWxzZXMgdGhhdCBkaWRuJ3Qgc2hvdworICAgICAg
ICAvLyB1cCB3aGVyZSB3ZSBleHBlY3RlZCB0aGVtIHRvIGJlLgorICAgICAgICBpZiAoayAhPSBN
YXRoLnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVsc2VDb3VudF0pKSB7CisgICAgICAgICAg
dGltZUVycm9yc1t0aW1lQ291bnRdID0geyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IE1hdGgucm91
bmQoc2FtcGxlUmF0ZSAqIHRpbWVbaW1wdWxzZUNvdW50XSl9OworICAgICAgICAgICsrdGltZUNv
dW50OworICAgICAgICB9CisgICAgICAgICsraW1wdWxzZUNvdW50OworICAgICAgfQorICAgIH0K
KworICAgIGlmIChpbXB1bHNlQ291bnQgPT0gbm9kZXNUb0NyZWF0ZSkgeworICAgICAgdGVzdFBh
c3NlZCgiTnVtYmVyIG9mIG5vZGVzIGlzIGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRlc3RGYWlsZWQoIk51bWJlciBvZiBub2RlcyBpcyBpbmNvcnJlY3QuICAoRm91bmQgIiArIGlt
cHVsc2VDb3VudCArICIgYnV0IGV4cGVjdGVkICIgKyBub2Rlc1RvQ3JlYXRlICsgIikiKTsKKyAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobWF4RXJyb3JMIDw9IHRocmVz
aG9sZCkgeworICAgICAgdGVzdFBhc3NlZCgiTGVmdCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJl
IGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIkxlZnQgY2hhbm5l
bCBwYW5uZXIgdmFsdWVzIGFyZSBpbmNvcnJlY3QuICBNYXggcmVsIGVycm9yID0gIiArIG1heEVy
cm9yTCArICIgYXQgdGltZSAiICsgbWF4RXJyb3JJbmRleEwgLyBzYW1wbGVSYXRlICsgIiAodGhy
ZXNob2xkID0gIiArIHRocmVzaG9sZCArICIpIik7CisgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChtYXhFcnJvclIgPD0gdGhyZXNob2xkKSB7CisgICAgICB0ZXN0UGFzc2Vk
KCJSaWdodCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJlIGNvcnJlY3QuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgIHRlc3RGYWlsZWQoIlJpZ2h0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgaW5j
b3JyZWN0LiAgTWF4IHJlbCBlcnJvciA9ICIgKyBtYXhFcnJvclIgKyAiIGF0IHRpbWUgIiArIG1h
eEVycm9ySW5kZXhSIC8gc2FtcGxlUmF0ZSArICIgKHRocmVzaG9sZCA9ICIgKyB0aHJlc2hvbGQg
KyAiKSIpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIGZvciBkZWJ1
Z2dpbmcuICBJdCBzZWVtcyB0aGF0IHNvbWUgaW1wdWxzZXMgZG9uJ3Qgc2hvdyB1cCBhdAorICAg
IC8vIGV4YWN0bHkgdGhlIGV4cGVjdGVkIHJlbmRlcmVkIGxvY2F0aW9uLiAgTG9nIHRoZXNlIHRv
IHRoZQorICAgIC8vIGNvbnNvbGUgaWYgZGVidWdnaW5nIGlzIHRydWUuCisgICAgLy8KKyAgICAv
LyBGSVhNRTogRmlsZSBhIGJ1ZyByZXBvcnQgb24gdGhpcy4KKyAgICBpZiAoZGVidWcgJiYgdGlt
ZUVycm9ycy5sZW5ndGggPiAwKSB7CisgICAgICBjb25zb2xlLmxvZyh0aW1lRXJyb3JzLmxlbmd0
aCArICIgdGltaW5nIGVycm9ycyBmb3VuZCIpOworICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0
aW1lRXJyb3JzLmxlbmd0aDsgKytrKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCJTYW1wbGUgIiAr
IHRpbWVFcnJvcnNba10uYWN0dWFsICsgIiBidXQgZXhwZWN0ZWQgIiArIHRpbWVFcnJvcnNba10u
ZXhwZWN0ZWQpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICB0
ZXN0UGFzc2VkKCJFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IHBhc3NlZCBmb3IgcGFubmVyIG1vZGVs
ICIgKyBtb2RlbCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIkVxdWFsUG93ZXIg
cGFubmVyIHRlc3QgZmFpbGVkIGZvciBwYW5uZXIgbW9kZWwgIiArIG1vZGVsKTsKKyAgICB9CisK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122082</attachid>
            <date>2012-01-11 13:06:56 -0800</date>
            <delta_ts>2012-01-12 15:14:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120111130655.patch</filename>
            <type>text/plain</type>
            <size>15439</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ2ZTNmNDdkNjNlYTcy
NDY0OWRjYjE5NjM5NjIwZjM0ZDE3NzBmZC4uY2I1NjBjNzExMWQ4NzU0MjY5OTM3OGM3MzM0ZGVh
Yjc0OTAwMTdhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExheW91dCB0ZXN0IGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2Vy
UGFubmVyOjpwYW4pOiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0xMCAgRGFuaWVs
IENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBhc3Rl
Ym9hcmQ6OmRvY3VtZW50RnJhZ21lbnQgc2hvdWxkIGZhbGwgYmFjayB0byB0ZXh0IGlmIHRoZXJl
J3Mgbm8gSFRNTCB0ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9FcXVhbFBvd2VyUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuY3BwCmluZGV4IDEzYTE5ZDZjZDQ0NTFkN2IyZjk4ODJiNTBjNGVkOWUw
MDMyMGIzYjYuLjBkYTc2MjIzNjQwOTE3MmE1ODQ1NmZmMGI2ZGQ3MmZlNThiYzc4NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CkBAIC04NCw4ICs4NCw4IEBAIHZvaWQgRXF1YWxQb3dlclBhbm5lcjo6cGFuKGRvdWJsZSBhemlt
dXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgQXVkaW9CdXMqIGlucHV0CiAgICAgLy8gUGFuIHNt
b290aGx5IGZyb20gbGVmdCB0byByaWdodCB3aXRoIGF6aW11dGggZ29pbmcgZnJvbSAtOTAgLT4g
KzkwIGRlZ3JlZXMuCiAgICAgZG91YmxlIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gMTgwOwogCi0gICAgZG91YmxlIGRlc2lyZWRHYWluTCA9IDAuNSAqIGNvcyhwaURvdWJs
ZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbikgKyAwLjU7Ci0gICAgZG91YmxlIGRlc2lyZWRHYWluUiA9
IHNxcnQoMS4wIC0gZGVzaXJlZEdhaW5MKmRlc2lyZWRHYWluTCk7CisgICAgZG91YmxlIGRlc2ly
ZWRHYWluTCA9IGNvcygwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAg
ZG91YmxlIGRlc2lyZWRHYWluUiA9IHNpbigwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3Np
dGlvbik7CiAKICAgICAvLyBEb24ndCBkZS16aXBwZXIgb24gZmlyc3QgcmVuZGVyIGNhbGwuCiAg
ICAgaWYgKG1faXNGaXJzdFJlbmRlcikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxOWM0OGU4ZDZkMGIwMmVlN2JhNjEx
ODMwNzFjNjE0YTQ0NjA1ZDIuLmMxYzlhZWFmNGY2YjJiODEwM2E1ODdmYWJmZmI4ODY4ZGUyZTJm
MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wMS0xMSAgUmF5bW9uZCBUb3kgIDxydG95
QGNocm9taXVtLm9yZz4KKyAgICAgICAgRVFVQUxQT1dFUiBwYW5uZXIgaW5jb3JyZWN0bHkgY29t
cHV0ZXMgZ2FpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzU3NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHdlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWw6CisgICAgICAgICogd2ViYXVkaW8v
cGFubmVyLWVxdWFscG93ZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291
cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qczoKKyAgICAgICAgVGVzdCBmb3IgRVFVQUxQT1dF
UiBwYW5uZXIuCisKIDIwMTItMDEtMTAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ1NDMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTliOTBhYTAyMGVmNDU4OWI1MGY5Yzc1YzkxNGE5ODhlMDMzZjQxOAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2Vy
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBt
b2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBOdW1iZXIgb2Ygbm9kZXMgaXMgY29ycmVjdC4KK1BBU1MgTGVmdCBjaGFubmVsIHBhbm5l
ciB2YWx1ZXMgYXJlIGNvcnJlY3QuCitQQVNTIFJpZ2h0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBh
cmUgY29ycmVjdC4KK1BBU1MgRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQgZm9yIHBhbm5l
ciBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWEwM2Q4MGUwOWExN2RkZGNiMzBlOGIzNDJjMzlhNWQxMDIwMTRiNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwKQEAg
LTAsMCArMSw0NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQu
MDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIv
PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3Jp
cHQ+CisgICAgICBkZXNjcmlwdGlvbigiVGVzdCBlcXVhbC1wb3dlciBwYW5uZXIgbW9kZWwgb2Yg
QXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUg
YXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4
dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAg
ICAgICAgICAvLyBUaHJlc2hvbGQgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAg
ICB2YXIgdGhyZXNob2xkID0gLjAwMDE5OworCisgICAgICAgICAgLy8gVGVtcCBwYW5uZXIgbm9k
ZSBzbyB3ZSBjYW4gZ2V0IHRoZSBkaXN0YW5jZSBtb2RlbCBhbmQKKyAgICAgICAgICAvLyBwYW5u
aW5nIG1vZGVsIHZhbHVlcy4uCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNy
ZWF0ZVBhbm5lcigpOworCisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCB0ZW1w
UGFubmVyLkxJTkVBUl9ESVNUQU5DRSwgdGVtcFBhbm5lci5FUVVBTFBPV0VSLCBub2Rlc1RvQ3Jl
YXRlLCB0aHJlc2hvbGQpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFu
bmVyLW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFu
bmVyLW1vZGVsLXRlc3RpbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQwZjIwZTYzNTA2YzYxMDEzM2RlMmMx
ZDEyYzZlNTdiYTI4ZGU5NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcwpAQCAtMCwwICsxLDI5NyBAQAordmFy
IHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IDg7Cit2
YXIgcHVsc2VMZW5ndGhTZWNvbmRzID0gMTsKK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNl
TGVuZ3RoU2Vjb25kcyAqIHNhbXBsZVJhdGU7CisKKy8vIEhvdyBtYW55IHBhbm5lciBub2RlcyB0
byBjcmVhdGUgZm9yIHRoZSB0ZXN0Cit2YXIgbm9kZXNUb0NyZWF0ZSA9IDEwMDsKKworLy8gVGlt
ZSBzdGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCit2YXIgdGltZVN0ZXAgPSAwLjA1
OworCisvLyBUaGVzZSBhcmUgZ2xvYmFsIG1vc3RseSBmb3IgZGVidWdnaW5nLgordmFyIGNvbnRl
eHQ7Cit2YXIgaW1wdWxzZTsKK3ZhciBidWZmZXJTb3VyY2U7Cit2YXIgcGFubmVyOwordmFyIHBv
c2l0aW9uOwordmFyIHRpbWU7CisgICAgICAKK3ZhciByZW5kZXJlZEJ1ZmZlcjsKK3ZhciByZW5k
ZXJlZExlZnQ7Cit2YXIgcmVuZGVyZWRSaWdodDsKKworZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1
ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICB2YXIgYXVkaW9CdWZmZXIgPSBj
b250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMDAwLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICB2YXIg
biA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgdmFyIGRhdGFMID0gYXVkaW9CdWZmZXIuZ2V0Q2hh
bm5lbERhdGEoMCk7CisKKyAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyArK2spIHsKKyAgICBkYXRh
TFtrXSA9IDA7CisgIH0KKyAgZGF0YUxbMF0gPSAxOworCisgIHJldHVybiBhdWRpb0J1ZmZlcjsK
K30KKworLy8gRm9yIHRoZSByZWNvcmQsIHRoZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFr
ZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVjLCBub3QgdGhlIGNvZGUuCitmdW5jdGlvbiBsaW5l
YXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0
KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2Us
IHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgIHZhciBnYWluID0gKDEgLSByb2xsb2ZmICogKGRpc3RhbmNlIC0gcGFubmVyLnJlZkRp
c3RhbmNlKSAvIChwYW5uZXIubWF4RGlzdGFuY2UgLSBwYW5uZXIucmVmRGlzdGFuY2UpKTsKKwor
ICByZXR1cm4gZ2FpbjsKK30KKworZnVuY3Rpb24gZXhwb25lbnRpYWxEaXN0YW5jZShwYW5uZXIs
IHgsIHksIHopIHsKKyAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6
ICogeik7CisgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5j
ZSk7CisgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0b3I7CisgIHZhciBnYWluID0g
TWF0aC5wb3coZGlzdGFuY2UvcGFubmVyLnJlZkRpc3RhbmNlLCAtcm9sbG9mZik7CisKKyAgcmV0
dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0YW5jZShwYW5uZXIsIHgsIHksIHop
IHsKKyAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7Cisg
IGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZh
ciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0b3I7CisgIHZhciBnYWluID0gcGFubmVyLnJl
ZkRpc3RhbmNlIC8gKHBhbm5lci5yZWZEaXN0YW5jZSArIHJvbGxvZmYgKiAoZGlzdGFuY2UgLSBw
YW5uZXIucmVmRGlzdGFuY2UpKTsKKworICByZXR1cm4gZ2FpbjsKK30KKworLy8gVGhpcyBhcnJh
eSBtdXN0IGJlIGFycmFuZ2VkIGluIHRoZSBudW1lcmljIG9yZGVyIG9mIHRoZSBkaXN0YW5jZQor
Ly8gbW9kZWwgdmFsdWVzLgordmFyIGRpc3RhbmNlTW9kZWxGdW5jdGlvbiA9IFtsaW5lYXJEaXN0
YW5jZSwgaW52ZXJzZURpc3RhbmNlLCBleHBvbmVudGlhbERpc3RhbmNlXTsKKworZnVuY3Rpb24g
Y3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZUNvdW50KSB7CisgIC8vIENy
ZWF0ZSBhbGwgdGhlIHNvdXJjZXMsIHdoaWNoIGFyZSBpbXB1bHNlcy4KKyAgYnVmZmVyU291cmNl
ID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50
OyArK2spIHsKKyAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJj
ZSgpOworICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVu
Z3RoRnJhbWVzKTsKKyAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxzZTsKKyAgfQor
CisgIC8vIENyZWF0ZSBhbGwgdGhlIHBhbm5lcnMuCisgIHBhbm5lciA9IG5ldyBBcnJheShub2Rl
Q291bnQpOworICBwb3NpdGlvbiA9IG5ldyBBcnJheShub2RlQ291bnQpOworICB2YXIgYW5nbGVT
dGVwID0gTWF0aC5QSSAvIG5vZGVDb3VudDsKKyAgZm9yICh2YXIgayA9IDA7IGsgPCBub2RlQ291
bnQ7ICsraykgeworICAgIHBhbm5lcltrXSA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAg
cGFubmVyW2tdLnBhbm5pbmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VSOworICAgIHBhbm5lcltr
XS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKyAgICAvLyBUaGUgcG9zaXRpb24gaXMg
dGhlIGFuZ2xlIHVuaWZvcm1seSBzcGFjZWQgYmV0d2VlbiAwIGFuZCAxODAKKyAgICAvLyBkZWcs
IGJ1dCB3ZSB3YW50IHRvIGF2b2lkIDAgYmVjYXVzZSB0aGUgZXF1YWwgcG93ZXIgcGFubmVyIHdp
bGwKKyAgICAvLyBwcm9kdWNlIDAgd2hpY2ggbWVzc2VzIHVwIG91ciBjaGVjayByb3V0aW5lLgor
ICAgIHBvc2l0aW9uW2tdID0gYW5nbGVTdGVwICogKGsgKyAxLzIpOworICAgIHBhbm5lcltrXS5z
ZXRQb3NpdGlvbihNYXRoLmNvcyhwb3NpdGlvbltrXSksIDAsIE1hdGguc2luKHBvc2l0aW9uW2td
KSk7CisgIH0KKworICAvLyBDb25uZWN0IHRoZSBzb3VyY2VzIGFuZCBwYW5uZXJzLgorICBmb3Ig
KHZhciBrID0gMDsgayA8IG5vZGVDb3VudDsgKytrKSB7CisgICAgYnVmZmVyU291cmNlW2tdLmNv
bm5lY3QocGFubmVyW2tdKTsKKyAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0
aW9uKTsKKyAgfQorfQorCitmdW5jdGlvbiBzdGFydFNvdXJjZXMoKSB7CisgIC8vIFR1cm4gb24g
ZWFjaCBzb3VyY2UgYXQgdW5pZm9ybSBpbnRlcnZhbHMuCisgIHRpbWUgPSBuZXcgQXJyYXkobm9k
ZXNUb0NyZWF0ZSk7CisgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZXNUb0NyZWF0ZTsgKytrKSB7
CisgICAgdGltZVtrXSA9IGsgKiB0aW1lU3RlcDsKKyAgICBidWZmZXJTb3VyY2Vba10ubm90ZU9u
KHRpbWVba10pOworICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwg
ZGlzdGFuY2VNb2RlbCwgcGFubmVyTW9kZWwsIG5vZGVzLCB0aHJlc2hvbGQpIHsKKyAgY3JlYXRl
R3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZXMpOworICBzdGFydFNvdXJjZXMoKTsK
KworICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdChwYW5uZXJNb2RlbCwgdGhyZXNo
b2xkLCBmYWxzZSk7CisgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworLy8gTm9ybWFs
aXplIGEgdmVjdG9yIHRvIHVuaXQgbGVuZ3RoLgorZnVuY3Rpb24gbm9ybWFsaXplKHYpIHsKKyAg
dmFyIGxlbmd0aCA9IE1hdGguc3FydCh2LnggKiB2LnggKyB2LnkgKiB2LnkgKyB2LnogKiB2Lnop
OworICByZXR1cm4ge3ggOiB2LnggLyBsZW5ndGgsIHkgOiB2LnkgLyBsZW5ndGgsIHogOiB2Lnog
LyBsZW5ndGh9OworfQorCisvLyBWZWN0b3IgZG90IHByb2R1Y3QgYmV0d2VlbiB2MSBhbmQgdjIu
CitmdW5jdGlvbiBkb3QodjEsIHYyKSB7CisgIHJldHVybiB2MS54ICogdjIueCArIHYxLnkgKiB2
Mi55ICsgdjEueiAqIHYyLno7Cit9CisKKy8vIFZlY3RvciBjcm9zcyBwcm9kdWN0IGEgWCBiLgor
ZnVuY3Rpb24gY3Jvc3MoYSwgYikgeworICByZXR1cm4ge3ggOiBhLnkgKiBiLnogLSBhLnogKiBi
LnksCisgICAgICAgICAgeSA6IGEueiAqIGIueCAtIGEueCAqIGIueiwKKyAgICAgICAgICB6IDog
YS54ICogYi55IC0gYS55ICogYi54fTsKK30KKworLy8gVmVjdG9yIGRpZmZlcmVuY2U6ICBhIC0g
YgorZnVuY3Rpb24gc3ViKGEsIGIpIHsKKyAgcmV0dXJuIHt4IDogYS54IC0gYi54LCB5IDogYS55
IC0gYi55LCB6IDogYS56IC0gYi56fTsKK30KKworLy8gU2NhbGUgYSB2ZWN0b3IgdiBieSB0aGUg
c2NhbGFyIHZhbHVlIHMuCitmdW5jdGlvbiBzY2FsYXJNdWx0KHMsIHYpIHsKKyAgcmV0dXJuIHt4
IDogcyAqIHYueCwgeSA6IHMgKiB2LnksIHogOiBzICogdi56fTsKK30KKworZnVuY3Rpb24gZ2V0
QXppbXV0aChhbmdsZSkgeworICAvLyBDb21wdXRlIHRoZSBhemltdXRoLiAgU2VlIGdldEF6aW11
dGhFbGV2YXRpb24gaW4gQXVkaW9QYW5uZXJOb2RlLmNwcC4KKyAgLy8KKyAgLy8gU2hvdWxkIHdl
IHJlbW92ZSB0aGlzIGNvbXBsaWNhdGVkIGNvbXB1dGF0aW9uPyAgVGhlIGRlZmF1bHQKKyAgLy8g
dmFsdWVzIGZvciBldmVyeXRoaW5nIGFsbG93IG1vc3Qgb2YgdGhpcyB0byBiZSByZW1vdmVkLCBi
dXQgd2UKKyAgLy8gaW5jbHVkZSB0aGlzIGp1c3QgdG8gYmUgc3VyZSB3ZSBjb21wdXRlIHRoZSBh
emltdXRoIGNvcnJlY3RseS4KKyAgdmFyIGxpc3RlbmVyUG9zaXRpb24gPSB7eCA6IDAsIHkgOiAw
LCB6IDogMH07CisgIHZhciBzb3VyY2VMaXN0ZW5lciA9IHN1Yih7eCA6IE1hdGguY29zKGFuZ2xl
KSwgeSA6IDAsIHogOiBNYXRoLnNpbihhbmdsZSl9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdGVuZXJQb3NpdGlvbik7CisgIHZhciBsaXN0ZW5lckZyb250ID0ge3ggOiAwLCB5IDog
MCwgeiA6IC0xfTsKKyAgdmFyIGxpc3RlbmVyVXAgPSB7eCA6IDAsIHkgOiAxLCB6IDogMH07Cisg
IHZhciBsaXN0ZW5lclJpZ2h0ID0gY3Jvc3MobGlzdGVuZXJGcm9udCwgbGlzdGVuZXJVcCk7Cisg
IGxpc3RlbmVyUmlnaHQgPSBub3JtYWxpemUobGlzdGVuZXJSaWdodCk7CisgIHZhciBsaXN0ZW5l
ckZyb250Tm9ybSA9IG5vcm1hbGl6ZShsaXN0ZW5lckZyb250KTsKKyAgdmFyIHVwID0gY3Jvc3Mo
bGlzdGVuZXJSaWdodCwgbGlzdGVuZXJGcm9udE5vcm0pOworICB2YXIgdXBQcm9qZWN0aW9uID0g
ZG90KHNvdXJjZUxpc3RlbmVyLCB1cCk7CisgIHZhciBwcm9qZWN0ZWRTb3VyY2UgPSBub3JtYWxp
emUoc3ViKHNvdXJjZUxpc3RlbmVyLCBzY2FsYXJNdWx0KHVwUHJvamVjdGlvbiwgdXApKSk7Cisg
IAorICB2YXIgYXppbXV0aCA9IDE4MCAqIE1hdGguYWNvcyhkb3QocHJvamVjdGVkU291cmNlLCBs
aXN0ZW5lclJpZ2h0KSkgLyBNYXRoLlBJOworICB2YXIgZnJvbnRCYWNrID0gZG90KHByb2plY3Rl
ZFNvdXJjZSwgbGlzdGVuZXJGcm9udE5vcm0pOworCisgIGlmIChmcm9udEJhY2sgPCAwKSB7Cisg
ICAgYXppbXV0aCA9IDM2MCAtIGF6aW11dGg7CisgIH0KKyAgaWYgKChhemltdXRoID49IDApICYm
IChhemltdXRoIDw9IDI3MCkpIHsKKyAgICBhemltdXRoID0gOTAgLSBhemltdXRoOworICB9IGVs
c2UgeworICAgIGF6aW11dGggPSA0NTAgLSBhemltdXRoOworICB9CisgIHJldHVybiBhemltdXRo
OworfQorCisvLyBUaGUgZ2FpbiBjYXVzZWQgYnkgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2Rl
bAorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oYW5nbGUpIHsKKyAgdmFyIGF6aW11dGggPSBnZXRB
emltdXRoKGFuZ2xlKTsKKworICBpZiAoYXppbXV0aCA8IC05MCkgeworICAgIGF6aW11dGggPSAt
MTgwIC0gYXppbXV0aDsKKyAgfSBlbHNlIGlmIChhemltdXRoID4gOTApIHsKKyAgICBhemltdXRo
ID0gMTgwIC0gYXppbXV0aDsKKyAgfQorCisgIHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApLzE4MDsKKworICB2YXIgZ2FpbkwgPSBNYXRoLmNvcygwLjUgKiBNYXRoLlBJICogcGFuUG9z
aXRpb24pOworICB2YXIgZ2FpblIgPSBNYXRoLnNpbigwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRp
b24pOworCisgIHJldHVybiB7IGxlZnQgOiBnYWluTCwgcmlnaHQgOiBnYWluUiB9OworfQorCitm
dW5jdGlvbiBjaGVja1Jlc3VsdChtb2RlbCwgdGhyZXNob2xkLCBkZWJ1ZykgeworICByZXR1cm4g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVm
ZmVyOworICAgIHJlbmRlcmVkTGVmdCA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxEYXRhKDAp
OworICAgIHJlbmRlcmVkUmlnaHQgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTsK
KworICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAvLyBOdW1iZXIgb2YgaW1wdWxzZXMgZm91
bmQgaW4gdGhlIHJlbmRlcmVkIHJlc3VsdC4KKyAgICB2YXIgaW1wdWxzZUNvdW50ID0gMDsKKyAg
ICAvLyBNYXggKHJlbGF0aXZlKSBlcnJvciBhbmQgdGhlIGluZGV4IG9mIHRoZSBtYXhpbWEgZm9y
IHRoZSBsZWZ0CisgICAgLy8gYW5kIHJpZ2h0IGNoYW5uZWxzLgorICAgIHZhciBtYXhFcnJvckwg
PSAwOworICAgIHZhciBtYXhFcnJvckluZGV4TCA9IDA7CisgICAgdmFyIG1heEVycm9yUiA9IDA7
CisgICAgdmFyIG1heEVycm9ySW5kZXhSID0gMDsKKyAgICAvLyBOdW1iZXIgb2YgaW1wdWxzZXMg
dGhhdCBkb24ndCBtYXRjaCBvdXIgZXhwZWN0ZWQgbG9jYXRpb25zLgorICAgIC8vIChGb3IgZGVi
dWdnaW5nKS4KKyAgICB2YXIgdGltZUNvdW50ID0gMDsKKyAgICAvLyBMb2NhdGlvbnMgb2Ygd2hl
cmUgdGhlIGltcHVsc2VzIGFyZW4ndCBhdCB0aGUgZXhwZWN0ZWQgbG9jYXRpb25zLgorICAgIHZh
ciB0aW1lRXJyb3JzID0gbmV3IEFycmF5KCk7CisKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHJl
bmRlcmVkTGVmdC5sZW5ndGg7ICsraykgeworICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGxl
ZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIHN0YXJ0IGF0IHRoZSBzYW1lIGluc3RhbmNlLgorICAgICAg
aWYgKHJlbmRlcmVkTGVmdFtrXSAhPSAwKSB7CisgICAgICAgIHZhciBkRnVuY3Rpb24gPSBkaXN0
YW5jZU1vZGVsRnVuY3Rpb25bcGFubmVyW2ltcHVsc2VDb3VudF0uZGlzdGFuY2VNb2RlbF07Cisg
ICAgICAgIHZhciBkR2FpbiA9IGRGdW5jdGlvbihwYW5uZXJbaW1wdWxzZUNvdW50XSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguY29zKHBvc2l0aW9uW2ltcHVsc2VDb3VudF0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hdGguc2luKHBvc2l0aW9uW2ltcHVsc2VDb3VudF0pKTsKKworICAgICAgICAv
LyBUaGUgZXhwZWN0ZWQgZ2FpbiBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLgorICAg
ICAgICB2YXIgZXhwZWN0ZWRMID0gZEdhaW4gKiBlcXVhbFBvd2VyR2Fpbihwb3NpdGlvbltpbXB1
bHNlQ291bnRdKS5sZWZ0OworICAgICAgICB2YXIgZXhwZWN0ZWRSID0gZEdhaW4gKiBlcXVhbFBv
d2VyR2Fpbihwb3NpdGlvbltpbXB1bHNlQ291bnRdKS5yaWdodDsKKworICAgICAgICAvLyBSZWxh
dGl2ZSBlcnJvciBpbiB0aGUgZ2Fpbi4KKyAgICAgICAgdmFyIGVycm9yTCA9IE1hdGguYWJzKHJl
bmRlcmVkTGVmdFtrXSAtIGV4cGVjdGVkTCkvTWF0aC5hYnMoZXhwZWN0ZWRMKTsKKyAgICAgICAg
dmFyIGVycm9yUiA9IE1hdGguYWJzKHJlbmRlcmVkUmlnaHRba10gLSBleHBlY3RlZFIpL01hdGgu
YWJzKGV4cGVjdGVkUik7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgIGNvbnNvbGUu
bG9nKCJMZWZ0OiAgIiArIGsgKyAiOiAiICsgcmVuZGVyZWRMZWZ0W2tdICsgIiAoZXhwZWN0ZWQg
IiArIGV4cGVjdGVkTCArICIsIHJlbCA9ICIsIGVycm9yTCArICIpIik7CisgICAgICAgICAgY29u
c29sZS5sb2coIlJpZ2h0OiAiICsgayArICI6ICIgKyByZW5kZXJlZFJpZ2h0W2tdICsgIiAoZXhw
ZWN0ZWQgIiArIGV4cGVjdGVkUiArICIsIHJlbCA9ICIsIGVycm9yUiArICIpIik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKE1hdGguYWJzKGVycm9yTCkgPiBtYXhFcnJvckwpIHsKKyAgICAgICAg
ICBtYXhFcnJvckwgPSBNYXRoLmFicyhlcnJvckwpOworICAgICAgICAgIG1heEVycm9ySW5kZXhM
ID0gaW1wdWxzZUNvdW50OworICAgICAgICB9CisgICAgICAgIGlmIChNYXRoLmFicyhlcnJvclIp
ID4gbWF4RXJyb3JSKSB7CisgICAgICAgICAgbWF4RXJyb3JSID0gTWF0aC5hYnMoZXJyb3JSKTsK
KyAgICAgICAgICBtYXhFcnJvckluZGV4UiA9IGltcHVsc2VDb3VudDsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcuICBLZWVwIHRyYWNrIG9mIHRoZSBpbXB1bHNlcyB0aGF0
IGRpZG4ndCBzaG93CisgICAgICAgIC8vIHVwIHdoZXJlIHdlIGV4cGVjdGVkIHRoZW0gdG8gYmUu
CisgICAgICAgIGlmIChrICE9IE1hdGgucm91bmQoc2FtcGxlUmF0ZSAqIHRpbWVbaW1wdWxzZUNv
dW50XSkpIHsKKyAgICAgICAgICB0aW1lRXJyb3JzW3RpbWVDb3VudF0gPSB7IGFjdHVhbCA6IGss
IGV4cGVjdGVkIDogTWF0aC5yb3VuZChzYW1wbGVSYXRlICogdGltZVtpbXB1bHNlQ291bnRdKX07
CisgICAgICAgICAgKyt0aW1lQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgKytpbXB1bHNlQ291
bnQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3Jl
YXRlKSB7CisgICAgICB0ZXN0UGFzc2VkKCJOdW1iZXIgb2Ygbm9kZXMgaXMgY29ycmVjdC4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgiTnVtYmVyIG9mIG5vZGVzIGlzIGluY29y
cmVjdC4gIChGb3VuZCAiICsgaW1wdWxzZUNvdW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5vZGVz
VG9DcmVhdGUgKyAiKSIpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIGlm
IChtYXhFcnJvckwgPD0gdGhyZXNob2xkKSB7CisgICAgICB0ZXN0UGFzc2VkKCJMZWZ0IGNoYW5u
ZWwgcGFubmVyIHZhbHVlcyBhcmUgY29ycmVjdC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVz
dEZhaWxlZCgiTGVmdCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJlIGluY29ycmVjdC4gIE1heCBy
ZWwgZXJyb3IgPSAiICsgbWF4RXJyb3JMICsgIiBhdCB0aW1lICIgKyBtYXhFcnJvckluZGV4TCAv
IHNhbXBsZVJhdGUgKyAiICh0aHJlc2hvbGQgPSAiICsgdGhyZXNob2xkICsgIikiKTsKKyAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1heEVycm9yUiA8PSB0aHJlc2hvbGQp
IHsKKyAgICAgIHRlc3RQYXNzZWQoIlJpZ2h0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgY29y
cmVjdC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgiUmlnaHQgY2hhbm5lbCBw
YW5uZXIgdmFsdWVzIGFyZSBpbmNvcnJlY3QuICBNYXggcmVsIGVycm9yID0gIiArIG1heEVycm9y
UiArICIgYXQgdGltZSAiICsgbWF4RXJyb3JJbmRleFIgLyBzYW1wbGVSYXRlICsgIiAodGhyZXNo
b2xkID0gIiArIHRocmVzaG9sZCArICIpIik7CisgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
fQorCisgICAgLy8gZm9yIGRlYnVnZ2luZy4gIEl0IHNlZW1zIHRoYXQgc29tZSBpbXB1bHNlcyBk
b24ndCBzaG93IHVwIGF0CisgICAgLy8gZXhhY3RseSB0aGUgZXhwZWN0ZWQgcmVuZGVyZWQgbG9j
YXRpb24uICBMb2cgdGhlc2UgdG8gdGhlCisgICAgLy8gY29uc29sZSBpZiBkZWJ1Z2dpbmcgaXMg
dHJ1ZS4KKyAgICAvLworICAgIC8vIEZJWE1FOiBGaWxlIGEgYnVnIHJlcG9ydCBvbiB0aGlzLgor
ICAgIGlmIChkZWJ1ZyAmJiB0aW1lRXJyb3JzLmxlbmd0aCA+IDApIHsKKyAgICAgIGNvbnNvbGUu
bG9nKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3JzIGZvdW5kIik7CisgICAgICBm
b3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVuZ3RoOyArK2spIHsKKyAgICAgICAgY29u
c29sZS5sb2coIlNhbXBsZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBlY3Rl
ZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgIHRlc3RQYXNzZWQoIkVxdWFsUG93ZXIgcGFubmVyIHRlc3QgcGFz
c2VkIGZvciBwYW5uZXIgbW9kZWwgIiArIG1vZGVsKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVz
dEZhaWxlZCgiRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBmYWlsZWQgZm9yIHBhbm5lciBtb2RlbCAi
ICsgbW9kZWwpOworICAgIH0KKworICAgIGZpbmlzaEpTVGVzdCgpOworICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122318</attachid>
            <date>2012-01-12 15:13:15 -0800</date>
            <delta_ts>2012-01-12 16:15:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120112151314.patch</filename>
            <type>text/plain</type>
            <size>14484</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uMWM3YjRjMjU4MjFhOTdmM2Q4ZDU3OTBhOTU0MzBm
ZTExMDQxMGE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExheW91dCB0ZXN0IGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2Vy
UGFubmVyOjpwYW4pOiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0wOSAgUm9iIEJ1
aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFVwc3RyZWFtIGNoYW5nZSB0byBkaXNhYmxl
IGlucHV0W2NvbG9yXSBjc3MgcnVsZXMgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAppbmRleCAxM2Ex
OWQ2Y2Q0NDUxZDdiMmY5ODgyYjUwYzRlZDllMDAzMjBiM2I2Li4wZGE3NjIyMzY0MDkxNzJhNTg0
NTZmZjBiNmRkNzJmZTU4YmM3ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcApAQCAtODQsOCArODQsOCBAQCB2b2lkIEVxdWFs
UG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIC8qZWxldmF0aW9uKi8sIEF1
ZGlvQnVzKiBpbnB1dAogICAgIC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0
aCBhemltdXRoIGdvaW5nIGZyb20gLTkwIC0+ICs5MCBkZWdyZWVzLgogICAgIGRvdWJsZSBkZXNp
cmVkUGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsKIAotICAgIGRvdWJsZSBkZXNp
cmVkR2FpbkwgPSAwLjUgKiBjb3MocGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pICsgMC41
OwotICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzcXJ0KDEuMCAtIGRlc2lyZWRHYWluTCpkZXNp
cmVkR2FpbkwpOworICAgIGRvdWJsZSBkZXNpcmVkR2FpbkwgPSBjb3MoMC41ICogcGlEb3VibGUg
KiBkZXNpcmVkUGFuUG9zaXRpb24pOworICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzaW4oMC41
ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwogCiAgICAgLy8gRG9uJ3QgZGUtemlw
cGVyIG9uIGZpcnN0IHJlbmRlciBjYWxsLgogICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggNmVjZWJlYWFlMzFj
YTdkYWMzODU3OWYxZDVhMDM1ZGUzNzIyY2YxMS4uNDBiZTcxNzAyODY4MWU3ODg3YTk0OGQ4ZGJk
ZWNkM2UyZDliNDI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKQEAgLTUzLDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAg
ICAgfTsKIAorICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxl
IGFuZCBtdXN0IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNz
LgorICAgIGVudW0geworICAgICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZF
UlNFX0RJU1RBTkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAg
IH07CisgICAgCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRi
MDkzZDdiNTAzYWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJh
OWRhNzQyMzNiZTE1YjlkNzQyNTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1Bhbm5lck5vZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgU09VTkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZh
dWx0IG1vZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgcGFubmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1
ZSBnZW5lcmF0aW9uIHN1cHBvcnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0Yzg1OTVhY2Y2NGU3OGEwNzU2Nzk5
MjI0ZWE4ODM1YmM5MTYwN2IzLi5iNjUxYzhiOWZhMGIwMjE2YzE4ZWUxMWNjN2E1YzBjMTFiY2Yx
NmRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMTIgIFJheW1vbmQgVG95ICAgPHJ0
b3lAY2hyb21pdW0ub3JnPgorICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBpbmNvcnJlY3RseSBj
b21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanM6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzOgorICAgICAgICAoY3Jl
YXRlSW1wdWxzZUJ1ZmZlcik6IE5ldyBjb21tb24gdXRpbGl0eSBmdW5jdGlvbi4KKyAgICAgICAg
CiAyMDEyLTAxLTA5ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB1cGRhdGUgZm9yIHRlc3RfZXhwZWN0YXRpb25zLnR4
dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MjEyNzkyMzdiMmJiZDNjNzA4NDA5Mzc2MmRlY2Y4MDg4OTc0
NTAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFs
cG93ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgZXF1YWwtcG93ZXIgcGFu
bmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgcGFubmVy
IG5vZGVzLgorUEFTUyBMZWZ0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BB
U1MgUmlnaHQgY2hhbm5lbCBwYW5uZXIgdmFsdWVzIGFyZSBjb3JyZWN0LgorUEFTUyBFcXVhbFBv
d2VyIHBhbm5lciB0ZXN0IHBhc3NlZCBmb3IgcGFubmVyIG1vZGVsIDAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2ZkZmYzMDEyZjRlNTZhMjEx
NmMyOTg2ODk2MWI1YzAzNjQwN2JjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbApAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxo
dG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+
CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJU
ZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBtb2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAg
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJM
ZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5v
ZGUgc28gd2UgY2FuIGdldCB0aGUgcGFubmluZyBtb2RlbCB2YWx1ZS4KKyAgICAgICAgICB2YXIg
dGVtcFBhbm5lciA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisKKyAgICAgICAgICBjcmVhdGVU
ZXN0QW5kUnVuKGNvbnRleHQsIHRlbXBQYW5uZXIuRVFVQUxQT1dFUiwgbm9kZXNUb0NyZWF0ZSk7
CisgICAgICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisKKyAgICA8L3NjcmlwdD4KKworICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5q
cyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCmluZGV4
IGZjNjQzM2IxMTlkZDg4MzdkNzFiZjZlNjJlZTIzNmNjZjZiMGVkYTEuLmY5MGJmOTNhYTJiMGY2
YTQ5Y2Y2Mzg5NWEzODUzMWYxYWY3N2E0MTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0xMDUsMyArMTA1LDE3IEBAIGZ1bmN0aW9u
IGZpbmlzaEF1ZGlvVGVzdChldmVudCkgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEF1
ZGlvRGF0YShhdWRpb0RhdGEpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKIH0KKworLy8gQ3JlYXRlIGFuIGltcHVsc2UgaW4gYSBidWZmZXIgb2YgbGVuZ3RoIHNhbXBs
ZUZyYW1lTGVuZ3RoCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBs
ZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZm
ZXIoMSwgMTAwMCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVy
Lmxlbmd0aDsKKyAgICB2YXIgZGF0YUwgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsK
KworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7CisgICAgICAgIGRhdGFMW2tdID0g
MDsKKyAgICB9CisgICAgZGF0YUxbMF0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2Rl
bC10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2Rl
bC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMDlmMjE5MjE3YzEyZGZjMGIyNWM3NDk1OWI1YzQ1
MzA3Yzg2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxOTkgQEAKK3ZhciBzYW1wbGVS
YXRlID0gNDQxMDAuMDsKKworLy8gTGVuZ3RoIG9mIHRoZSBpbXB1bHNlIHNpZ25hbC4KK3ZhciBw
dWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQoLjAwMSAqIHNhbXBsZVJhdGUpOworCisvLyBI
b3cgbWFueSBwYW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdAordmFyIG5vZGVzVG9D
cmVhdGUgPSAxMDA7CisKKy8vIFRpbWUgc3RlcCB3aGVuIGVhY2ggcGFubmVyIG5vZGUgc3RhcnRz
LgordmFyIHRpbWVTdGVwID0gMC4wMDE7CisKKy8vIEJlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5v
dWdoIGZvciBhbGwgb2Ygb3VyIG5vZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1l
U3RlcCAqIChub2Rlc1RvQ3JlYXRlICsgMSk7CisKKy8vIFRoZXNlIGFyZSBnbG9iYWwgbW9zdGx5
IGZvciBkZWJ1Z2dpbmcuCit2YXIgY29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNv
dXJjZTsKK3ZhciBwYW5uZXI7Cit2YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAordmFy
IHJlbmRlcmVkQnVmZmVyOwordmFyIHJlbmRlcmVkTGVmdDsKK3ZhciByZW5kZXJlZFJpZ2h0Owor
CitmdW5jdGlvbiBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgdmFyIGRpc3Rh
bmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgIGRpc3RhbmNlID0gTWF0
aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZhciByb2xsb2ZmID0gcGFu
bmVyLnJvbGxvZmZGYWN0b3I7CisgIHZhciBnYWluID0gKDEgLSByb2xsb2ZmICogKGRpc3RhbmNl
IC0gcGFubmVyLnJlZkRpc3RhbmNlKSAvIChwYW5uZXIubWF4RGlzdGFuY2UgLSBwYW5uZXIucmVm
RGlzdGFuY2UpKTsKKworICByZXR1cm4gZ2FpbjsKK30KKworZnVuY3Rpb24gY3JlYXRlR3JhcGgo
Y29udGV4dCwgbm9kZUNvdW50KSB7CisgIGJ1ZmZlclNvdXJjZSA9IG5ldyBBcnJheShub2RlQ291
bnQpOworICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgcG9zaXRpb24gPSBuZXcg
QXJyYXkobm9kZUNvdW50KTsKKyAgdGltZSA9IG5ldyBBcnJheShub2RlQ291bnQpOworICB2YXIg
YW5nbGVTdGVwID0gTWF0aC5QSSAvIG5vZGVDb3VudDsKKworICBpbXB1bHNlID0gY3JlYXRlSW1w
dWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgZm9yICh2YXIgayA9
IDA7IGsgPCBub2RlQ291bnQ7ICsraykgeworICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRleHQu
Y3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgYnVmZmVyU291cmNlW2tdLmJ1ZmZlciA9IGltcHVs
c2U7CisKKyAgICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgIHBhbm5l
cltrXS5wYW5uaW5nTW9kZWwgPSBwYW5uZXIuRVFVQUxQT1dFUjsKKyAgICBwYW5uZXJba10uZGlz
dGFuY2VNb2RlbCA9IHBhbm5lci5MSU5FQVJfRElTVEFOQ0U7CisKKyAgICAvLyBUaGUgcG9zaXRp
b24gaXMgdGhlIGFuZ2xlIHVuaWZvcm1seSBzcGFjZWQgYmV0d2VlbiAwIGFuZCAxODAKKyAgICAv
LyBkZWcsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIDAgYmVjYXVzZSB0aGUgZXF1YWwgcG93ZXIgcGFu
bmVyIHdpbGwKKyAgICAvLyBwcm9kdWNlIDAgd2hpY2ggbWVzc2VzIHVwIG91ciBjaGVjayByb3V0
aW5lLgorICAgIHZhciBhbmdsZSA9IGFuZ2xlU3RlcCAqIChrICsgMS8yKTsKKyAgICBwb3NpdGlv
bltrXSA9IHthbmdsZSA6IGFuZ2xlLCB4IDogTWF0aC5jb3MoYW5nbGUpLCB6IDogTWF0aC5zaW4o
YW5nbGUpfTsKKyAgICBwYW5uZXJba10uc2V0UG9zaXRpb24ocG9zaXRpb25ba10ueCwgMCwgcG9z
aXRpb25ba10ueik7CisKKyAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5uZXJba10pOwor
ICAgIHBhbm5lcltrXS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgLy8gU3Rh
cnQgdGhlIHNvdXJjZQorICAgIHRpbWVba10gPSBrICogdGltZVN0ZXA7CisgICAgYnVmZmVyU291
cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5k
UnVuKGNvbnRleHQsIHBhbm5lck1vZGVsLCBub2RlQ291bnQpIHsKKyAgY3JlYXRlR3JhcGgoY29u
dGV4dCwgbm9kZUNvdW50KTsKKworICAvLyBUaGUgdGhlIG1heCByZWxhdGl2ZSBlcnJvciB3ZSBh
bGxvdyBiZXR3ZWVuIHRoZSByZW5kZXJlZCBpbXB1bHNlCisgIC8vIGFuZCB0aGUgZXhwZWN0ZWQg
dmFsdWUuICBUaGlzIHZhbHVlIGlzIGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgIC8vIFNl
dCB0byAwIHRvIG1ha2UgdGhlIHRlc3QgZmFpbCB0byBzZWUgd2hhdCB0aGUgYWN0dWFsIHJlbGF0
aXZlCisgIC8vIGVycm9yIGlzLgorICB2YXIgbWF4UmVsYXRpdmVFcnJvciA9IC4wMDAxOTsKKyAg
CisgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrUmVzdWx0KHBhbm5lck1vZGVsLCBtYXhSZWxh
dGl2ZUVycm9yKTsKKyAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCisvLyBNYXAgb3Vy
IHBvc2l0aW9uIGFuZ2xlIHRvIHRoZSBhemltdXRoIGFuZ2xlIChpbiBkZWdyZWVzKS4KKy8vCisv
LyBBbiBhbmdsZSBvZiAwIGNvcnJlc3BvbmRzIHRvIGFuIGF6aW11dGggb2YgOTAgZGVnLiAgQW4g
YW5nbGUgb2YgcGkKKy8vIGlzIC05MCBkZWcuCitmdW5jdGlvbiBhbmdsZVRvQXppbXV0aChhbmds
ZSkgeworICByZXR1cm4gOTAgLSBhbmdsZSAqIDE4MCAvIE1hdGguUEk7Cit9CisKKy8vIFRoZSBn
YWluIGNhdXNlZCBieSB0aGUgRVFVQUxQT1dFUiBwYW5uaW5nIG1vZGVsCitmdW5jdGlvbiBlcXVh
bFBvd2VyR2FpbihhbmdsZSkgeworICB2YXIgYXppbXV0aCA9IGFuZ2xlVG9BemltdXRoKGFuZ2xl
KTsKKworICB2YXIgcGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKS8xODA7CisKKyAgdmFyIGdh
aW5MID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgdmFyIGdhaW5S
ID0gTWF0aC5zaW4oMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKworICByZXR1cm4geyBs
ZWZ0IDogZ2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKK30KKworZnVuY3Rpb24gY2hlY2tSZXN1bHQo
bW9kZWwsIG1heEFsbG93ZWRSZWxhdGl2ZUVycm9yKSB7CisgIHJldHVybiBmdW5jdGlvbihldmVu
dCkgeworICAgIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CisgICAgcmVu
ZGVyZWRMZWZ0ID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgcmVuZGVy
ZWRSaWdodCA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworCisgICAgdmFyIHN1
Y2Nlc3MgPSB0cnVlOworICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyBmb3VuZCBpbiB0aGUgcmVu
ZGVyZWQgcmVzdWx0LgorICAgIHZhciBpbXB1bHNlQ291bnQgPSAwOworICAgIC8vIE1heCAocmVs
YXRpdmUpIGVycm9yIGFuZCB0aGUgaW5kZXggb2YgdGhlIG1heGltYSBmb3IgdGhlIGxlZnQKKyAg
ICAvLyBhbmQgcmlnaHQgY2hhbm5lbHMuCisgICAgdmFyIG1heEVycm9yTCA9IDA7CisgICAgdmFy
IG1heEVycm9ySW5kZXhMID0gMDsKKyAgICB2YXIgbWF4RXJyb3JSID0gMDsKKyAgICB2YXIgbWF4
RXJyb3JJbmRleFIgPSAwOworICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB0aGF0IGRvbid0IG1h
dGNoIG91ciBleHBlY3RlZCBsb2NhdGlvbnMuCisgICAgdmFyIHRpbWVDb3VudCA9IDA7CisgICAg
Ly8gTG9jYXRpb25zIG9mIHdoZXJlIHRoZSBpbXB1bHNlcyBhcmVuJ3QgYXQgdGhlIGV4cGVjdGVk
IGxvY2F0aW9ucy4KKyAgICB2YXIgdGltZUVycm9ycyA9IG5ldyBBcnJheSgpOworCisgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZExlZnQubGVuZ3RoOyArK2spIHsKKyAgICAgIC8vIFdl
IGFzc3VtZSB0aGF0IHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBzdGFydCBhdCB0aGUgc2Ft
ZSBpbnN0YW5jZS4KKyAgICAgIGlmIChyZW5kZXJlZExlZnRba10gIT0gMCkgeworICAgICAgICB2
YXIgZGlzdGFuY2VHYWluID0gbGluZWFyRGlzdGFuY2UocGFubmVyW2ltcHVsc2VDb3VudF0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbltpbXB1bHNl
Q291bnRdLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25baW1wdWxz
ZUNvdW50XS56KTsKKworICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgZ2FpbiBmb3IgdGhlIGxlZnQg
YW5kIHJpZ2h0IGNoYW5uZWxzLgorICAgICAgICB2YXIgcGFubmVyR2FpbiA9IGVxdWFsUG93ZXJH
YWluKHBvc2l0aW9uW2ltcHVsc2VDb3VudF0uYW5nbGUpOworICAgICAgICB2YXIgZXhwZWN0ZWRM
ID0gZGlzdGFuY2VHYWluICogcGFubmVyR2Fpbi5sZWZ0OworICAgICAgICB2YXIgZXhwZWN0ZWRS
ID0gZGlzdGFuY2VHYWluICogcGFubmVyR2Fpbi5yaWdodDsKKworICAgICAgICAvLyBSZWxhdGl2
ZSBlcnJvciBpbiB0aGUgZ2Fpbi4KKyAgICAgICAgdmFyIGVycm9yTCA9IE1hdGguYWJzKHJlbmRl
cmVkTGVmdFtrXSAtIGV4cGVjdGVkTCkvTWF0aC5hYnMoZXhwZWN0ZWRMKTsKKyAgICAgICAgdmFy
IGVycm9yUiA9IE1hdGguYWJzKHJlbmRlcmVkUmlnaHRba10gLSBleHBlY3RlZFIpL01hdGguYWJz
KGV4cGVjdGVkUik7CisKKyAgICAgICAgaWYgKE1hdGguYWJzKGVycm9yTCkgPiBtYXhFcnJvckwp
IHsKKyAgICAgICAgICBtYXhFcnJvckwgPSBNYXRoLmFicyhlcnJvckwpOworICAgICAgICAgIG1h
eEVycm9ySW5kZXhMID0gaW1wdWxzZUNvdW50OworICAgICAgICB9CisgICAgICAgIGlmIChNYXRo
LmFicyhlcnJvclIpID4gbWF4RXJyb3JSKSB7CisgICAgICAgICAgbWF4RXJyb3JSID0gTWF0aC5h
YnMoZXJyb3JSKTsKKyAgICAgICAgICBtYXhFcnJvckluZGV4UiA9IGltcHVsc2VDb3VudDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGltcHVsc2VzIHRoYXQgZGlk
bid0IHNob3cgdXAgd2hlcmUgd2UKKyAgICAgICAgLy8gZXhwZWN0ZWQgdGhlbSB0byBiZS4KKyAg
ICAgICAgaWYgKGsgIT0gTWF0aC5yb3VuZChzYW1wbGVSYXRlICogdGltZVtpbXB1bHNlQ291bnRd
KSkgeworICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUNvdW50XSA9IHsgYWN0dWFsIDogaywgZXhw
ZWN0ZWQgOiBNYXRoLnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVsc2VDb3VudF0pfTsKKyAg
ICAgICAgICArK3RpbWVDb3VudDsKKyAgICAgICAgfQorICAgICAgICArK2ltcHVsc2VDb3VudDsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW1wdWxzZUNvdW50ID09IG5vZGVzVG9DcmVhdGUp
IHsKKyAgICAgIHRlc3RQYXNzZWQoIk51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVzIHRoZSBudW1i
ZXIgb2YgcGFubmVyIG5vZGVzLiIpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFpbGVkKCJO
dW1iZXIgb2YgaW1wdWxzZXMgaXMgaW5jb3JyZWN0LiAgKEZvdW5kICIgKyBpbXB1bHNlQ291bnQg
KyAiIGJ1dCBleHBlY3RlZCAiICsgbm9kZXNUb0NyZWF0ZSArICIpIik7CisgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1heEVycm9yTCA8PSBtYXhBbGxvd2VkUmVsYXRp
dmVFcnJvcikgeworICAgICAgdGVzdFBhc3NlZCgiTGVmdCBjaGFubmVsIHBhbm5lciB2YWx1ZXMg
YXJlIGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIkxlZnQgY2hh
bm5lbCBwYW5uZXIgdmFsdWVzIGFyZSBpbmNvcnJlY3QuICBNYXggcmVsIGVycm9yID0gIiArIG1h
eEVycm9yTCArICIgYXQgdGltZSAiICsgbWF4RXJyb3JJbmRleEwgLyBzYW1wbGVSYXRlICsgIiAo
dGhyZXNob2xkID0gIiArIG1heEFsbG93ZWRSZWxhdGl2ZUVycm9yICsgIikiKTsKKyAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKG1heEVycm9yUiA8PSBtYXhBbGxv
d2VkUmVsYXRpdmVFcnJvcikgeworICAgICAgdGVzdFBhc3NlZCgiUmlnaHQgY2hhbm5lbCBwYW5u
ZXIgdmFsdWVzIGFyZSBjb3JyZWN0LiIpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFpbGVk
KCJSaWdodCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJlIGluY29ycmVjdC4gIE1heCByZWwgZXJy
b3IgPSAiICsgbWF4RXJyb3JSICsgIiBhdCB0aW1lICIgKyBtYXhFcnJvckluZGV4UiAvIHNhbXBs
ZVJhdGUgKyAiICh0aHJlc2hvbGQgPSAiICsgbWF4QWxsb3dlZFJlbGF0aXZlRXJyb3IgKyAiKSIp
OworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFNlZSBidWcgNzU5OTYg
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk5NikuCisgICAgLy8g
V2hlbiB0aGF0IGJ1ZyBpcyBmaXhlZCwgdW5jb21tZW50IHRoZSBpZiBzdGF0ZW1lbnQgYmVsb3cg
dG8KKyAgICAvLyBlbmFibGUgdGhpcyBjaGVjay4KKworLy8gICAgaWYgKHRpbWVFcnJvcnMubGVu
Z3RoID4gMCkgeworLy8gICAgICBzdWNjZXNzID0gZmFsc2U7CisvLyAgICAgIHRlc3RGYWlsZWQo
dGltZUVycm9ycy5sZW5ndGggKyAiIHRpbWluZyBlcnJvcnMgZm91bmQiKTsKKy8vICAgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCB0aW1lRXJyb3JzLmxlbmd0aDsgKytrKSB7CisvLyAgICAgICAgdGVz
dEZhaWxlZCgiSW1wdWxzZSBhdCBzYW1wbGUgIiArIHRpbWVFcnJvcnNba10uYWN0dWFsICsgIiBi
dXQgZXhwZWN0ZWQgIiArIHRpbWVFcnJvcnNba10uZXhwZWN0ZWQpOworLy8gICAgICB9CisvLyAg
ICB9CisKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgdGVzdFBhc3NlZCgiRXF1YWxQb3dlciBw
YW5uZXIgdGVzdCBwYXNzZWQgZm9yIHBhbm5lciBtb2RlbCAiICsgbW9kZWwpOworICAgIH0gZWxz
ZSB7CisgICAgICB0ZXN0RmFpbGVkKCJFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IGZhaWxlZCBmb3Ig
cGFubmVyIG1vZGVsICIgKyBtb2RlbCk7CisgICAgfQorCisgICAgZmluaXNoSlNUZXN0KCk7Cisg
IH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122332</attachid>
            <date>2012-01-12 16:11:16 -0800</date>
            <delta_ts>2012-01-12 16:20:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120112161115.patch</filename>
            <type>text/plain</type>
            <size>12417</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uMWM3YjRjMjU4MjFhOTdmM2Q4ZDU3OTBhOTU0MzBm
ZTExMDQxMGE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExheW91dCB0ZXN0IGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2Vy
UGFubmVyOjpwYW4pOiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0wOSAgUm9iIEJ1
aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFVwc3RyZWFtIGNoYW5nZSB0byBkaXNhYmxl
IGlucHV0W2NvbG9yXSBjc3MgcnVsZXMgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAppbmRleCAxM2Ex
OWQ2Y2Q0NDUxZDdiMmY5ODgyYjUwYzRlZDllMDAzMjBiM2I2Li4wZGE3NjIyMzY0MDkxNzJhNTg0
NTZmZjBiNmRkNzJmZTU4YmM3ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcApAQCAtODQsOCArODQsOCBAQCB2b2lkIEVxdWFs
UG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIC8qZWxldmF0aW9uKi8sIEF1
ZGlvQnVzKiBpbnB1dAogICAgIC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0
aCBhemltdXRoIGdvaW5nIGZyb20gLTkwIC0+ICs5MCBkZWdyZWVzLgogICAgIGRvdWJsZSBkZXNp
cmVkUGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsKIAotICAgIGRvdWJsZSBkZXNp
cmVkR2FpbkwgPSAwLjUgKiBjb3MocGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pICsgMC41
OwotICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzcXJ0KDEuMCAtIGRlc2lyZWRHYWluTCpkZXNp
cmVkR2FpbkwpOworICAgIGRvdWJsZSBkZXNpcmVkR2FpbkwgPSBjb3MoMC41ICogcGlEb3VibGUg
KiBkZXNpcmVkUGFuUG9zaXRpb24pOworICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzaW4oMC41
ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwogCiAgICAgLy8gRG9uJ3QgZGUtemlw
cGVyIG9uIGZpcnN0IHJlbmRlciBjYWxsLgogICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA0Yzg1OTVhY2Y2NGU3OGEwNzU2Nzk5MjI0ZWE4ODM1YmM5MTYwN2IzLi5iNjUxYzhiOWZh
MGIwMjE2YzE4ZWUxMWNjN2E1YzBjMTFiY2YxNmRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDEtMTIgIFJheW1vbmQgVG95ICAgPHJ0b3lAY2hyb21pdW0ub3JnPgorICAgICAgICBFUVVB
TFBPV0VSIHBhbm5lciBpbmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93
ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1v
ZGVsLXRlc3RpbmcuanM6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzOgorICAgICAgICAoY3JlYXRlSW1wdWxzZUJ1ZmZlcik6IE5ldyBjb21tb24g
dXRpbGl0eSBmdW5jdGlvbi4KKyAgICAgICAgCiAyMDEyLTAxLTA5ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB1cGRh
dGUgZm9yIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjEyNzkyMzdi
MmJiZDNjNzA4NDA5Mzc2MmRlY2Y4MDg4OTc0NTAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTIgQEAKK1Rlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBt
YXRjaGVzIHRoZSBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBMZWZ0IGNoYW5uZWwgcGFu
bmVyIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgUmlnaHQgY2hhbm5lbCBwYW5uZXIgdmFsdWVz
IGFyZSBjb3JyZWN0LgorUEFTUyBFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IHBhc3NlZCBmb3IgcGFu
bmVyIG1vZGVsIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dl
ci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jYTE1MjYxYTUzNTQ4MDdkZjMwMGJkMzE0YmVlN2I3YjE4OWQyYjUzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbApA
QCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwg
NC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ii8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3Rp
bmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNj
cmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBtb2RlbCBv
ZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGlu
ZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250
ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgbm9kZXNUb0NyZWF0ZSk7CisgICAg
ICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKyAgICA8L3NjcmlwdD4KKworICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCmluZGV4IGZjNjQz
M2IxMTlkZDg4MzdkNzFiZjZlNjJlZTIzNmNjZjZiMGVkYTEuLmY5MGJmOTNhYTJiMGY2YTQ5Y2Y2
Mzg5NWEzODUzMWYxYWY3N2E0MTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291
cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0xMDUsMyArMTA1LDE3IEBAIGZ1bmN0aW9uIGZpbmlz
aEF1ZGlvVGVzdChldmVudCkgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEF1ZGlvRGF0
YShhdWRpb0RhdGEpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKIH0K
KworLy8gQ3JlYXRlIGFuIGltcHVsc2UgaW4gYSBidWZmZXIgb2YgbGVuZ3RoIHNhbXBsZUZyYW1l
TGVuZ3RoCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1l
TGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwg
MTAwMCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0
aDsKKyAgICB2YXIgZGF0YUwgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAg
IGZvciAodmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7CisgICAgICAgIGRhdGFMW2tdID0gMDsKKyAg
ICB9CisgICAgZGF0YUxbMF0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0
aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0
aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZlNzk4ZDg0MjRiOWRlMGIxN2JlNzVlZGUzYTA4ZmIzODBlNjdm
ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFu
bmVyLW1vZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxODcgQEAKK3ZhciBzYW1wbGVSYXRlID0g
NDQxMDAuMDsKKworLy8gVGltZSBzdGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCit2
YXIgdGltZVN0ZXAgPSAwLjAwMTsKKworLy8gTGVuZ3RoIG9mIHRoZSBpbXB1bHNlIHNpZ25hbC4K
K3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1wbGVSYXRl
KTsKKworLy8gSG93IG1hbnkgcGFubmVyIG5vZGVzIHRvIGNyZWF0ZSBmb3IgdGhlIHRlc3QKK3Zh
ciBub2Rlc1RvQ3JlYXRlID0gMTAwOworCisvLyBCZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3Vn
aCBmb3IgYWxsIG9mIG91ciBub2Rlcy4KK3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gdGltZVN0
ZXAgKiAobm9kZXNUb0NyZWF0ZSArIDEpOworCisvLyBUaGVzZSBhcmUgZ2xvYmFsIG1vc3RseSBm
b3IgZGVidWdnaW5nLgordmFyIGNvbnRleHQ7Cit2YXIgaW1wdWxzZTsKK3ZhciBidWZmZXJTb3Vy
Y2U7Cit2YXIgcGFubmVyOwordmFyIHBvc2l0aW9uOwordmFyIHRpbWU7CisgICAgICAKK3ZhciBy
ZW5kZXJlZEJ1ZmZlcjsKK3ZhciByZW5kZXJlZExlZnQ7Cit2YXIgcmVuZGVyZWRSaWdodDsKKwor
ZnVuY3Rpb24gY3JlYXRlR3JhcGgoY29udGV4dCwgbm9kZUNvdW50KSB7CisgICAgYnVmZmVyU291
cmNlID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgcGFubmVyID0gbmV3IEFycmF5KG5vZGVD
b3VudCk7CisgICAgcG9zaXRpb24gPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICB0aW1lID0g
bmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgdmFyIGFuZ2xlU3RlcCA9IE1hdGguUEkgLyAobm9k
ZUNvdW50ICsgMSk7ICAvLyBub2RlQ291bnQgKyAxIHNvIHdlIGRvbid0IGdvIHBhc3QgMTgwIGRl
Zy4KKworICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVu
Z3RoRnJhbWVzKTsKKworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsK
KyAgICAgICAgYnVmZmVyU291cmNlW2tdID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsK
KyAgICAgICAgYnVmZmVyU291cmNlW2tdLmJ1ZmZlciA9IGltcHVsc2U7CisKKyAgICAgICAgcGFu
bmVyW2tdID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgcGFubmVyW2tdLnBhbm5p
bmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VSOworICAgICAgICBwYW5uZXJba10uZGlzdGFuY2VN
b2RlbCA9IDA7ICAgIC8vIExpbmVhciBkaXN0YW5jZSBtb2RlbC4KKworICAgICAgICAvLyBUaGUg
cG9zaXRpb24gaXMgdGhlIGFuZ2xlIHVuaWZvcm1seSBzcGFjZWQgYmV0d2VlbiAwIGFuZCAxODAK
KyAgICAgICAgLy8gZGVnLCBidXQgd2Ugd2FudCB0byBhdm9pZCAwIGJlY2F1c2UgdGhlIGVxdWFs
IHBvd2VyIHBhbm5lciB3aWxsCisgICAgICAgIC8vIHByb2R1Y2UgMCB3aGljaCBtZXNzZXMgdXAg
b3VyIGNoZWNrIHJvdXRpbmUuCisgICAgICAgIHZhciBhbmdsZSA9IGFuZ2xlU3RlcCAqIChrICsg
MS8yKTsKKyAgICAgICAgcG9zaXRpb25ba10gPSB7YW5nbGUgOiBhbmdsZSwgeCA6IE1hdGguY29z
KGFuZ2xlKSwgeiA6IE1hdGguc2luKGFuZ2xlKX07CisgICAgICAgIHBhbm5lcltrXS5zZXRQb3Np
dGlvbihwb3NpdGlvbltrXS54LCAwLCBwb3NpdGlvbltrXS56KTsKKworICAgICAgICBidWZmZXJT
b3VyY2Vba10uY29ubmVjdChwYW5uZXJba10pOworICAgICAgICBwYW5uZXJba10uY29ubmVjdChj
b250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgICAgICAvLyBTdGFydCB0aGUgc291cmNlCisgICAg
ICAgIHRpbWVba10gPSBrICogdGltZVN0ZXA7CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5ub3Rl
T24odGltZVtrXSk7CisgICAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRl
eHQsIG5vZGVDb3VudCkgeworICAgIGNyZWF0ZUdyYXBoKGNvbnRleHQsIG5vZGVDb3VudCk7CisK
KyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdDsKKyAgICBjb250ZXh0LnN0YXJ0
UmVuZGVyaW5nKCk7Cit9CisKKy8vIE1hcCBvdXIgcG9zaXRpb24gYW5nbGUgdG8gdGhlIGF6aW11
dGggYW5nbGUgKGluIGRlZ3JlZXMpLgorLy8KKy8vIEFuIGFuZ2xlIG9mIDAgY29ycmVzcG9uZHMg
dG8gYW4gYXppbXV0aCBvZiA5MCBkZWcuICBBbiBhbmdsZSBvZiBwaQorLy8gaXMgLTkwIGRlZy4K
K2Z1bmN0aW9uIGFuZ2xlVG9BemltdXRoKGFuZ2xlKSB7CisgICAgcmV0dXJuIDkwIC0gYW5nbGUg
KiAxODAgLyBNYXRoLlBJOworfQorCisvLyBUaGUgZ2FpbiBjYXVzZWQgYnkgdGhlIEVRVUFMUE9X
RVIgcGFubmluZyBtb2RlbAorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oYW5nbGUpIHsKKyAgICB2
YXIgYXppbXV0aCA9IGFuZ2xlVG9BemltdXRoKGFuZ2xlKTsKKworICAgIHZhciBwYW5Qb3NpdGlv
biA9IChhemltdXRoICsgOTApIC8gMTgwOworCisgICAgdmFyIGdhaW5MID0gTWF0aC5jb3MoMC41
ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgICB2YXIgZ2FpblIgPSBNYXRoLnNpbigwLjUg
KiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworCisgICAgcmV0dXJuIHsgbGVmdCA6IGdhaW5MLCBy
aWdodCA6IGdhaW5SIH07Cit9CisKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KSB7CisgICAg
cmVuZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICByZW5kZXJlZExlZnQg
PSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICByZW5kZXJlZFJpZ2h0ID0g
cmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSk7CisKKyAgICAvLyBUaGUgbWF4IHJlbGF0
aXZlIGVycm9yIHdlIGFsbG93IGJldHdlZW4gdGhlIHJlbmRlcmVkIGltcHVsc2UKKyAgICAvLyBh
bmQgdGhlIGV4cGVjdGVkIHZhbHVlLiAgVGhpcyB2YWx1ZSBpcyBleHBlcmltZW50YWxseQorICAg
IC8vIGRldGVybWluZWQuICBTZXQgdG8gMCB0byBtYWtlIHRoZSB0ZXN0IGZhaWwgdG8gc2VlIHdo
YXQgdGhlCisgICAgLy8gYWN0dWFsIHJlbGF0aXZlIGVycm9yIGlzLgorICAgIHZhciBtYXhBbGxv
d2VkUmVsYXRpdmVFcnJvciA9IC4wMDAxOTsKKyAgCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOwor
CisgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIGZvdW5kIGluIHRoZSByZW5kZXJlZCByZXN1bHQu
CisgICAgdmFyIGltcHVsc2VDb3VudCA9IDA7CisKKyAgICAvLyBNYXggKHJlbGF0aXZlKSBlcnJv
ciBhbmQgdGhlIGluZGV4IG9mIHRoZSBtYXhpbWEgZm9yIHRoZSBsZWZ0CisgICAgLy8gYW5kIHJp
Z2h0IGNoYW5uZWxzLgorICAgIHZhciBtYXhFcnJvckwgPSAwOworICAgIHZhciBtYXhFcnJvcklu
ZGV4TCA9IDA7CisgICAgdmFyIG1heEVycm9yUiA9IDA7CisgICAgdmFyIG1heEVycm9ySW5kZXhS
ID0gMDsKKworICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB0aGF0IGRvbid0IG1hdGNoIG91ciBl
eHBlY3RlZCBsb2NhdGlvbnMuCisgICAgdmFyIHRpbWVDb3VudCA9IDA7CisKKyAgICAvLyBMb2Nh
dGlvbnMgb2Ygd2hlcmUgdGhlIGltcHVsc2VzIGFyZW4ndCBhdCB0aGUgZXhwZWN0ZWQgbG9jYXRp
b25zLgorICAgIHZhciB0aW1lRXJyb3JzID0gbmV3IEFycmF5KCk7CisKKyAgICBmb3IgKHZhciBr
ID0gMDsgayA8IHJlbmRlcmVkTGVmdC5sZW5ndGg7ICsraykgeworICAgICAgICAvLyBXZSBhc3N1
bWUgdGhhdCB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgc3RhcnQgYXQgdGhlIHNhbWUgaW5z
dGFuY2UuCisgICAgICAgIGlmIChyZW5kZXJlZExlZnRba10gIT0gMCkgeworICAgICAgICAgICAg
Ly8gVGhlIGV4cGVjdGVkIGdhaW4gZm9yIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscy4KKyAg
ICAgICAgICAgIHZhciBwYW5uZXJHYWluID0gZXF1YWxQb3dlckdhaW4ocG9zaXRpb25baW1wdWxz
ZUNvdW50XS5hbmdsZSk7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWRMID0gcGFubmVyR2Fpbi5s
ZWZ0OworICAgICAgICAgICAgdmFyIGV4cGVjdGVkUiA9IHBhbm5lckdhaW4ucmlnaHQ7CisKKyAg
ICAgICAgICAgIC8vIFJlbGF0aXZlIGVycm9yIGluIHRoZSBnYWluLgorICAgICAgICAgICAgdmFy
IGVycm9yTCA9IE1hdGguYWJzKHJlbmRlcmVkTGVmdFtrXSAtIGV4cGVjdGVkTCkgLyBNYXRoLmFi
cyhleHBlY3RlZEwpOworICAgICAgICAgICAgdmFyIGVycm9yUiA9IE1hdGguYWJzKHJlbmRlcmVk
UmlnaHRba10gLSBleHBlY3RlZFIpIC8gTWF0aC5hYnMoZXhwZWN0ZWRSKTsKKworICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKGVycm9yTCkgPiBtYXhFcnJvckwpIHsKKyAgICAgICAgICAgICAgICBt
YXhFcnJvckwgPSBNYXRoLmFicyhlcnJvckwpOworICAgICAgICAgICAgICAgIG1heEVycm9ySW5k
ZXhMID0gaW1wdWxzZUNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE1hdGgu
YWJzKGVycm9yUikgPiBtYXhFcnJvclIpIHsKKyAgICAgICAgICAgICAgICBtYXhFcnJvclIgPSBN
YXRoLmFicyhlcnJvclIpOworICAgICAgICAgICAgICAgIG1heEVycm9ySW5kZXhSID0gaW1wdWxz
ZUNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRo
ZSBpbXB1bHNlcyB0aGF0IGRpZG4ndCBzaG93IHVwIHdoZXJlIHdlCisgICAgICAgICAgICAvLyBl
eHBlY3RlZCB0aGVtIHRvIGJlLgorICAgICAgICAgICAgaWYgKGsgIT0gTWF0aC5yb3VuZChzYW1w
bGVSYXRlICogdGltZVtpbXB1bHNlQ291bnRdKSkgeworICAgICAgICAgICAgICAgIHRpbWVFcnJv
cnNbdGltZUNvdW50XSA9IHsgYWN0dWFsIDogaywgZXhwZWN0ZWQgOiBNYXRoLnJvdW5kKHNhbXBs
ZVJhdGUgKiB0aW1lW2ltcHVsc2VDb3VudF0pfTsKKyAgICAgICAgICAgICAgICArK3RpbWVDb3Vu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW1wdWxzZUNvdW50OworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3JlYXRlKSB7CisgICAg
ICAgIHRlc3RQYXNzZWQoIk51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVzIHRoZSBudW1iZXIgb2Yg
cGFubmVyIG5vZGVzLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIk51bWJl
ciBvZiBpbXB1bHNlcyBpcyBpbmNvcnJlY3QuICAoRm91bmQgIiArIGltcHVsc2VDb3VudCArICIg
YnV0IGV4cGVjdGVkICIgKyBub2Rlc1RvQ3JlYXRlICsgIikiKTsKKyAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXhFcnJvckwgPD0gbWF4QWxsb3dlZFJlbGF0aXZl
RXJyb3IpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiTGVmdCBjaGFubmVsIHBhbm5lciB2YWx1ZXMg
YXJlIGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiTGVmdCBj
aGFubmVsIHBhbm5lciB2YWx1ZXMgYXJlIGluY29ycmVjdC4gIE1heCByZWwgZXJyb3IgPSAiICsg
bWF4RXJyb3JMICsgIiBhdCB0aW1lICIgKyBtYXhFcnJvckluZGV4TCAvIHNhbXBsZVJhdGUgKyAi
ICh0aHJlc2hvbGQgPSAiICsgbWF4QWxsb3dlZFJlbGF0aXZlRXJyb3IgKyAiKSIpOworICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChtYXhFcnJvclIgPD0gbWF4
QWxsb3dlZFJlbGF0aXZlRXJyb3IpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiUmlnaHQgY2hhbm5l
bCBwYW5uZXIgdmFsdWVzIGFyZSBjb3JyZWN0LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRl
c3RGYWlsZWQoIlJpZ2h0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgaW5jb3JyZWN0LiAgTWF4
IHJlbCBlcnJvciA9ICIgKyBtYXhFcnJvclIgKyAiIGF0IHRpbWUgIiArIG1heEVycm9ySW5kZXhS
IC8gc2FtcGxlUmF0ZSArICIgKHRocmVzaG9sZCA9ICIgKyBtYXhBbGxvd2VkUmVsYXRpdmVFcnJv
ciArICIpIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTZWUg
YnVnIDc1OTk2IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5OTYp
LgorICAgIC8vIFdoZW4gdGhhdCBidWcgaXMgZml4ZWQsIHVuY29tbWVudCB0aGUgaWYgc3RhdGVt
ZW50IGJlbG93IHRvCisgICAgLy8gZW5hYmxlIHRoaXMgY2hlY2suCisKKyAgICAvLyAgICBpZiAo
dGltZUVycm9ycy5sZW5ndGggPiAwKSB7CisgICAgLy8gICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgLy8gICAgICB0ZXN0RmFpbGVkKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3Jz
IGZvdW5kIik7CisgICAgLy8gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVu
Z3RoOyArK2spIHsKKyAgICAvLyAgICAgICAgdGVzdEZhaWxlZCgiSW1wdWxzZSBhdCBzYW1wbGUg
IiArIHRpbWVFcnJvcnNba10uYWN0dWFsICsgIiBidXQgZXhwZWN0ZWQgIiArIHRpbWVFcnJvcnNb
a10uZXhwZWN0ZWQpOworICAgIC8vICAgICAgfQorICAgIC8vICAgIH0KKworICAgIGlmIChzdWNj
ZXNzKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkVxdWFsUG93ZXIgcGFubmVyIHRlc3QgcGFzc2Vk
Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRXF1YWxQb3dlciBwYW5uZXIg
dGVzdCBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122335</attachid>
            <date>2012-01-12 16:20:26 -0800</date>
            <delta_ts>2012-01-13 09:23:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120112162024.patch</filename>
            <type>text/plain</type>
            <size>12398</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uMWM3YjRjMjU4MjFhOTdmM2Q4ZDU3OTBhOTU0MzBm
ZTExMDQxMGE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBFUVVBTFBPV0VSIHBhbm5lciBp
bmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIExheW91dCB0ZXN0IGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2Vy
UGFubmVyOjpwYW4pOiAgQ29ycmVjdCB0aGUgZm9ybXVsYS4KKwogMjAxMi0wMS0wOSAgUm9iIEJ1
aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFVwc3RyZWFtIGNoYW5nZSB0byBkaXNhYmxl
IGlucHV0W2NvbG9yXSBjc3MgcnVsZXMgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAppbmRleCAxM2Ex
OWQ2Y2Q0NDUxZDdiMmY5ODgyYjUwYzRlZDllMDAzMjBiM2I2Li4wZGE3NjIyMzY0MDkxNzJhNTg0
NTZmZjBiNmRkNzJmZTU4YmM3ODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcApAQCAtODQsOCArODQsOCBAQCB2b2lkIEVxdWFs
UG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIC8qZWxldmF0aW9uKi8sIEF1
ZGlvQnVzKiBpbnB1dAogICAgIC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0
aCBhemltdXRoIGdvaW5nIGZyb20gLTkwIC0+ICs5MCBkZWdyZWVzLgogICAgIGRvdWJsZSBkZXNp
cmVkUGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsKIAotICAgIGRvdWJsZSBkZXNp
cmVkR2FpbkwgPSAwLjUgKiBjb3MocGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pICsgMC41
OwotICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzcXJ0KDEuMCAtIGRlc2lyZWRHYWluTCpkZXNp
cmVkR2FpbkwpOworICAgIGRvdWJsZSBkZXNpcmVkR2FpbkwgPSBjb3MoMC41ICogcGlEb3VibGUg
KiBkZXNpcmVkUGFuUG9zaXRpb24pOworICAgIGRvdWJsZSBkZXNpcmVkR2FpblIgPSBzaW4oMC41
ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwogCiAgICAgLy8gRG9uJ3QgZGUtemlw
cGVyIG9uIGZpcnN0IHJlbmRlciBjYWxsLgogICAgIGlmIChtX2lzRmlyc3RSZW5kZXIpIHsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA0Yzg1OTVhY2Y2NGU3OGEwNzU2Nzk5MjI0ZWE4ODM1YmM5MTYwN2IzLi5iNjUxYzhiOWZh
MGIwMjE2YzE4ZWUxMWNjN2E1YzBjMTFiY2YxNmRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDEtMTIgIFJheW1vbmQgVG95ICAgPHJ0b3lAY2hyb21pdW0ub3JnPgorICAgICAgICBFUVVB
TFBPV0VSIHBhbm5lciBpbmNvcnJlY3RseSBjb21wdXRlcyBnYWluCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc2NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93
ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1v
ZGVsLXRlc3RpbmcuanM6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzOgorICAgICAgICAoY3JlYXRlSW1wdWxzZUJ1ZmZlcik6IE5ldyBjb21tb24g
dXRpbGl0eSBmdW5jdGlvbi4KKyAgICAgICAgCiAyMDEyLTAxLTA5ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB1cGRh
dGUgZm9yIHRlc3RfZXhwZWN0YXRpb25zLnR4dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzZiOWJmNWZm
MDc5MTAxYTViZTdiMjA5MzkxMzNkZDZjMTE1MzBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTIgQEAKK1Rlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBt
YXRjaGVzIHRoZSBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBMZWZ0IGNoYW5uZWwgcGFu
bmVyIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgUmlnaHQgY2hhbm5lbCBwYW5uZXIgdmFsdWVz
IGFyZSBjb3JyZWN0LgorUEFTUyBFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IHBhc3NlZAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhMTUyNjFhNTM1
NDgwN2RmMzAwYmQzMTRiZWU3YjdiMTg5ZDJiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8v
RU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cisg
IDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cisg
ICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3Jp
cHRpb24oIlRlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4i
KTsKKworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisg
ICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAq
IHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgY3JlYXRlVGVz
dEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVz
dCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0Pgor
CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
cmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKaW5kZXggZmM2NDMzYjExOWRkODgzN2Q3MWJmNmU2
MmVlMjM2Y2NmNmIwZWRhMS4uZjkwYmY5M2FhMmIwZjZhNDljZjYzODk1YTM4NTMxZjFhZjc3YTQx
OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3Rp
bmcuanMKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3Rpbmcu
anMKQEAgLTEwNSwzICsxMDUsMTcgQEAgZnVuY3Rpb24gZmluaXNoQXVkaW9UZXN0KGV2ZW50KSB7
CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QXVkaW9EYXRhKGF1ZGlvRGF0YSk7CiAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQorCisvLyBDcmVhdGUgYW4gaW1w
dWxzZSBpbiBhIGJ1ZmZlciBvZiBsZW5ndGggc2FtcGxlRnJhbWVMZW5ndGgKK2Z1bmN0aW9uIGNy
ZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIg
YXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMDAwLCBjb250ZXh0LnNhbXBs
ZVJhdGUpOworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBkYXRhTCA9
IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgayA9IDA7IGsg
PCBuOyArK2spIHsKKyAgICAgICAgZGF0YUxba10gPSAwOworICAgIH0KKyAgICBkYXRhTFswXSA9
IDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmU3OThkODQyNGI5ZGUwYjE3YmU3NWVkZTNhMDhmYjM4MGU2N2ZkNgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5q
cwpAQCAtMCwwICsxLDE4NyBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisvLyBUaW1l
IHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KK3ZhciB0aW1lU3RlcCA9IDAuMDAx
OworCisvLyBMZW5ndGggb2YgdGhlIGltcHVsc2Ugc2lnbmFsLgordmFyIHB1bHNlTGVuZ3RoRnJh
bWVzID0gTWF0aC5yb3VuZCh0aW1lU3RlcCAqIHNhbXBsZVJhdGUpOworCisvLyBIb3cgbWFueSBw
YW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdAordmFyIG5vZGVzVG9DcmVhdGUgPSAx
MDA7CisKKy8vIEJlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5vdWdoIGZvciBhbGwgb2Ygb3VyIG5v
ZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1lU3RlcCAqIChub2Rlc1RvQ3JlYXRl
ICsgMSk7CisKKy8vIFRoZXNlIGFyZSBnbG9iYWwgbW9zdGx5IGZvciBkZWJ1Z2dpbmcuCit2YXIg
Y29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7Cit2
YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAordmFyIHJlbmRlcmVkQnVmZmVyOwordmFy
IHJlbmRlcmVkTGVmdDsKK3ZhciByZW5kZXJlZFJpZ2h0OworCitmdW5jdGlvbiBjcmVhdGVHcmFw
aChjb250ZXh0LCBub2RlQ291bnQpIHsKKyAgICBidWZmZXJTb3VyY2UgPSBuZXcgQXJyYXkobm9k
ZUNvdW50KTsKKyAgICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICBwb3NpdGlv
biA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHRpbWUgPSBuZXcgQXJyYXkobm9kZUNvdW50
KTsKKyAgICB2YXIgYW5nbGVTdGVwID0gTWF0aC5QSSAvIChub2RlQ291bnQgKyAxKTsgIC8vIG5v
ZGVDb3VudCArIDEgc28gd2UgZG9uJ3QgZ28gcGFzdCAxODAgZGVnLgorCisgICAgaW1wdWxzZSA9
IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworCisgICAg
Zm9yICh2YXIgayA9IDA7IGsgPCBub2RlQ291bnQ7ICsraykgeworICAgICAgICBidWZmZXJTb3Vy
Y2Vba10gPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBidWZmZXJTb3Vy
Y2Vba10uYnVmZmVyID0gaW1wdWxzZTsKKworICAgICAgICBwYW5uZXJba10gPSBjb250ZXh0LmNy
ZWF0ZVBhbm5lcigpOworICAgICAgICBwYW5uZXJba10ucGFubmluZ01vZGVsID0gcGFubmVyLkVR
VUFMUE9XRVI7CisgICAgICAgIHBhbm5lcltrXS5kaXN0YW5jZU1vZGVsID0gMDsgICAgLy8gTGlu
ZWFyIGRpc3RhbmNlIG1vZGVsLgorCisgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBpcyB0aGUgYW5n
bGUgdW5pZm9ybWx5IHNwYWNlZCBiZXR3ZWVuIDAgYW5kIDE4MAorICAgICAgICAvLyBkZWcsIGJ1
dCB3ZSB3YW50IHRvIGF2b2lkIDAgYmVjYXVzZSB0aGUgZXF1YWwgcG93ZXIgcGFubmVyIHdpbGwK
KyAgICAgICAgLy8gcHJvZHVjZSAwIHdoaWNoIG1lc3NlcyB1cCBvdXIgY2hlY2sgcm91dGluZS4K
KyAgICAgICAgdmFyIGFuZ2xlID0gYW5nbGVTdGVwICogKGsgKyAxLzIpOworICAgICAgICBwb3Np
dGlvbltrXSA9IHthbmdsZSA6IGFuZ2xlLCB4IDogTWF0aC5jb3MoYW5nbGUpLCB6IDogTWF0aC5z
aW4oYW5nbGUpfTsKKyAgICAgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKHBvc2l0aW9uW2tdLngs
IDAsIHBvc2l0aW9uW2tdLnopOworCisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5jb25uZWN0KHBh
bm5lcltrXSk7CisgICAgICAgIHBhbm5lcltrXS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24p
OworCisgICAgICAgIC8vIFN0YXJ0IHRoZSBzb3VyY2UKKyAgICAgICAgdGltZVtrXSA9IGsgKiB0
aW1lU3RlcDsKKyAgICAgICAgYnVmZmVyU291cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgbm9kZUNvdW50KSB7Cisg
ICAgY3JlYXRlR3JhcGgoY29udGV4dCwgbm9kZUNvdW50KTsKKworICAgIGNvbnRleHQub25jb21w
bGV0ZSA9IGNoZWNrUmVzdWx0OworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKwor
Ly8gTWFwIG91ciBwb3NpdGlvbiBhbmdsZSB0byB0aGUgYXppbXV0aCBhbmdsZSAoaW4gZGVncmVl
cykuCisvLworLy8gQW4gYW5nbGUgb2YgMCBjb3JyZXNwb25kcyB0byBhbiBhemltdXRoIG9mIDkw
IGRlZy4gIEFuIGFuZ2xlIG9mIHBpCisvLyBpcyAtOTAgZGVnLgorZnVuY3Rpb24gYW5nbGVUb0F6
aW11dGgoYW5nbGUpIHsKKyAgICByZXR1cm4gOTAgLSBhbmdsZSAqIDE4MCAvIE1hdGguUEk7Cit9
CisKKy8vIFRoZSBnYWluIGNhdXNlZCBieSB0aGUgRVFVQUxQT1dFUiBwYW5uaW5nIG1vZGVsCitm
dW5jdGlvbiBlcXVhbFBvd2VyR2FpbihhbmdsZSkgeworICAgIHZhciBhemltdXRoID0gYW5nbGVU
b0F6aW11dGgoYW5nbGUpOworCisgICAgdmFyIHBhblBvc2l0aW9uID0gKGF6aW11dGggKyA5MCkg
LyAxODA7CisKKyAgICB2YXIgZ2FpbkwgPSBNYXRoLmNvcygwLjUgKiBNYXRoLlBJICogcGFuUG9z
aXRpb24pOworICAgIHZhciBnYWluUiA9IE1hdGguc2luKDAuNSAqIE1hdGguUEkgKiBwYW5Qb3Np
dGlvbik7CisKKyAgICByZXR1cm4geyBsZWZ0IDogZ2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKK30K
KworZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpIHsKKyAgICByZW5kZXJlZEJ1ZmZlciA9IGV2
ZW50LnJlbmRlcmVkQnVmZmVyOworICAgIHJlbmRlcmVkTGVmdCA9IHJlbmRlcmVkQnVmZmVyLmdl
dENoYW5uZWxEYXRhKDApOworICAgIHJlbmRlcmVkUmlnaHQgPSByZW5kZXJlZEJ1ZmZlci5nZXRD
aGFubmVsRGF0YSgxKTsKKworICAgIC8vIFRoZSBtYXggcmVsYXRpdmUgZXJyb3Igd2UgYWxsb3cg
YmV0d2VlbiB0aGUgcmVuZGVyZWQgaW1wdWxzZQorICAgIC8vIGFuZCB0aGUgZXhwZWN0ZWQgdmFs
dWUuICBUaGlzIHZhbHVlIGlzIGV4cGVyaW1lbnRhbGx5CisgICAgLy8gZGV0ZXJtaW5lZC4gIFNl
dCB0byAwIHRvIG1ha2UgdGhlIHRlc3QgZmFpbCB0byBzZWUgd2hhdCB0aGUKKyAgICAvLyBhY3R1
YWwgcmVsYXRpdmUgZXJyb3IgaXMuCisgICAgdmFyIG1heEFsbG93ZWRSZWxhdGl2ZUVycm9yID0g
LjAwMDE5OworICAKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAvLyBOdW1iZXIgb2Yg
aW1wdWxzZXMgZm91bmQgaW4gdGhlIHJlbmRlcmVkIHJlc3VsdC4KKyAgICB2YXIgaW1wdWxzZUNv
dW50ID0gMDsKKworICAgIC8vIE1heCAocmVsYXRpdmUpIGVycm9yIGFuZCB0aGUgaW5kZXggb2Yg
dGhlIG1heGltYSBmb3IgdGhlIGxlZnQKKyAgICAvLyBhbmQgcmlnaHQgY2hhbm5lbHMuCisgICAg
dmFyIG1heEVycm9yTCA9IDA7CisgICAgdmFyIG1heEVycm9ySW5kZXhMID0gMDsKKyAgICB2YXIg
bWF4RXJyb3JSID0gMDsKKyAgICB2YXIgbWF4RXJyb3JJbmRleFIgPSAwOworCisgICAgLy8gTnVt
YmVyIG9mIGltcHVsc2VzIHRoYXQgZG9uJ3QgbWF0Y2ggb3VyIGV4cGVjdGVkIGxvY2F0aW9ucy4K
KyAgICB2YXIgdGltZUNvdW50ID0gMDsKKworICAgIC8vIExvY2F0aW9ucyBvZiB3aGVyZSB0aGUg
aW1wdWxzZXMgYXJlbid0IGF0IHRoZSBleHBlY3RlZCBsb2NhdGlvbnMuCisgICAgdmFyIHRpbWVF
cnJvcnMgPSBuZXcgQXJyYXkoKTsKKworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVuZGVyZWRM
ZWZ0Lmxlbmd0aDsgKytrKSB7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBsZWZ0IGFu
ZCByaWdodCBjaGFubmVscyBzdGFydCBhdCB0aGUgc2FtZSBpbnN0YW5jZS4KKyAgICAgICAgaWYg
KHJlbmRlcmVkTGVmdFtrXSAhPSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgZ2Fp
biBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLgorICAgICAgICAgICAgdmFyIHBhbm5l
ckdhaW4gPSBlcXVhbFBvd2VyR2Fpbihwb3NpdGlvbltpbXB1bHNlQ291bnRdLmFuZ2xlKTsKKyAg
ICAgICAgICAgIHZhciBleHBlY3RlZEwgPSBwYW5uZXJHYWluLmxlZnQ7CisgICAgICAgICAgICB2
YXIgZXhwZWN0ZWRSID0gcGFubmVyR2Fpbi5yaWdodDsKKworICAgICAgICAgICAgLy8gUmVsYXRp
dmUgZXJyb3IgaW4gdGhlIGdhaW4uCisgICAgICAgICAgICB2YXIgZXJyb3JMID0gTWF0aC5hYnMo
cmVuZGVyZWRMZWZ0W2tdIC0gZXhwZWN0ZWRMKSAvIE1hdGguYWJzKGV4cGVjdGVkTCk7CisgICAg
ICAgICAgICB2YXIgZXJyb3JSID0gTWF0aC5hYnMocmVuZGVyZWRSaWdodFtrXSAtIGV4cGVjdGVk
UikgLyBNYXRoLmFicyhleHBlY3RlZFIpOworCisgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZXJy
b3JMKSA+IG1heEVycm9yTCkgeworICAgICAgICAgICAgICAgIG1heEVycm9yTCA9IE1hdGguYWJz
KGVycm9yTCk7CisgICAgICAgICAgICAgICAgbWF4RXJyb3JJbmRleEwgPSBpbXB1bHNlQ291bnQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZXJyb3JSKSA+IG1heEVy
cm9yUikgeworICAgICAgICAgICAgICAgIG1heEVycm9yUiA9IE1hdGguYWJzKGVycm9yUik7Cisg
ICAgICAgICAgICAgICAgbWF4RXJyb3JJbmRleFIgPSBpbXB1bHNlQ291bnQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGltcHVsc2VzIHRoYXQgZGlk
bid0IHNob3cgdXAgd2hlcmUgd2UKKyAgICAgICAgICAgIC8vIGV4cGVjdGVkIHRoZW0gdG8gYmUu
CisgICAgICAgICAgICBpZiAoayAhPSBNYXRoLnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVs
c2VDb3VudF0pKSB7CisgICAgICAgICAgICAgICAgdGltZUVycm9yc1t0aW1lQ291bnRdID0geyBh
Y3R1YWwgOiBrLCBleHBlY3RlZCA6IE1hdGgucm91bmQoc2FtcGxlUmF0ZSAqIHRpbWVbaW1wdWxz
ZUNvdW50XSl9OworICAgICAgICAgICAgICAgICsrdGltZUNvdW50OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKytpbXB1bHNlQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
aW1wdWxzZUNvdW50ID09IG5vZGVzVG9DcmVhdGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiTnVt
YmVyIG9mIGltcHVsc2VzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBwYW5uZXIgbm9kZXMuIik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGlzIGlu
Y29ycmVjdC4gIChGb3VuZCAiICsgaW1wdWxzZUNvdW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5v
ZGVzVG9DcmVhdGUgKyAiKSIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1heEVycm9yTCA8PSBtYXhBbGxvd2VkUmVsYXRpdmVFcnJvcikgeworICAgICAgICB0
ZXN0UGFzc2VkKCJMZWZ0IGNoYW5uZWwgcGFubmVyIHZhbHVlcyBhcmUgY29ycmVjdC4iKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJMZWZ0IGNoYW5uZWwgcGFubmVyIHZhbHVl
cyBhcmUgaW5jb3JyZWN0LiAgTWF4IHJlbCBlcnJvciA9ICIgKyBtYXhFcnJvckwgKyAiIGF0IHRp
bWUgIiArIG1heEVycm9ySW5kZXhMIC8gc2FtcGxlUmF0ZSArICIgKHRocmVzaG9sZCA9ICIgKyBt
YXhBbGxvd2VkUmVsYXRpdmVFcnJvciArICIpIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgaWYgKG1heEVycm9yUiA8PSBtYXhBbGxvd2VkUmVsYXRpdmVFcnJv
cikgeworICAgICAgICB0ZXN0UGFzc2VkKCJSaWdodCBjaGFubmVsIHBhbm5lciB2YWx1ZXMgYXJl
IGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiUmlnaHQgY2hh
bm5lbCBwYW5uZXIgdmFsdWVzIGFyZSBpbmNvcnJlY3QuICBNYXggcmVsIGVycm9yID0gIiArIG1h
eEVycm9yUiArICIgYXQgdGltZSAiICsgbWF4RXJyb3JJbmRleFIgLyBzYW1wbGVSYXRlICsgIiAo
dGhyZXNob2xkID0gIiArIG1heEFsbG93ZWRSZWxhdGl2ZUVycm9yICsgIikiKTsKKyAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFNlZSBidWcgNzU5OTYgKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk5NikuCisgICAgLy8gV2hlbiB0aGF0
IGJ1ZyBpcyBmaXhlZCwgdW5jb21tZW50IHRoZSBpZiBzdGF0ZW1lbnQgYmVsb3cgdG8KKyAgICAv
LyBlbmFibGUgdGhpcyBjaGVjay4KKworICAgIC8vICAgIGlmICh0aW1lRXJyb3JzLmxlbmd0aCA+
IDApIHsKKyAgICAvLyAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAvLyAgICAgIHRlc3RGYWls
ZWQodGltZUVycm9ycy5sZW5ndGggKyAiIHRpbWluZyBlcnJvcnMgZm91bmQiKTsKKyAgICAvLyAg
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVycm9ycy5sZW5ndGg7ICsraykgeworICAgIC8v
ICAgICAgICB0ZXN0RmFpbGVkKCJJbXB1bHNlIGF0IHNhbXBsZSAiICsgdGltZUVycm9yc1trXS5h
Y3R1YWwgKyAiIGJ1dCBleHBlY3RlZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisgICAg
Ly8gICAgICB9CisgICAgLy8gICAgfQorCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgdGVz
dFBhc3NlZCgiRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0ZXN0RmFpbGVkKCJFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IGZhaWxlZCIpOworICAg
IH0KKworICAgIGZpbmlzaEpTVGVzdCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122439</attachid>
            <date>2012-01-13 09:23:22 -0800</date>
            <delta_ts>2012-01-13 11:07:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120113092321.patch</filename>
            <type>text/plain</type>
            <size>12188</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYjM4YzI3M2U5YjYxNGUxNjFiMmFkM2FlNTFmNTM0YTNjODAzYTc4Li4x
YzdiNGMyNTgyMWE5N2YzZDhkNTc5MGE5NTQzMGZlMTEwNDEwYTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgor
CisgICAgICAgIEVRVUFMUE9XRVIgcGFubmVyIGluY29ycmVjdGx5IGNvbXB1dGVzIGdhaW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3Qg
YWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVxdWFsUG93ZXJQYW5uZXI6OnBhbik6ICBDb3JyZWN0IHRoZSBm
b3JtdWxhLgorCiAyMDEyLTAxLTA5ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAg
ICAgVXBzdHJlYW0gY2hhbmdlIHRvIGRpc2FibGUgaW5wdXRbY29sb3JdIGNzcyBydWxlcyBmb3Ig
QmxhY2tCZXJyeSBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9FcXVhbFBvd2VyUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuY3BwCmluZGV4IDEzYTE5ZDZjZDQ0NTFkN2IyZjk4ODJiNTBjNGVkOWUw
MDMyMGIzYjYuLjBkYTc2MjIzNjQwOTE3MmE1ODQ1NmZmMGI2ZGQ3MmZlNThiYzc4NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CkBAIC04NCw4ICs4NCw4IEBAIHZvaWQgRXF1YWxQb3dlclBhbm5lcjo6cGFuKGRvdWJsZSBhemlt
dXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgQXVkaW9CdXMqIGlucHV0CiAgICAgLy8gUGFuIHNt
b290aGx5IGZyb20gbGVmdCB0byByaWdodCB3aXRoIGF6aW11dGggZ29pbmcgZnJvbSAtOTAgLT4g
KzkwIGRlZ3JlZXMuCiAgICAgZG91YmxlIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gMTgwOwogCi0gICAgZG91YmxlIGRlc2lyZWRHYWluTCA9IDAuNSAqIGNvcyhwaURvdWJs
ZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbikgKyAwLjU7Ci0gICAgZG91YmxlIGRlc2lyZWRHYWluUiA9
IHNxcnQoMS4wIC0gZGVzaXJlZEdhaW5MKmRlc2lyZWRHYWluTCk7CisgICAgZG91YmxlIGRlc2ly
ZWRHYWluTCA9IGNvcygwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAg
ZG91YmxlIGRlc2lyZWRHYWluUiA9IHNpbigwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3Np
dGlvbik7CiAKICAgICAvLyBEb24ndCBkZS16aXBwZXIgb24gZmlyc3QgcmVuZGVyIGNhbGwuCiAg
ICAgaWYgKG1faXNGaXJzdFJlbmRlcikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjODU5NWFjZjY0ZTc4YTA3NTY3OTky
MjRlYTg4MzViYzkxNjA3YjMuLmI2NTFjOGI5ZmEwYjAyMTZjMThlZTExY2M3YTVjMGMxMWJjZjE2
ZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0xMiAgUmF5bW9uZCBUb3kgICA8cnRv
eUBjaHJvbWl1bS5vcmc+CisgICAgICAgIEVRVUFMUE9XRVIgcGFubmVyIGluY29ycmVjdGx5IGNv
bXB1dGVzIGdhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanM6CisgICAgICAgIChjcmVh
dGVJbXB1bHNlQnVmZmVyKTogTmV3IGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAK
IDIwMTItMDEtMDkgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBVbnJldmlld2VkIHVwZGF0ZSBmb3IgdGVzdF9leHBlY3RhdGlvbnMudHh0
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRkZDVjZWRiMjY0OGQ4YTZlNWUzMzljOWFkNWU1ZjA4MDY2MzYy
NzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxw
b3dlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBlcXVhbC1wb3dlciBwYW5u
ZXIgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBwYW5uZXIg
bm9kZXMuCitQQVNTIExlZnQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1Mg
UmlnaHQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgRXF1YWxQb3dlciBw
YW5uZXIgdGVzdCBwYXNzZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1
YWxwb3dlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jYTE1MjYxYTUzNTQ4MDdkZjMwMGJkMzE0YmVlN2I3YjE4OWQyYjUzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIu
aHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVyLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBt
b2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAg
ICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUg
b2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVk
aW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRl
KTsKKworICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgbm9kZXNUb0NyZWF0ZSk7
CisgICAgICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisKKyAgICA8L3NjcmlwdD4KKworICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5q
cyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCmluZGV4
IGZjNjQzM2IxMTlkZDg4MzdkNzFiZjZlNjJlZTIzNmNjZjZiMGVkYTEuLmY5MGJmOTNhYTJiMGY2
YTQ5Y2Y2Mzg5NWEzODUzMWYxYWY3N2E0MTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0xMDUsMyArMTA1LDE3IEBAIGZ1bmN0aW9u
IGZpbmlzaEF1ZGlvVGVzdChldmVudCkgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEF1
ZGlvRGF0YShhdWRpb0RhdGEpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKIH0KKworLy8gQ3JlYXRlIGFuIGltcHVsc2UgaW4gYSBidWZmZXIgb2YgbGVuZ3RoIHNhbXBs
ZUZyYW1lTGVuZ3RoCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBs
ZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZm
ZXIoMSwgMTAwMCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgICB2YXIgbiA9IGF1ZGlvQnVmZmVy
Lmxlbmd0aDsKKyAgICB2YXIgZGF0YUwgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsK
KworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7CisgICAgICAgIGRhdGFMW2tdID0g
MDsKKyAgICB9CisgICAgZGF0YUxbMF0gPSAxOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2Rl
bC10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2Rl
bC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MGQ4OTc5YmFlMGJkYWQ5YjBjMWQ0NDU3YmI2ZGMx
YzRiZGJiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwxODUgQEAKK3ZhciBzYW1wbGVS
YXRlID0gNDQxMDAuMDsKKworLy8gVGltZSBzdGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFy
dHMuCit2YXIgdGltZVN0ZXAgPSAwLjAwMTsKKworLy8gTGVuZ3RoIG9mIHRoZSBpbXB1bHNlIHNp
Z25hbC4KK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1w
bGVSYXRlKTsKKworLy8gSG93IG1hbnkgcGFubmVyIG5vZGVzIHRvIGNyZWF0ZSBmb3IgdGhlIHRl
c3QKK3ZhciBub2Rlc1RvQ3JlYXRlID0gMTAwOworCisvLyBCZSBzdXJlIHdlIHJlbmRlciBsb25n
IGVub3VnaCBmb3IgYWxsIG9mIG91ciBub2Rlcy4KK3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0g
dGltZVN0ZXAgKiAobm9kZXNUb0NyZWF0ZSArIDEpOworCisvLyBUaGVzZSBhcmUgZ2xvYmFsIG1v
c3RseSBmb3IgZGVidWdnaW5nLgordmFyIGNvbnRleHQ7Cit2YXIgaW1wdWxzZTsKK3ZhciBidWZm
ZXJTb3VyY2U7Cit2YXIgcGFubmVyOwordmFyIHBvc2l0aW9uOwordmFyIHRpbWU7CisgICAgICAK
K3ZhciByZW5kZXJlZEJ1ZmZlcjsKK3ZhciByZW5kZXJlZExlZnQ7Cit2YXIgcmVuZGVyZWRSaWdo
dDsKKworZnVuY3Rpb24gY3JlYXRlR3JhcGgoY29udGV4dCwgbm9kZUNvdW50KSB7CisgICAgYnVm
ZmVyU291cmNlID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgcGFubmVyID0gbmV3IEFycmF5
KG5vZGVDb3VudCk7CisgICAgcG9zaXRpb24gPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICB0
aW1lID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgLy8gQW5nbGUgYmV0d2VlbiBwYW5uZXIg
bG9jYXRpb25zLiAgKG5vZGVDb3VudCAtIDEgYmVjYXVzZSB3ZSB3YW50CisgICAgLy8gdG8gaW5j
bHVkZSBib3RoIDAgYW5kIDE4MCBkZWcuCisgICAgdmFyIGFuZ2xlU3RlcCA9IE1hdGguUEkgLyAo
bm9kZUNvdW50IC0gMSk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250
ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IG5vZGVD
b3VudDsgKytrKSB7CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRleHQuY3JlYXRlQnVm
ZmVyU291cmNlKCk7CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5idWZmZXIgPSBpbXB1bHNlOwor
CisgICAgICAgIHBhbm5lcltrXSA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAgIHBh
bm5lcltrXS5wYW5uaW5nTW9kZWwgPSBwYW5uZXIuRVFVQUxQT1dFUjsKKyAgICAgICAgcGFubmVy
W2tdLmRpc3RhbmNlTW9kZWwgPSAwOyAvLyBMaW5lYXIgZGlzdGFuY2UgbW9kZWwuCisKKyAgICAg
ICAgdmFyIGFuZ2xlID0gYW5nbGVTdGVwICogazsKKyAgICAgICAgcG9zaXRpb25ba10gPSB7YW5n
bGUgOiBhbmdsZSwgeCA6IE1hdGguY29zKGFuZ2xlKSwgeiA6IE1hdGguc2luKGFuZ2xlKX07Cisg
ICAgICAgIHBhbm5lcltrXS5zZXRQb3NpdGlvbihwb3NpdGlvbltrXS54LCAwLCBwb3NpdGlvbltr
XS56KTsKKworICAgICAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5uZXJba10pOworICAg
ICAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgICAgICAv
LyBTdGFydCB0aGUgc291cmNlCisgICAgICAgIHRpbWVba10gPSBrICogdGltZVN0ZXA7CisgICAg
ICAgIGJ1ZmZlclNvdXJjZVtrXS5ub3RlT24odGltZVtrXSk7CisgICAgfQorfQorCitmdW5jdGlv
biBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIG5vZGVDb3VudCkgeworICAgIGNyZWF0ZUdyYXBo
KGNvbnRleHQsIG5vZGVDb3VudCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jl
c3VsdDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIE1hcCBvdXIgcG9z
aXRpb24gYW5nbGUgdG8gdGhlIGF6aW11dGggYW5nbGUgKGluIGRlZ3JlZXMpLgorLy8KKy8vIEFu
IGFuZ2xlIG9mIDAgY29ycmVzcG9uZHMgdG8gYW4gYXppbXV0aCBvZiA5MCBkZWc7IHBpLCB0byAt
OTAgZGVnLgorZnVuY3Rpb24gYW5nbGVUb0F6aW11dGgoYW5nbGUpIHsKKyAgICByZXR1cm4gOTAg
LSBhbmdsZSAqIDE4MCAvIE1hdGguUEk7Cit9CisKKy8vIFRoZSBnYWluIGNhdXNlZCBieSB0aGUg
RVFVQUxQT1dFUiBwYW5uaW5nIG1vZGVsCitmdW5jdGlvbiBlcXVhbFBvd2VyR2FpbihhbmdsZSkg
eworICAgIHZhciBhemltdXRoID0gYW5nbGVUb0F6aW11dGgoYW5nbGUpOworCisgICAgdmFyIHBh
blBvc2l0aW9uID0gKGF6aW11dGggKyA5MCkgLyAxODA7CisKKyAgICB2YXIgZ2FpbkwgPSBNYXRo
LmNvcygwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworICAgIHZhciBnYWluUiA9IE1hdGgu
c2luKDAuNSAqIE1hdGguUEkgKiBwYW5Qb3NpdGlvbik7CisKKyAgICByZXR1cm4geyBsZWZ0IDog
Z2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKK30KKworZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQp
IHsKKyAgICByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgIHJlbmRl
cmVkTGVmdCA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworICAgIHJlbmRlcmVk
UmlnaHQgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTsKKworICAgIC8vIFRoZSBt
YXggZXJyb3Igd2UgYWxsb3cgYmV0d2VlbiB0aGUgcmVuZGVyZWQgaW1wdWxzZSBhbmQgdGhlCisg
ICAgLy8gZXhwZWN0ZWQgdmFsdWUuICBUaGlzIHZhbHVlIGlzIGV4cGVyaW1lbnRhbGx5IGRldGVy
bWluZWQuICBTZXQKKyAgICAvLyB0byAwIHRvIG1ha2UgdGhlIHRlc3QgZmFpbCB0byBzZWUgd2hh
dCB0aGUgYWN0dWFsIGVycm9yIGlzLgorICAgIHZhciBtYXhBbGxvd2VkRXJyb3IgPSA2LjRlLTc7
CisgIAorICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKworICAgIC8vIE51bWJlciBvZiBpbXB1bHNl
cyBmb3VuZCBpbiB0aGUgcmVuZGVyZWQgcmVzdWx0LgorICAgIHZhciBpbXB1bHNlQ291bnQgPSAw
OworCisgICAgLy8gTWF4IChyZWxhdGl2ZSkgZXJyb3IgYW5kIHRoZSBpbmRleCBvZiB0aGUgbWF4
aW1hIGZvciB0aGUgbGVmdAorICAgIC8vIGFuZCByaWdodCBjaGFubmVscy4KKyAgICB2YXIgbWF4
RXJyb3JMID0gMDsKKyAgICB2YXIgbWF4RXJyb3JJbmRleEwgPSAwOworICAgIHZhciBtYXhFcnJv
clIgPSAwOworICAgIHZhciBtYXhFcnJvckluZGV4UiA9IDA7CisKKyAgICAvLyBOdW1iZXIgb2Yg
aW1wdWxzZXMgdGhhdCBkb24ndCBtYXRjaCBvdXIgZXhwZWN0ZWQgbG9jYXRpb25zLgorICAgIHZh
ciB0aW1lQ291bnQgPSAwOworCisgICAgLy8gTG9jYXRpb25zIG9mIHdoZXJlIHRoZSBpbXB1bHNl
cyBhcmVuJ3QgYXQgdGhlIGV4cGVjdGVkIGxvY2F0aW9ucy4KKyAgICB2YXIgdGltZUVycm9ycyA9
IG5ldyBBcnJheSgpOworCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZExlZnQubGVu
Z3RoOyArK2spIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGxlZnQgYW5kIHJpZ2h0
IGNoYW5uZWxzIHN0YXJ0IGF0IHRoZSBzYW1lIGluc3RhbmNlLgorICAgICAgICBpZiAocmVuZGVy
ZWRMZWZ0W2tdICE9IDAgfHwgcmVuZGVyZWRSaWdodFtrXSAhPSAwKSB7CisgICAgICAgICAgICAv
LyBUaGUgZXhwZWN0ZWQgZ2FpbiBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLgorICAg
ICAgICAgICAgdmFyIHBhbm5lckdhaW4gPSBlcXVhbFBvd2VyR2Fpbihwb3NpdGlvbltpbXB1bHNl
Q291bnRdLmFuZ2xlKTsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZEwgPSBwYW5uZXJHYWluLmxl
ZnQ7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWRSID0gcGFubmVyR2Fpbi5yaWdodDsKKworICAg
ICAgICAgICAgLy8gQWJzb2x1dGUgZXJyb3IgaW4gdGhlIGdhaW4uCisgICAgICAgICAgICB2YXIg
ZXJyb3JMID0gTWF0aC5hYnMocmVuZGVyZWRMZWZ0W2tdIC0gZXhwZWN0ZWRMKTsKKyAgICAgICAg
ICAgIHZhciBlcnJvclIgPSBNYXRoLmFicyhyZW5kZXJlZFJpZ2h0W2tdIC0gZXhwZWN0ZWRSKTsK
KworICAgICAgICAgICAgaWYgKE1hdGguYWJzKGVycm9yTCkgPiBtYXhFcnJvckwpIHsKKyAgICAg
ICAgICAgICAgICBtYXhFcnJvckwgPSBNYXRoLmFicyhlcnJvckwpOworICAgICAgICAgICAgICAg
IG1heEVycm9ySW5kZXhMID0gaW1wdWxzZUNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKE1hdGguYWJzKGVycm9yUikgPiBtYXhFcnJvclIpIHsKKyAgICAgICAgICAgICAgICBt
YXhFcnJvclIgPSBNYXRoLmFicyhlcnJvclIpOworICAgICAgICAgICAgICAgIG1heEVycm9ySW5k
ZXhSID0gaW1wdWxzZUNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVw
IHRyYWNrIG9mIHRoZSBpbXB1bHNlcyB0aGF0IGRpZG4ndCBzaG93IHVwIHdoZXJlIHdlCisgICAg
ICAgICAgICAvLyBleHBlY3RlZCB0aGVtIHRvIGJlLgorICAgICAgICAgICAgaWYgKGsgIT0gTWF0
aC5yb3VuZChzYW1wbGVSYXRlICogdGltZVtpbXB1bHNlQ291bnRdKSkgeworICAgICAgICAgICAg
ICAgIHRpbWVFcnJvcnNbdGltZUNvdW50XSA9IHsgYWN0dWFsIDogaywgZXhwZWN0ZWQgOiBNYXRo
LnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVsc2VDb3VudF0pfTsKKyAgICAgICAgICAgICAg
ICArK3RpbWVDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW1wdWxzZUNvdW50
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3Jl
YXRlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIk51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVzIHRo
ZSBudW1iZXIgb2YgcGFubmVyIG5vZGVzLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RG
YWlsZWQoIk51bWJlciBvZiBpbXB1bHNlcyBpcyBpbmNvcnJlY3QuICAoRm91bmQgIiArIGltcHVs
c2VDb3VudCArICIgYnV0IGV4cGVjdGVkICIgKyBub2Rlc1RvQ3JlYXRlICsgIikiKTsKKyAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXhFcnJvckwgPD0gbWF4QWxs
b3dlZEVycm9yKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkxlZnQgY2hhbm5lbCBnYWluIHZhbHVl
cyBhcmUgY29ycmVjdC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJMZWZ0
IGNoYW5uZWwgZ2FpbiB2YWx1ZXMgYXJlIGluY29ycmVjdC4gIE1heCBlcnJvciA9ICIgKyBtYXhF
cnJvckwgKyAiIGF0IHRpbWUgIiArIG1heEVycm9ySW5kZXhMIC8gc2FtcGxlUmF0ZSArICIgKHRo
cmVzaG9sZCA9ICIgKyBtYXhBbGxvd2VkRXJyb3IgKyAiKSIpOworICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChtYXhFcnJvclIgPD0gbWF4QWxsb3dlZEVycm9y
KSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlJpZ2h0IGNoYW5uZWwgZ2FpbiB2YWx1ZXMgYXJlIGNv
cnJlY3QuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiUmlnaHQgY2hhbm5l
bCBnYWluIHZhbHVlcyBhcmUgaW5jb3JyZWN0LiAgTWF4IGVycm9yID0gIiArIG1heEVycm9yUiAr
ICIgYXQgdGltZSAiICsgbWF4RXJyb3JJbmRleFIgLyBzYW1wbGVSYXRlICsgIiAodGhyZXNob2xk
ID0gIiArIG1heEFsbG93ZWRFcnJvciArICIpIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBTZWUgYnVnIDc1OTk2IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzU5OTYpCisgICAgLy8gYW5kIDc2MDczIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzMpLgorICAgIC8vIFdoZW4gdGhvc2UgYnVncyBh
cmUgZml4ZWQsIHVuY29tbWVudCB0aGUgaWYgc3RhdGVtZW50IGJlbG93IHRvCisgICAgLy8gZW5h
YmxlIHRoaXMgY2hlY2suCisKKy8vICAgIGlmICh0aW1lRXJyb3JzLmxlbmd0aCA+IDApIHsKKy8v
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisvLyAgICAgICAgdGVzdEZhaWxlZCh0aW1lRXJyb3Jz
Lmxlbmd0aCArICIgdGltaW5nIGVycm9ycyBmb3VuZCBpbiAiICsgbm9kZXNUb0NyZWF0ZSArICIg
cGFubmVyIG5vZGVzLiIpOworLy8gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVycm9y
cy5sZW5ndGg7ICsraykgeworLy8gICAgICAgICAgICB0ZXN0RmFpbGVkKCJJbXB1bHNlIGF0IHNh
bXBsZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBlY3RlZCAiICsgdGltZUVy
cm9yc1trXS5leHBlY3RlZCk7CisvLyAgICAgICAgfQorLy8gICAgfQorCisgICAgaWYgKHN1Y2Nl
c3MpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQi
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJFcXVhbFBvd2VyIHBhbm5lciB0
ZXN0IGZhaWxlZCIpOworICAgIH0KKworICAgIGZpbmlzaEpTVGVzdCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122464</attachid>
            <date>2012-01-13 11:05:33 -0800</date>
            <delta_ts>2012-01-13 14:18:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75767-20120113110532.patch</filename>
            <type>text/plain</type>
            <size>12563</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYjM4YzI3M2U5YjYxNGUxNjFiMmFkM2FlNTFmNTM0YTNjODAzYTc4Li4x
YzdiNGMyNTgyMWE5N2YzZDhkNTc5MGE5NTQzMGZlMTEwNDEwYTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgor
CisgICAgICAgIEVRVUFMUE9XRVIgcGFubmVyIGluY29ycmVjdGx5IGNvbXB1dGVzIGdhaW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3Qg
YWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVxdWFsUG93ZXJQYW5uZXI6OnBhbik6ICBDb3JyZWN0IHRoZSBm
b3JtdWxhLgorCiAyMDEyLTAxLTA5ICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAg
ICAgVXBzdHJlYW0gY2hhbmdlIHRvIGRpc2FibGUgaW5wdXRbY29sb3JdIGNzcyBydWxlcyBmb3Ig
QmxhY2tCZXJyeSBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9FcXVhbFBvd2VyUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Vx
dWFsUG93ZXJQYW5uZXIuY3BwCmluZGV4IDEzYTE5ZDZjZDQ0NTFkN2IyZjk4ODJiNTBjNGVkOWUw
MDMyMGIzYjYuLjBkYTc2MjIzNjQwOTE3MmE1ODQ1NmZmMGI2ZGQ3MmZlNThiYzc4NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3Bw
CkBAIC04NCw4ICs4NCw4IEBAIHZvaWQgRXF1YWxQb3dlclBhbm5lcjo6cGFuKGRvdWJsZSBhemlt
dXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgQXVkaW9CdXMqIGlucHV0CiAgICAgLy8gUGFuIHNt
b290aGx5IGZyb20gbGVmdCB0byByaWdodCB3aXRoIGF6aW11dGggZ29pbmcgZnJvbSAtOTAgLT4g
KzkwIGRlZ3JlZXMuCiAgICAgZG91YmxlIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gMTgwOwogCi0gICAgZG91YmxlIGRlc2lyZWRHYWluTCA9IDAuNSAqIGNvcyhwaURvdWJs
ZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbikgKyAwLjU7Ci0gICAgZG91YmxlIGRlc2lyZWRHYWluUiA9
IHNxcnQoMS4wIC0gZGVzaXJlZEdhaW5MKmRlc2lyZWRHYWluTCk7CisgICAgZG91YmxlIGRlc2ly
ZWRHYWluTCA9IGNvcygwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAg
ZG91YmxlIGRlc2lyZWRHYWluUiA9IHNpbigwLjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3Np
dGlvbik7CiAKICAgICAvLyBEb24ndCBkZS16aXBwZXIgb24gZmlyc3QgcmVuZGVyIGNhbGwuCiAg
ICAgaWYgKG1faXNGaXJzdFJlbmRlcikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjODU5NWFjZjY0ZTc4YTA3NTY3OTky
MjRlYTg4MzViYzkxNjA3YjMuLmI2NTFjOGI5ZmEwYjAyMTZjMThlZTExY2M3YTVjMGMxMWJjZjE2
ZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0xMiAgUmF5bW9uZCBUb3kgICA8cnRv
eUBjaHJvbWl1bS5vcmc+CisgICAgICAgIEVRVUFMUE9XRVIgcGFubmVyIGluY29ycmVjdGx5IGNv
bXB1dGVzIGdhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanM6CisgICAgICAgIChjcmVh
dGVJbXB1bHNlQnVmZmVyKTogTmV3IGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAK
IDIwMTItMDEtMDkgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBVbnJldmlld2VkIHVwZGF0ZSBmb3IgdGVzdF9leHBlY3RhdGlvbnMudHh0
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRkZDVjZWRiMjY0OGQ4YTZlNWUzMzljOWFkNWU1ZjA4MDY2MzYy
NzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxw
b3dlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBlcXVhbC1wb3dlciBwYW5u
ZXIgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBwYW5uZXIg
bm9kZXMuCitQQVNTIExlZnQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1Mg
UmlnaHQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgRXF1YWxQb3dlciBw
YW5uZXIgdGVzdCBwYXNzZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1
YWxwb3dlci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZWEyYjMzMDNmNDJkZDBjOTA1YzY1ZTU1NjA0NGZkNzQ5NjIwOTM0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIu
aHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVyLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBt
b2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIC8vIFRvIHRlc3QgdGhlIHBhbm5l
ciwgd2UgY3JlYXRlIGEgbnVtYmVyIG9mIHBhbm5lciBub2RlcworICAgICAgLy8gZXF1YWxseSBz
cGFjZWQgb24gYSBzZW1pY2lyY2xlIGF0IHVuaXQgZGlzdGFuY2UuICBUaGUKKyAgICAgIC8vIHNl
bWljaXJjbGUgY292ZXJzIHRoZSBhemltdXRoIHJhbmdlIGZyb20gLTkwIHRvIDkwIGRlZywKKyAg
ICAgIC8vIGNvdmVyaW5nIGZ1bGwgbGVmdCB0byBmdWxsIHJpZ2h0LiAgRWFjaCBzb3VyY2UgaXMg
YW4gaW1wdWxzZQorICAgICAgLy8gdHVybmluZyBhdCBhIGRpZmZlcmVudCB0aW1lIGFuZCB3ZSBj
aGVjayB0aGF0IHRoZSByZW5kZXJlZAorICAgICAgLy8gaW1wdWxzZSBoYXMgdGhlIGV4cGVjdGVk
IGdhaW4uCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4K
KyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRl
ICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICBjcmVhdGVU
ZXN0QW5kUnVuKGNvbnRleHQsIG5vZGVzVG9DcmVhdGUpOworICAgICAgfQorCisgICAgICBydW5U
ZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+
CisKKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwppbmRleCBmYzY0MzNiMTE5ZGQ4ODM3ZDcxYmY2
ZTYyZWUyMzZjY2Y2YjBlZGExLi5mOTBiZjkzYWEyYjBmNmE0OWNmNjM4OTVhMzg1MzFmMWFmNzdh
NDE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGlu
Zy5qcwpAQCAtMTA1LDMgKzEwNSwxNyBAQCBmdW5jdGlvbiBmaW5pc2hBdWRpb1Rlc3QoZXZlbnQp
IHsKICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRBdWRpb0RhdGEoYXVkaW9EYXRhKTsKICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiB9CisKKy8vIENyZWF0ZSBhbiBp
bXB1bHNlIGluIGEgYnVmZmVyIG9mIGxlbmd0aCBzYW1wbGVGcmFtZUxlbmd0aAorZnVuY3Rpb24g
Y3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZh
ciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEwMDAsIGNvbnRleHQuc2Ft
cGxlUmF0ZSk7CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGFM
ID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3IgKHZhciBrID0gMDsg
ayA8IG47ICsraykgeworICAgICAgICBkYXRhTFtrXSA9IDA7CisgICAgfQorICAgIGRhdGFMWzBd
ID0gMTsKKworICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44M2E5YTA4MGRmOWI2OTc0NGJhNDVhODdmMjc5NGEyMThlNTRkNDNhCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5n
LmpzCkBAIC0wLDAgKzEsMTg1IEBACit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisKKy8vIFRp
bWUgc3RlcCB3aGVuIGVhY2ggcGFubmVyIG5vZGUgc3RhcnRzLgordmFyIHRpbWVTdGVwID0gMC4w
MDE7CisKKy8vIExlbmd0aCBvZiB0aGUgaW1wdWxzZSBzaWduYWwuCit2YXIgcHVsc2VMZW5ndGhG
cmFtZXMgPSBNYXRoLnJvdW5kKHRpbWVTdGVwICogc2FtcGxlUmF0ZSk7CisKKy8vIEhvdyBtYW55
IHBhbm5lciBub2RlcyB0byBjcmVhdGUgZm9yIHRoZSB0ZXN0Cit2YXIgbm9kZXNUb0NyZWF0ZSA9
IDEwMDsKKworLy8gQmUgc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggZm9yIGFsbCBvZiBvdXIg
bm9kZXMuCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IHRpbWVTdGVwICogKG5vZGVzVG9DcmVh
dGUgKyAxKTsKKworLy8gVGhlc2UgYXJlIGdsb2JhbCBtb3N0bHkgZm9yIGRlYnVnZ2luZy4KK3Zh
ciBjb250ZXh0OwordmFyIGltcHVsc2U7Cit2YXIgYnVmZmVyU291cmNlOwordmFyIHBhbm5lcjsK
K3ZhciBwb3NpdGlvbjsKK3ZhciB0aW1lOworICAgICAgCit2YXIgcmVuZGVyZWRCdWZmZXI7Cit2
YXIgcmVuZGVyZWRMZWZ0OwordmFyIHJlbmRlcmVkUmlnaHQ7CisKK2Z1bmN0aW9uIGNyZWF0ZUdy
YXBoKGNvbnRleHQsIG5vZGVDb3VudCkgeworICAgIGJ1ZmZlclNvdXJjZSA9IG5ldyBBcnJheShu
b2RlQ291bnQpOworICAgIHBhbm5lciA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHBvc2l0
aW9uID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgdGltZSA9IG5ldyBBcnJheShub2RlQ291
bnQpOworICAgIC8vIEFuZ2xlIGJldHdlZW4gcGFubmVyIGxvY2F0aW9ucy4gIChub2RlQ291bnQg
LSAxIGJlY2F1c2Ugd2Ugd2FudAorICAgIC8vIHRvIGluY2x1ZGUgYm90aCAwIGFuZCAxODAgZGVn
LgorICAgIHZhciBhbmdsZVN0ZXAgPSBNYXRoLlBJIC8gKG5vZGVDb3VudCAtIDEpOworCisgICAg
aW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMp
OworCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBub2RlQ291bnQ7ICsraykgeworICAgICAgICBi
dWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBi
dWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxzZTsKKworICAgICAgICBwYW5uZXJba10gPSBj
b250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAgICBwYW5uZXJba10ucGFubmluZ01vZGVsID0g
cGFubmVyLkVRVUFMUE9XRVI7CisgICAgICAgIHBhbm5lcltrXS5kaXN0YW5jZU1vZGVsID0gMDsg
Ly8gTGluZWFyIGRpc3RhbmNlIG1vZGVsLgorCisgICAgICAgIHZhciBhbmdsZSA9IGFuZ2xlU3Rl
cCAqIGs7CisgICAgICAgIHBvc2l0aW9uW2tdID0ge2FuZ2xlIDogYW5nbGUsIHggOiBNYXRoLmNv
cyhhbmdsZSksIHogOiBNYXRoLnNpbihhbmdsZSl9OworICAgICAgICBwYW5uZXJba10uc2V0UG9z
aXRpb24ocG9zaXRpb25ba10ueCwgMCwgcG9zaXRpb25ba10ueik7CisKKyAgICAgICAgYnVmZmVy
U291cmNlW2tdLmNvbm5lY3QocGFubmVyW2tdKTsKKyAgICAgICAgcGFubmVyW2tdLmNvbm5lY3Qo
Y29udGV4dC5kZXN0aW5hdGlvbik7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHNvdXJjZQorICAg
ICAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgICAgICBidWZmZXJTb3VyY2Vba10ubm90
ZU9uKHRpbWVba10pOworICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1bihjb250
ZXh0LCBub2RlQ291bnQpIHsKKyAgICBjcmVhdGVHcmFwaChjb250ZXh0LCBub2RlQ291bnQpOwor
CisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CisgICAgY29udGV4dC5zdGFy
dFJlbmRlcmluZygpOworfQorCisvLyBNYXAgb3VyIHBvc2l0aW9uIGFuZ2xlIHRvIHRoZSBhemlt
dXRoIGFuZ2xlIChpbiBkZWdyZWVzKS4KKy8vCisvLyBBbiBhbmdsZSBvZiAwIGNvcnJlc3BvbmRz
IHRvIGFuIGF6aW11dGggb2YgOTAgZGVnOyBwaSwgdG8gLTkwIGRlZy4KK2Z1bmN0aW9uIGFuZ2xl
VG9BemltdXRoKGFuZ2xlKSB7CisgICAgcmV0dXJuIDkwIC0gYW5nbGUgKiAxODAgLyBNYXRoLlBJ
OworfQorCisvLyBUaGUgZ2FpbiBjYXVzZWQgYnkgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2Rl
bAorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oYW5nbGUpIHsKKyAgICB2YXIgYXppbXV0aCA9IGFu
Z2xlVG9BemltdXRoKGFuZ2xlKTsKKworICAgIHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gMTgwOworCisgICAgdmFyIGdhaW5MID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBh
blBvc2l0aW9uKTsKKyAgICB2YXIgZ2FpblIgPSBNYXRoLnNpbigwLjUgKiBNYXRoLlBJICogcGFu
UG9zaXRpb24pOworCisgICAgcmV0dXJuIHsgbGVmdCA6IGdhaW5MLCByaWdodCA6IGdhaW5SIH07
Cit9CisKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KSB7CisgICAgcmVuZGVyZWRCdWZmZXIg
PSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICByZW5kZXJlZExlZnQgPSByZW5kZXJlZEJ1ZmZl
ci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICByZW5kZXJlZFJpZ2h0ID0gcmVuZGVyZWRCdWZmZXIu
Z2V0Q2hhbm5lbERhdGEoMSk7CisKKyAgICAvLyBUaGUgbWF4IGVycm9yIHdlIGFsbG93IGJldHdl
ZW4gdGhlIHJlbmRlcmVkIGltcHVsc2UgYW5kIHRoZQorICAgIC8vIGV4cGVjdGVkIHZhbHVlLiAg
VGhpcyB2YWx1ZSBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkLiAgU2V0CisgICAgLy8gdG8g
MCB0byBtYWtlIHRoZSB0ZXN0IGZhaWwgdG8gc2VlIHdoYXQgdGhlIGFjdHVhbCBlcnJvciBpcy4K
KyAgICB2YXIgbWF4QWxsb3dlZEVycm9yID0gNi40ZS03OworICAKKyAgICB2YXIgc3VjY2VzcyA9
IHRydWU7CisKKyAgICAvLyBOdW1iZXIgb2YgaW1wdWxzZXMgZm91bmQgaW4gdGhlIHJlbmRlcmVk
IHJlc3VsdC4KKyAgICB2YXIgaW1wdWxzZUNvdW50ID0gMDsKKworICAgIC8vIE1heCAocmVsYXRp
dmUpIGVycm9yIGFuZCB0aGUgaW5kZXggb2YgdGhlIG1heGltYSBmb3IgdGhlIGxlZnQKKyAgICAv
LyBhbmQgcmlnaHQgY2hhbm5lbHMuCisgICAgdmFyIG1heEVycm9yTCA9IDA7CisgICAgdmFyIG1h
eEVycm9ySW5kZXhMID0gMDsKKyAgICB2YXIgbWF4RXJyb3JSID0gMDsKKyAgICB2YXIgbWF4RXJy
b3JJbmRleFIgPSAwOworCisgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHRoYXQgZG9uJ3QgbWF0
Y2ggb3VyIGV4cGVjdGVkIGxvY2F0aW9ucy4KKyAgICB2YXIgdGltZUNvdW50ID0gMDsKKworICAg
IC8vIExvY2F0aW9ucyBvZiB3aGVyZSB0aGUgaW1wdWxzZXMgYXJlbid0IGF0IHRoZSBleHBlY3Rl
ZCBsb2NhdGlvbnMuCisgICAgdmFyIHRpbWVFcnJvcnMgPSBuZXcgQXJyYXkoKTsKKworICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgcmVuZGVyZWRMZWZ0Lmxlbmd0aDsgKytrKSB7CisgICAgICAgIC8v
IFdlIGFzc3VtZSB0aGF0IHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBzdGFydCBhdCB0aGUg
c2FtZSBpbnN0YW50LgorICAgICAgICBpZiAocmVuZGVyZWRMZWZ0W2tdICE9IDAgfHwgcmVuZGVy
ZWRSaWdodFtrXSAhPSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgZ2FpbiBmb3Ig
dGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLgorICAgICAgICAgICAgdmFyIHBhbm5lckdhaW4g
PSBlcXVhbFBvd2VyR2Fpbihwb3NpdGlvbltpbXB1bHNlQ291bnRdLmFuZ2xlKTsKKyAgICAgICAg
ICAgIHZhciBleHBlY3RlZEwgPSBwYW5uZXJHYWluLmxlZnQ7CisgICAgICAgICAgICB2YXIgZXhw
ZWN0ZWRSID0gcGFubmVyR2Fpbi5yaWdodDsKKworICAgICAgICAgICAgLy8gQWJzb2x1dGUgZXJy
b3IgaW4gdGhlIGdhaW4uCisgICAgICAgICAgICB2YXIgZXJyb3JMID0gTWF0aC5hYnMocmVuZGVy
ZWRMZWZ0W2tdIC0gZXhwZWN0ZWRMKTsKKyAgICAgICAgICAgIHZhciBlcnJvclIgPSBNYXRoLmFi
cyhyZW5kZXJlZFJpZ2h0W2tdIC0gZXhwZWN0ZWRSKTsKKworICAgICAgICAgICAgaWYgKE1hdGgu
YWJzKGVycm9yTCkgPiBtYXhFcnJvckwpIHsKKyAgICAgICAgICAgICAgICBtYXhFcnJvckwgPSBN
YXRoLmFicyhlcnJvckwpOworICAgICAgICAgICAgICAgIG1heEVycm9ySW5kZXhMID0gaW1wdWxz
ZUNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE1hdGguYWJzKGVycm9yUikg
PiBtYXhFcnJvclIpIHsKKyAgICAgICAgICAgICAgICBtYXhFcnJvclIgPSBNYXRoLmFicyhlcnJv
clIpOworICAgICAgICAgICAgICAgIG1heEVycm9ySW5kZXhSID0gaW1wdWxzZUNvdW50OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBpbXB1bHNlcyB0
aGF0IGRpZG4ndCBzaG93IHVwIHdoZXJlIHdlCisgICAgICAgICAgICAvLyBleHBlY3RlZCB0aGVt
IHRvIGJlLgorICAgICAgICAgICAgaWYgKGsgIT0gTWF0aC5yb3VuZChzYW1wbGVSYXRlICogdGlt
ZVtpbXB1bHNlQ291bnRdKSkgeworICAgICAgICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUNvdW50
XSA9IHsgYWN0dWFsIDogaywgZXhwZWN0ZWQgOiBNYXRoLnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1l
W2ltcHVsc2VDb3VudF0pfTsKKyAgICAgICAgICAgICAgICArK3RpbWVDb3VudDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICsraW1wdWxzZUNvdW50OworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3JlYXRlKSB7CisgICAgICAgIHRlc3RQYXNz
ZWQoIk51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgcGFubmVyIG5vZGVz
LiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIk51bWJlciBvZiBpbXB1bHNl
cyBpcyBpbmNvcnJlY3QuICAoRm91bmQgIiArIGltcHVsc2VDb3VudCArICIgYnV0IGV4cGVjdGVk
ICIgKyBub2Rlc1RvQ3JlYXRlICsgIikiKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
IH0KKworICAgIGlmIChtYXhFcnJvckwgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoIkxlZnQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJMZWZ0IGNoYW5uZWwgZ2FpbiB2YWx1ZXMgYXJl
IGluY29ycmVjdC4gIE1heCBlcnJvciA9ICIgKyBtYXhFcnJvckwgKyAiIGF0IHRpbWUgIiArIG1h
eEVycm9ySW5kZXhMIC8gc2FtcGxlUmF0ZSArICIgKHRocmVzaG9sZCA9ICIgKyBtYXhBbGxvd2Vk
RXJyb3IgKyAiKSIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGlmIChtYXhFcnJvclIgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgIHRlc3RQYXNzZWQo
IlJpZ2h0IGNoYW5uZWwgZ2FpbiB2YWx1ZXMgYXJlIGNvcnJlY3QuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgiUmlnaHQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgaW5jb3Jy
ZWN0LiAgTWF4IGVycm9yID0gIiArIG1heEVycm9yUiArICIgYXQgdGltZSAiICsgbWF4RXJyb3JJ
bmRleFIgLyBzYW1wbGVSYXRlICsgIiAodGhyZXNob2xkID0gIiArIG1heEFsbG93ZWRFcnJvciAr
ICIpIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTZWUgYnVn
IDc1OTk2IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5OTYpCisg
ICAgLy8gYW5kIDc2MDczIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwNzMpLgorICAgIC8vIFdoZW4gdGhvc2UgYnVncyBhcmUgZml4ZWQsIHVuY29tbWVudCB0aGUg
aWYgc3RhdGVtZW50IGJlbG93IHRvCisgICAgLy8gZW5hYmxlIHRoaXMgY2hlY2suCisKKy8vICAg
IGlmICh0aW1lRXJyb3JzLmxlbmd0aCA+IDApIHsKKy8vICAgICAgICBzdWNjZXNzID0gZmFsc2U7
CisvLyAgICAgICAgdGVzdEZhaWxlZCh0aW1lRXJyb3JzLmxlbmd0aCArICIgdGltaW5nIGVycm9y
cyBmb3VuZCBpbiAiICsgbm9kZXNUb0NyZWF0ZSArICIgcGFubmVyIG5vZGVzLiIpOworLy8gICAg
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVycm9ycy5sZW5ndGg7ICsraykgeworLy8gICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJJbXB1bHNlIGF0IHNhbXBsZSAiICsgdGltZUVycm9yc1trXS5h
Y3R1YWwgKyAiIGJ1dCBleHBlY3RlZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisvLyAg
ICAgICAgfQorLy8gICAgfQorCisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZCgiRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJFcXVhbFBvd2VyIHBhbm5lciB0ZXN0IGZhaWxlZCIpOworICAgIH0KKwor
ICAgIGZpbmlzaEpTVGVzdCgpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>