<?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>41210</bug_id>
          
          <creation_ts>2010-06-25 05:25:03 -0700</creation_ts>
          <short_desc>Cross Origin XMLHttpRequest can not expose headers indicated in Access-Control-Expose-Headers HTTP Response Header</short_desc>
          <delta_ts>2012-01-18 21:48:17 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76198</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Stuart Ng">sng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamalex</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>dave.irvine</cc>
    
    <cc>gagnew</cc>
    
    <cc>hello</cc>
    
    <cc>japhet</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>joethomas</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242968</commentid>
    <comment_count>0</comment_count>
    <who name="Stuart Ng">sng</who>
    <bug_when>2010-06-25 05:25:03 -0700</bug_when>
    <thetext>Send XHR Request to get CORS URL.
CORS URL send back a header &quot;Access-Control-Expose-Headers: A&quot;, and also a header &quot;A: Hello&quot;

Upon receiving response, getAllResponseHeaders method does not return the HTTP Header &quot;A: Hello&quot;
Also, getResponseHeader(&quot;A&quot;) returns NULL.

I can reproduce on both Chrome and Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243129</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 12:26:38 -0700</bug_when>
    <thetext>We don&apos;t support Access-Control-Expose-Headers yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468782</commentid>
    <comment_count>2</comment_count>
    <who name="František Hába">hello</who>
    <bug_when>2011-09-16 13:36:40 -0700</bug_when>
    <thetext>...and are you planning to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508867</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Irvine">dave.irvine</who>
    <bug_when>2011-11-24 12:36:59 -0800</bug_when>
    <thetext>Any update on if this is going to be added to WebKit any time soon?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508870</commentid>
    <comment_count>4</comment_count>
    <who name="František Hába">hello</who>
    <bug_when>2011-11-24 12:47:12 -0800</bug_when>
    <thetext>+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528827</commentid>
    <comment_count>5</comment_count>
    <who name="Greg Agnew">gagnew</who>
    <bug_when>2012-01-03 09:45:42 -0800</bug_when>
    <thetext>All that needs to be done is 

http://trac.webkit.org/browser/trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp#L94

Concatenate allowedCrossOriginResponseHeaders with the list that comes from the exposed header.

Very simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535260</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-12 16:10:29 -0800</bug_when>
    <thetext>*** Bug 76192 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535389</commentid>
    <comment_count>7</comment_count>
      <attachid>122361</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-12 19:32:31 -0800</bug_when>
    <thetext>Created attachment 122361
Patch

The functions addToAccessControlAllowList &amp; parseAccessControlAllowList are the same in loader/CrossOriginPreflightResultCache.cpp. Should I move these two functions to a common file (loader/CrossOriginAccessControl.cpp)?

Tested in Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535390</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 19:35:00 -0800</bug_when>
    <thetext>Attachment 122361 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

LayoutTests/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535395</commentid>
    <comment_count>9</comment_count>
      <attachid>122361</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-12 19:45:38 -0800</bug_when>
    <thetext>Comment on attachment 122361
Patch

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

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:157
&gt; +static void addToAccessControlAllowList(const String&amp; string, unsigned start, unsigned end, HashSet&lt;String, HashType&gt;&amp; set)

We should use a better name for the first argument than &quot;string&quot;.  Perhaps &quot;headerName&quot; ?

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:161
&gt; +    StringImpl* stringImpl = string.impl();
&gt; +    if (!stringImpl)
&gt; +        return;

This can only happen when the string is the null string.  We should filter that case out in parseAccessControlAllowList and skip this check here.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:173
&gt; +    // Skip white space from start.
&gt; +    while (start &lt;= end &amp;&amp; isSpaceOrNewline((*stringImpl)[start]))
&gt; +        ++start;
&gt; +
&gt; +    // only white space
&gt; +    if (start &gt; end) 
&gt; +        return;
&gt; +
&gt; +    // Skip white space from end.
&gt; +    while (end &amp;&amp; isSpaceOrNewline((*stringImpl)[end]))
&gt; +        --end;

It&apos;s probably better to use String::stripWhiteSpace rather than reimplementing it here.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:178
&gt; +template&lt;class HashType&gt;

Why is function templated?  It&apos;s only ever called with one sort of set.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:183
&gt; +    while ((end = string.find(&apos;,&apos;, start)) != notFound) {

Consider using String::split rather than this sort of look.  You can write this whole function in like three lines of code if you use some of the advanced features of String (rather than working with c-style strings).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535396</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-12 19:46:20 -0800</bug_when>
    <thetext>You&apos;ve got some problems with tabs too.  :)

Mostly it looks like you should familiarize yourself with some of WebKit&apos;s fun string manipulation functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535397</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-12 19:47:09 -0800</bug_when>
    <thetext>&gt; The functions addToAccessControlAllowList &amp; parseAccessControlAllowList are the same in loader/CrossOriginPreflightResultCache.cpp. Should I move these two functions to a common file (loader/CrossOriginAccessControl.cpp)?

Yes.  Please refactor things to share code rather than copy/pasting code.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535436</commentid>
    <comment_count>12</comment_count>
      <attachid>122361</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-12 22:02:39 -0800</bug_when>
    <thetext>Comment on attachment 122361
Patch

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

Please make sure that header name matching is case insensitive, and modify the regression test to cover that.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:936
&gt; +    HashSet&lt;String&gt; headers;

This needs a descriptive name, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535839</commentid>
    <comment_count>13</comment_count>
      <attachid>122473</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-13 11:26:47 -0800</bug_when>
    <thetext>Created attachment 122473
Patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535841</commentid>
    <comment_count>14</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-13 11:29:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 122361 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122361&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:157
&gt; &gt; +static void addToAccessControlAllowList(const String&amp; string, unsigned start, unsigned end, HashSet&lt;String, HashType&gt;&amp; set)
&gt; 
&gt; We should use a better name for the first argument than &quot;string&quot;.  Perhaps &quot;headerName&quot; ?

Changed the name to headerValue
&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:161
&gt; &gt; +    StringImpl* stringImpl = string.impl();
&gt; &gt; +    if (!stringImpl)
&gt; &gt; +        return;
&gt; 
&gt; This can only happen when the string is the null string.  We should filter that case out in parseAccessControlAllowList and skip this check here.
&gt; 
Removed.

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:173
&gt; &gt; +    // Skip white space from start.
&gt; &gt; +    while (start &lt;= end &amp;&amp; isSpaceOrNewline((*stringImpl)[start]))
&gt; &gt; +        ++start;
&gt; &gt; +
&gt; &gt; +    // only white space
&gt; &gt; +    if (start &gt; end) 
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    // Skip white space from end.
&gt; &gt; +    while (end &amp;&amp; isSpaceOrNewline((*stringImpl)[end]))
&gt; &gt; +        --end;
&gt; 
&gt; It&apos;s probably better to use String::stripWhiteSpace rather than reimplementing it here.
&gt; 
Done

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:178
&gt; &gt; +template&lt;class HashType&gt;
&gt; 
&gt; Why is function templated?  It&apos;s only ever called with one sort of set.
&gt; 
Removed. problem with copy-paste :)

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:183
&gt; &gt; +    while ((end = string.find(&apos;,&apos;, start)) != notFound) {
&gt; 
&gt; Consider using String::split rather than this sort of look.  You can write this whole function in like three lines of code if you use some of the advanced features of String (rather than working with c-style strings).

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535844</commentid>
    <comment_count>15</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-13 11:31:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 122361 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122361&amp;action=review
&gt; 
&gt; Please make sure that header name matching is case insensitive, and modify the regression test to cover that.
&gt; 
Added extra test case.

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:936
&gt; &gt; +    HashSet&lt;String&gt; headers;
&gt; 
&gt; This needs a descriptive name, too.

Done. Changed to accessControlExposeHeadersSet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535847</commentid>
    <comment_count>16</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-13 11:33:09 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; You&apos;ve got some problems with tabs too.  :)

