<?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>75065</bug_id>
          
          <creation_ts>2011-12-21 21:59:56 -0800</creation_ts>
          <short_desc>run-api-tests should be able to run individual suites and tests</short_desc>
          <delta_ts>2012-01-06 14:47:44 -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>Tools / Tests</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="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>aroben</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>526000</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 21:59:56 -0800</bug_when>
    <thetext>run-api-tests currently runs all tests all the time.  It would be useful if it could run specific suites of tests and/or specific tests on a given invocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526005</commentid>
    <comment_count>1</comment_count>
      <attachid>120272</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 22:10:01 -0800</bug_when>
    <thetext>Created attachment 120272
Patch 1 of 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526007</commentid>
    <comment_count>2</comment_count>
      <attachid>120273</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 22:11:20 -0800</bug_when>
    <thetext>Created attachment 120273
Patch 2 of 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526009</commentid>
    <comment_count>3</comment_count>
      <attachid>120274</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 22:12:05 -0800</bug_when>
    <thetext>Created attachment 120274
Patch 3 of 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526010</commentid>
    <comment_count>4</comment_count>
      <attachid>120275</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 22:12:54 -0800</bug_when>
    <thetext>Created attachment 120275
Patch 4 of 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526012</commentid>
    <comment_count>5</comment_count>
      <attachid>120276</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 22:13:47 -0800</bug_when>
    <thetext>Created attachment 120276
Patch 5 of 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526237</commentid>
    <comment_count>6</comment_count>
      <attachid>120275</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-12-22 07:13:55 -0800</bug_when>
    <thetext>Comment on attachment 120275
Patch 4 of 5

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

&gt; Tools/Scripts/run-api-tests:79
&gt; -    &apos;build!&apos; =&gt; \$build
&gt; +    &apos;build!&apos; =&gt; \$build,
&gt; +    &apos;suite=s@&apos; =&gt; \$suiteNames

This might be a little clearer if you did this:

my @suiteNames;
...
    &apos;suite=s&apos; =&gt; \@suiteNames

Supposedly that means the same thing as what you did, except that then you get to deal with an array instead of an array reference in your global variable.

I&apos;d put a trailing comma at the end of this hash so that we don&apos;t have to keep touching the last line as we add more options.

&gt; Tools/Scripts/run-api-tests:95
&gt;  if ($dumpTests) {
&gt; -    dumpTestsBySuite(%testsToRun);
&gt; +    dumpTestsBySuite(%allTests);
&gt;      exit 0;
&gt;  }

Should we filter based on --suite here, too? Seems like we should.

&gt; Tools/Scripts/run-api-tests:110
&gt; +my $failed;
&gt; +if ($suiteNames) {
&gt; +    my %tests;
&gt; +    for my $suite (@$suiteNames) {
&gt; +        if (exists $allTests{$suite}) {
&gt; +            $tests{$suite} = $allTests{$suite};
&gt; +        } else {
&gt; +            warn &quot;Suite &apos;$suite&apos; does not exist!&quot;;
&gt; +        }
&gt; +    }
&gt; +    $failed = runTestsBySuite(%tests, $verbose);
&gt; +} else {
&gt; +    $failed = runTestsBySuite(%allTests, $verbose);
&gt;  }

Maybe this would be clearer if you did something like:

my @suitesToRun = @$suiteNames or keys %allTests;
my %testsToRun;
for my $suite (@suitesToRun) {
    ...
}
exit runTestsBySuite(%testsToRun, $verbose);

That way you&apos;d have more shared code. It might make integrating the --dump flag easier, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526238</commentid>
    <comment_count>7</comment_count>
      <attachid>120276</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-12-22 07:16:31 -0800</bug_when>
    <thetext>Comment on attachment 120276
Patch 5 of 5

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

r+/cq- since this will likely change based on how you revise patch 4.

&gt; Tools/Scripts/run-api-tests:79
&gt; -    &apos;suite=s@&apos; =&gt; \$suiteNames
&gt; +    &apos;suite=s@&apos; =&gt; \$suiteNames,
&gt; +    &apos;test=s@&apos; =&gt; \$testNames

Same comments as before about using an array and a trailing comma.