Corrected.
&gt; 
&gt; Mostly it looks like you should familiarize yourself with some of WebKit&apos;s fun string manipulation functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535870</commentid>
    <comment_count>17</comment_count>
      <attachid>122473</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-13 11:57:33 -0800</bug_when>
    <thetext>Comment on attachment 122473
Patch2

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

Thanks, this looks much closer already.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:155
&gt; +static void parseAccessControlAllowList(const String&amp; headerValue, Vector&lt;String&gt;&amp; headersSet)

It&apos;s somewhat weird to see this in XMLHttpRequest.cpp. It might be the only CORS client that exposes headers, but the behavior itself is not tied to XHR. You might find it cleaner to have the checks in CrossOriginAccessControl.cpp - please consider that possibility.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:159
&gt; +    headerValue.stripWhiteSpace().upper();
&gt; +    headerValue.split(&apos;,&apos;, false, headersSet);

I suspect that you need to strip whitespace afterwards, not before:

Access-Control-Expose-Headers: X-FOO,    X-BAR

Also, is whitespace definition in this function the same as in RFC 2616? There are many whitespace characters besides plain space, and different specs disagree on which to ignore.

Please use HTTPHeaderSet for consistency and performance, like isOnAccessControlResponseHeaderWhitelist does.

&gt; LayoutTests/http/tests/xmlhttprequest/access-control-response-with-expose-headers-expected.txt:7
&gt; +PASS
&gt; +PASS
&gt; +PASS

It would be very helpful to have explanations of what fails and passes. You can use shouldBe from script test machinery to easily do that, and simplify test code at the same time.

Try our make-new-script-test script, which will prepare boilerplate for a script test.

&gt; LayoutTests/http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.php:6
&gt; +    header(&quot;X-FOO: BAR&quot;);
&gt; +    header(&quot;X-TEST: TEST&quot;);
&gt; +    header(&quot;Access-Control-Expose-Headers: X-FOO&quot;);

Another case sensitivity test to add is where actual HTTP header has a different case than the value in Access-Control-Expose-Headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536186</commentid>
    <comment_count>18</comment_count>
      <attachid>122549</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-14 09:28:36 -0800</bug_when>
    <thetext>Created attachment 122549
Patch3

Moved the parsing logic to CrossOriginAccessControl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536187</commentid>
    <comment_count>19</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-14 09:35:19 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 122473 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122473&amp;action=review
&gt; 
&gt; Thanks, this looks much closer already.
&gt; 
&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:155
&gt; &gt; +static void parseAccessControlAllowList(const String&amp; headerValue, Vector&lt;String&gt;&amp; headersSet)
&gt; 
&gt; It&apos;s somewhat weird to see this in XMLHttpRequest.cpp. It might be the only CORS client that exposes headers, but the behavior itself is not tied to XHR. You might find it cleaner to have the checks in CrossOriginAccessControl.cpp - please consider that possibility.
&gt; 
Done

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:159
&gt; &gt; +    headerValue.stripWhiteSpace().upper();
&gt; &gt; +    headerValue.split(&apos;,&apos;, false, headersSet);
&gt; 
&gt; I suspect that you need to strip whitespace afterwards, not before:
&gt; 
&gt; Access-Control-Expose-Headers: X-FOO,    X-BAR
&gt; 
Done.

&gt; Also, is whitespace definition in this function the same as in RFC 2616? There are many whitespace characters besides plain space, and different specs disagree on which to ignore.
&gt; 
Yes, it strips the trailing and leading whitespace and newline. Also I tested with tabs too.

&gt; Please use HTTPHeaderSet for consistency and performance, like isOnAccessControlResponseHeaderWhitelist does.
&gt; 
Done. Using HashSet&lt;String, CaseFoldingHash&gt;.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/access-control-response-with-expose-headers-expected.txt:7
&gt; &gt; +PASS
&gt; &gt; +PASS
&gt; &gt; +PASS
&gt; 
&gt; It would be very helpful to have explanations of what fails and passes. You can use shouldBe from script test machinery to easily do that, and simplify test code at the same time.
&gt; 
&gt; Try our make-new-script-test script, which will prepare boilerplate for a script test.
&gt;
Tried with make-new-script-test to create new test html. But while running layout tests, it fails with &quot;Reference error: variable not defined&quot; for the functions in js-test-pre.js file. The file-path is mentioned correctly, but not sure why. 
 
&gt; &gt; LayoutTests/http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.php:6
&gt; &gt; +    header(&quot;X-FOO: BAR&quot;);
&gt; &gt; +    header(&quot;X-TEST: TEST&quot;);
&gt; &gt; +    header(&quot;Access-Control-Expose-Headers: X-FOO&quot;);
&gt; 
&gt; Another case sensitivity test to add is where actual HTTP header has a different case than the value in Access-Control-Expose-Headers.

Modified the cases of actual header and field value of Access-Control-Expose-Headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536331</commentid>
    <comment_count>20</comment_count>
      <attachid>122549</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-15 19:48:36 -0800</bug_when>
    <thetext>Comment on attachment 122549
Patch3

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

THis is pretty close. I have a few minor nitpicks, and I think that you should make another try converting this to a &quot;shouldBe&quot; test.

&gt; Source/WebCore/loader/CrossOriginAccessControl.cpp:173
&gt; +void parseAccessControlExposeHeadersAllowList(const String&amp; headerValue, HashSet&lt;String, CaseFoldingHash&gt;&amp; headersSet)

Is &quot;headers set&quot; good English grammar? FWIW, existing code says &quot;header set&quot;.

&gt; Source/WebCore/loader/CrossOriginAccessControl.cpp:177
&gt; +    for (unsigned int headerCount = 0; headerCount &lt; headers.size(); headerCount++) {

WebKit coding style is to use &quot;unsigned&quot;, not &quot;unsigned int&quot;.

&gt; Source/WebCore/loader/CrossOriginAccessControl.h:50
&gt; +void parseAccessControlExposeHeadersAllowList(const String&amp; headerValue, HashSet&lt;String, CaseFoldingHash&gt;&amp; headersSet);

I&apos;d suggest moving HTTPHeaderSet definition to the header, and using it for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536332</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-15 19:49:27 -0800</bug_when>
    <thetext>&gt; Tried with make-new-script-test to create new test html. But while running layout tests, it fails with &quot;Reference error: variable not defined&quot; for the functions in js-test-pre.js file. The file-path is mentioned correctly, but not sure why. 

Where exactly does the error occur? It&apos;s possible that recent changes to the scripts broke the boilerplate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536339</commentid>
    <comment_count>22</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-15 20:37:32 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Tried with make-new-script-test to create new test html. But while running layout tests, it fails with &quot;Reference error: variable not defined&quot; for the functions in js-test-pre.js file. The file-path is mentioned correctly, but not sure why. 
&gt; 
&gt; Where exactly does the error occur? It&apos;s possible that recent changes to the scripts broke the boilerplate.

I created the new test html file in LayoutTests/http/tests/xmlhttprequest. But then if I include the js-test-pre.js with ../../../fast/js/resources/js-test-pre.js, I am getting the Reference error for the JS functions while running LayoutTests. But if I load the page directly into Browser, then everything works fine. 

I also tried moving the test file to LayoutTests/fast/dom/xmlhttprequest, then I could avoid the reference error, but then I was not getting the response for  the xmlhttprequest from localhost. 

Thanks for helping me with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536345</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-15 21:00:46 -0800</bug_when>
    <thetext>Ah. Good point - the boilerplate doesn&apos;t work for http tests. I should fix that.

These resources are mapped into http server js-test-resources directory. See e.g. LayoutTests/http/tests/cache/subresource-multiple-instances.html for an example of how it&apos;s used.

To test interactively in a browser, you can start the server using a run-webkit-httpd script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536366</commentid>
    <comment_count>24</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-15 22:26:58 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Ah. Good point - the boilerplate doesn&apos;t work for http tests. I should fix that.
&gt; 
&gt; These resources are mapped into http server js-test-resources directory. See e.g. LayoutTests/http/tests/cache/subresource-multiple-instances.html for an example of how it&apos;s used.
&gt; 
&gt; To test interactively in a browser, you can start the server using a run-webkit-httpd script.

The JS error got resolved after I included it like ../../js-test-resources/js-test-pre.js. But facing a strange issue now. 

If I start including js-test-pre.js, then I never get response for my xmlhttprequest while running LayoutTests script (not sure what&apos;s the relation). But I can load and run the test page in Chrome browser without an issue after starting the server with run-webkit-httpd script.  

Below is the content of my test page

&lt;html&gt;
&lt;head&gt;
&lt;script src=&quot;../../js-test-resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    if (window.layoutTestController)
        layoutTestController.dumpAsText();
description(&apos;Test for bug 41210: Cross Origin XMLHttpRequest can not expose headers indicated in Access-Control-Expose-Headers HTTP Response Header.&apos;);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function() {
    if (xhr.readyState==4) {
        shouldBe(&quot;xhr.getResponseHeader(\&quot;X-FOO\&quot;)&quot;,&quot;&apos;BAR&apos;&quot;);
        shouldBe(&quot;xhr.getResponseHeader(\&quot;x-foo\&quot;)&quot;,&quot;&apos;BAR&apos;&quot;);              
        shouldBeNull(&quot;xhr.getResponseHeader(\&quot;X-TEST\&quot;)&quot;);  
    }
}
var url = &quot;http://localhost:8000/xmlhttprequest/resources/access-control-response-with-expose-headers.php&quot;;
xhr.open(&quot;GET&quot;,url);
xhr.send(null);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536375</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-15 22:50:47 -0800</bug_when>
    <thetext>Right, you still need an equivalent of waitUntilDone/notifyDone.

I think that the most fashionable way to do that is to set window.jsTestIsAsync to true early on, and to call finishJSTest() when done.

You don&apos;t need layoutTestController.dumpAsText any more - script tests do that automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536604</commentid>
    <comment_count>26</comment_count>
      <attachid>122651</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-16 09:04:34 -0800</bug_when>
    <thetext>Created attachment 122651
Patch4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536605</commentid>
    <comment_count>27</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-16 09:06:06 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 122549 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122549&amp;action=review
&gt; 
&gt; THis is pretty close. I have a few minor nitpicks, and I think that you should make another try converting this to a &quot;shouldBe&quot; test.
&gt; 
Done

&gt; &gt; Source/WebCore/loader/CrossOriginAccessControl.cpp:173
&gt; &gt; +void parseAccessControlExposeHeadersAllowList(const String&amp; headerValue, HashSet&lt;String, CaseFoldingHash&gt;&amp; headersSet)
&gt; 
&gt; Is &quot;headers set&quot; good English grammar? FWIW, existing code says &quot;header set&quot;.
&gt; 
Changed.

&gt; &gt; Source/WebCore/loader/CrossOriginAccessControl.cpp:177
&gt; &gt; +    for (unsigned int headerCount = 0; headerCount &lt; headers.size(); headerCount++) {
&gt; 
&gt; WebKit coding style is to use &quot;unsigned&quot;, not &quot;unsigned int&quot;.
&gt; 
Done
&gt; &gt; Source/WebCore/loader/CrossOriginAccessControl.h:50
&gt; &gt; +void parseAccessControlExposeHeadersAllowList(const String&amp; headerValue, HashSet&lt;String, CaseFoldingHash&gt;&amp; headersSet);
&gt; 
&gt; I&apos;d suggest moving HTTPHeaderSet definition to the header, and using it for consistency.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536607</commentid>
    <comment_count>28</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-01-16 09:06:55 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Right, you still need an equivalent of waitUntilDone/notifyDone.
&gt; 
Thanks. Not sure how I missed it :(

&gt; I think that the most fashionable way to do that is to set window.jsTestIsAsync to true early on, and to call finishJSTest() when done.
&gt; 
&gt; You don&apos;t need layoutTestController.dumpAsText any more - script tests do that automatically.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536611</commentid>
    <comment_count>29</comment_count>
      <attachid>122651</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-16 09:14:25 -0800</bug_when>
    <thetext>Comment on attachment 122651
Patch4

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536661</commentid>
    <comment_count>30</comment_count>
      <attachid>122651</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-16 10:42:17 -0800</bug_when>
    <thetext>Comment on attachment 122651
Patch4

Clearing flags on attachment: 122651

Committed r105076: &lt;http://trac.webkit.org/changeset/105076&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536662</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-16 10:42:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538304</commentid>
    <comment_count>32</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-18 16:15:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/10001291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538469</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-18 21:48:17 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Ah. Good point - the boilerplate doesn&apos;t work for http tests. I should fix that.

Bug 76603.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122361</attachid>
            <date>2012-01-12 19:32:31 -0800</date>
            <delta_ts>2012-01-13 11:26:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8940</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTEyICBKb2UgVGhv
bWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAgCisgICAgICAgIENyb3NzIE9yaWdpbiBYTUxI
dHRwUmVxdWVzdCBjYW4gbm90IGV4cG9zZSBoZWFkZXJzIGluZGljYXRlZCBpbiBBY2Nlc3MtQ29u
dHJvbC1FeHBvc2UtSGVhZGVycyBIVFRQIFJlc3BvbnNlIEhlYWRlcgorCisgICAgICAgIFBhcnNp
bmcgdGhlICJBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIgaW4gdGhlIFhNTEhUVFBSZXF1
ZXN0IHJlc3BvbnNlIGhlYWRlci4gCisgICAgICAgIElmIHRoZSBjdXN0b20gcmVzcG9uc2UtaGVh
ZGVyIGlzIHBhcnQgb2YgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMsIHRoZW4gY29uc2lk
ZXIgdGhhdCBjdXN0b20gcmVzcG9uc2UtaGVhZGVyIGFzIGEgdmFsaWQgb25lLgorICAgICAgICAK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9z
ZS1oZWFkZXJzLmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphZGRUb0FjY2Vzc0NvbnRyb2xBbGxvd0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VBY2Nlc3NDb250cm9sQWxsb3dMaXN0KTogIHBhcnNpbmcgbG9naWMgb2YgQWNj
ZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMpOiBjaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20g
cmVzcG9uc2UtaGVhZGVyIGlzIHBhcnQgb2YgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJz
IgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKTog
Y2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHJlc3BvbnNlLWhlYWRlciBpcyBwYXJ0IG9mICJB
Y2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIKKwogMjAxMi0wMS0xMiAgSmFtZXMgU2ltb25z
ZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0No
b21pdW1dIFJlc291cmNlcyBsb2FkZWQgd2l0aCAzMDQgc3RhdHVzIGNvZGUgaGF2ZSByZWNlaXZp
bmcgdGltZSBvZiAxNTAwMCBkYXlzIGluIG5ldHdvcmsgcGFuZWwuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwNDc0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcg
QEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgogI2luY2x1ZGUgIm1hcmt1cC5o
IgogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTE1Miw2ICsx
NTMsNDcgQEAgc3RhdGljIHZvaWQgbG9nQ29uc29sZUVycm9yKFNjcmlwdEV4ZWN1dAogICAgIGNv
bnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlKTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgSGFzaFR5
cGU+CitzdGF0aWMgdm9pZCBhZGRUb0FjY2Vzc0NvbnRyb2xBbGxvd0xpc3QoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIEhhc2hTZXQ8U3RyaW5nLCBI
YXNoVHlwZT4mIHNldCkKK3sKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmlt
cGwoKTsKKyAgICBpZiAoIXN0cmluZ0ltcGwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNr
aXAgd2hpdGUgc3BhY2UgZnJvbSBzdGFydC4KKyAgICB3aGlsZSAoc3RhcnQgPD0gZW5kICYmIGlz
U3BhY2VPck5ld2xpbmUoKCpzdHJpbmdJbXBsKVtzdGFydF0pKQorICAgICAgICArK3N0YXJ0Owor
CisgICAgLy8gb25seSB3aGl0ZSBzcGFjZQorICAgIGlmIChzdGFydCA+IGVuZCkgCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFNraXAgd2hpdGUgc3BhY2UgZnJvbSBlbmQuCisgICAgd2hpbGUg
KGVuZCAmJiBpc1NwYWNlT3JOZXdsaW5lKCgqc3RyaW5nSW1wbClbZW5kXSkpCisgICAgICAgIC0t
ZW5kOworCisgICAgc2V0LmFkZChzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCAr
IDEpKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgSGFzaFR5cGU+CitzdGF0aWMgYm9vbCBwYXJzZUFj
Y2Vzc0NvbnRyb2xBbGxvd0xpc3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEhhc2hTZXQ8U3RyaW5n
LCBIYXNoVHlwZT4mIHNldCkKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IDA7CisgICAgc2l6ZV90
IGVuZDsKKyAgICB3aGlsZSAoKGVuZCA9IHN0cmluZy5maW5kKCcsJywgc3RhcnQpKSAhPSBub3RG
b3VuZCkgeworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGFkZFRvQWNjZXNzQ29udHJvbEFsbG93TGlzdChzdHJpbmcsIHN0YXJ0
LCBlbmQgLSAxLCBzZXQpOworICAgICAgICBzdGFydCA9IGVuZCArIDE7CisgICAgfQorICAgIGlm
IChzdGFydCAhPSBzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIGFkZFRvQWNjZXNzQ29udHJvbEFs
bG93TGlzdChzdHJpbmcsIHN0YXJ0LCBzdHJpbmcubGVuZ3RoKCkgLSAxLCBzZXQpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKwogUGFzc1JlZlB0cjxYTUxIdHRwUmVxdWVzdD4gWE1MSHR0cFJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFhNTEh0dHBSZXF1ZXN0KGNvbnRleHQsIHNlY3VyaXR5T3JpZ2luKSk7CkBAIC04OTEsNiAr
OTMzLDggQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAgIH0K
IAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBIYXNoU2V0PFN0cmluZz4g
aGVhZGVyczsKKyAgICBwYXJzZUFjY2Vzc0NvbnRyb2xBbGxvd0xpc3QobV9yZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIiksIGhlYWRlcnMpOwog
CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5k
OyArK2l0KSB7CkBAIC05MDMsNyArOTQ3LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRB
bGxSZXNwb25zZUhlYQogICAgICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAm
JiAhc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25B
Y2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkKKyAgICAgICAg
aWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVh
ZGVyV2hpdGVsaXN0KGl0LT5maXJzdCkgJiYgIWhlYWRlcnMuY29udGFpbnMoaXQtPmZpcnN0KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5maXJzdCk7CkBAIC05MjksOCArOTczLDEwIEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0
UmVzcG9uc2VIZWFkZXIKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIp
OwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotCi0gICAgaWYgKCFtX3NhbWVPcmln
aW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KG5h
bWUpKSB7CisgICAgCisgICAgSGFzaFNldDxTdHJpbmc+IGhlYWRlcnM7CisgICAgcGFyc2VBY2Nl
c3NDb250cm9sQWxsb3dMaXN0KG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29u
dHJvbC1FeHBvc2UtSGVhZGVycyIpLCBoZWFkZXJzKTsKKyAgICBpZiAoIW1fc2FtZU9yaWdpblJl
cXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QobmFtZSkg
JiYgIWhlYWRlcnMuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIi
ICsgbmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTA0ODg5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMTIgIEpvZSBUaG9tYXMgIDxqb2V0aG9tYXNA
bW90b3JvbGEuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTIxMAorCQlDcm9zcyBPcmlnaW4gWE1MSHR0cFJlcXVlc3QgY2FuIG5vdCBleHBv
c2UgaGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgSFRU
UCBSZXNwb25zZSBIZWFkZXIKKwkJCisJCUFkZGVkIHRlc3QgY2FzZXMgZm9yIEFjY2Vzcy1Db250
cm9sLUV4cG9zZS1IZWFkZXJzCisJCQorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wt
cmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0
aC1leHBvc2UtaGVhZGVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1o
ZWFkZXJzLnBocDogQWRkZWQuCisKIDIwMTItMDEtMTIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZWJhc2VsaW5lIGZpbGVzIGFmZmVj
dGVkIGJ5IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEwNDg4MS4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9u
c2Utd2l0aC1leHBvc2UtaGVhZGVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13
aXRoLWV4cG9zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0
aC1leHBvc2UtaGVhZGVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBA
QAorVGVzdCBmb3IgYnVnIDQxMjEwOiBDcm9zcyBPcmlnaW4gWE1MSHR0cFJlcXVlc3QgY2FuIG5v
dCBleHBvc2UgaGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRl
cnMgSFRUUCBSZXNwb25zZSBIZWFkZXIuCisKK1BBU1MKK1BBU1MKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1l
eHBvc2UtaGVhZGVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVy
cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IGZvciA8
YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAiPmJ1
ZyA0MTIxMDxhPjoKK0Nyb3NzIE9yaWdpbiBYTUxIdHRwUmVxdWVzdCBjYW4gbm90IGV4cG9zZSBo
ZWFkZXJzIGluZGljYXRlZCBpbiBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyBIVFRQIFJl
c3BvbnNlIEhlYWRlci48L3A+Cis8ZGl2IGlkPXRlc3RyZXN1bHQ+PC9kaXY+Cis8c2NyaXB0Pgor
CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICB9CisgIHZhciBQYXNzVGVzdCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBkaXZF
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RyZXN1bHQiKTsKKyAgICBkaXZF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwkKKyAgICBk
aXZFbGVtZW50LmlubmVySFRNTCArPSAiUEFTUyI7CisgIH0KKyAgdmFyIEZhaWxUZXN0ID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dGVzdHJlc3VsdCIpOworICAgIGRpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYnIiKSk7CQorICAgIGRpdkVsZW1lbnQuaW5uZXJIVE1MICs9ICJGQUlMIjsKKyAg
fQorICAKKyAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgIHhoci5v
bnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKHhoci5yZWFkeVN0
YXRlPT00KSB7CisgICAgICAgICAgICAgIGlmKHhoci5nZXRSZXNwb25zZUhlYWRlcigiWC1GT08i
KSAhPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgUGFzc1Rlc3QoKTsKKyAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICBGYWlsVGVzdCgpOworCisgICAgICAgICAgICAgIGlmKHho
ci5nZXRSZXNwb25zZUhlYWRlcigiWC1URVNUIikgPT09IG51bGwpCisgICAgICAgICAgICAgICAg
IFBhc3NUZXN0KCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgRmFpbFRl
c3QoKTsKKyAgICAgICAgICB9CisgICAgIH0KKworCisgIHZhciB1cmwgPSAiaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1yZXNwb25z
ZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocCI7CisgIHhoci5vcGVuKCJHRVQiLHVybCk7CisgIHho
ci5zZW5kKG51bGwpOworICAKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29u
dHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJv
bC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9s
LXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACis8P3BocAorICAgIGhlYWRlcigiQWNjZXNzLWNvbnRyb2wtbWF4LWFnZTogMCIpOwor
ICAgIGhlYWRlcigiQWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luOiAqIik7CisgICAgaGVhZGVy
KCJYLUZPTzogQkFSIik7CisgICAgaGVhZGVyKCJYLVRFU1Q6IFRFU1QiKTsKKyAgICBoZWFkZXIo
IkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzOiBYLUZPTyIpOworICAgIGhlYWRlcigiQ29u
dGVudC1UeXBlOiB0ZXh0L2h0bWwiKTsKKworICAgIHByaW50ICJlY2hvIgorPz4K
</data>
<flag name="review"
          id="123121"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122473</attachid>
            <date>2012-01-13 11:26:47 -0800</date>
            <delta_ts>2012-01-14 09:28:36 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>Patch2</filename>
            <type>text/plain</type>
            <size>8352</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAxLTEzICBKb2UgVGhv
bWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAKKyAgICAgICAgQ3Jvc3MgT3JpZ2luIFhNTEh0
dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhlYWRlcnMgaW5kaWNhdGVkIGluIEFjY2Vzcy1Db250
cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVzcG9uc2UgSGVhZGVyCisKKyAgICAgICAgUGFyc2lu
ZyB0aGUgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIiBpbiB0aGUgWE1MSFRUUFJlcXVl
c3QgcmVzcG9uc2UgaGVhZGVyLgorICAgICAgICBJZiB0aGUgY3VzdG9tIHJlc3BvbnNlLWhlYWRl
ciBpcyBwYXJ0IG9mIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzLCB0aGVuIGNvbnNpZGVy
IHRoYXQgY3VzdG9tIHJlc3BvbnNlLWhlYWRlciBhcyBhIHZhbGlkIG9uZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMu
aHRtbAorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQWNjZXNzQ29udHJvbEFsbG93TGlzdCk6ICAgcGFyc2luZyBsb2dpYyBvZiBBY2Nl
c3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycworICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6ICBjaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20g
cmVzcG9uc2UtaGVhZGVyIGlzIHBhcnQgb2YgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJz
IgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKTog
ICBjaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gcmVzcG9uc2UtaGVhZGVyIGlzIHBhcnQgb2Yg
IkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIgorCiAyMDEyLTAxLTEzICBBbmRyZWFzIEts
aW5nICA8YXdlc29tZWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0MvRE9NIGJpbmRpbmdz
OiBSZWR1Y2UgSGFuZGxlSGVhcCBjaHVybiBpbiBjYWNoZVdyYXBwZXIoKS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA0OTQyKQorKysgU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDYg
KzE1MiwxMyBAQCBzdGF0aWMgdm9pZCBsb2dDb25zb2xlRXJyb3IoU2NyaXB0RXhlY3V0CiAgICAg
Y29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UpOwogfQogCitzdGF0aWMgdm9pZCBwYXJzZUFj
Y2Vzc0NvbnRyb2xBbGxvd0xpc3QoY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1ZSwgVmVjdG9yPFN0
cmluZz4mIGhlYWRlcnNTZXQpCit7CisgICAgLy8gU3RyaXAgdGhlIHdoaXRlLXNwYWNlcy4gUmVz
cG9uc2UgaGVhZGVycyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgc28gdXNpbmcgdXBwZXJjYXNlIGFs
d2F5cworICAgIGhlYWRlclZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpLnVwcGVyKCk7CisgICAgaGVh
ZGVyVmFsdWUuc3BsaXQoJywnLCBmYWxzZSwgaGVhZGVyc1NldCk7Cit9CisKIFBhc3NSZWZQdHI8
WE1MSHR0cFJlcXVlc3Q+IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4p
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYTUxIdHRwUmVxdWVzdChjb250ZXh0LCBzZWN1
cml0eU9yaWdpbikpOwpAQCAtODkyLDYgKzg5OSw4IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6
Z2V0QWxsUmVzcG9uc2VIZWEKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAor
ICAgIFZlY3RvcjxTdHJpbmc+IGFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzU2V0OworICAgIHBh
cnNlQWNjZXNzQ29udHJvbEFsbG93TGlzdChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQWNj
ZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMiKSwgYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNT
ZXQpOwogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCE9
IGVuZDsgKytpdCkgewogICAgICAgICAvLyBIaWRlIFNldC1Db29raWUgaGVhZGVyIGZpZWxkcyBm
cm9tIHRoZSBYTUxIdHRwUmVxdWVzdCBjbGllbnQgZm9yIHRoZXNlIHJlYXNvbnM6CkBAIC05MDMs
NyArOTEyLDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogICAg
ICAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIoaXQtPmZpcnN0KSAmJiAhc2VjdXJpdHlPcmlnaW4o
KS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9u
c2VIZWFkZXJXaGl0ZWxpc3QoaXQtPmZpcnN0KSkKKyAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5S
ZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5m
aXJzdCkgJiYgIWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzU2V0LmNvbnRhaW5zKGl0LT5maXJz
dC51cHBlcigpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5maXJzdCk7CkBAIC05MjksOCArOTM4LDExIEBAIFN0cmluZyBYTUxIdHRw
UmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIiICsg
bmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQorICAgIAorICAg
IFZlY3RvcjxTdHJpbmc+IGFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzU2V0OworICAgIHBhcnNl
QWNjZXNzQ29udHJvbEFsbG93TGlzdChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQWNjZXNz
LUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMiKSwgYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNTZXQp
OwogCi0gICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJl
c3BvbnNlSGVhZGVyV2hpdGVsaXN0KG5hbWUpKSB7CisgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1
ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KG5hbWUpICYm
ICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyc1NldC5jb250YWlucyhuYW1lLnVwcGVyKCkpKSB7
CiAgICAgICAgIGxvZ0NvbnNvbGVFcnJvcihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICJSZWZ1
c2VkIHRvIGdldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiKTsKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk0MikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAx
LTEzICBKb2UgVGhvbWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAKKyAgICAgICAgQ3Jvc3Mg
T3JpZ2luIFhNTEh0dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhlYWRlcnMgaW5kaWNhdGVkIGlu
IEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVzcG9uc2UgSGVhZGVyCisKKyAg
ICAgICAgQWRkZWQgdGVzdCBjYXNlcyBmb3IgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2Ut
aGVhZGVycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9h
Y2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocDogQWRkZWQuCisK
IDIwMTItMDEtMTMgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRlc3QgdGhhdCBjbG9uZU5vZGUoKSBkb2Vzbid0IGNhdXNlIGNyYXNoZXMgd2hlbiB1
c2VkIGRpcmVjdGx5IGFmdGVyIHN0eWxlc2hlZXQgbXV0YXRpb24uCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgt
ZXhwb3NlLWhlYWRlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBv
c2UtaGVhZGVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3Nl
LWhlYWRlcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK0NPTlNP
TEUgTUVTU0FHRTogUmVmdXNlZCB0byBnZXQgdW5zYWZlIGhlYWRlciAiWC1URVNUIgorVGVzdCBm
b3IgYnVnIDQxMjEwOiBDcm9zcyBPcmlnaW4gWE1MSHR0cFJlcXVlc3QgY2FuIG5vdCBleHBvc2Ug
aGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgSFRUUCBS
ZXNwb25zZSBIZWFkZXIuCisKKworUEFTUworUEFTUworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4
cG9zZS1oZWFkZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJz
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3QgZm9yIDxh
IGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTIxMCI+YnVn
IDQxMjEwPGE+OgorQ3Jvc3MgT3JpZ2luIFhNTEh0dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhl
YWRlcnMgaW5kaWNhdGVkIGluIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVz
cG9uc2UgSGVhZGVyLjwvcD4KKzxkaXYgaWQ9dGVzdHJlc3VsdD48L2Rpdj4KKzxzY3JpcHQ+CisK
KyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgIH0KKyAgdmFyIFBhc3NUZXN0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGRpdkVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHJlc3VsdCIpOworICAgIGRpdkVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CQorICAgIGRp
dkVsZW1lbnQuaW5uZXJIVE1MICs9ICJQQVNTIjsKKyAgfQorICB2YXIgRmFpbFRlc3QgPSBmdW5j
dGlvbigpIHsKKyAgICB2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0cmVzdWx0Iik7CisgICAgZGl2RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJiciIpKTsJCisgICAgZGl2RWxlbWVudC5pbm5lckhUTUwgKz0gIkZBSUwiOworICB9
CisgIAorICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgeGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoeGhyLnJlYWR5U3Rh
dGU9PTQpIHsKKyAgICAgICAgICAgICAgaWYoeGhyLmdldFJlc3BvbnNlSGVhZGVyKCJYLUZPTyIp
ICE9PSBudWxsKQorICAgICAgICAgICAgICAgICAgUGFzc1Rlc3QoKTsKKyAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgRmFpbFRlc3QoKTsKKyAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgIGlmKHhoci5nZXRSZXNwb25zZUhlYWRlcigieC1mb28iKSAhPT0gbnVsbCkK
KyAgICAgICAgICAgICAgICAgIFBhc3NUZXN0KCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgIEZhaWxUZXN0KCk7CisKKyAgICAgICAgICAgICAgaWYoeGhyLmdldFJlc3Bv
bnNlSGVhZGVyKCJYLVRFU1QiKSA9PT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgUGFzc1Rlc3Qo
KTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBGYWlsVGVzdCgpOworCisg
ICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7ICAKKyAgICAgICAgICB9
CisgICAgIH0KKworCisgIHZhciB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHBy
ZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFk
ZXJzLnBocCI7CisgIHhoci5vcGVuKCJHRVQiLHVybCk7CisgIHhoci5zZW5kKG51bGwpOworICAK
Kzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRo
LWV4cG9zZS1oZWFkZXJzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4
cG9zZS1oZWFkZXJzLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhw
b3NlLWhlYWRlcnMucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8P3BocAorICAg
IGhlYWRlcigiQWNjZXNzLWNvbnRyb2wtbWF4LWFnZTogMCIpOworICAgIGhlYWRlcigiQWNjZXNz
LWNvbnRyb2wtYWxsb3ctb3JpZ2luOiAqIik7CisgICAgaGVhZGVyKCJYLUZPTzogQkFSIik7Cisg
ICAgaGVhZGVyKCJYLVRFU1Q6IFRFU1QiKTsKKyAgICBoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUV4
cG9zZS1IZWFkZXJzOiBYLUZPTyIpOworICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L2h0
bWwiKTsKKworICAgIHByaW50ICJlY2hvIgorPz4K
</data>
<flag name="review"
          id="123264"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122549</attachid>
            <date>2012-01-14 09:28:36 -0800</date>
            <delta_ts>2012-01-15 19:48:36 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>patch3</filename>
            <type>text/plain</type>
            <size>9751</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTAxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAxLTE0ICBKb2UgVGhv
bWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAKKyAgICAgICAgQ3Jvc3MgT3JpZ2luIFhNTEh0
dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhlYWRlcnMgaW5kaWNhdGVkIGluIEFjY2Vzcy1Db250
cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVzcG9uc2UgSGVhZGVyCisKKyAgICAgICAgUGFyc2lu
ZyB0aGUgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIiBpbiB0aGUgWE1MSFRUUFJlcXVl
c3QgcmVzcG9uc2UgaGVhZGVyLgorICAgICAgICBJZiB0aGUgY3VzdG9tIHJlc3BvbnNlLWhlYWRl
ciBpcyBwYXJ0IG9mIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzLCB0aGVuIGNvbnNpZGVy
IHRoYXQgY3VzdG9tIHJlc3BvbnNlLWhlYWRlciBhcyBhIHZhbGlkIG9uZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMu
aHRtbAorCisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlckFsbG93TGlz
dCk6IHBhcnNpbmcgbG9naWMgb2YgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgdmFsdWUK
KyAgICAgICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmg6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMpOiBjaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gcmVz
cG9uc2UtaGVhZGVyIGlzIHBhcnQgb2YgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKTogY2hl
Y2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHJlc3BvbnNlLWhlYWRlciBpcyBwYXJ0IG9mICJBY2Nl
c3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIKKwogMjAxMi0wMS0xNCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVbm1hdGNoZWQgdHJhbnNwYXJlbmN5
IGxheWVyIGJlZ2luL2VuZCBvbiBhIGZpbHRlcmVkIGVsZW1lbnQgd2l0aCBhbiBvcGFjaXR5IGFu
Y2VzdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmNwcAkocmV2aXNpb24gMTA0OTQyKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTE3
MSw0ICsxNzAsMTUgQEAgYm9vbCBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soY29uc3QgUmVzbwog
ICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIHBhcnNlQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRl
cnNBbGxvd0xpc3QoY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1ZSwgSGFzaFNldDxTdHJpbmcsIENh
c2VGb2xkaW5nSGFzaD4mIGhlYWRlcnNTZXQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gaGVhZGVy
czsKKyAgICBoZWFkZXJWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBoZWFkZXJzKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBoZWFkZXJDb3VudCA9IDA7IGhlYWRlckNvdW50IDwgaGVhZGVycy5zaXpl
KCk7IGhlYWRlckNvdW50KyspIHsKKyAgICAgICAgU3RyaW5nIHN0cmlwcGVkSGVhZGVyID0gaGVh
ZGVyc1toZWFkZXJDb3VudF0uc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIGlmICghc3RyaXBw
ZWRIZWFkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaGVhZGVyc1NldC5hZGQoc3RyaXBwZWRI
ZWFkZXIpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaAkocmV2aXNp
b24gMTA0OTQyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDYsNiArNDcsNyBAQCB2b2lkIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9s
KFJlc291CiBSZXNvdXJjZVJlcXVlc3QgY3JlYXRlQWNjZXNzQ29udHJvbFByZWZsaWdodFJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlPcmlnaW4qLCBTdG9yZWRDcmVkZW50
aWFscyk7CiAKIGJvb2wgcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBTdG9yZWRDcmVkZW50aWFscywgU2VjdXJpdHlPcmlnaW4qLCBTdHJpbmcmIGVycm9y
RGVzY3JpcHRpb24pOwordm9pZCBwYXJzZUFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzQWxsb3dM
aXN0KGNvbnN0IFN0cmluZyYgaGVhZGVyVmFsdWUsIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGlu
Z0hhc2g+JiBoZWFkZXJzU2V0KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEwNDk0MikKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5
Miw2ICs4OTIsOCBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhCiAK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKKyAgICBIYXNoU2V0PFN0cmluZywg
Q2FzZUZvbGRpbmdIYXNoPiBhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyc1NldDsKKyAgICBwYXJz
ZUFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzQWxsb3dMaXN0KG1fcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIpLCBhY2Nlc3NDb250cm9sRXhw
b3NlSGVhZGVyc1NldCk7CiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJl
Z2luKCk7IGl0IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIEhpZGUgU2V0LUNvb2tpZSBoZWFk
ZXIgZmllbGRzIGZyb20gdGhlIFhNTEh0dHBSZXF1ZXN0IGNsaWVudCBmb3IgdGhlc2UgcmVhc29u
czoKQEAgLTkwMyw3ICs5MDUsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3Bv
bnNlSGVhCiAgICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFzZWN1
cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0Nv
bnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpKQorICAgICAgICBpZiAoIW1f
c2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0
ZWxpc3QoaXQtPmZpcnN0KSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNTZXQuY29udGFp
bnMoaXQtPmZpcnN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKGl0LT5maXJzdCk7CkBAIC05MjksOCArOTMxLDExIEBAIFN0cmluZyBYTUxI
dHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIi
ICsgbmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQorICAgIAor
ICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IGFjY2Vzc0NvbnRyb2xFeHBvc2VI
ZWFkZXJzU2V0OworICAgIHBhcnNlQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNBbGxvd0xpc3Qo
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJz
IiksIGFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzU2V0KTsKIAotICAgIGlmICghbV9zYW1lT3Jp
Z2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChu
YW1lKSkgeworICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRy
b2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChuYW1lKSAmJiAhYWNjZXNzQ29udHJvbEV4cG9zZUhl
YWRlcnNTZXQuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAgbG9nQ29uc29sZUVycm9yKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgXCIiICsg
bmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTA1MDE5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMTQgIEpvZSBUaG9tYXMgIDxqb2V0aG9tYXNAbW90
b3JvbGEuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MTIxMAorICAgICAgICBDcm9zcyBPcmlnaW4gWE1MSHR0cFJlcXVlc3QgY2FuIG5vdCBl
eHBvc2UgaGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMg
SFRUUCBSZXNwb25zZSBIZWFkZXIKKworICAgICAgICBBZGRlZCB0ZXN0IGNhc2VzIGZvciBBY2Nl
c3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29u
dHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25z
ZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhw
b3NlLWhlYWRlcnMucGhwOiBBZGRlZC4KKwogMjAxMi0wMS0xMyAgT2phbiBWYWZhaSAgPG9qYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNraXAgdGVzdCB0aGF0IHN0YXJ0ZWQgZmFpbGluZyBh
ZnRlciByMTA1MDE1LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Fj
Y2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nl
c3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZ2V0
IHVuc2FmZSBoZWFkZXIgIlgtVEVTVCIKK1Rlc3QgZm9yIGJ1ZyA0MTIxMDogQ3Jvc3MgT3JpZ2lu
IFhNTEh0dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhlYWRlcnMgaW5kaWNhdGVkIGluIEFjY2Vz
cy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVzcG9uc2UgSGVhZGVyLgorCisKK1BBU1MK
K1BBU1MKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
YWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRy
b2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25z
ZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAK
KzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAiPmJ1ZyA0MTIxMDxhPjoKK0Nyb3NzIE9yaWdpbiBY
TUxIdHRwUmVxdWVzdCBjYW4gbm90IGV4cG9zZSBoZWFkZXJzIGluZGljYXRlZCBpbiBBY2Nlc3Mt
Q29udHJvbC1FeHBvc2UtSGVhZGVycyBIVFRQIFJlc3BvbnNlIEhlYWRlci48L3A+Cis8ZGl2IGlk
PXRlc3RyZXN1bHQ+PC9kaXY+Cis8c2NyaXB0PgorCisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICB9CisgIHZhciBQYXNzVGVz
dCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBkaXZFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3RyZXN1bHQiKTsKKyAgICBkaXZFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImJyIikpOwkKKyAgICBkaXZFbGVtZW50LmlubmVySFRNTCArPSAiUEFT
UyI7CisgIH0KKyAgdmFyIEZhaWxUZXN0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGRpdkVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdHJlc3VsdCIpOworICAgIGRpdkVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CQorICAgIGRpdkVs
ZW1lbnQuaW5uZXJIVE1MICs9ICJGQUlMIjsKKyAgfQorICAKKyAgICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24o
KSB7CisgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlPT00KSB7CisgICAgICAgICAgICAgIGlm
KHhoci5nZXRSZXNwb25zZUhlYWRlcigiWC1GT08iKSAhPT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICAgIFBhc3NUZXN0KCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEZh
aWxUZXN0KCk7CisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBpZih4aHIuZ2V0UmVz
cG9uc2VIZWFkZXIoIngtZm9vIikgIT09IG51bGwpCisgICAgICAgICAgICAgICAgICBQYXNzVGVz
dCgpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBGYWlsVGVzdCgpOwor
CisgICAgICAgICAgICAgIGlmKHhoci5nZXRSZXNwb25zZUhlYWRlcigiWC1URVNUIikgPT09IG51
bGwpCisgICAgICAgICAgICAgICAgIFBhc3NUZXN0KCk7CisgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgRmFpbFRlc3QoKTsKKworICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOyAgCisgICAgICAgICAgfQorICAgICB9CisKKworICB2YXIgdXJsID0g
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNv
bnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5waHAiOworICB4aHIub3BlbigiR0VU
Iix1cmwpOworICB4aHIuc2VuZChudWxsKTsKKyAgCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5waHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
YWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2UtaGVhZGVycy5waHAJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9h
Y2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMCBAQAorPD9waHAKKyAgICBoZWFkZXIoIkFjY2Vzcy1jb250cm9sLW1h
eC1hZ2U6IDAiKTsKKyAgICBoZWFkZXIoIkFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbjogKiIp
OworICAgIGhlYWRlcigiWC1mb286IEJBUiIpOworICAgIGhlYWRlcigiWC1URVNUOiBURVNUIik7
CisgICAgaGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyczogeC1Gb28iKTsKKyAg
ICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sIik7CisKKyAgICBwcmludCAiZWNobyIK
Kz8+Cg==
</data>
<flag name="review"
          id="123373"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122651</attachid>
            <date>2012-01-16 09:04:34 -0800</date>
            <delta_ts>2012-01-16 10:42:17 -0800</delta_ts>
            <desc>Patch4</desc>
            <filename>patch4</filename>
            <type>text/plain</type>
            <size>9614</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTA2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAxLTE2ICBKb2UgVGhv
bWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyMTAKKyAgICAgICAgQ3Jvc3MgT3JpZ2luIFhNTEh0
dHBSZXF1ZXN0IGNhbiBub3QgZXhwb3NlIGhlYWRlcnMgaW5kaWNhdGVkIGluIEFjY2Vzcy1Db250
cm9sLUV4cG9zZS1IZWFkZXJzIEhUVFAgUmVzcG9uc2UgSGVhZGVyCisKKyAgICAgICAgUGFyc2lu
ZyB0aGUgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIiBpbiB0aGUgWE1MSFRUUFJlcXVl
c3QgcmVzcG9uc2UgaGVhZGVyLgorICAgICAgICBJZiB0aGUgY3VzdG9tIHJlc3BvbnNlLWhlYWRl
ciBpcyBwYXJ0IG9mIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzLCB0aGVuIGNvbnNpZGVy
IHRoYXQgY3VzdG9tIHJlc3BvbnNlLWhlYWRlciBhcyBhIHZhbGlkIG9uZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMu
aHRtbAorCisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJzQWxsb3dMaXN0
KTogIHBhcnNpbmcgbG9naWMgb2YgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMKKyAgICAg
ICAgKiBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmg6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRB
bGxSZXNwb25zZUhlYWRlcnMpOiBjaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gcmVzcG9uc2Ut
aGVhZGVyIGlzIHBhcnQgb2YgIkFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzIgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKTogIGNoZWNraW5n
IHdoZXRoZXIgdGhlIGN1c3RvbSByZXNwb25zZS1oZWFkZXIgaXMgcGFydCBvZiAiQWNjZXNzLUNv
bnRyb2wtRXhwb3NlLUhlYWRlcnMiCisKIDIwMTItMDEtMTYgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgTGFyZ2UgU1ZHIHRleHQgbGF5b3V0IHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gcjgxMTY4CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcAkocmV2aXNpb24gMTA1MDM1
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTc2LDcgKzc1LDYgQEAgYm9vbCBpc1NpbXBsZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdChjbwogICAgIHJldHVybiB0cnVlOwogfQogCi10eXBlZGVmIEhhc2hT
ZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IEhUVFBIZWFkZXJTZXQ7CiBzdGF0aWMgUGFzc093
blB0cjxIVFRQSGVhZGVyU2V0PiBjcmVhdGVBbGxvd2VkQ3Jvc3NPcmlnaW5SZXNwb25zZUhlYWRl
cnNTZXQoKQogewogICAgIE93blB0cjxIVFRQSGVhZGVyU2V0PiBoZWFkZXJTZXQgPSBhZG9wdFB0
cihuZXcgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4pOwpAQCAtMTcxLDQgKzE2OSwx
NSBAQCBib29sIHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhjb25zdCBSZXNvCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK3ZvaWQgcGFyc2VBY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyc0FsbG93TGlz
dChjb25zdCBTdHJpbmcmIGhlYWRlclZhbHVlLCBIVFRQSGVhZGVyU2V0JiBoZWFkZXJTZXQpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gaGVhZGVyczsKKyAgICBoZWFkZXJWYWx1ZS5zcGxpdCgnLCcs
IGZhbHNlLCBoZWFkZXJzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGhlYWRlckNvdW50ID0gMDsgaGVh
ZGVyQ291bnQgPCBoZWFkZXJzLnNpemUoKTsgaGVhZGVyQ291bnQrKykgeworICAgICAgICBTdHJp
bmcgc3RyaXBwZWRIZWFkZXIgPSBoZWFkZXJzW2hlYWRlckNvdW50XS5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICAgICAgaWYgKCFzdHJpcHBlZEhlYWRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBo
ZWFkZXJTZXQuYWRkKHN0cmlwcGVkSGVhZGVyKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0Nv
bnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmgJKHJldmlzaW9uIDEwNTAzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAs
MTIgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nLCBDYXNl
Rm9sZGluZ0hhc2g+IEhUVFBIZWFkZXJTZXQ7CisKIGNsYXNzIEhUVFBIZWFkZXJNYXA7CiBjbGFz
cyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC00Niw2ICs0OSw3
IEBAIHZvaWQgdXBkYXRlUmVxdWVzdEZvckFjY2Vzc0NvbnRyb2woUmVzb3UKIFJlc291cmNlUmVx
dWVzdCBjcmVhdGVBY2Nlc3NDb250cm9sUHJlZmxpZ2h0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTZWN1cml0eU9yaWdpbiosIFN0b3JlZENyZWRlbnRpYWxzKTsKIAogYm9vbCBwYXNz
ZXNBY2Nlc3NDb250cm9sQ2hlY2soY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFN0b3JlZENyZWRl
bnRpYWxzLCBTZWN1cml0eU9yaWdpbiosIFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbik7Cit2b2lk
IHBhcnNlQWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlcnNBbGxvd0xpc3QoY29uc3QgU3RyaW5nJiBo
ZWFkZXJWYWx1ZSwgSFRUUEhlYWRlclNldCYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTA1MDM1
KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODkyLDYgKzg5Miw4IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9u
c2VIZWEKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAorICAgIEhUVFBIZWFk
ZXJTZXQgYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldDsKKyAgICBwYXJzZUFjY2Vzc0NvbnRy
b2xFeHBvc2VIZWFkZXJzQWxsb3dMaXN0KG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2Nl
c3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyIpLCBhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0
KTsKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgLy8gSGlkZSBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMgZnJv
bSB0aGUgWE1MSHR0cFJlcXVlc3QgY2xpZW50IGZvciB0aGVzZSByZWFzb25zOgpAQCAtOTAzLDcg
KzkwNSw3IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWEKICAgICAg
ICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIXNlY3VyaXR5T3JpZ2luKCkt
PmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNjZXNzQ29udHJvbFJlc3BvbnNl
SGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCkpCisgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVx
dWVzdCAmJiAhaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmly
c3QpICYmICFhY2Nlc3NDb250cm9sRXhwb3NlSGVhZGVyU2V0LmNvbnRhaW5zKGl0LT5maXJzdCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+Zmlyc3QpOwpAQCAtOTI5LDggKzkzMSwxMSBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6Omdl
dFJlc3BvbnNlSGVhZGVyCiAgICAgICAgIGxvZ0NvbnNvbGVFcnJvcihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksICJSZWZ1c2VkIHRvIGdldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIi
KTsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KKyAgICAKKyAgICBIVFRQSGVhZGVy
U2V0IGFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQ7CisgICAgcGFyc2VBY2Nlc3NDb250cm9s
RXhwb3NlSGVhZGVyc0FsbG93TGlzdChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQWNjZXNz
LUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMiKSwgYWNjZXNzQ29udHJvbEV4cG9zZUhlYWRlclNldCk7
CiAKLSAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVz
cG9uc2VIZWFkZXJXaGl0ZWxpc3QobmFtZSkpIHsKKyAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVl
c3QgJiYgIWlzT25BY2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QobmFtZSkgJiYg
IWFjY2Vzc0NvbnRyb2xFeHBvc2VIZWFkZXJTZXQuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAg
bG9nQ29uc29sZUVycm9yKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gZ2V0
IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1MDY1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMTYgIEpvZSBU
aG9tYXMgIDxqb2V0aG9tYXNAbW90b3JvbGEuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTIxMAorICAgICAgICBDcm9zcyBPcmlnaW4gWE1M
SHR0cFJlcXVlc3QgY2FuIG5vdCBleHBvc2UgaGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNv
bnRyb2wtRXhwb3NlLUhlYWRlcnMgSFRUUCBSZXNwb25zZSBIZWFkZXIKKworICAgICAgICBBZGRl
ZCB0ZXN0IGNhc2VzIGZvciBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9h
Y2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250
cm9sLXJlc3BvbnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMucGhwOiBBZGRlZC4KKwogMjAxMi0wMS0x
NiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgR1RLIHJlYmFzZWxpbmUgYWZ0ZXIgcjEwNTA2MS4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1l
eHBvc2UtaGVhZGVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9z
ZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Utd2l0aC1leHBvc2Ut
aGVhZGVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK0NPTlNP
TEUgTUVTU0FHRTogUmVmdXNlZCB0byBnZXQgdW5zYWZlIGhlYWRlciAiWC1URVNUIgorVGVzdCBm
b3IgYnVnIDQxMjEwOiBDcm9zcyBPcmlnaW4gWE1MSHR0cFJlcXVlc3QgY2FuIG5vdCBleHBvc2Ug
aGVhZGVycyBpbmRpY2F0ZWQgaW4gQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMgSFRUUCBS
ZXNwb25zZSBIZWFkZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHho
ci5nZXRSZXNwb25zZUhlYWRlcigiWC1GT08iKSBpcyAnQkFSJworUEFTUyB4aHIuZ2V0UmVzcG9u
c2VIZWFkZXIoIngtZm9vIikgaXMgJ0JBUicKK1BBU1MgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCJY
LVRFU1QiKSBpcyBudWxsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9h
Y2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9hY2Nlc3MtY29udHJv
bC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250cm9sLXJlc3BvbnNl
LXdpdGgtZXhwb3NlLWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2Rlc2NyaXB0aW9uKCdUZXN0IGZv
ciBidWcgNDEyMTA6IENyb3NzIE9yaWdpbiBYTUxIdHRwUmVxdWVzdCBjYW4gbm90IGV4cG9zZSBo
ZWFkZXJzIGluZGljYXRlZCBpbiBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycyBIVFRQIFJl
c3BvbnNlIEhlYWRlci4nKTsKK3ZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK3hoci5v
bnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKSB7CisgICAgaWYgKHhoci5yZWFkeVN0YXRlPT00
KSB7CisgICAgICAgIHNob3VsZEJlKCJ4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJYLUZPT1wiKSIs
IidCQVInIik7CisgICAgICAgIHNob3VsZEJlKCJ4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJ4LWZv
b1wiKSIsIidCQVInIik7CisgICAgICAgIHNob3VsZEJlTnVsbCgieGhyLmdldFJlc3BvbnNlSGVh
ZGVyKFwiWC1URVNUXCIpIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KK3Zh
ciB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9h
Y2Nlc3MtY29udHJvbC1yZXNwb25zZS13aXRoLWV4cG9zZS1oZWFkZXJzLnBocCI7Cit4aHIub3Bl
bigiR0VUIix1cmwpOworeGhyLnNlbmQobnVsbCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLXJlc3Bv
bnNlLXdpdGgtZXhwb3NlLWhlYWRlcnMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2FjY2Vzcy1jb250cm9sLXJlc3BvbnNl
LXdpdGgtZXhwb3NlLWhlYWRlcnMucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvYWNjZXNzLWNvbnRyb2wtcmVzcG9uc2Ut
d2l0aC1leHBvc2UtaGVhZGVycy5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/
cGhwCisgICAgaGVhZGVyKCJBY2Nlc3MtY29udHJvbC1tYXgtYWdlOiAwIik7CisgICAgaGVhZGVy
KCJBY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW46ICoiKTsKKyAgICBoZWFkZXIoIlgtZm9vOiBC
QVIiKTsKKyAgICBoZWFkZXIoIlgtVEVTVDogVEVTVCIpOworICAgIGhlYWRlcigiQWNjZXNzLUNv
bnRyb2wtRXhwb3NlLUhlYWRlcnM6IHgtRm9vIik7CisgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6
IHRleHQvaHRtbCIpOworCisgICAgcHJpbnQgImVjaG8iCis/Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>