&gt; Tools/Scripts/run-api-tests:120
&gt; -if ($suiteNames) {
&gt; +if ($suiteNames || $testNames) {
&gt;      my %tests;
&gt; -    for my $suite (@$suiteNames) {
&gt; -        if (exists $allTests{$suite}) {
&gt; -            $tests{$suite} = $allTests{$suite};
&gt; -        } else {
&gt; -            warn &quot;Suite &apos;$suite&apos; does not exist!&quot;;
&gt; +    if ($suiteNames) {
&gt; +        for my $suite (@$suiteNames) {
&gt; +            if (exists $allTests{$suite}) {
&gt; +                $tests{$suite} = $allTests{$suite};
&gt; +            } else {
&gt; +                warn &quot;Suite &apos;$suite&apos; does not exist!&quot;;
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +    if ($testNames) {
&gt; +        for my $testName (@$testNames) {
&gt; +            my ($suite, $test) = split(/\./, $testName);
&gt; +            if (!exists $allTests{$suite}) {
&gt; +                warn &quot;Suite &apos;$suite&apos; does not exist!&quot;;
&gt; +            } elsif (!grep($test, @{$allTests{$suite}})) {
&gt; +                warn &quot;Test &apos;$testName&apos; in suite &apos;$suite&apos; does not exist!&quot;;
&gt; +            } else {
&gt; +                push(@{$tests{$suite}}, $test);
&gt; +            }
&gt;          }
&gt;      }

It seems like this would all be a lot simpler if we stored &quot;suite.test&quot; names in an array instead of the %allTests hash. Then you could just use grep for everything!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526239</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-12-22 07:16:44 -0800</bug_when>
    <thetext>Nice patch series! Very easy to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526268</commentid>
    <comment_count>9</comment_count>
      <attachid>120272</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 08:32:34 -0800</bug_when>
    <thetext>Comment on attachment 120272
Patch 1 of 5

Clearing flags on attachment: 120272

Committed r103545: &lt;http://trac.webkit.org/changeset/103545&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526277</commentid>
    <comment_count>10</comment_count>
      <attachid>120274</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 08:42:51 -0800</bug_when>
    <thetext>Comment on attachment 120274
Patch 3 of 5

Rejecting attachment 120274 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 exit_code: 1

Parsed 2 diffs from patch file(s).
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/Scripts/run-api-tests
Hunk #1 FAILED at 41.
Hunk #2 succeeded at 93 (offset 1 line).
Hunk #3 FAILED at 113.
Hunk #4 succeeded at 157 (offset 14 lines).
2 out of 4 hunks FAILED -- saving rejects to file Tools/Scripts/run-api-tests.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Adam Roben&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/10996523</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526290</commentid>
    <comment_count>11</comment_count>
      <attachid>120273</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 09:02:08 -0800</bug_when>
    <thetext>Comment on attachment 120273
Patch 2 of 5

Rejecting attachment 120273 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ngeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 TestWebKitAPI: initialize the main thread before running tests

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 158.

Full output: http://queues.webkit.org/results/10997528</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526291</commentid>
    <comment_count>12</comment_count>
      <attachid>120274</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 09:03:03 -0800</bug_when>
    <thetext>Comment on attachment 120274
Patch 3 of 5

Rejecting attachment 120274 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 exit_code: 1

Parsed 2 diffs from patch file(s).
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/Scripts/run-api-tests
Hunk #1 FAILED at 41.
Hunk #2 succeeded at 93 (offset 1 line).
Hunk #3 FAILED at 113.
Hunk #4 succeeded at 157 (offset 14 lines).
2 out of 4 hunks FAILED -- saving rejects to file Tools/Scripts/run-api-tests.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Adam Roben&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/10999521</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526304</commentid>
    <comment_count>13</comment_count>
      <attachid>120273</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-22 09:20:20 -0800</bug_when>
    <thetext>Comment on attachment 120273
Patch 2 of 5

Clearing flags on attachment: 120273

Committed r103549: &lt;http://trac.webkit.org/changeset/103549&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526315</commentid>
    <comment_count>14</comment_count>
      <attachid>120274</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-22 09:31:05 -0800</bug_when>
    <thetext>Comment on attachment 120274
Patch 3 of 5

Clearing flags on attachment: 120274

Committed r103551: &lt;http://trac.webkit.org/changeset/103551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530675</commentid>
    <comment_count>15</comment_count>
      <attachid>121341</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-05 15:12:57 -0800</bug_when>
    <thetext>Created attachment 121341
Patch 4 of 5 v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530676</commentid>
    <comment_count>16</comment_count>
      <attachid>121342</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-05 15:13:57 -0800</bug_when>
    <thetext>Created attachment 121342
Patch 5 of 5 v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530683</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-05 15:18:57 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 120275 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120275&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/run-api-tests:95
&gt; &gt;  if ($dumpTests) {
&gt; &gt; -    dumpTestsBySuite(%testsToRun);
&gt; &gt; +    dumpTestsBySuite(%allTests);
&gt; &gt;      exit 0;
&gt; &gt;  }
&gt; 
&gt; Should we filter based on --suite here, too? Seems like we should.

Patch 5 of 5 v2 now filters when using --dump as well.


(In reply to comment #7)
&gt; (From update of attachment 120276 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120276&amp;action=review
&gt; 
&gt; It seems like this would all be a lot simpler if we stored &quot;suite.test&quot; names in an array instead of the %allTests hash. Then you could just use grep for everything!

This is what Patch 4 of 5 v2 does.  I think the results are much nicer, and instead of forcing users to specify multiple, separate --suite and --test arguments (which is so tedious anyway), you can now simply list the suites and tests that you want to run on the command-line:

$ ./Tools/Scripts/run-api-tests --no-build --dump WebKit1 WTF_Vector RetainPtr.AdoptNS
Dumping test cases
------------------
RetainPtr:
   AdoptNS
WTF_Vector:
   Iterator
   ReverseIterator
   ReversedProxy
WebKit1:
   DOMRangeOfString
   RenderedImageFromDOMRange
   StringByEvaluatingJavaScriptFromString
   SubresourceErrorCrash
------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531059</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-01-06 06:38:47 -0800</bug_when>
    <thetext>&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 120276 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120276&amp;action=review
&gt; &gt; 
&gt; &gt; It seems like this would all be a lot simpler if we stored &quot;suite.test&quot; names in an array instead of the %allTests hash. Then you could just use grep for everything!
&gt; 
&gt; This is what Patch 4 of 5 v2 does.  I think the results are much nicer, and instead of forcing users to specify multiple, separate --suite and --test arguments (which is so tedious anyway), you can now simply list the suites and tests that you want to run on the command-line:
&gt; 
&gt; $ ./Tools/Scripts/run-api-tests --no-build --dump WebKit1 WTF_Vector RetainPtr.AdoptNS

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531060</commentid>
    <comment_count>19</comment_count>
      <attachid>121341</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-01-06 06:46:23 -0800</bug_when>
    <thetext>Comment on attachment 121341
Patch 4 of 5 v2

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

&gt; Tools/Scripts/run-api-tests:117
&gt; +            print $suite . &quot;:\n&quot;;
&gt; +        }
&gt; +        print &quot;   &quot; . $test . &quot;\n&quot;;

In both of these cases, I&apos;d either use string interpolation:

print &quot;    $test\n&quot;;

or multiple arguments to print:

print &quot;    &quot;, $test, &quot;\n&quot;;

Explicit concatenation seems a little funny.

&gt; Tools/Scripts/run-api-tests:136
&gt; +        if ($failed) {
&gt; +            $anyFailures = 1;
&gt;          }

I know this isn&apos;t new code, but it seems like we could just say $anyFailures ||= $failed.

&gt; Tools/Scripts/run-api-tests:333
&gt; +sub sortTestList($$)
&gt; +{
&gt; +    my ($a, $b) = @_;
&gt; +    my ($suiteA, $testA) = split(/\./, $a);
&gt; +    my ($suiteB, $testB) = split(/\./, $b);
&gt; +    return $suiteA cmp $suiteB ? $suiteA cmp $suiteB : $testA cmp $testB;
&gt; +}

How is this different from the standard sort?

|| in Perl returns the value of the expression that was true-ish, so you can just say:

return $suiteA cmp $suiteB || $testA cmp $testB;

(Assuming cmp has higher precedence than ||.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531065</commentid>
    <comment_count>20</comment_count>
      <attachid>121342</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2012-01-06 06:52:54 -0800</bug_when>
    <thetext>Comment on attachment 121342
Patch 5 of 5 v2

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

&gt; Tools/Scripts/run-api-tests:139
&gt; +sub filterTests(\@\@)
&gt; +{
&gt; +    my ($tests, $filterList) = @_;
&gt; +    my %suiteNames;
&gt; +    my %testNames;
&gt; +
&gt; +    foreach my $filter (@$filterList) {
&gt; +        if ($filter =~ m/\./) {
&gt; +            $testNames{$filter} = 1;
&gt; +        } else {
&gt; +            $suiteNames{$filter} = 1;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    my @filteredTests = grep {
&gt; +        my $suite = (split(/\./, $_))[0];
&gt; +        exists $suiteNames{$suite} || exists $testNames{$_};
&gt; +    } @$tests;
&gt; +
&gt; +    return @filteredTests;
&gt; +}

Maybe we don&apos;t need to be so strict. The strings passed on the command line could just be treated as prefixes of fully-qualified test names. Any test that starts with a prefix that was specified on the command line will be run. That would allow someone to specify &quot;MetaAllocatorTest.Repeat&quot; and have all the tests that start with that prefix run, or to specify &quot;RetainPtr&quot; and have both the RetainPtr and RetainPtrHashing suites run. (If they just want the RetainPtr suite to run they can say &quot;RetainPtr.&quot;.) It would probably allow a slightly simpler implementation too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531288</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-06 12:43:09 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 121341 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121341&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/run-api-tests:117
&gt; &gt; +            print $suite . &quot;:\n&quot;;
&gt; &gt; +        }
&gt; &gt; +        print &quot;   &quot; . $test . &quot;\n&quot;;
&gt; 
&gt; In both of these cases, I&apos;d either use string interpolation:
&gt; 
&gt; print &quot;    $test\n&quot;;
&gt; 
&gt; or multiple arguments to print:
&gt; 
&gt; print &quot;    &quot;, $test, &quot;\n&quot;;
&gt; 
&gt; Explicit concatenation seems a little funny.

This was pre-existing, but I can fix it.  (I actually considered it, but didn&apos;t want to get caught doing too much clean-up. :)

&gt; &gt; Tools/Scripts/run-api-tests:136
&gt; &gt; +        if ($failed) {
&gt; &gt; +            $anyFailures = 1;
&gt; &gt;          }
&gt; 
&gt; I know this isn&apos;t new code, but it seems like we could just say $anyFailures ||= $failed.

Will do.

&gt; &gt; Tools/Scripts/run-api-tests:333
&gt; &gt; +sub sortTestList($$)
&gt; &gt; +{
&gt; &gt; +    my ($a, $b) = @_;
&gt; &gt; +    my ($suiteA, $testA) = split(/\./, $a);
&gt; &gt; +    my ($suiteB, $testB) = split(/\./, $b);
&gt; &gt; +    return $suiteA cmp $suiteB ? $suiteA cmp $suiteB : $testA cmp $testB;
&gt; &gt; +}
&gt; 
&gt; How is this different from the standard sort?

It&apos;s sorting by suite, then test.  I wasn&apos;t sure whether sorting alphabetically using the whole &quot;SuiteName.TestName&quot; string would work.  (Looking at &quot;man ascii&quot;, though, &quot;.&quot; comes before all letters, numbers and underscore, so we probably don&apos;t need this.

&gt; || in Perl returns the value of the expression that was true-ish, so you can just say:
&gt; 
&gt; return $suiteA cmp $suiteB || $testA cmp $testB;
&gt; 
&gt; (Assuming cmp has higher precedence than ||.)

For some reason, I was thinking &quot;-1 || 1&quot; would evaluate to &quot;true&quot; instead of &quot;-1&quot;.  I think I can simply remove the custom sorting function like you said.


(In reply to comment #20)
&gt; (From update of attachment 121342 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121342&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/run-api-tests:139
&gt; &gt; +sub filterTests(\@\@)
&gt; &gt; +{
&gt; &gt; +    my ($tests, $filterList) = @_;
&gt; &gt; +    my %suiteNames;
&gt; &gt; +    my %testNames;
&gt; &gt; +
&gt; &gt; +    foreach my $filter (@$filterList) {
&gt; &gt; +        if ($filter =~ m/\./) {
&gt; &gt; +            $testNames{$filter} = 1;
&gt; &gt; +        } else {
&gt; &gt; +            $suiteNames{$filter} = 1;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    my @filteredTests = grep {
&gt; &gt; +        my $suite = (split(/\./, $_))[0];
&gt; &gt; +        exists $suiteNames{$suite} || exists $testNames{$_};
&gt; &gt; +    } @$tests;
&gt; &gt; +
&gt; &gt; +    return @filteredTests;
&gt; &gt; +}
&gt; 
&gt; Maybe we don&apos;t need to be so strict. The strings passed on the command line could just be treated as prefixes of fully-qualified test names. Any test that starts with a prefix that was specified on the command line will be run. That would allow someone to specify &quot;MetaAllocatorTest.Repeat&quot; and have all the tests that start with that prefix run, or to specify &quot;RetainPtr&quot; and have both the RetainPtr and RetainPtrHashing suites run. (If they just want the RetainPtr suite to run they can say &quot;RetainPtr.&quot;.) It would probably allow a slightly simpler implementation too.

I was wondering about doing prefix searches, but I didn&apos;t realize you could limit the search to a single suite by appending a &quot;.&quot; on the end of the name.  &quot;WTF&quot; would find both &quot;WTF&quot; and WTF_Vector&quot;, but &quot;WTF.&quot; would just match the tests in the &quot;WTF&quot; suite.  This seems more flexible (if slightly more obscure), so I&apos;ll switch to doing that instead.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531421</commentid>
    <comment_count>22</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-06 14:47:30 -0800</bug_when>
    <thetext>Committed r104342: &lt;http://trac.webkit.org/changeset/104342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531422</commentid>
    <comment_count>23</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2012-01-06 14:47:44 -0800</bug_when>
    <thetext>Committed r104343: &lt;http://trac.webkit.org/changeset/104343&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120272</attachid>
            <date>2011-12-21 22:10:01 -0800</date>
            <delta_ts>2011-12-22 08:32:34 -0800</delta_ts>
            <desc>Patch 1 of 5</desc>
            <filename>bug-75065-20111221221000.patch</filename>
            <type>text/plain</type>
            <size>2493</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGY3M2Q2MDM2MDkwYjExNjE5YmZiZDY4MWE4YWM5ODc2
ZTAxYWE1Zi4uOGIwZTRjMmUwMDVlY2RiMzQyZTIwMjZhNjgxYjk1MjRiNjcyNTBhNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogZHVtcEFsbFRlc3RzKCkgc2hvdWxkIG5vdCB1c2UgZ2xvYmFs
IHZhcmlhYmxlcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFBhcnQgb2Y6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzc1MDY1PiBydW4tYXBpLXRlc3RzIHNo
b3VsZCBiZSBhYmxlIHRvIHJ1biBpbmRpdmlkdWFsIHN1aXRlcyBhbmQgdGVzdHMKKworICAgICAg
ICAqIFNjcmlwdHMvcnVuLWFwaS10ZXN0czogUmVuYW1lZCAkZHVtcCB0byAkZHVtcFRlc3RzLgor
ICAgICAgICAoZHVtcFRlc3RzQnlTdWl0ZSk6IFJlbmFtZSBmcm9tIGR1bXBBbGxUZXN0cygpIGFu
ZCBwYXNzIGluCisgICAgICAgIGdsb2JhbCBkYXRhIGFzIGFuIGFyZ3VtZW50LiAgU29ydCBzdWl0
ZSBuYW1lcyBhbmQgdGVzdCBuYW1lcworICAgICAgICBhbHBoYWJldGljYWxseSB0byBtYXRjaCBv
dXRwdXQgd2hlbiBydW5uaW5nIHRlc3RzLgorCiAyMDExLTEyLTA4ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFdlYktpdFRlc3RSdW5u
ZXIgY3Jhc2hlcyB3aXRoIGRlYnVnIGJ1aWxkcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9y
dW4tYXBpLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCmluZGV4IDhhZGQ4MzQ5
MDY4NDA5ODdlNjkyOWNkNjg2ODEyNjRmMmIxZjY1NzQuLmNmYzRlNmFiOWRlZDFmYzk0YzI4NTE5
YTBmYzg1M2JmMGNlZGQ5MDIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0
cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKQEAgLTM5LDcgKzM5LDcgQEAgdXNl
IHdlYmtpdGRpcnM7CiB1c2UgVkNTVXRpbHM7CiAKIHN1YiBidWlsZFRlc3RUb29sKCk7Ci1zdWIg
ZHVtcEFsbFRlc3RzKCk7CitzdWIgZHVtcFRlc3RzQnlTdWl0ZShcJSk7CiBzdWIgcG9wdWxhdGVU
ZXN0cygpOwogc3ViIHJ1bkFsbFRlc3RzKCk7CiBzdWIgcnVuQWxsVGVzdHNJblN1aXRlKCQpOwpA
QCAtNTUsNyArNTUsNyBAQCBteSAkdGltZW91dCA9IDEwOwogCiBteSAkc2hvd0hlbHAgPSAwOwog
bXkgJHZlcmJvc2UgPSAwOwotbXkgJGR1bXAgPSAwOworbXkgJGR1bXBUZXN0cyA9IDA7CiBteSAk
YnVpbGQgPSAxOwogbXkgJGJ1aWxkRGVmYXVsdCA9ICRidWlsZCA/ICJidWlsZCIgOiAiZG8gbm90
IGJ1aWxkIjsKIG15IEB0ZXN0c0ZhaWxlZDsKQEAgLTc0LDcgKzc0LDcgQEAgRU9GCiBHZXRPcHRp
b25zKAogICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAogICAgICd2ZXJib3NlfHYnID0+IFwkdmVy
Ym9zZSwKLSAgICAnZHVtcHxkJyA9PiBcJGR1bXAsCisgICAgJ2R1bXB8ZCcgPT4gXCRkdW1wVGVz
dHMsCiAgICAgJ2J1aWxkIScgPT4gXCRidWlsZAogKTsKIApAQCAtODgsOCArODgsOCBAQCBidWls
ZFRlc3RUb29sKCkgaWYgJGJ1aWxkOwogc2V0UGF0aEZvclJ1bm5pbmdXZWJLaXRBcHAoXCVFTlYp
OwogbXkgJXRlc3RzVG9SdW4gPSBwb3B1bGF0ZVRlc3RzKCk7CiAKLWlmICgkZHVtcCkgewotICAg
IGR1bXBBbGxUZXN0cygpOworaWYgKCRkdW1wVGVzdHMpIHsKKyAgICBkdW1wVGVzdHNCeVN1aXRl
KCV0ZXN0c1RvUnVuKTsKICAgICBleGl0IDA7CiB9CiAKQEAgLTEwMiwxMyArMTAyLDE0IEBAIHN1
YiBpc1N1cHBvcnRlZFBsYXRmb3JtKCkKICAgICByZXR1cm4gaXNBcHBsZU1hY1dlYktpdCgpIHx8
IGlzQXBwbGVXaW5XZWJLaXQoKSB8fCBpc0Nocm9taXVtKCk7CiB9CiAKLXN1YiBkdW1wQWxsVGVz
dHMoKQorc3ViIGR1bXBUZXN0c0J5U3VpdGUoXCUpCiB7CisgICAgbXkgKCR0ZXN0c0J5U3VpdGUp
ID0gQF87CiAgICAgcHJpbnQgIkR1bXBpbmcgdGVzdCBjYXNlc1xuIjsKICAgICBwcmludCAiLS0t
LS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIGZvciBteSAkc3VpdGUgKGtleXMgJXRlc3RzVG9SdW4p
IHsKKyAgICBmb3IgbXkgJHN1aXRlIChzb3J0IGtleXMgJSR0ZXN0c0J5U3VpdGUpIHsKICAgICAg
ICAgcHJpbnQgJHN1aXRlIC4gIjpcbiI7Ci0gICAgICAgIHByaW50IG1hcCB7ICIgICAiIC4gJF8g
LiAiXG4iIH0gQHsgJHRlc3RzVG9SdW57JHN1aXRlfSB9OworICAgICAgICBwcmludCBtYXAgeyAi
ICAgIiAuICRfIC4gIlxuIiB9IHNvcnQgQHsgJHRlc3RzQnlTdWl0ZS0+eyRzdWl0ZX0gfTsKICAg
ICB9CiAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120273</attachid>
            <date>2011-12-21 22:11:20 -0800</date>
            <delta_ts>2011-12-22 09:20:20 -0800</delta_ts>
            <desc>Patch 2 of 5</desc>
            <filename>bug-75065-20111221221119.patch</filename>
            <type>text/plain</type>
            <size>2354</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGIwZTRjMmUwMDVlY2RiMzQyZTIwMjZhNjgxYjk1MjRi
NjcyNTBhNC4uODE5NDEwYThjZjkyNGE3MjZmZmEyZmQ4YTE2ZGUzMzk0MjQ4MzJmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIw
IEBACiAyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogaW5saW5lIHJ1bkFsbFRlc3RzSW5TdWl0ZSgpIGludG8gcnVu
QWxsVGVzdHMoKQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFBhcnQgb2Y6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzc1MDY1PiBydW4tYXBpLXRlc3RzIHNo
b3VsZCBiZSBhYmxlIHRvIHJ1biBpbmRpdmlkdWFsIHN1aXRlcyBhbmQgdGVzdHMKKworICAgICAg
ICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc3kgdG8gcnVuIG9uZSBvciBtb3JlIGluZGl2aWR1YWwg
c3VpdGVzLAorICAgICAgICBvciBvbmUgbW9yZSBpbmRpdmlkdWFsIHRlc3RzLCBpdCdzIGVhc2ll
ciB0byBjYWxsIGEgc2luZ2xlCisgICAgICAgIG1ldGhvZCB3aXRoIGRpZmZlcmVudCBkYXRhIHN0
cnVjdHVyZXMgdGhhbiBpbmRpdmlkdWFsIG1ldGhvZHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1
bi1hcGktdGVzdHM6CisgICAgICAgIChydW5BbGxUZXN0cyk6IElubGluZSBydW5BbGxUZXN0c0lu
U3VpdGUoKS4KKworMjAxMS0xMi0yMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgorCiAgICAgICAgIHJ1bi1hcGktdGVzdHM6IGR1bXBBbGxUZXN0cygpIHNob3VsZCBub3QgdXNl
IGdsb2JhbCB2YXJpYWJsZXMKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMv
cnVuLWFwaS10ZXN0cwppbmRleCBjZmM0ZTZhYjlkZWQxZmM5NGMyODUxOWEwZmM4NTNiZjBjZWRk
OTAyLi4xZWU4ZGQ1ODBhMzY1MTE1MDEwZDQ2MDgxMjA1NjNkZjc0NmQ5ODQwIDEwMDc1NQotLS0g
YS9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYXBp
LXRlc3RzCkBAIC00Miw3ICs0Miw2IEBAIHN1YiBidWlsZFRlc3RUb29sKCk7CiBzdWIgZHVtcFRl
c3RzQnlTdWl0ZShcJSk7CiBzdWIgcG9wdWxhdGVUZXN0cygpOwogc3ViIHJ1bkFsbFRlc3RzKCk7
Ci1zdWIgcnVuQWxsVGVzdHNJblN1aXRlKCQpOwogc3ViIHJ1blRlc3QoJCQpOwogc3ViIHByZXBh
cmVFbnZpcm9ubWVudEZvclJ1bm5pbmdUZXN0VG9vbCgpOwogc3ViIHRlc3RUb29sUGF0aCgpOwpA
QCAtMTE4LDkgKzExNywxMiBAQCBzdWIgcnVuQWxsVGVzdHMoKQogewogICAgIG15ICRhbnlGYWls
dXJlcyA9IDA7CiAgICAgZm9yIG15ICRzdWl0ZSAoc29ydCBrZXlzICV0ZXN0c1RvUnVuKSB7Ci0g
ICAgICAgIG15ICRmYWlsZWQgPSBydW5BbGxUZXN0c0luU3VpdGUoJHN1aXRlKTsKLSAgICAgICAg
aWYgKCRmYWlsZWQpIHsKLSAgICAgICAgICAgICRhbnlGYWlsdXJlcyA9IDE7CisgICAgICAgIHBy
aW50ICJTdWl0ZTogJHN1aXRlXG4iIHVubGVzcyAkdmVyYm9zZTsKKyAgICAgICAgZm9yIG15ICR0
ZXN0IChzb3J0IEB7JHRlc3RzVG9SdW57JHN1aXRlfX0pIHsKKyAgICAgICAgICAgIG15ICRmYWls
ZWQgPSBydW5UZXN0KCRzdWl0ZSwgJHRlc3QpOworICAgICAgICAgICAgaWYgKCRmYWlsZWQpIHsK
KyAgICAgICAgICAgICAgICAkYW55RmFpbHVyZXMgPSAxOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtMTQxLDIyICsxNDMsNiBAQCBzdWIgcnVuQWxsVGVzdHMoKQog
ICAgIHJldHVybiAkYW55RmFpbHVyZXM7CiB9CiAKLXN1YiBydW5BbGxUZXN0c0luU3VpdGUoJCkK
LXsKLSAgICBteSAoJHN1aXRlKSA9IEBfOwotICAgIHByaW50ICJTdWl0ZTogJHN1aXRlXG4iIHVu
bGVzcyAkdmVyYm9zZTsKLQotICAgIG15ICRhbnlGYWlsdXJlcyA9IDA7Ci0gICAgZm9yIG15ICR0
ZXN0IChzb3J0IEB7JHRlc3RzVG9SdW57JHN1aXRlfX0pIHsKLSAgICAgICAgbXkgJGZhaWxlZCA9
IHJ1blRlc3QoJHN1aXRlLCAkdGVzdCk7Ci0gICAgICAgIGlmICgkZmFpbGVkKSB7Ci0gICAgICAg
ICAgICAkYW55RmFpbHVyZXMgPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgCi0gICAgcmV0dXJu
ICRhbnlGYWlsdXJlczsKLX0KLQogc3ViIHJ1blRlc3QoJCQpCiB7CiAgICAgbXkgKCRzdWl0ZSwg
JHRlc3ROYW1lKSA9IEBfOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120274</attachid>
            <date>2011-12-21 22:12:05 -0800</date>
            <delta_ts>2011-12-22 09:31:05 -0800</delta_ts>
            <desc>Patch 3 of 5</desc>
            <filename>bug-75065-20111221221204.patch</filename>
            <type>text/plain</type>
            <size>2399</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODE5NDEwYThjZjkyNGE3MjZmZmEyZmQ4YTE2ZGUzMzk0
MjQ4MzJmMy4uNjVhYjYxNWQ1NGY5OGQ5ZTQwZjljZTdmNTQ0ZTdlZjYzOGViYjZhYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4
IEBACiAyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogcnVuQWxsVGVzdHMoKSBhbmQgcnVuVGVzdCgpIHNob3VsZCBu
b3QgdXNlIGdsb2JhbCB2YXJpYWJsZXMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYXJ0IG9mOiA8aHR0cDovL3dlYmtpdC5vcmcvYi83NTA2NT4gcnVu
LWFwaS10ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gaW5kaXZpZHVhbCBzdWl0ZXMgYW5kIHRl
c3RzCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1hcGktdGVzdHM6CisgICAgICAgIChydW5UZXN0
c0J5U3VpdGUpOiBSZW5hbWUgZnJvbSBydW5BbGxUZXN0cygpLiAgQWRkIGFyZ3VtZW50cyBmb3IK
KyAgICAgICAgbGlzdCBvZiB0ZXN0cyBhbmQgJHZlcmJvc2UuCisgICAgICAgIChydW5UZXN0KTog
QWRkICR2ZXJib3NlIGFyZ3VtZW50LgorCisyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtp
bHplckBhcHBsZS5jb20+CisKICAgICAgICAgcnVuLWFwaS10ZXN0czogaW5saW5lIHJ1bkFsbFRl
c3RzSW5TdWl0ZSgpIGludG8gcnVuQWxsVGVzdHMoKQogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzIGIv
VG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCmluZGV4IDFlZThkZDU4MGEzNjUxMTUwMTBkNDYw
ODEyMDU2M2RmNzQ2ZDk4NDAuLjkzMzBkOGNhZTRlYzg4ZDZkNTdkYWQ4Mjg1NWQwNDFmZGNlNGQz
OTMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cworKysgYi9Ub29scy9T
Y3JpcHRzL3J1bi1hcGktdGVzdHMKQEAgLTQxLDggKzQxLDggQEAgdXNlIFZDU1V0aWxzOwogc3Vi
IGJ1aWxkVGVzdFRvb2woKTsKIHN1YiBkdW1wVGVzdHNCeVN1aXRlKFwlKTsKIHN1YiBwb3B1bGF0
ZVRlc3RzKCk7Ci1zdWIgcnVuQWxsVGVzdHMoKTsKLXN1YiBydW5UZXN0KCQkKTsKK3N1YiBydW5U
ZXN0KCQkJCk7CitzdWIgcnVuVGVzdHNCeVN1aXRlKFwlJCk7CiBzdWIgcHJlcGFyZUVudmlyb25t
ZW50Rm9yUnVubmluZ1Rlc3RUb29sKCk7CiBzdWIgdGVzdFRvb2xQYXRoKCk7CiAKQEAgLTkyLDcg
KzkyLDcgQEAgaWYgKCRkdW1wVGVzdHMpIHsKICAgICBleGl0IDA7CiB9CiAKLWlmIChydW5BbGxU
ZXN0cygpKSB7CitpZiAocnVuVGVzdHNCeVN1aXRlKCV0ZXN0c1RvUnVuLCAkdmVyYm9zZSkpIHsK
ICAgICBleGl0IDE7CiB9CiAKQEAgLTExMywxMyArMTEzLDE0IEBAIHN1YiBkdW1wVGVzdHNCeVN1
aXRlKFwlKQogICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiB9CiAKLXN1YiBydW5B
bGxUZXN0cygpCitzdWIgcnVuVGVzdHNCeVN1aXRlKFwlJCkKIHsKKyAgICBteSAoJHRlc3RzLCAk
dmVyYm9zZSkgPSBAXzsKICAgICBteSAkYW55RmFpbHVyZXMgPSAwOwotICAgIGZvciBteSAkc3Vp
dGUgKHNvcnQga2V5cyAldGVzdHNUb1J1bikgeworICAgIGZvciBteSAkc3VpdGUgKHNvcnQga2V5
cyAlJHRlc3RzKSB7CiAgICAgICAgIHByaW50ICJTdWl0ZTogJHN1aXRlXG4iIHVubGVzcyAkdmVy
Ym9zZTsKLSAgICAgICAgZm9yIG15ICR0ZXN0IChzb3J0IEB7JHRlc3RzVG9SdW57JHN1aXRlfX0p
IHsKLSAgICAgICAgICAgIG15ICRmYWlsZWQgPSBydW5UZXN0KCRzdWl0ZSwgJHRlc3QpOworICAg
ICAgICBmb3IgbXkgJHRlc3QgKHNvcnQgQHskdGVzdHMtPnskc3VpdGV9fSkgeworICAgICAgICAg
ICAgbXkgJGZhaWxlZCA9IHJ1blRlc3QoJHN1aXRlLCAkdGVzdCwgJHZlcmJvc2UpOwogICAgICAg
ICAgICAgaWYgKCRmYWlsZWQpIHsKICAgICAgICAgICAgICAgICAkYW55RmFpbHVyZXMgPSAxOwog
ICAgICAgICAgICAgfQpAQCAtMTQzLDkgKzE0NCw5IEBAIHN1YiBydW5BbGxUZXN0cygpCiAgICAg
cmV0dXJuICRhbnlGYWlsdXJlczsKIH0KIAotc3ViIHJ1blRlc3QoJCQpCitzdWIgcnVuVGVzdCgk
JCQpCiB7Ci0gICAgbXkgKCRzdWl0ZSwgJHRlc3ROYW1lKSA9IEBfOworICAgIG15ICgkc3VpdGUs
ICR0ZXN0TmFtZSwgJHZlcmJvc2UpID0gQF87CiAgICAgbXkgJHRlc3QgPSAkc3VpdGUgLiAiLiIg
LiAkdGVzdE5hbWU7CiAKICAgICBteSAkZ3Rlc3RBcmcgPSAiLS1ndGVzdF9maWx0ZXI9IiAuICR0
ZXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120275</attachid>
            <date>2011-12-21 22:12:54 -0800</date>
            <delta_ts>2012-01-05 15:11:13 -0800</delta_ts>
            <desc>Patch 4 of 5</desc>
            <filename>bug-75065-20111221221253.patch</filename>
            <type>text/plain</type>
            <size>2824</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjVhYjYxNWQ1NGY5OGQ5ZTQwZjljZTdmNTQ0ZTdlZjYz
OGViYjZhYS4uZGM0Y2ZjMjhkZjJhOWQyMjNhMzkxMjFmYWZjZjFlZWY1ODg1MTc3MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2
IEBACiAyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogYWRkIC0tc3VpdGUgc3dpdGNoIHRvIHJ1biB0ZXN0cyBpbiBh
IGdpdmVuIHN1aXRlCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUGFydCBvZjogPGh0dHA6Ly93ZWJraXQub3JnL2IvNzUwNjU+IHJ1bi1hcGktdGVzdHMg
c2hvdWxkIGJlIGFibGUgdG8gcnVuIGluZGl2aWR1YWwgc3VpdGVzIGFuZCB0ZXN0cworCisgICAg
ICAgICogU2NyaXB0cy9ydW4tYXBpLXRlc3RzOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgLS1z
dWl0ZQorICAgICAgICBzd2l0Y2hlcy4KKworMjAxMS0xMi0yMSAgRGF2aWQgS2lsemVyICA8ZGRr
aWx6ZXJAYXBwbGUuY29tPgorCiAgICAgICAgIHJ1bi1hcGktdGVzdHM6IHJ1bkFsbFRlc3RzKCkg
YW5kIHJ1blRlc3QoKSBzaG91bGQgbm90IHVzZSBnbG9iYWwgdmFyaWFibGVzCiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi1hcGktdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKaW5kZXggOTMzMGQ4Y2Fl
NGVjODhkNmQ1N2RhZDgyODU1ZDA0MWZkY2U0ZDM5My4uNWMyMzI5NWIwNWU2MDhmNjE0MTAyNjE3
NTNkOWQ3MzJlMzcwNTFhYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3Rz
CisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwpAQCAtMjUsNyArMjUsNiBAQAogCiAj
IEZlYXR1cmVzIHRvIGFkZDoKICMgICAtIENvbW1hbmQgbGluZSBvcHRpb24gdG8gcnVuIGEgc2lu
Z2xlIHRlc3QuCi0jICAgLSBDb21tYW5kIGxpbmUgb3B0aW9uIHRvIHJ1biBhbGwgdGVzdHMgaW4g
YSBzdWl0ZS4KIAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKQEAgLTU3LDYgKzU2LDcgQEAg
bXkgJHZlcmJvc2UgPSAwOwogbXkgJGR1bXBUZXN0cyA9IDA7CiBteSAkYnVpbGQgPSAxOwogbXkg
JGJ1aWxkRGVmYXVsdCA9ICRidWlsZCA/ICJidWlsZCIgOiAiZG8gbm90IGJ1aWxkIjsKK215ICRz
dWl0ZU5hbWVzOwogbXkgQHRlc3RzRmFpbGVkOwogbXkgQHRlc3RzVGltZWRPdXQ7CiAKQEAgLTY4
LDEzICs2OCwxNSBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXQogICAtZHwtLWR1bXAt
dGVzdHMgICAgICAgRHVtcCB0aGUgbmFtZXMgb2YgdGVzdGNhc2VzIHdpdGhvdXQgcnVubmluZyB0
aGVtCiAgIC0tW25vLV1idWlsZCAgICAgICAgICBCdWlsZCAob3IgZG8gbm90IGJ1aWxkKSB1bml0
IHRlc3RzIHByaW9yIHRvIHJ1bm5pbmcgKGRlZmF1bHQ6ICRidWlsZERlZmF1bHQpCiAgIC0tY2hy
b21pdW0gICAgICAgICAgICBSdW4gdGhlIENocm9taXVtIHBvcnQgb24gTWFjL1dpbi9MaW51eAor
ICAtLXN1aXRlPVN1aXRlICAgICAgICAgUnVuIGFsbCB0ZXN0cyBpbiBhIGdpdmVuIHN1aXRlIChh
ZGQgbW9yZSAtLXN1aXRlIGFyZ3MgZm9yIG11bHRpcGxlIHN1aXRlcykKIEVPRgogCiBHZXRPcHRp
b25zKAogICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAogICAgICd2ZXJib3NlfHYnID0+IFwkdmVy
Ym9zZSwKICAgICAnZHVtcHxkJyA9PiBcJGR1bXBUZXN0cywKLSAgICAnYnVpbGQhJyA9PiBcJGJ1
aWxkCisgICAgJ2J1aWxkIScgPT4gXCRidWlsZCwKKyAgICAnc3VpdGU9c0AnID0+IFwkc3VpdGVO
YW1lcwogKTsKIAogaWYgKCRzaG93SGVscCkgewpAQCAtODUsMTcgKzg3LDMwIEBAIGlmICgkc2hv
d0hlbHApIHsKIHNldENvbmZpZ3VyYXRpb24oKTsKIGJ1aWxkVGVzdFRvb2woKSBpZiAkYnVpbGQ7
CiBzZXRQYXRoRm9yUnVubmluZ1dlYktpdEFwcChcJUVOVik7Ci1teSAldGVzdHNUb1J1biA9IHBv
cHVsYXRlVGVzdHMoKTsKK215ICVhbGxUZXN0cyA9IHBvcHVsYXRlVGVzdHMoKTsKIAogaWYgKCRk
dW1wVGVzdHMpIHsKLSAgICBkdW1wVGVzdHNCeVN1aXRlKCV0ZXN0c1RvUnVuKTsKKyAgICBkdW1w
VGVzdHNCeVN1aXRlKCVhbGxUZXN0cyk7CiAgICAgZXhpdCAwOwogfQogCi1pZiAocnVuVGVzdHNC
eVN1aXRlKCV0ZXN0c1RvUnVuLCAkdmVyYm9zZSkpIHsKLSAgICBleGl0IDE7CitteSAkZmFpbGVk
OworaWYgKCRzdWl0ZU5hbWVzKSB7CisgICAgbXkgJXRlc3RzOworICAgIGZvciBteSAkc3VpdGUg
KEAkc3VpdGVOYW1lcykgeworICAgICAgICBpZiAoZXhpc3RzICRhbGxUZXN0c3skc3VpdGV9KSB7
CisgICAgICAgICAgICAkdGVzdHN7JHN1aXRlfSA9ICRhbGxUZXN0c3skc3VpdGV9OworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgd2FybiAiU3VpdGUgJyRzdWl0ZScgZG9lcyBub3QgZXhp
c3QhIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAkZmFpbGVkID0gcnVuVGVzdHNCeVN1aXRlKCV0
ZXN0cywgJHZlcmJvc2UpOworfSBlbHNlIHsKKyAgICAkZmFpbGVkID0gcnVuVGVzdHNCeVN1aXRl
KCVhbGxUZXN0cywgJHZlcmJvc2UpOwogfQogCitleGl0ICRmYWlsZWQ7CisKIHN1YiBpc1N1cHBv
cnRlZFBsYXRmb3JtKCkKIHsKICAgICByZXR1cm4gaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzQXBw
bGVXaW5XZWJLaXQoKSB8fCBpc0Nocm9taXVtKCk7Cg==
</data>
<flag name="review"
          id="120510"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120276</attachid>
            <date>2011-12-21 22:13:47 -0800</date>
            <delta_ts>2012-01-05 15:11:25 -0800</delta_ts>
            <desc>Patch 5 of 5</desc>
            <filename>bug-75065-20111221221345.patch</filename>
            <type>text/plain</type>
            <size>3163</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGM0Y2ZjMjhkZjJhOWQyMjNhMzkxMjFmYWZjZjFlZWY1
ODg1MTc3MC4uYjYyNTZiMDQ3YTg5MThlYWZiZjQ5ZjU0YWM1MjJhMjkzMWQ4OWFmMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2
IEBACiAyMDExLTEyLTIxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogYWRkIC0tdGVzdCBzd2l0Y2ggdG8gcnVuIGluZGl2aWR1YWwg
dGVzdHMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXJ0IG9mOiA8aHR0cDovL3dlYmtpdC5vcmcvYi83NTA2NT4gcnVuLWFwaS10ZXN0cyBzaG91bGQg
YmUgYWJsZSB0byBydW4gaW5kaXZpZHVhbCBzdWl0ZXMgYW5kIHRlc3RzCisKKyAgICAgICAgKiBT
Y3JpcHRzL3J1bi1hcGktdGVzdHM6IEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSAtLXRlc3QKKyAg
ICAgICAgc3dpdGNoZXMuCisKKzIwMTEtMTItMjEgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFw
cGxlLmNvbT4KKwogICAgICAgICBydW4tYXBpLXRlc3RzOiBhZGQgLS1zdWl0ZSBzd2l0Y2ggdG8g
cnVuIHRlc3RzIGluIGEgZ2l2ZW4gc3VpdGUKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWFwaS10ZXN0cwppbmRleCA1YzIzMjk1YjA1ZTYwOGY2MTQxMDI2MTc1M2Q5
ZDczMmUzNzA1MWFiLi5jNTkzZTczOTUzMDQ3MTIzYzBlMDMwM2ExMDI0MjgzNmNiNjVmZGQxIDEw
MDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0
cy9ydW4tYXBpLXRlc3RzCkBAIC0yMyw5ICsyMyw2IEBACiAjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0jIEZlYXR1cmVzIHRvIGFkZDoKLSMgICAt
IENvbW1hbmQgbGluZSBvcHRpb24gdG8gcnVuIGEgc2luZ2xlIHRlc3QuCi0KIHVzZSBzdHJpY3Q7
CiB1c2Ugd2FybmluZ3M7CiAKQEAgLTU3LDYgKzU0LDcgQEAgbXkgJGR1bXBUZXN0cyA9IDA7CiBt
eSAkYnVpbGQgPSAxOwogbXkgJGJ1aWxkRGVmYXVsdCA9ICRidWlsZCA/ICJidWlsZCIgOiAiZG8g
bm90IGJ1aWxkIjsKIG15ICRzdWl0ZU5hbWVzOworbXkgJHRlc3ROYW1lczsKIG15IEB0ZXN0c0Zh
aWxlZDsKIG15IEB0ZXN0c1RpbWVkT3V0OwogCkBAIC02OSw2ICs2Nyw3IEBAIFVzYWdlOiAkcHJv
Z3JhbU5hbWUgW29wdGlvbnNdCiAgIC0tW25vLV1idWlsZCAgICAgICAgICBCdWlsZCAob3IgZG8g
bm90IGJ1aWxkKSB1bml0IHRlc3RzIHByaW9yIHRvIHJ1bm5pbmcgKGRlZmF1bHQ6ICRidWlsZERl
ZmF1bHQpCiAgIC0tY2hyb21pdW0gICAgICAgICAgICBSdW4gdGhlIENocm9taXVtIHBvcnQgb24g
TWFjL1dpbi9MaW51eAogICAtLXN1aXRlPVN1aXRlICAgICAgICAgUnVuIGFsbCB0ZXN0cyBpbiBh
IGdpdmVuIHN1aXRlIChhZGQgbW9yZSAtLXN1aXRlIGFyZ3MgZm9yIG11bHRpcGxlIHN1aXRlcykK
KyAgLS10ZXN0PVN1aXRlLlRlc3QgICAgIFJ1biBhIHNwZWNpZmljIHRlc3QgKGFkZCBtb3JlIC0t
dGVzdCBhcmdzIGZvciBtdWx0aXBsZSB0ZXN0cykKIEVPRgogCiBHZXRPcHRpb25zKApAQCAtNzYs
NyArNzUsOCBAQCBHZXRPcHRpb25zKAogICAgICd2ZXJib3NlfHYnID0+IFwkdmVyYm9zZSwKICAg
ICAnZHVtcHxkJyA9PiBcJGR1bXBUZXN0cywKICAgICAnYnVpbGQhJyA9PiBcJGJ1aWxkLAotICAg
ICdzdWl0ZT1zQCcgPT4gXCRzdWl0ZU5hbWVzCisgICAgJ3N1aXRlPXNAJyA9PiBcJHN1aXRlTmFt
ZXMsCisgICAgJ3Rlc3Q9c0AnID0+IFwkdGVzdE5hbWVzCiApOwogCiBpZiAoJHNob3dIZWxwKSB7
CkBAIC05NSwxMyArOTUsMjcgQEAgaWYgKCRkdW1wVGVzdHMpIHsKIH0KIAogbXkgJGZhaWxlZDsK
LWlmICgkc3VpdGVOYW1lcykgeworaWYgKCRzdWl0ZU5hbWVzIHx8ICR0ZXN0TmFtZXMpIHsKICAg
ICBteSAldGVzdHM7Ci0gICAgZm9yIG15ICRzdWl0ZSAoQCRzdWl0ZU5hbWVzKSB7Ci0gICAgICAg
IGlmIChleGlzdHMgJGFsbFRlc3RzeyRzdWl0ZX0pIHsKLSAgICAgICAgICAgICR0ZXN0c3skc3Vp
dGV9ID0gJGFsbFRlc3RzeyRzdWl0ZX07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3
YXJuICJTdWl0ZSAnJHN1aXRlJyBkb2VzIG5vdCBleGlzdCEiOworICAgIGlmICgkc3VpdGVOYW1l
cykgeworICAgICAgICBmb3IgbXkgJHN1aXRlIChAJHN1aXRlTmFtZXMpIHsKKyAgICAgICAgICAg
IGlmIChleGlzdHMgJGFsbFRlc3RzeyRzdWl0ZX0pIHsKKyAgICAgICAgICAgICAgICAkdGVzdHN7
JHN1aXRlfSA9ICRhbGxUZXN0c3skc3VpdGV9OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB3YXJuICJTdWl0ZSAnJHN1aXRlJyBkb2VzIG5vdCBleGlzdCEiOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICgkdGVzdE5hbWVzKSB7CisgICAgICAg
IGZvciBteSAkdGVzdE5hbWUgKEAkdGVzdE5hbWVzKSB7CisgICAgICAgICAgICBteSAoJHN1aXRl
LCAkdGVzdCkgPSBzcGxpdCgvXC4vLCAkdGVzdE5hbWUpOworICAgICAgICAgICAgaWYgKCFleGlz
dHMgJGFsbFRlc3RzeyRzdWl0ZX0pIHsKKyAgICAgICAgICAgICAgICB3YXJuICJTdWl0ZSAnJHN1
aXRlJyBkb2VzIG5vdCBleGlzdCEiOworICAgICAgICAgICAgfSBlbHNpZiAoIWdyZXAoJHRlc3Qs
IEB7JGFsbFRlc3RzeyRzdWl0ZX19KSkgeworICAgICAgICAgICAgICAgIHdhcm4gIlRlc3QgJyR0
ZXN0TmFtZScgaW4gc3VpdGUgJyRzdWl0ZScgZG9lcyBub3QgZXhpc3QhIjsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAeyR0ZXN0c3skc3VpdGV9fSwgJHRlc3Qp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgICRmYWlsZWQgPSBydW5UZXN0
c0J5U3VpdGUoJXRlc3RzLCAkdmVyYm9zZSk7Cg==
</data>
<flag name="commit-queue"
          id="120513"
          type_id="3"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121341</attachid>
            <date>2012-01-05 15:12:57 -0800</date>
            <delta_ts>2012-01-06 06:46:23 -0800</delta_ts>
            <desc>Patch 4 of 5 v2</desc>
            <filename>bug-75065-20120105151256.patch</filename>
            <type>text/plain</type>
            <size>5665</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTUwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmQzYzAxOGY0OGYwOGRkMWM4MmNiZTYyYThmOGFhNDZm
ZTI0ZjkwNi4uZTdmM2Q4NWQzYzAzZGViZTYwMWY2MzQwNThlMDc5NzlhZjczOGJiNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDEyLTAxLTA1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogY2hhbmdlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRl
c3RzIHRvIGFycmF5IG9mICJTdWl0ZU5hbWUuVGVzdE5hbWUiIHN0cmluZ3MKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IG9mOiA8aHR0cDovL3dl
YmtpdC5vcmcvYi83NTA2NT4gcnVuLWFwaS10ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gaW5k
aXZpZHVhbCBzdWl0ZXMgYW5kIHRlc3RzCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1hcGktdGVz
dHM6CisgICAgICAgIChkdW1wVGVzdHNCeVN1aXRlKTogVXBkYXRlIHRvIGFjY2VwdCBhcnJheSBv
ZiB0ZXN0cyBpbnN0ZWFkIG9mCisgICAgICAgIGhhc2ggZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
IChydW5UZXN0c0J5U3VpdGUpOiBEaXR0by4KKyAgICAgICAgKGxpc3RBbGxUZXN0cyk6IFJlbmFt
ZSBmcm9tIHBvcHVsYXRlVGVzdHMoKS4gIFVwZGF0ZSB0byByZXR1cm4KKyAgICAgICAgYW4gYXJy
YXkgb2YgdGVzdHMgaW5zdGFkIG9mIHRoZSBoYXNoIGRhdGEgc3RydWN0dXJlLgorICAgICAgICAo
c29ydFRlc3RMaXN0KTogQWRkLiAgSGVscGVyIHN1YnJvdXRpbmUgZm9yIHNvcnQoKSB0aGF0IHNv
cnRzIGEKKyAgICAgICAgbGlzdCBvZiB0ZXN0cyBieSBzdWl0ZSBhbmQgdGVzdCBuYW1lLgorCiAy
MDEyLTAxLTA1ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBwcmVwYXJlLUNoYW5nZUxvZyBjYW5ub3QgcGFyc2UgcHl0aG9uIGNvZGUgdGhhdCBuZXN0cyBj
bGFzc2VzIGFuZCBkZWZzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKaW5kZXggOTMzMGQ4Y2FlNGVjODhkNmQ1N2Rh
ZDgyODU1ZDA0MWZkY2U0ZDM5My4uZDJmYzVkZTI0NWI2YTNmMGIxMWRhNDRiN2ExNDY5MDEwMmEw
MzY0YSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCisrKyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWFwaS10ZXN0cwpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vcGVybCAt
dwogCi0jIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDExICsz
OSwxMiBAQCB1c2Ugd2Via2l0ZGlyczsKIHVzZSBWQ1NVdGlsczsKIAogc3ViIGJ1aWxkVGVzdFRv
b2woKTsKLXN1YiBkdW1wVGVzdHNCeVN1aXRlKFwlKTsKLXN1YiBwb3B1bGF0ZVRlc3RzKCk7Citz
dWIgZHVtcFRlc3RzQnlTdWl0ZShcQCk7CitzdWIgbGlzdEFsbFRlc3RzKCk7CiBzdWIgcnVuVGVz
dCgkJCQpOwotc3ViIHJ1blRlc3RzQnlTdWl0ZShcJSQpOworc3ViIHJ1blRlc3RzQnlTdWl0ZShc
QCQpOwogc3ViIHByZXBhcmVFbnZpcm9ubWVudEZvclJ1bm5pbmdUZXN0VG9vbCgpOworc3ViIHNv
cnRUZXN0TGlzdCgkJCk7CiBzdWIgdGVzdFRvb2xQYXRoKCk7CiAKICMgRGVmaW5lZCBpbiBWQ1NV
dGlscy4KQEAgLTg1LDE0ICs4NiwxNCBAQCBpZiAoJHNob3dIZWxwKSB7CiBzZXRDb25maWd1cmF0
aW9uKCk7CiBidWlsZFRlc3RUb29sKCkgaWYgJGJ1aWxkOwogc2V0UGF0aEZvclJ1bm5pbmdXZWJL
aXRBcHAoXCVFTlYpOwotbXkgJXRlc3RzVG9SdW4gPSBwb3B1bGF0ZVRlc3RzKCk7CitteSBAdGVz
dHNUb1J1biA9IGxpc3RBbGxUZXN0cygpOwogCiBpZiAoJGR1bXBUZXN0cykgewotICAgIGR1bXBU
ZXN0c0J5U3VpdGUoJXRlc3RzVG9SdW4pOworICAgIGR1bXBUZXN0c0J5U3VpdGUoQHRlc3RzVG9S
dW4pOwogICAgIGV4aXQgMDsKIH0KIAotaWYgKHJ1blRlc3RzQnlTdWl0ZSgldGVzdHNUb1J1biwg
JHZlcmJvc2UpKSB7CitpZiAocnVuVGVzdHNCeVN1aXRlKEB0ZXN0c1RvUnVuLCAkdmVyYm9zZSkp
IHsKICAgICBleGl0IDE7CiB9CiAKQEAgLTEwMSwyOSArMTAyLDM3IEBAIHN1YiBpc1N1cHBvcnRl
ZFBsYXRmb3JtKCkKICAgICByZXR1cm4gaXNBcHBsZU1hY1dlYktpdCgpIHx8IGlzQXBwbGVXaW5X
ZWJLaXQoKSB8fCBpc0Nocm9taXVtKCk7CiB9CiAKLXN1YiBkdW1wVGVzdHNCeVN1aXRlKFwlKQor
c3ViIGR1bXBUZXN0c0J5U3VpdGUoXEApCiB7Ci0gICAgbXkgKCR0ZXN0c0J5U3VpdGUpID0gQF87
CisgICAgbXkgKCR0ZXN0cykgPSBAXzsKICAgICBwcmludCAiRHVtcGluZyB0ZXN0IGNhc2VzXG4i
OwogICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci0gICAgZm9yIG15ICRzdWl0ZSAo
c29ydCBrZXlzICUkdGVzdHNCeVN1aXRlKSB7Ci0gICAgICAgIHByaW50ICRzdWl0ZSAuICI6XG4i
OwotICAgICAgICBwcmludCBtYXAgeyAiICAgIiAuICRfIC4gIlxuIiB9IHNvcnQgQHsgJHRlc3Rz
QnlTdWl0ZS0+eyRzdWl0ZX0gfTsKKyAgICBteSAkbGFzdFN1aXRlID0gIiI7CisgICAgZm9yIG15
ICRzdWl0ZUFuZFRlc3QgKHNvcnQgc29ydFRlc3RMaXN0IEAkdGVzdHMpIHsKKyAgICAgICAgbXkg
KCRzdWl0ZSwgJHRlc3QpID0gc3BsaXQoL1wuLywgJHN1aXRlQW5kVGVzdCk7CisgICAgICAgIGlm
ICgkbGFzdFN1aXRlIG5lICRzdWl0ZSkgeworICAgICAgICAgICAgJGxhc3RTdWl0ZSA9ICRzdWl0
ZTsKKyAgICAgICAgICAgIHByaW50ICRzdWl0ZSAuICI6XG4iOworICAgICAgICB9CisgICAgICAg
IHByaW50ICIgICAiIC4gJHRlc3QgLiAiXG4iOwogICAgIH0KICAgICBwcmludCAiLS0tLS0tLS0t
LS0tLS0tLS0tXG4iOwogfQogCi1zdWIgcnVuVGVzdHNCeVN1aXRlKFwlJCkKK3N1YiBydW5UZXN0
c0J5U3VpdGUoXEAkKQogewogICAgIG15ICgkdGVzdHMsICR2ZXJib3NlKSA9IEBfOwogICAgIG15
ICRhbnlGYWlsdXJlcyA9IDA7Ci0gICAgZm9yIG15ICRzdWl0ZSAoc29ydCBrZXlzICUkdGVzdHMp
IHsKLSAgICAgICAgcHJpbnQgIlN1aXRlOiAkc3VpdGVcbiIgdW5sZXNzICR2ZXJib3NlOwotICAg
ICAgICBmb3IgbXkgJHRlc3QgKHNvcnQgQHskdGVzdHMtPnskc3VpdGV9fSkgewotICAgICAgICAg
ICAgbXkgJGZhaWxlZCA9IHJ1blRlc3QoJHN1aXRlLCAkdGVzdCwgJHZlcmJvc2UpOwotICAgICAg
ICAgICAgaWYgKCRmYWlsZWQpIHsKLSAgICAgICAgICAgICAgICAkYW55RmFpbHVyZXMgPSAxOwot
ICAgICAgICAgICAgfQorICAgIG15ICRsYXN0U3VpdGUgPSAiIjsKKyAgICBmb3IgbXkgJHN1aXRl
QW5kVGVzdCAoc29ydCBzb3J0VGVzdExpc3QgQCR0ZXN0cykgeworICAgICAgICBteSAoJHN1aXRl
LCAkdGVzdCkgPSBzcGxpdCgvXC4vLCAkc3VpdGVBbmRUZXN0KTsKKyAgICAgICAgaWYgKCRsYXN0
U3VpdGUgbmUgJHN1aXRlKSB7CisgICAgICAgICAgICAkbGFzdFN1aXRlID0gJHN1aXRlOworICAg
ICAgICAgICAgcHJpbnQgIlN1aXRlOiAkc3VpdGVcbiIgdW5sZXNzICR2ZXJib3NlOworICAgICAg
ICB9CisgICAgICAgIG15ICRmYWlsZWQgPSBydW5UZXN0KCRzdWl0ZSwgJHRlc3QsICR2ZXJib3Nl
KTsKKyAgICAgICAgaWYgKCRmYWlsZWQpIHsKKyAgICAgICAgICAgICRhbnlGYWlsdXJlcyA9IDE7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yMTIsOSArMjIxLDkgQEAgc3ViIHJ1blRlc3Qo
JCQkKQogICAgIHJldHVybiAkdGltZWRPdXQgfHwgJHJlc3VsdDsKIH0KIAotc3ViIHBvcHVsYXRl
VGVzdHMoKQorc3ViIGxpc3RBbGxUZXN0cygpCiB7Ci0gICAgbXkgQHRlc3RzOworICAgIG15IEB0
b29sT3V0cHV0OwogICAgIG15ICR0aW1lZE91dDsKIAogICAgIGRpZSAicnVuLWFwaS10ZXN0cyBp
cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uXG4iIHVubGVzcyBpc1N1cHBvcnRlZFBs
YXRmb3JtKCk7CkBAIC0yMzgsNyArMjQ3LDcgQEAgc3ViIHBvcHVsYXRlVGVzdHMoKQogICAgIH0K
IAogICAgIGNsb3NlKCRjaGlsZEluKTsKLSAgICBAdGVzdHMgPSA8JGNoaWxkT3V0PjsKKyAgICBA
dG9vbE91dHB1dCA9IDwkY2hpbGRPdXQ+OwogICAgIGNsb3NlKCRjaGlsZE91dCk7CiAgICAgY2xv
c2UoJGNoaWxkRXJyKTsKICAgICBjbG9zZShERVZOVUxMKSB1bmxlc3MgKCR2ZXJib3NlKTsKQEAg
LTI1MSwyMiArMjYwLDIwIEBAIHN1YiBwb3B1bGF0ZVRlc3RzKCkKICAgICAgICAgZXhpdCBleGl0
U3RhdHVzKCRyZXN1bHQpOwogICAgIH0KIAotICAgIG15ICVrZXllZFRlc3RzID0gKCk7CisgICAg
bXkgQHRlc3RzID0gKCk7CiAgICAgbXkgJHN1aXRlOwotICAgIGZvciBteSAkdGVzdCAoQHRlc3Rz
KSB7Ci0gICAgICAgJHRlc3QgPX4gcy9bXHJcbl0qJC8vOwotICAgICAgIGlmICgkdGVzdCA9fiBt
L1wuJC8pIHsKLSAgICAgICAgICAkdGVzdCA9fiBzL1wuJC8vOwotICAgICAgICAgICRzdWl0ZSA9
ICR0ZXN0OworICAgIGZvciBteSAkbGluZSAoQHRvb2xPdXRwdXQpIHsKKyAgICAgICAkbGluZSA9
fiBzL1tcclxuXSokLy87CisgICAgICAgaWYgKCRsaW5lID1+IG0vXC4kLykgeworICAgICAgICAg
ICRzdWl0ZSA9ICRsaW5lOyAjICJTdWl0ZU5hbWUuIgogICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgJHRlc3QgPX4gcy9eXHMqLy87Ci0gICAgICAgICAgcHVzaCBAeyRrZXllZFRlc3RzeyRzdWl0
ZX19LCAkdGVzdDsKKyAgICAgICAgICAkbGluZSA9fiBzL15ccyovLzsgIyAiVGVzdE5hbWUiCisg
ICAgICAgICAgcHVzaCBAdGVzdHMsICRzdWl0ZSAuICRsaW5lOyAjICJTdWl0ZU5hbWUuVGVzdE5h
bWUiCiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcmV0dXJuICVrZXllZFRlc3RzOwotfQogCisg
ICAgcmV0dXJuIEB0ZXN0czsKK30KIAogc3ViIGJ1aWxkVGVzdFRvb2woKQogewpAQCAtMzE3LDYg
KzMyNCwxNCBAQCBzdWIgcHJlcGFyZUVudmlyb25tZW50Rm9yUnVubmluZ1Rlc3RUb29sKCkKICAg
ICAkRU5We1dFQktJVF9VTlNFVF9EWUxEX0ZSQU1FV09SS19QQVRIfSA9ICJZRVMiOwogfQogCitz
dWIgc29ydFRlc3RMaXN0KCQkKQoreworICAgIG15ICgkYSwgJGIpID0gQF87CisgICAgbXkgKCRz
dWl0ZUEsICR0ZXN0QSkgPSBzcGxpdCgvXC4vLCAkYSk7CisgICAgbXkgKCRzdWl0ZUIsICR0ZXN0
QikgPSBzcGxpdCgvXC4vLCAkYik7CisgICAgcmV0dXJuICRzdWl0ZUEgY21wICRzdWl0ZUIgPyAk
c3VpdGVBIGNtcCAkc3VpdGVCIDogJHRlc3RBIGNtcCAkdGVzdEI7Cit9CisKIHN1YiB0ZXN0VG9v
bFBhdGgoKQogewogICAgIG15ICRwYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZShwcm9kdWN0RGly
KCksICJUZXN0V2ViS2l0QVBJIik7Cg==
</data>
<flag name="review"
          id="121809"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121342</attachid>
            <date>2012-01-05 15:13:57 -0800</date>
            <delta_ts>2012-01-06 06:52:54 -0800</delta_ts>
            <desc>Patch 5 of 5 v2</desc>
            <filename>bug-75065-20120105151356.patch</filename>
            <type>text/plain</type>
            <size>2989</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTUwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTdmM2Q4NWQzYzAzZGViZTYwMWY2MzQwNThlMDc5Nzlh
ZjczOGJiNy4uMmZhZGNhNDMzNTQ0ZjcyZGQxYjRlMDJjNGM5YjM0NDA1NzdmYmU0ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4
IEBACiAyMDEyLTAxLTA1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKKyAg
ICAgICAgcnVuLWFwaS10ZXN0czogc3BlY2lmeSBpbmRpdmlkdWFsIHN1aXRlcyBhbmQgdGVzdHMg
b24gdGhlIGNvbW1hbmQtbGluZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVzOiA8aHR0cDovL3dlYmtpdC5vcmcvYi83NTA2NT4gcnVuLWFwaS10
ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gaW5kaXZpZHVhbCBzdWl0ZXMgYW5kIHRlc3RzCisK
KyAgICAgICAgKiBTY3JpcHRzL3J1bi1hcGktdGVzdHM6IEZpbHRlciB0ZXN0cyBpZiBhbnkgc3Vp
dGUgbmFtZXMgb3IgdGVzdAorICAgICAgICBuYW1lcyBhcmUgcGFzc2VkIG9uIHRoZSBjb21tYW5k
LWxpbmUuCisgICAgICAgIChmaWx0ZXJUZXN0cyk6IEFkZC4gIEZpbHRlciBmdWxsIGxpc3Qgb2Yg
dGVzdHMgdXNpbmcgbGlzdCBvZgorICAgICAgICBzdWl0ZSBuYW1lcyBhbmQgdGVzdCBuYW1lcy4K
KworMjAxMi0wMS0wNSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgorCiAgICAg
ICAgIHJ1bi1hcGktdGVzdHM6IGNoYW5nZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0ZXN0
cyB0byBhcnJheSBvZiAiU3VpdGVOYW1lLlRlc3ROYW1lIiBzdHJpbmdzCiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1h
cGktdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1hcGktdGVzdHMKaW5kZXggZDJmYzVkZTI0NWI2
YTNmMGIxMWRhNDRiN2ExNDY5MDEwMmEwMzY0YS4uYzljMTNlYWViZDFjNmRlMmNiZjFkMjVhNTk5
ZGU4NTJhMmVlNDYzNiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tYXBpLXRlc3RzCisr
KyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWFwaS10ZXN0cwpAQCAtMjMsMTAgKzIzLDYgQEAKICMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgogIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLSMgRmVhdHVy
ZXMgdG8gYWRkOgotIyAgIC0gQ29tbWFuZCBsaW5lIG9wdGlvbiB0byBydW4gYSBzaW5nbGUgdGVz
dC4KLSMgICAtIENvbW1hbmQgbGluZSBvcHRpb24gdG8gcnVuIGFsbCB0ZXN0cyBpbiBhIHN1aXRl
LgotCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogCkBAIC00MCw2ICszNiw3IEBAIHVzZSBW
Q1NVdGlsczsKIAogc3ViIGJ1aWxkVGVzdFRvb2woKTsKIHN1YiBkdW1wVGVzdHNCeVN1aXRlKFxA
KTsKK3N1YiBmaWx0ZXJUZXN0cyhcQFxAKTsKIHN1YiBsaXN0QWxsVGVzdHMoKTsKIHN1YiBydW5U
ZXN0KCQkJCk7CiBzdWIgcnVuVGVzdHNCeVN1aXRlKFxAJCk7CkBAIC02Myw3ICs2MCw3IEBAIG15
IEB0ZXN0c1RpbWVkT3V0OwogCiBteSAkcHJvZ3JhbU5hbWUgPSBiYXNlbmFtZSgkMCk7CiBteSAk
dXNhZ2UgPSA8PEVPRjsKLVVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdCitVc2FnZTogJHBy
b2dyYW1OYW1lIFtvcHRpb25zXSBbc3VpdGVzIG9yIHRlc3RzXQogICAtLWhlbHAgICAgICAgICAg
ICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZQogICAtdnwtLXZlcmJvc2UgICAgICAgICAgVmVy
Ym9zZSBvdXRwdXQKICAgLWR8LS1kdW1wLXRlc3RzICAgICAgIER1bXAgdGhlIG5hbWVzIG9mIHRl
c3RjYXNlcyB3aXRob3V0IHJ1bm5pbmcgdGhlbQpAQCAtODgsMTQgKzg1LDE0IEBAIGJ1aWxkVGVz
dFRvb2woKSBpZiAkYnVpbGQ7CiBzZXRQYXRoRm9yUnVubmluZ1dlYktpdEFwcChcJUVOVik7CiBt
eSBAdGVzdHNUb1J1biA9IGxpc3RBbGxUZXN0cygpOwogCitAdGVzdHNUb1J1biA9IGZpbHRlclRl
c3RzKEB0ZXN0c1RvUnVuLCBAQVJHVikgaWYgQEFSR1Y7CisKIGlmICgkZHVtcFRlc3RzKSB7CiAg
ICAgZHVtcFRlc3RzQnlTdWl0ZShAdGVzdHNUb1J1bik7CiAgICAgZXhpdCAwOwogfQogCi1pZiAo
cnVuVGVzdHNCeVN1aXRlKEB0ZXN0c1RvUnVuLCAkdmVyYm9zZSkpIHsKLSAgICBleGl0IDE7Ci19
CitleGl0IHJ1blRlc3RzQnlTdWl0ZShAdGVzdHNUb1J1biwgJHZlcmJvc2UpOwogCiBzdWIgaXNT
dXBwb3J0ZWRQbGF0Zm9ybSgpCiB7CkBAIC0xMTksNiArMTE2LDI4IEBAIHN1YiBkdW1wVGVzdHNC
eVN1aXRlKFxAKQogICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiB9CiAKK3N1YiBm
aWx0ZXJUZXN0cyhcQFxAKQoreworICAgIG15ICgkdGVzdHMsICRmaWx0ZXJMaXN0KSA9IEBfOwor
ICAgIG15ICVzdWl0ZU5hbWVzOworICAgIG15ICV0ZXN0TmFtZXM7CisKKyAgICBmb3JlYWNoIG15
ICRmaWx0ZXIgKEAkZmlsdGVyTGlzdCkgeworICAgICAgICBpZiAoJGZpbHRlciA9fiBtL1wuLykg
eworICAgICAgICAgICAgJHRlc3ROYW1lc3skZmlsdGVyfSA9IDE7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAkc3VpdGVOYW1lc3skZmlsdGVyfSA9IDE7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBteSBAZmlsdGVyZWRUZXN0cyA9IGdyZXAgeworICAgICAgICBteSAkc3VpdGUgPSAo
c3BsaXQoL1wuLywgJF8pKVswXTsKKyAgICAgICAgZXhpc3RzICRzdWl0ZU5hbWVzeyRzdWl0ZX0g
fHwgZXhpc3RzICR0ZXN0TmFtZXN7JF99OworICAgIH0gQCR0ZXN0czsKKworICAgIHJldHVybiBA
ZmlsdGVyZWRUZXN0czsKK30KKwogc3ViIHJ1blRlc3RzQnlTdWl0ZShcQCQpCiB7CiAgICAgbXkg
KCR0ZXN0cywgJHZlcmJvc2UpID0gQF87Cg==
</data>
<flag name="review"
          id="121810"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>