<?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>42365</bug_id>
          
          <creation_ts>2010-07-15 06:39:58 -0700</creation_ts>
          <short_desc>HTML5 Parser: document.write in a asynchronous script which is specified to load before page finish blows away document</short_desc>
          <delta_ts>2010-07-23 15:14:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>http://www.tianya.cn/publicforum/articleslist/0/funinfo.shtml</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40745</dependson>
          <blocked>41115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Johnny(Jianning) Ding">jnd</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>251840</commentid>
    <comment_count>0</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-15 06:39:58 -0700</bug_when>
    <thetext>How to reproduce this issue
1. Visit http://www.tianya.cn/publicforum/articleslist/0/funinfo.shtml
2. The normal content shows up for a split second
3. The normal content disappears, and a ads shows up instead

The code path of ads displayed in the page is: document.getElementById(&quot;googleAdsense&quot;).src = &quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;.
The external script &quot;show_ads.js&quot; called document.write to write ads in the page. But since the external script was added before page finish, the author of web page expected that the document.write should be called before page finish, and that document.write should not below away the document.

Here I use a test case to reproduce this bug. there are two files (test_doc_write.html &amp; test_doc_write.js) in this test case.

test_doc_write.html:
&lt;body&gt;
hello
&lt;script id=&quot;tester&quot;&gt;&lt;/script&gt;
&lt;script&gt;
document.getElementById(&quot;tester&quot;).src = &quot;test_doc_write.js&quot;;
&lt;/script&gt;
&lt;script&gt;
document.write(&quot;&lt;div&gt;write sth later&lt;/div&gt;&quot;);
&lt;/script&gt;
&lt;/body&gt;

test_doc_write.js:
document.write(&quot;&lt;div&gt;write sth&lt;/div&gt;&quot;)

Run the test case in IE8, result is:
hello 
write sth
write sth later

Run the test case in FF, result is:
hello
write sth later
write sth

Run the test case in WebKit result is:
write sth

In WebCore, when script&apos;s src is changed, it put the script in a queue(in ScriptElementData::notifyFinished) and executes the script in asynchronously (in Document::executeScriptSoonTimerFired).
In this case, when executing the script, the parser was already finished and shut down, so function Document::write blew away the original doc, opened a new doc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251842</commentid>
    <comment_count>1</comment_count>
      <attachid>61647</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-15 06:42:39 -0700</bug_when>
    <thetext>Created attachment 61647
html file of the test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251843</commentid>
    <comment_count>2</comment_count>
      <attachid>61648</attachid>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-15 06:43:10 -0700</bug_when>
    <thetext>Created attachment 61648
js file of the test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251857</commentid>
    <comment_count>3</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-15 07:11:02 -0700</bug_when>
    <thetext>When talking with Adam for this issue, he told me to read a related W3C bug. (http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767)

In the comment#10 of that bug, Ian provided a solution: &quot;It would need a flag on the &lt;script&gt; element set when the element is added to the document, based on
whether the parser is on the stack, and then for the script execution to set a
similar flag&quot;.
According to Ian&apos;s solution, if script is added when document&apos;s parser is on the stack, which means the author of the webpage wants to execute the script in current document, and the document.write in that script should not blow way the document. This solution looks reasonable for me.

My thought to fix this bug is
1.Add a flag in ScriptElementData to indicate whether the script is added when document&apos;s parser is on the stack. (the ScriptElementData::m_createByParser is right flag to use?)
2. in Document.write, if a script is running (check both HTMLDocumentParser::m_scriptRunner and Document::m_scriptsToExecuteSoon), and if the script was added when document&apos;s parser was on the stack, ignore this document.write. Otherwise do write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252010</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-15 11:30:46 -0700</bug_when>
    <thetext>I think this is a duplicate of bug 40745, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252040</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-15 12:55:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think this is a duplicate of bug 40745, no?

Unclear.  There are a bunch of different cases here.  I fixed the cases in Bug 40745 to the extent that the referenced sites work properly.  In the end, we&apos;re going to them a the same time by updating to what the spec says to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252461</commentid>
    <comment_count>6</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-07-16 04:59:17 -0700</bug_when>
    <thetext>Adam&apos;s r63165: &lt;http://trac.webkit.org/changeset/63165&gt; already fixed the issue on http://www.tianya.cn/publicforum/articleslist/0/funinfo.shtml.

But there is a race condition. if &quot;show_ads.js&quot; is the last resource of the main doc, then parser will be closed before executing the &quot;show_ads.js&quot;. Then when executing &quot;show_ads.js&quot;, document.write will blow away the document. (Like the test case I gave in this issue)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254871</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-07-22 10:24:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Adam&apos;s r63165: &lt;http://trac.webkit.org/changeset/63165&gt; already fixed the issue on http://www.tianya.cn/publicforum/articleslist/0/funinfo.shtml.
&gt; 
&gt; But there is a race condition. if &quot;show_ads.js&quot; is the last resource of the main doc, then parser will be closed before executing the &quot;show_ads.js&quot;. Then when executing &quot;show_ads.js&quot;, document.write will blow away the document. (Like the test case I gave in this issue)

Here&apos;s another site that repros:
https://www.delta.com/booking/searchFlights.do?displayTripType=multicity

This appears to be the trigger that adds the async script:
&lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt; 
function embedChat(){
	var chatScript = document.createElement(&apos;script&apos;);
	chatScript.type = &apos;text/javascript&apos;;
	chatScript.src = &quot;https://kanachat.delta.com/tracker/vtc.php?orgid=1044339&amp;ichannelid=Y91zET1044345&quot;;
	get(&quot;online_chat&quot;).appendChild(chatScript);
}
addEvent(window, &apos;load&apos;, embedChat, false); 
&lt;/script&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254978</commentid>
    <comment_count>8</comment_count>
      <attachid>62338</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-22 14:23:22 -0700</bug_when>
    <thetext>Created attachment 62338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255038</commentid>
    <comment_count>9</comment_count>
      <attachid>62338</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 16:05:49 -0700</bug_when>
    <thetext>Comment on attachment 62338
Patch

I&apos;m having trouble understanding this patch.

LayoutTests/http/tests/misc/write-from-dom-script.html:9
 +  script.src = &quot;data:text/javascript,document.write(&apos;FAIL&apos;);document.close();&quot;;
It&apos;s sad that this script would &quot;PASS&quot; if your script had an error.  Would be better if the script set some global that was also checked and could cause FAIL.

LayoutTests/http/tests/misc/write-while-waiting.html:8
 +  setTimeout(&quot;document.write(&apos;PASS&apos;);document.close();&quot;, 100);
Would be nice if you could explain in the ChangeLog why this is right?  Maybe you did and I didn&apos;t understand.

WebCore/dom/Document.cpp:366
 +      , m_isWriteNeutralised(false)
It&apos;s sad that this is on Document and not DocumentWriter or something else.  Document is such a dumping ground.

WebCore/dom/Document.cpp:2020
 +      bool insertionPointIsUndefined = !m_parser || !m_parser-&gt;hasInsertionPoint();
This would have been more clear (to me) as:
bool hasInsertionPoint = m_parser &amp;&amp; m_parser-&gt;hasInsertionPoint();

WebCore/dom/Document.cpp:2023
 +      if (insertionPointIsUndefined &amp;&amp; isWriteNeutralised())
Then this becomes !hasInsertionPoint

WebCore/dom/Document.h:1005
 +      bool isWriteNeutralised() const { return m_isWriteNeutralised; }
I wish the spec called this &quot;writeDisabled&quot;, Neutralized is a poor name IMO.
Hard to spell, hard to type, hard for our numerous non-english speakers to understand.

WebCore/dom/DocumentParser.h:44
 +      virtual bool hasInsertionPoint() { return true; }
So what does this mean when true?  Who should override it?  If it&apos;s true, you&apos;ll always get an insert call?

WebCore/dom/ScriptElement.cpp:59
 +      // If the element&apos;s Document has an active parser, and the parser&apos;s script
This comment makes it seem like this should not go inside ScriptElement.

WebCore/dom/ScriptElement.cpp:61
 +      // &quot;parser-inserted&quot; flag set, the user agent must set the element&apos;s
Or maybe that the Document should be notified that the script was inserted and it should make a decision to nueter itself or not.

WebCore/dom/ScriptElement.cpp: 
 +  static inline bool useHTML5Parser(Document* document)
This was previous dead code?

WebCore/dom/ScriptElement.cpp:203
 +          // flag was set as being itself &quot;write-neutralised&quot;. Let neutralised doc
God this is an awful name.  I need to complain to Hixie.
Done: http://www.w3.org/Bugs/Public/show_bug.cgi?id=10228

Btw, my spelling corrector seems to think it&apos;s &quot;neutralized&quot; not &quot;neutralised&quot;.  Yet another reason why that name needs to go.


WebCore/html/HTMLDocumentParser.cpp:218
 +      if (m_scriptRunner &amp;&amp; m_scriptRunner-&gt;inScriptExecution())
This needs a comment to explain why.  It&apos;s not clear why &quot;inScirptExecution&quot; means there is an insertion point.  Why would that even be needed?  Can&apos;t we check m_input?

WebCore/html/HTMLDocumentParser.cpp:220
 +      // FIXME: Checking whether we&apos;ve seen end of file isn&apos;t quite right when
I don&apos;t undersand this FIXME.  Can you explain better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255039</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 16:06:36 -0700</bug_when>
    <thetext>I think I can guess why, but can we document somewhere why the LegacyHTMLDocumentParser doesn&apos;t want a isWriteNeuteredOrWhateverTheBrokenNameInTheSpecIs() function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255059</commentid>
    <comment_count>11</comment_count>
      <attachid>62338</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-22 16:39:46 -0700</bug_when>
    <thetext>Comment on attachment 62338
Patch

WebCore/dom/ScriptElement.cpp:65
 +          data.setIsWriteNeutralised(true);
Once write neutered, always neutered.  Is this the idea?  Or should this flag get reset if the script element is moved to a new document before it&apos;s fully loaded?  Not sure, sounds like a complicated edge case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255121</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-22 18:08:30 -0700</bug_when>
    <thetext>&gt; I&apos;m having trouble understanding this patch.

Eric and I discussed the patch verbally.

&gt; LayoutTests/http/tests/misc/write-from-dom-script.html:9
&gt;  +  script.src = &quot;data:text/javascript,document.write(&apos;FAIL&apos;);document.close();&quot;;
&gt; It&apos;s sad that this script would &quot;PASS&quot; if your script had an error.  Would be better if the script set some global that was also checked and could cause FAIL.

Fixed.

&gt; LayoutTests/http/tests/misc/write-while-waiting.html:8
&gt;  +  setTimeout(&quot;document.write(&apos;PASS&apos;);document.close();&quot;, 100);
&gt; Would be nice if you could explain in the ChangeLog why this is right?  Maybe you did and I didn&apos;t understand.

I added more details to the ChangeLog.  Ian&apos;s trying to narrowly address the compatibility problem.

&gt; WebCore/dom/Document.cpp:366
&gt;  +      , m_isWriteNeutralised(false)
&gt; It&apos;s sad that this is on Document and not DocumentWriter or something else.  Document is such a dumping ground.

Of all the state on document, this one is very appropriate.  The spec stores the state on Document and it&apos;s read by Document::write, which seems to really belong on document.

&gt; WebCore/dom/Document.cpp:2020
&gt;  +      bool insertionPointIsUndefined = !m_parser || !m_parser-&gt;hasInsertionPoint();
&gt; This would have been more clear (to me) as:
&gt; bool hasInsertionPoint = m_parser &amp;&amp; m_parser-&gt;hasInsertionPoint();

Done.

&gt; WebCore/dom/Document.cpp:2023
&gt;  +      if (insertionPointIsUndefined &amp;&amp; isWriteNeutralised())
&gt; Then this becomes !hasInsertionPoint

Yep.

&gt; WebCore/dom/Document.h:1005
&gt;  +      bool isWriteNeutralised() const { return m_isWriteNeutralised; }
&gt; I wish the spec called this &quot;writeDisabled&quot;, Neutralized is a poor name IMO.
&gt; Hard to spell, hard to type, hard for our numerous non-english speakers to understand.

Done.  I chose the name to match the spec.  It still has a hyperlink to the spec, so folks should be able to figure it out.

&gt; WebCore/dom/DocumentParser.h:44
&gt;  +      virtual bool hasInsertionPoint() { return true; }
&gt; So what does this mean when true?  Who should override it?  If it&apos;s true, you&apos;ll always get an insert call?

We discussed this over the phone.  The default should be false, but that messes up some SVG font code.  I&apos;ll make another patch that changes the default to false and fixes the SVG font code to use the right APIs.

&gt; WebCore/dom/ScriptElement.cpp:59
&gt;  +      // If the element&apos;s Document has an active parser, and the parser&apos;s script
&gt; This comment makes it seem like this should not go inside ScriptElement.

I didn&apos;t understand this comment.  It&apos;s in the &quot;script element&quot; section of the spec and it&apos;s manipulating some part of the script element&apos;s state...  Putting the code here seems to make sense.

&gt; WebCore/dom/ScriptElement.cpp:61
&gt;  +      // &quot;parser-inserted&quot; flag set, the user agent must set the element&apos;s
&gt; Or maybe that the Document should be notified that the script was inserted and it should make a decision to nueter itself or not.

I think this comment stems from your confusing about how the dataflow works.  The document does get notified, but when the script runs.  Here we&apos;re remembering what life was like when we were inserted into the document.

&gt; WebCore/dom/ScriptElement.cpp: 
&gt;  +  static inline bool useHTML5Parser(Document* document)
&gt; This was previous dead code?

Yes.  Technically this change is unrelated, but I just saw it and removed it.

&gt; WebCore/dom/ScriptElement.cpp:203
&gt;  +          // flag was set as being itself &quot;write-neutralised&quot;. Let neutralised doc
&gt; God this is an awful name.  I need to complain to Hixie.
&gt; Done: http://www.w3.org/Bugs/Public/show_bug.cgi?id=10228
&gt; 
&gt; Btw, my spelling corrector seems to think it&apos;s &quot;neutralized&quot; not &quot;neutralised&quot;.  Yet another reason why that name needs to go.

The name is gone, from the code at least.

&gt; WebCore/html/HTMLDocumentParser.cpp:218
&gt;  +      if (m_scriptRunner &amp;&amp; m_scriptRunner-&gt;inScriptExecution())
&gt; This needs a comment to explain why.  It&apos;s not clear why &quot;inScirptExecution&quot; means there is an insertion point.  Why would that even be needed?  Can&apos;t we check m_input?

I&apos;ve changed this to get the information from m_input.  I&apos;ve also renamed HTMLScriptRunner::inScriptExecution to something more informative.

&gt; WebCore/html/HTMLDocumentParser.cpp:220
&gt;  +      // FIXME: Checking whether we&apos;ve seen end of file isn&apos;t quite right when
&gt; I don&apos;t undersand this FIXME.  Can you explain better?

I&apos;ve removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255180</commentid>
    <comment_count>13</comment_count>
      <attachid>62376</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-22 20:22:32 -0700</bug_when>
    <thetext>Created attachment 62376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255541</commentid>
    <comment_count>14</comment_count>
      <attachid>62376</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-23 13:53:01 -0700</bug_when>
    <thetext>Comment on attachment 62376
Patch

WebCore/dom/Document.cpp:2021
 +      // &quot;write-neutralised&quot; flag set, then abort these steps.
Doesn&apos;t match the code, but matches the spec, so OK.

WebCore/dom/Document.cpp:2026
 +      if (!hasInsertionPoint)
I thought you said you had to change this back to being if (m_parser)?

WebCore/dom/Document.cpp:366
 +      , m_writeDisabled(false)
I hope there is just the one constructor...

WebCore/dom/ScriptElement.cpp:65
 +          data.setWriteDisabled(true);
We&apos;ll never set this back to &quot;false&quot; if we move into a different document at a later time.  Should we?

WebCore/dom/ScriptElement.cpp:207
 +              m_element-&gt;document()-&gt;setWriteDisabled(true);
This probably would have been cleaner as a stack-object (like you&apos;re so fond of). :)

WebCore/html/HTMLInputStream.h:72
 +              // FIXME: Somehow we need to understand the difference between
I thought you said this FIXME could go away if we moved the check back to m_parser instead?  What are the concequences of this FIXME?  What are we doing wrong now?  How bad is it?

WebCore/dom/DocumentParser.h:44
 +      virtual bool hasInsertionPoint() { return true; }
You mentioned having this return false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255544</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-23 14:00:06 -0700</bug_when>
    <thetext>&gt;  +      // &quot;write-neutralised&quot; flag set, then abort these steps.
&gt; Doesn&apos;t match the code, but matches the spec, so OK.

These are just quotes from the spec.

&gt; WebCore/dom/Document.cpp:2026
&gt;  +      if (!hasInsertionPoint)
&gt; I thought you said you had to change this back to being if (m_parser)?

That turned out not to work because of documents created by document.open().  At a basic level, we need to distinguish between the two cases in order to get things 100% correct.

&gt; I hope there is just the one constructor...

I believe so.

&gt; We&apos;ll never set this back to &quot;false&quot; if we move into a different document at a later time.  Should we?

I&apos;m not sure how to write a test case to observe the difference since scripts only run once.  Maybe if it gets moved between the first attack and when it runs?  I think our behavior is correct w.r.t. the spec in that case anyway since the spec never changes this flag.

&gt;  +              m_element-&gt;document()-&gt;setWriteDisabled(true);
&gt; This probably would have been cleaner as a stack-object (like you&apos;re so fond of). :)

Maybe.  I can change it if you like, but I tried to keep my zest for RAIIs contained.

&gt;  +              // FIXME: Somehow we need to understand the difference between
&gt; I thought you said this FIXME could go away if we moved the check back to m_parser instead?  What are the concequences of this FIXME?  What are we doing wrong now?  How bad is it?

That turned out not to work.  The consequence is if the async script runs before we&apos;ve gotten EOF from the network, we&apos;ll document.write into the network byte stream at the point where we&apos;re waiting for bytes from the network.  This matches our original behavior.  We can polish this further in a followup patch since that case is much more obscure than the bug we&apos;re trying to fix (and the behavior matches our old behavior).

&gt; WebCore/dom/DocumentParser.h:44
&gt;  +      virtual bool hasInsertionPoint() { return true; }
&gt; You mentioned having this return false?

I&apos;ll do that in a followup patch.  It involves donking around with the SVG font code, so I didn&apos;t want to do it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255559</commentid>
    <comment_count>16</comment_count>
      <attachid>62376</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-23 14:36:46 -0700</bug_when>
    <thetext>Comment on attachment 62376
Patch

I think your zest for RAIIs is totally justified in this case, but it&apos;s not a big deal.  Just easier to get this &quot;wrong&quot; in any second usage were there to be one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255560</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-23 14:36:54 -0700</bug_when>
    <thetext>Thank you for the replies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255561</commentid>
    <comment_count>18</comment_count>
      <attachid>62376</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-23 14:37:45 -0700</bug_when>
    <thetext>Comment on attachment 62376
Patch

Thanks for the detailed review.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255576</commentid>
    <comment_count>19</comment_count>
      <attachid>62376</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-23 15:14:18 -0700</bug_when>
    <thetext>Comment on attachment 62376
Patch

Clearing flags on attachment: 62376

Committed r63998: &lt;http://trac.webkit.org/changeset/63998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255577</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-23 15:14:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61647</attachid>
            <date>2010-07-15 06:42:39 -0700</date>
            <delta_ts>2010-07-15 06:42:39 -0700</delta_ts>
            <desc>html file of the test case</desc>
            <filename>test_doc_write.html</filename>
            <type>text/html</type>
            <size>240</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+DQo8aHRtbD4NCjxib2R5Pg0KaGVsbG8NCjxzY3JpcHQgaWQ9InRlc3Rl
ciI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RlciIp
LnNyYyA9ICJ0ZXN0X2RvY193cml0ZS5qcyI7DQo8L3NjcmlwdD4NCjxzY3JpcHQ+DQpkb2N1bWVu
dC53cml0ZSgiPGRpdj53cml0ZSBzdGggbGF0ZXI8L2Rpdj4iKTsNCjwvc2NyaXB0Pg0KPC9ib2R5
Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61648</attachid>
            <date>2010-07-15 06:43:10 -0700</date>
            <delta_ts>2010-07-15 06:43:10 -0700</delta_ts>
            <desc>js file of the test case</desc>
            <filename>test_doc_write.js</filename>
            <type>application/x-javascript</type>
            <size>39</size>
            <attacher name="Johnny(Jianning) Ding">jnd</attacher>
            
              <data encoding="base64">ZG9jdW1lbnQud3JpdGUoIjxkaXY+d3JpdGUgc3RoPC9kaXY+Iik7
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62338</attachid>
            <date>2010-07-22 14:23:22 -0700</date>
            <delta_ts>2010-07-22 20:22:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42365-20100722142321.patch</filename>
            <type>text/plain</type>
            <size>13627</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NjdiN2Y0MWQxNDg1MDA1MDQ3ZGNhZjg3NWNkNjY1NmY0M2Q4Y2U5Li4xNTc0OTg1
MWVlNWI3YTk2Nzc4YTUwNDIyMzVlY2E1MjcxYjA1Yzg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDctMjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBQYXJzZXI6IGRvY3Vt
ZW50LndyaXRlIGluIGEgYXN5bmNocm9ub3VzIHNjcmlwdCB3aGljaCBpcyBzcGVjaWZpZWQgdG8g
bG9hZCBiZWZvcmUgcGFnZSBmaW5pc2ggYmxvd3MgYXdheSBkb2N1bWVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzNjUKKworICAgICAgICBXcml0
ZXMgZnJvbSBzZXRUaW1lb3V0IHdvcmsgYnV0IHdyaXRlcyBmcm9tIERPTS1hZGRlZCBzY3JpcHRz
IGFyZQorICAgICAgICBuZXV0cmFsaXNlZC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy93
cml0ZS1mcm9tLWRvbS1zY3JpcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL21pc2Mvd3JpdGUtZnJvbS1kb20tc2NyaXB0Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvbWlzYy93cml0ZS13aGlsZS13YWl0aW5nLmh0bWw6CisKIDIwMTAtMDctMjEg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy93cml0
ZS1mcm9tLWRvbS1zY3JpcHQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9t
aXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2VmMjJl
OWE0MzFhZDAyNzI3MTNiNzFmZGM4Nzk0MDE2YzhlZjEyZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy93cml0ZS1mcm9tLWRvbS1zY3JpcHQtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEgQEAKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWlzYy93cml0ZS1mcm9tLWRvbS1zY3JpcHQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWlzYy93cml0ZS1mcm9tLWRvbS1zY3JpcHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGU1YmRhYzVk
M2UzZGM1MjcwODJiMGMyZjE5MmQ1MTZjODA3ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC5odG1sCkBAIC0wLDAg
KzEsMTQgQEAKKzxodG1sPgorPGJvZHk+CitQQVNTCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisKK3ZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKK3Njcmlw
dC5zcmMgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQsZG9jdW1lbnQud3JpdGUoJ0ZBSUwnKTtkb2N1
bWVudC5jbG9zZSgpOyI7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2NyaXB0LXNsb3cxLnBsIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlz
Yy93cml0ZS13aGlsZS13YWl0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mv
d3JpdGUtd2hpbGUtd2FpdGluZy5odG1sCmluZGV4IDRiZjM5MGY5ZGNkOTViNzdmMjQ5MTIzZjQ2
N2Y0YmNlNTIwMDE4ZWQuLjBjNzE1ZDg0OTEyNWIzNDk5NTJiMDg5YjQ2YTAzNDM2ZTRhOTVjYmQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy93cml0ZS13aGlsZS13YWl0
aW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLXdoaWxlLXdh
aXRpbmcuaHRtbApAQCAtMSwxMSArMSwxMSBAQAogPGh0bWw+CiA8Ym9keT4KLVBBU1MKK0ZBSUwK
IDxzY3JpcHQ+CiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKIAotc2V0VGltZW91dCgiZG9jdW1lbnQud3JpdGUo
J0ZBSUwnKTtkb2N1bWVudC5jbG9zZSgpOyIsIDEwMCk7CitzZXRUaW1lb3V0KCJkb2N1bWVudC53
cml0ZSgnUEFTUycpO2RvY3VtZW50LmNsb3NlKCk7IiwgMTAwKTsKIDwvc2NyaXB0PgogPHNjcmlw
dCBzcmM9InJlc291cmNlcy9zY3JpcHQtc2xvdzEucGwiPjwvc2NyaXB0PgogPC9ib2R5PgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MTE2
Mzk0MDM4NjZmOWI2ZjAxNGYwNzFhODM5MDg4NmQ4MTJiZjI2Li45ZTFiOGNmZWVjMmRjYTk1NDZh
OGJiMGQ5ZTJmMDYxMjJlYzc0ZjEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEwLTA3LTIyICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSFRNTDUgUGFyc2VyOiBkb2N1bWVudC53cml0ZSBpbiBhIGFzeW5j
aHJvbm91cyBzY3JpcHQgd2hpY2ggaXMgc3BlY2lmaWVkIHRvIGxvYWQgYmVmb3JlIHBhZ2UgZmlu
aXNoIGJsb3dzIGF3YXkgZG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyMzY1CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRo
ZSBjaGFuZ2VzIElhbiBtYWRlIHRvIEhUTUw1IHRvIGFkZHJlc3MgdGhlc2UKKyAgICAgICAgaXNz
dWVzLiAgTGV0J3MgdHJ5IGl0IGFuZCBzZWUgaG93IHdlbGwgaXQgd29ya3MuCisKKyAgICAgICAg
VGVzdDogaHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC5odG1sCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d3JpdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzV3JpdGVOZXV0cmFsaXNlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SXNXcml0ZU5ldXRyYWxpc2VkKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50UGFyc2Vy
OjpoYXNJbnNlcnRpb25Qb2ludCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudERhdGE6OlNjcmlwdEVsZW1lbnREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpldmFsdWF0ZVNjcmlwdCk6Cisg
ICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVs
ZW1lbnREYXRhOjppc1dyaXRlTmV1dHJhbGlzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudERhdGE6OnNldElzV3JpdGVOZXV0cmFsaXNlZCk6CisgICAgICAgICogaHRtbC9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjpoYXNJbnNlcnRpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJz
ZXI6Omluc2VydCk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAx
MC0wNy0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDljNzQ3ZDMzNjU2ZWJjYzVhM2NmYjI3
MjAxYzBjNjUwYzFjYzI4YWEuLjc5ZGI5NzY0MmJkNjUyY2I2YTdjYTVhNzAwNjczZGRiYmMyZjk4
NDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKQEAgLTM2Myw2ICszNjMsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJh
bWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAg
ICAgLCBtX2ZyYW1lRWxlbWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoZmFsc2UpCiAgICAgLCBt
X2NvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKGZhbHNlKQogICAgICwgbV91cGRhdGVGb2N1c0Fw
cGVhcmFuY2VSZXN0b3Jlc1NlbGVjdGlvbihmYWxzZSkKKyAgICAsIG1faXNXcml0ZU5ldXRyYWxp
c2VkKGZhbHNlKQogICAgICwgbV90aXRsZSgiIikKICAgICAsIG1fcmF3VGl0bGUoIiIpCiAgICAg
LCBtX3RpdGxlU2V0RXhwbGljaXRseShmYWxzZSkKQEAgLTIwMTYsOSArMjAxNywxNyBAQCB2b2lk
IERvY3VtZW50Ojp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHRleHQsIERvY3VtZW50KiBv
d25lckRvY3VtZW50KQogICAgICAgICBwcmludGYoIkJlZ2lubmluZyBhIGRvY3VtZW50LndyaXRl
IGF0ICVkXG4iLCBlbGFwc2VkVGltZSgpKTsKICNlbmRpZgogCi0gICAgaWYgKCFtX3BhcnNlcikK
KyAgICBib29sIGluc2VydGlvblBvaW50SXNVbmRlZmluZWQgPSAhbV9wYXJzZXIgfHwgIW1fcGFy
c2VyLT5oYXNJbnNlcnRpb25Qb2ludCgpOworCisgICAgLy8gSWYgdGhlIGluc2VydGlvbiBwb2lu
dCBpcyB1bmRlZmluZWQgYW5kIHRoZSBEb2N1bWVudCBoYXMgdGhlICJ3cml0ZS1uZXV0cmFsaXNl
ZCIgZmxhZyBzZXQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKGluc2VydGlvblBv
aW50SXNVbmRlZmluZWQgJiYgaXNXcml0ZU5ldXRyYWxpc2VkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIElmIHRoZSBpbnNlcnRpb24gcG9pbnQgaXMgdW5kZWZpbmVkLCB0aGUgb3Blbigp
IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCAod2l0aCBubyBhcmd1bWVudHMpIG9uIHRoZSBkb2N1bWVu
dCBvYmplY3QuCisgICAgaWYgKGluc2VydGlvblBvaW50SXNVbmRlZmluZWQpCiAgICAgICAgIG9w
ZW4ob3duZXJEb2N1bWVudCk7CiAKKyAgICAvLyBUaGUgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgdGhl
IGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZCBtdXN0IGJl
IGluc2VydGVkIGludG8gdGhlIGlucHV0IHN0cmVhbSBqdXN0IGJlZm9yZSB0aGUgaW5zZXJ0aW9u
IHBvaW50LgogICAgIEFTU0VSVChtX3BhcnNlcik7CiAgICAgbV9wYXJzZXItPmluc2VydCh0ZXh0
KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMDc4Y2I1MzllMzVjNGE4MzU5MTczYWU2NDQ4Yjg1YzY4MjA2OGZhYS4u
MTkxYjQzMjAzZGNkZGQyMTZiNjkzOTI4Nzg0NWM5ZjY0NTBiZDdhMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMDAy
LDYgKzEwMDIsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBpZEF0dHJp
YnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2lkQXR0cmlidXRlTmFtZTsgfQogCisgICAgYm9v
bCBpc1dyaXRlTmV1dHJhbGlzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzV3JpdGVOZXV0cmFsaXNl
ZDsgfQorICAgIHZvaWQgc2V0SXNXcml0ZU5ldXRyYWxpc2VkKGJvb2wgZmxhZykgeyBtX2lzV3Jp
dGVOZXV0cmFsaXNlZCA9IGZsYWc7IH0KKwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1l
KiwgY29uc3QgS1VSTCYsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC0xMTU1LDYg
KzExNTgsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxl
czsKICAgICBib29sIG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlUmVzdG9yZXNTZWxlY3Rpb247CiAK
KyAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
LyN3cml0ZS1uZXV0cmFsaXNlZAorICAgIGJvb2wgbV9pc1dyaXRlTmV1dHJhbGlzZWQ7CisKICAg
ICBTdHJpbmcgbV90aXRsZTsKICAgICBTdHJpbmcgbV9yYXdUaXRsZTsKICAgICBib29sIG1fdGl0
bGVTZXRFeHBsaWNpdGx5OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIu
aCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKaW5kZXggN2U0N2E4NzE1YTE0MzcwZGRh
MGU2MjcyMmU0OGVjNTFkNmE2YjI3Ni4uYTM1NDViNmVmODFiMTEzNzEzNWQ3YWY3ODRkYTdkNjIz
NjJlMmY0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAorKysgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCkBAIC00MCw2ICs0MCw5IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBhc1NjcmlwdGFibGVEb2N1bWVu
dFBhcnNlcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9z
cGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2luc2VydGlvbi1wb2ludAorICAgIHZpcnR1YWwg
Ym9vbCBoYXNJbnNlcnRpb25Qb2ludCgpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIC8vIGluc2Vy
dCBpcyB1c2VkIGJ5IGRvY3VtZW50LndyaXRlCiAgICAgdmlydHVhbCB2b2lkIGluc2VydChjb25z
dCBTZWdtZW50ZWRTdHJpbmcmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Njcmlw
dEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggNTE4YWVh
ZGE3NGRkZWRmZTM0OGI5ZWY0NTMzZTJhZDNhNDNmOWM2OS4uY2RjYmE1MmE0ZmRjZTNmNDQ2MTAx
ZjJjNzUzNmE1ZGMxMzUzYmUwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgpAQCAtNTMsNiArNTQsMTYgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJgogICAgIGlmIChk
YXRhLmNyZWF0ZWRCeVBhcnNlcigpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQKKworICAg
IC8vIElmIHRoZSBlbGVtZW50J3MgRG9jdW1lbnQgaGFzIGFuIGFjdGl2ZSBwYXJzZXIsIGFuZCB0
aGUgcGFyc2VyJ3Mgc2NyaXB0CisgICAgLy8gbmVzdGluZyBsZXZlbCBpcyBub24temVybywgYnV0
IHRoaXMgc2NyaXB0IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUKKyAgICAvLyAicGFyc2VyLWlu
c2VydGVkIiBmbGFnIHNldCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBzZXQgdGhlIGVsZW1lbnQncwor
ICAgIC8vICJ3cml0ZS1uZXV0cmFsaXNlZCIgZmxhZy4KKyAgICBEb2N1bWVudFBhcnNlciogcGFy
c2VyID0gZGF0YS5lbGVtZW50KCktPmRvY3VtZW50KCktPnBhcnNlcigpOworICAgIGlmIChwYXJz
ZXIgJiYgcGFyc2VyLT5oYXNJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICBkYXRhLnNldElzV3Jp
dGVOZXV0cmFsaXNlZCh0cnVlKTsKKwogICAgIGlmICghc291cmNlVXJsLmlzRW1wdHkoKSkgewog
ICAgICAgICBkYXRhLnJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtODQsMTMgKzk1LDYgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoU2Ny
aXB0RWxlbWVudERhdGEmIGRhdGEpCiAgICAgICAgIGRhdGEuZXZhbHVhdGVTY3JpcHQoU2NyaXB0
U291cmNlQ29kZShkYXRhLnNjcmlwdENvbnRlbnQoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJs
KCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHVzZUhUTUw1UGFyc2VyKERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRv
Y3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5zZXR0aW5ncygpIDogMDsKLSAgICBy
ZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmh0bWw1UGFyc2VyRW5hYmxlZCgpOwotfQotCiB2
b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihTY3JpcHRFbGVtZW50RGF0
YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCiB7CiAgICAgLy8gVGhlIHBhcnNlciBq
dXN0IHJlYWNoZWQgPC9zY3JpcHQ+LiBJZiB3ZSBoYXZlIG5vIHNyYyBhbmQgbm8gdGV4dCwKQEAg
LTEzNyw2ICsxNDEsNyBAQCBTY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEoU2Ny
aXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRWxlbWVudCogZWxlbQogICAgICwgbV9lbGVtZW50
KGVsZW1lbnQpCiAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICwgbV9jcmVhdGVkQnlQYXJz
ZXIoZmFsc2UpCisgICAgLCBtX2lzV3JpdGVOZXV0cmFsaXNlZChmYWxzZSkKICAgICAsIG1fcmVx
dWVzdGVkKGZhbHNlKQogICAgICwgbV9ldmFsdWF0ZWQoZmFsc2UpCiAgICAgLCBtX2ZpcmVkTG9h
ZChmYWxzZSkKQEAgLTE5MSw3ICsxOTYsMjkgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZh
bHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKIAogICAgICAg
ICBtX2V2YWx1YXRlZCA9IHRydWU7CiAKKyAgICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0CisKKyAgICAgICAgLy8gSWYgdGhl
IHNjcmlwdCBlbGVtZW50J3MgIndyaXRlLW5ldXRyYWxpc2VkIiBmbGFnIGlzIHNldCwgdGhlbiBm
bGFnCisgICAgICAgIC8vIHRoZSBEb2N1bWVudCB0aGUgc2NyaXB0IGVsZW1lbnQgd2FzIGluIHdo
ZW4gdGhlICJ3cml0ZS1uZXV0cmFsaXNlZCIKKyAgICAgICAgLy8gZmxhZyB3YXMgc2V0IGFzIGJl
aW5nIGl0c2VsZiAid3JpdGUtbmV1dHJhbGlzZWQiLiBMZXQgbmV1dHJhbGlzZWQgZG9jCisgICAg
ICAgIC8vIGJlIHRoYXQgRG9jdW1lbnQuCisgICAgICAgIGlmIChtX2lzV3JpdGVOZXV0cmFsaXNl
ZCkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2VsZW1lbnQtPmRvY3VtZW50KCktPmlzV3JpdGVO
ZXV0cmFsaXNlZCgpKTsKKyAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SXNX
cml0ZU5ldXRyYWxpc2VkKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEg
c2NyaXB0IGZyb20gdGhlIHNjcmlwdCBlbGVtZW50IG5vZGUsIHVzaW5nIHRoZSBzY3JpcHQKKyAg
ICAgICAgLy8gYmxvY2sncyBzb3VyY2UgYW5kIHRoZSBzY3JpcHQgYmxvY2sncyB0eXBlLgorICAg
ICAgICAvLyBOb3RlOiBUaGlzIGlzIHdoZXJlIHRoZSBzY3JpcHQgaXMgY29tcGlsZWQgYW5kIGFj
dHVhbGx5IGV4ZWN1dGVkLgogICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlKHNvdXJj
ZUNvZGUpOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgIndyaXRlLW5ldXRyYWxpc2VkIiBmbGFn
IGZyb20gbmV1dHJhbGlzZWQgZG9jLCBpZiBpdCB3YXMKKyAgICAgICAgLy8gc2V0IGluIHRoZSBl
YXJsaWVyIHN0ZXAuCisgICAgICAgIGlmIChtX2lzV3JpdGVOZXV0cmFsaXNlZCkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNXcml0ZU5ldXRyYWxpc2VkKCkp
OworICAgICAgICAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRJc1dyaXRlTmV1dHJhbGlz
ZWQoZmFsc2UpOworICAgICAgICB9CisKICAgICAgICAgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlRm9y
QWxsRG9jdW1lbnRzKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5oIGIvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCmluZGV4IGM2NjNlNDM3NjM4
NDA4MDc2N2MxMThjYmQ1NzQ3Yzg5ODZjZTM3ZTQuLjE3YTE4YzkwMjI0MmNhZmVkZThhMmQzZDE5
N2YyZjM5N2JjYjAxM2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAor
KysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKQEAgLTgyLDYgKzgyLDggQEAgcHVibGlj
OgogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAg
ICBib29sIGNyZWF0ZWRCeVBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3JlYXRlZEJ5UGFyc2Vy
OyB9CiAgICAgdm9pZCBzZXRDcmVhdGVkQnlQYXJzZXIoYm9vbCB2YWx1ZSkgeyBtX2NyZWF0ZWRC
eVBhcnNlciA9IHZhbHVlOyB9CisgICAgYm9vbCBpc1dyaXRlTmV1dHJhbGlzZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzV3JpdGVOZXV0cmFsaXNlZDsgfQorICAgIHZvaWQgc2V0SXNXcml0ZU5ldXRy
YWxpc2VkKGJvb2wgdmFsdWUpIHsgbV9pc1dyaXRlTmV1dHJhbGlzZWQgPSB2YWx1ZTsgfQogICAg
IGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maXJlZExvYWQ7IH0K
ICAgICB2b2lkIHNldEhhdmVGaXJlZExvYWRFdmVudChib29sIGZpcmVkTG9hZCkgeyBtX2ZpcmVk
TG9hZCA9IGZpcmVkTG9hZDsgfQogCkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIEVs
ZW1lbnQqIG1fZWxlbWVudDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+
IG1fY2FjaGVkU2NyaXB0OwogICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7IC8vIEhUTUw1OiAi
cGFyc2VyLWluc2VydGVkIgorICAgIGJvb2wgbV9pc1dyaXRlTmV1dHJhbGlzZWQ7IC8vIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3dyaXRlLW5ldXRy
YWxpc2VkCiAgICAgYm9vbCBtX3JlcXVlc3RlZDsKICAgICBib29sIG1fZXZhbHVhdGVkOyAvLyBI
VE1MNTogImFscmVhZHkgc3RhcnRlZCIKICAgICBib29sIG1fZmlyZWRMb2FkOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBiYWY2ZTI1NTVlMmFhODA2OTNjMmQ0YzY2Y2MzMzZl
ZDY0YTA3NDc1Li5lNTY5NTdmZDU2YmMyNWViMzIzNDVkMzcwYjRjYWE5YjAzYjY1MDE1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMjEzLDIyICsyMTMsMjIgQEAgdm9pZCBI
VE1MRG9jdW1lbnRQYXJzZXI6OmRpZFB1bXBMZXhlcigpCiAjZW5kaWYKIH0KIAorYm9vbCBIVE1M
RG9jdW1lbnRQYXJzZXI6Omhhc0luc2VydGlvblBvaW50KCkKK3sKKyAgICBpZiAobV9zY3JpcHRS
dW5uZXIgJiYgbV9zY3JpcHRSdW5uZXItPmluU2NyaXB0RXhlY3V0aW9uKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIC8vIEZJWE1FOiBDaGVja2luZyB3aGV0aGVyIHdlJ3ZlIHNlZW4gZW5k
IG9mIGZpbGUgaXNuJ3QgcXVpdGUgcmlnaHQgd2hlbgorICAgIC8vICAgICAgICB0aGUgaW5wdXQg
c3RyZWFtIGlzIGJlaW5nIGZlZCBmcm9tIHRoZSBuZXR3b3JrLgorICAgIGlmICghbV9pbnB1dC5o
YXZlU2VlbkVuZE9mRmlsZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgaWYgKG1fcGFyc2VyU3RvcHBlZCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fc2NyaXB0UnVubmVyICYmICFtX3NjcmlwdFJ1bm5lci0+aW5TY3Jp
cHRFeGVjdXRpb24oKSAmJiBtX2lucHV0LmhhdmVTZWVuRW5kT2ZGaWxlKCkpIHsKLSAgICAgICAg
Ly8gZG9jdW1lbnQud3JpdGUgd2FzIGNhbGxlZCB3aXRob3V0IGEgY3VycmVudCBpbnNlcnRpb24g
cG9pbnQuCi0gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgd2UncmUgc3VwcG9zZWQg
dG8gaW1wbGljaXRseSBvcGVuIHRoZQotICAgICAgICAvLyBkb2N1bWVudC4gIFVuZm9ydHVuYXRl
bHksIHRoYXQgYmVoYXZpb3IgaXNuJ3Qgc3VmZmljaWVudGx5IGNvbXBhdGlibGUKLSAgICAgICAg
Ly8gd2l0aCB0aGUgd2ViLiAgVGhlIHdvcmtpbmcgZ3JvdXAgaXMgbXVsbGluZyBvdmVyIHdoYXQg
ZXhhY3RseSB0bwotICAgICAgICAvLyBkby4gIEluIHRoZSBtZWFudGltZSwgd2UncmUgZ29pbmcg
dG8gdHJ5IG9uZSBvZiB0aGUgcG90ZW50aWFsCi0gICAgICAgIC8vIHNvbHV0aW9ucywgd2hpY2gg
aXMgdG8gaWdub3JlIHRoZSB3cml0ZS4KLSAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvQnVn
cy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTk3NjcKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIHsKICAgICAgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgbmVzdGluZ0xldmVsSW5jcmVt
ZW50ZXIobV93cml0ZU5lc3RpbmdMZXZlbCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaApp
bmRleCBiMmE2NWNhMWUzY2E5ZjY4MzdhMzgyODliYzcxMjY2MzFmYjVkYmZjLi5jYzQ2ZDMxM2Yy
NTJmMmY5YTVhM2FhYmJkMzI0ZmI3MTE3NThkZjI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNl
ci5oCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBEb2N1bWVu
dFBhcnNlcgorICAgIHZpcnR1YWwgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lk
IGFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62376</attachid>
            <date>2010-07-22 20:22:32 -0700</date>
            <delta_ts>2010-07-23 15:14:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42365-20100722202230.patch</filename>
            <type>text/plain</type>
            <size>16550</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NjdiN2Y0MWQxNDg1MDA1MDQ3ZGNhZjg3NWNkNjY1NmY0M2Q4Y2U5Li5iZTAxMzY3
NTc2ZWU2MTkzM2QyNzc5YTIwMDI5MDE0NDY4MjJiNTgzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDctMjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNSBQYXJzZXI6IGRvY3Vt
ZW50LndyaXRlIGluIGEgYXN5bmNocm9ub3VzIHNjcmlwdCB3aGljaCBpcyBzcGVjaWZpZWQgdG8g
bG9hZCBiZWZvcmUgcGFnZSBmaW5pc2ggYmxvd3MgYXdheSBkb2N1bWVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzNjUKKworICAgICAgICAqIGh0
dHAvdGVzdHMvbWlzYy93cml0ZS1mcm9tLWRvbS1zY3JpcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL21pc2Mvd3JpdGUtZnJvbS1kb20tc2NyaXB0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAgIC0gVGVzdCB0aGUgc2NlbmFyaW8gd2hlcmUgYSBzY3JpcHQgYWRkZWQg
dG8gdGhlIERPTSBhc3luY2hyb25vdXNseQorICAgICAgICAgICAgd2hpbGUgdGhlIG5lc3Rpbmcg
bGV2ZWwgaXMgPjAuICBJdCdzIHN1cHBvc2VkIHRvIGhhdmUgaXRzIGNhbGxzIHRvCisgICAgICAg
ICAgICBkb2N1bWVudC53cml0ZSBibG9ja2VkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy93
cml0ZS13aGlsZS13YWl0aW5nLmh0bWw6CisgICAgICAgICAgLSBXcml0ZXMgYXJlIG9ubHkgcHJl
dmVudGVkIGZyb20gc2NyaXB0cyB0aGF0IGFyZSBhZGRlZCB0byB0aGUgRE9NLgorICAgICAgICAg
ICAgU2NyaXB0cyB0aGF0IHJ1biB2aWEgc2V0VGltZW91dCBkbyBub3QgaGF2ZSB0aGVpciB3cml0
ZXMgYmxvY2tlZC4KKwogMjAxMC0wNy0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mvd3JpdGUtZnJvbS1kb20tc2NyaXB0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZWYyMmU5YTQzMWFkMDI3MjcxM2I3MWZkYzg3OTQwMTZjOGVm
MTJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRl
LWZyb20tZG9tLXNjcmlwdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTUwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY4YWZhMjcyMTUzNDFjZDA3ZWIwODY3MjMzZWQ5MWM5Nzk1NzA2OGYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mvd3JpdGUtZnJv
bS1kb20tc2NyaXB0Lmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPGh0bWw+Cis8Ym9keT4KK1BBU1MK
KzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKword2luZG93LnNjcmlwdERpZFJlYWxseVJ1biA9
IGZhbHNlOworCit2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7
CitzY3JpcHQuc3JjID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0LGRvY3VtZW50LndyaXRlKCdGQUlM
Jyk7ZG9jdW1lbnQuY2xvc2UoKTsiICsKKyAgICAgICAgICAgICAid2luZG93LnNjcmlwdERpZFJl
YWxseSA9IHRydWU7IjsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zY3JpcHQtc2xvdzEucGwiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KK2lmICghd2luZG93LnNjcmlwdERpZFJlYWxseVJ1bikKKyAgICBhbGVydCgiRkFJ
TCEgIFRoZSBzY3JpcHQgZGlkbid0IHJlYWxseSBydW4uICA6KCIpOworPHNjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy93cml0
ZS13aGlsZS13YWl0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mvd3JpdGUt
d2hpbGUtd2FpdGluZy5odG1sCmluZGV4IDRiZjM5MGY5ZGNkOTViNzdmMjQ5MTIzZjQ2N2Y0YmNl
NTIwMDE4ZWQuLjBjNzE1ZDg0OTEyNWIzNDk5NTJiMDg5YjQ2YTAzNDM2ZTRhOTVjYmQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy93cml0ZS13aGlsZS13YWl0aW5nLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3dyaXRlLXdoaWxlLXdhaXRpbmcu
aHRtbApAQCAtMSwxMSArMSwxMSBAQAogPGh0bWw+CiA8Ym9keT4KLVBBU1MKK0ZBSUwKIDxzY3Jp
cHQ+CiBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKIAotc2V0VGltZW91dCgiZG9jdW1lbnQud3JpdGUoJ0ZBSUwn
KTtkb2N1bWVudC5jbG9zZSgpOyIsIDEwMCk7CitzZXRUaW1lb3V0KCJkb2N1bWVudC53cml0ZSgn
UEFTUycpO2RvY3VtZW50LmNsb3NlKCk7IiwgMTAwKTsKIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
InJlc291cmNlcy9zY3JpcHQtc2xvdzEucGwiPjwvc2NyaXB0PgogPC9ib2R5PgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MTE2Mzk0MDM4
NjZmOWI2ZjAxNGYwNzFhODM5MDg4NmQ4MTJiZjI2Li44YzBkYmE3NWJkYmExMDdlMGM4NWQzOTI3
MWFlMmFmNjg2YTQyNGEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEwLTA3LTIyICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSFRNTDUgUGFyc2VyOiBkb2N1bWVudC53cml0ZSBpbiBhIGFzeW5jaHJvbm91
cyBzY3JpcHQgd2hpY2ggaXMgc3BlY2lmaWVkIHRvIGxvYWQgYmVmb3JlIHBhZ2UgZmluaXNoIGJs
b3dzIGF3YXkgZG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQyMzY1CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBjaGFu
Z2VzIElhbiBtYWRlIHRvIEhUTUw1IHRvIGFkZHJlc3MgdGhlc2UKKyAgICAgICAgaXNzdWVzLiAg
TGV0J3MgdHJ5IGl0IGFuZCBzZWUgaG93IHdlbGwgaXQgd29ya3MuCisKKyAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9taXNjL3dyaXRlLWZyb20tZG9tLXNjcmlwdC5odG1sCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3cml0ZSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d3JpdGVEaXNhYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0V3JpdGVEaXNhYmxlZCk6CisgICAgICAgICogZG9t
L0RvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFBhcnNlcjo6aGFz
SW5zZXJ0aW9uUG9pbnQpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnREYXRhOjpTY3JpcHRFbGVtZW50RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3JpcHQpOgorICAgICAg
ICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
RGF0YTo6d3JpdGVEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50RGF0
YTo6c2V0V3JpdGVEaXNhYmxlZCk6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpoYXNJbnNlcnRpb25Q
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAxMC0wNy0yMSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IDljNzQ3ZDMzNjU2ZWJjYzVhM2NmYjI3MjAxYzBjNjUwYzFjYzI4
YWEuLjFjMGU1N2M0YTE0Y2M0MTY4OGQzODI4OTA4MGQ0M2UxZDM3ODA5ODggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
QEAgLTM2Myw2ICszNjMsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25z
dCBLVVJMJiB1cmwsIGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAgICAgLCBtX2ZyYW1lRWxl
bWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoZmFsc2UpCiAgICAgLCBtX2NvbnRhaW5zVmFsaWRp
dHlTdHlsZVJ1bGVzKGZhbHNlKQogICAgICwgbV91cGRhdGVGb2N1c0FwcGVhcmFuY2VSZXN0b3Jl
c1NlbGVjdGlvbihmYWxzZSkKKyAgICAsIG1fd3JpdGVEaXNhYmxlZChmYWxzZSkKICAgICAsIG1f
dGl0bGUoIiIpCiAgICAgLCBtX3Jhd1RpdGxlKCIiKQogICAgICwgbV90aXRsZVNldEV4cGxpY2l0
bHkoZmFsc2UpCkBAIC0yMDE2LDcgKzIwMTcsMTMgQEAgdm9pZCBEb2N1bWVudDo6d3JpdGUoY29u
c3QgU2VnbWVudGVkU3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKICAgICAg
ICAgcHJpbnRmKCJCZWdpbm5pbmcgYSBkb2N1bWVudC53cml0ZSBhdCAlZFxuIiwgZWxhcHNlZFRp
bWUoKSk7CiAjZW5kaWYKIAotICAgIGlmICghbV9wYXJzZXIpCisgICAgLy8gSWYgdGhlIGluc2Vy
dGlvbiBwb2ludCBpcyB1bmRlZmluZWQgYW5kIHRoZSBEb2N1bWVudCBoYXMgdGhlCisgICAgLy8g
IndyaXRlLW5ldXRyYWxpc2VkIiBmbGFnIHNldCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy4KKyAg
ICBib29sIGhhc0luc2VydGlvblBvaW50ID0gbV9wYXJzZXIgJiYgbV9wYXJzZXItPmhhc0luc2Vy
dGlvblBvaW50KCk7CisgICAgaWYgKCFoYXNJbnNlcnRpb25Qb2ludCAmJiB3cml0ZURpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaGFzSW5zZXJ0aW9uUG9pbnQpCiAgICAg
ICAgIG9wZW4ob3duZXJEb2N1bWVudCk7CiAKICAgICBBU1NFUlQobV9wYXJzZXIpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggMDc4Y2I1MzllMzVjNGE4MzU5MTczYWU2NDQ4Yjg1YzY4MjA2OGZhYS4uZWU0NmY1Mzk3ZDQ3
NWI3NjU3ODEyNGUwYmE4NTEyOTk4YjkzOTk3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0xMDAyLDYgKzEwMDIsOSBA
QCBwdWJsaWM6CiAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBpZEF0dHJpYnV0ZU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2lkQXR0cmlidXRlTmFtZTsgfQogCisgICAgYm9vbCB3cml0ZURpc2Fi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV93cml0ZURpc2FibGVkOyB9CisgICAgdm9pZCBzZXRXcml0
ZURpc2FibGVkKGJvb2wgZmxhZykgeyBtX3dyaXRlRGlzYWJsZWQgPSBmbGFnOyB9CisKIHByb3Rl
Y3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmLCBib29sIGlzWEhUTUwsIGJv
b2wgaXNIVE1MKTsKIApAQCAtMTE1NSw2ICsxMTU4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXM7CiAgICAgYm9vbCBtX3VwZGF0ZUZvY3VzQXBwZWFy
YW5jZVJlc3RvcmVzU2VsZWN0aW9uOwogCisgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jd3JpdGUtbmV1dHJhbGlzZWQKKyAgICBib29sIG1f
d3JpdGVEaXNhYmxlZDsKKwogICAgIFN0cmluZyBtX3RpdGxlOwogICAgIFN0cmluZyBtX3Jhd1Rp
dGxlOwogICAgIGJvb2wgbV90aXRsZVNldEV4cGxpY2l0bHk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAppbmRl
eCA3ZTQ3YTg3MTVhMTQzNzBkZGEwZTYyNzIyZTQ4ZWM1MWQ2YTZiMjc2Li5hMzU0NWI2ZWY4MWIx
MTM3MTM1ZDdhZjc4NGRhN2Q2MjM2MmUyZjQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmgKQEAgLTQwLDYg
KzQwLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIq
IGFzU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkgeyByZXR1cm4gMDsgfQogCisgICAgLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jaW5zZXJ0aW9u
LXBvaW50CisgICAgdmlydHVhbCBib29sIGhhc0luc2VydGlvblBvaW50KCkgeyByZXR1cm4gdHJ1
ZTsgfQorCiAgICAgLy8gaW5zZXJ0IGlzIHVzZWQgYnkgZG9jdW1lbnQud3JpdGUKICAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpID0gMDsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9TY3JpcHRFbGVt
ZW50LmNwcAppbmRleCA1MThhZWFkYTc0ZGRlZGZlMzQ4YjllZjQ1MzNlMmFkM2E0M2Y5YzY5Li5k
YWI4ZjhjZjcyODk0MjYzMjZhODBkZTg0YjA5Yzg2Y2Q3YzkzZjA2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRQYXJzZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC01Myw2ICs1NCwxNiBAQCB2b2lkIFNjcmlwdEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KFNjcmlwdEVsZW1lbnREYXRhJiBkYXRhLCBjb25z
dCBTdHJpbmcmCiAgICAgaWYgKGRhdGEuY3JlYXRlZEJ5UGFyc2VyKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvI3NjcmlwdAorCisgICAgLy8gSWYgdGhlIGVsZW1lbnQncyBEb2N1bWVudCBoYXMgYW4g
YWN0aXZlIHBhcnNlciwgYW5kIHRoZSBwYXJzZXIncyBzY3JpcHQKKyAgICAvLyBuZXN0aW5nIGxl
dmVsIGlzIG5vbi16ZXJvLCBidXQgdGhpcyBzY3JpcHQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIHRo
ZQorICAgIC8vICJwYXJzZXItaW5zZXJ0ZWQiIGZsYWcgc2V0LCB0aGUgdXNlciBhZ2VudCBtdXN0
IHNldCB0aGUgZWxlbWVudCdzCisgICAgLy8gIndyaXRlLW5ldXRyYWxpc2VkIiBmbGFnLgorICAg
IERvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBkYXRhLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+cGFy
c2VyKCk7CisgICAgaWYgKHBhcnNlciAmJiBwYXJzZXItPmhhc0luc2VydGlvblBvaW50KCkpCisg
ICAgICAgIGRhdGEuc2V0V3JpdGVEaXNhYmxlZCh0cnVlKTsKKwogICAgIGlmICghc291cmNlVXJs
LmlzRW1wdHkoKSkgewogICAgICAgICBkYXRhLnJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtODQsMTMgKzk1LDYgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoU2NyaXB0RWxlbWVudERhdGEmIGRhdGEpCiAgICAgICAgIGRhdGEuZXZhbHVh
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShkYXRhLnNjcmlwdENvbnRlbnQoKSwgZWxlbWVudC0+
ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxp
bmUgbnVtYmVyIGhlcmUKIH0KIAotc3RhdGljIGlubGluZSBib29sIHVzZUhUTUw1UGFyc2VyKERv
Y3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5zZXR0aW5n
cygpIDogMDsKLSAgICByZXR1cm4gc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmh0bWw1UGFyc2VyRW5h
YmxlZCgpOwotfQotCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihT
Y3JpcHRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpCiB7CiAgICAg
Ly8gVGhlIHBhcnNlciBqdXN0IHJlYWNoZWQgPC9zY3JpcHQ+LiBJZiB3ZSBoYXZlIG5vIHNyYyBh
bmQgbm8gdGV4dCwKQEAgLTEzNyw2ICsxNDEsNyBAQCBTY3JpcHRFbGVtZW50RGF0YTo6U2NyaXB0
RWxlbWVudERhdGEoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRWxlbWVudCogZWxlbQog
ICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX2NhY2hlZFNjcmlwdCgwKQogICAgICwg
bV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCisgICAgLCBtX3dyaXRlRGlzYWJsZWQoZmFsc2UpCiAg
ICAgLCBtX3JlcXVlc3RlZChmYWxzZSkKICAgICAsIG1fZXZhbHVhdGVkKGZhbHNlKQogICAgICwg
bV9maXJlZExvYWQoZmFsc2UpCkBAIC0xOTEsNyArMTk2LDI5IEBAIHZvaWQgU2NyaXB0RWxlbWVu
dERhdGE6OmV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUp
CiAKICAgICAgICAgbV9ldmFsdWF0ZWQgPSB0cnVlOwogCisgICAgICAgIC8vIGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NjcmlwdAorCisgICAgICAg
IC8vIElmIHRoZSBzY3JpcHQgZWxlbWVudCdzICJ3cml0ZS1uZXV0cmFsaXNlZCIgZmxhZyBpcyBz
ZXQsIHRoZW4gZmxhZworICAgICAgICAvLyB0aGUgRG9jdW1lbnQgdGhlIHNjcmlwdCBlbGVtZW50
IHdhcyBpbiB3aGVuIHRoZSAid3JpdGUtbmV1dHJhbGlzZWQiCisgICAgICAgIC8vIGZsYWcgd2Fz
IHNldCBhcyBiZWluZyBpdHNlbGYgIndyaXRlLW5ldXRyYWxpc2VkIi4gTGV0IG5ldXRyYWxpc2Vk
IGRvYworICAgICAgICAvLyBiZSB0aGF0IERvY3VtZW50LgorICAgICAgICBpZiAobV93cml0ZURp
c2FibGVkKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+d3Jp
dGVEaXNhYmxlZCgpKTsKKyAgICAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3Jp
dGVEaXNhYmxlZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIHNjcmlw
dCBmcm9tIHRoZSBzY3JpcHQgZWxlbWVudCBub2RlLCB1c2luZyB0aGUgc2NyaXB0CisgICAgICAg
IC8vIGJsb2NrJ3Mgc291cmNlIGFuZCB0aGUgc2NyaXB0IGJsb2NrJ3MgdHlwZS4KKyAgICAgICAg
Ly8gTm90ZTogVGhpcyBpcyB3aGVyZSB0aGUgc2NyaXB0IGlzIGNvbXBpbGVkIGFuZCBhY3R1YWxs
eSBleGVjdXRlZC4KICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZShzb3VyY2VDb2Rl
KTsKKworICAgICAgICAvLyBSZW1vdmUgdGhlICJ3cml0ZS1uZXV0cmFsaXNlZCIgZmxhZyBmcm9t
IG5ldXRyYWxpc2VkIGRvYywgaWYgaXQgd2FzCisgICAgICAgIC8vIHNldCBpbiB0aGUgZWFybGll
ciBzdGVwLgorICAgICAgICBpZiAobV93cml0ZURpc2FibGVkKSB7CisgICAgICAgICAgICBBU1NF
UlQobV9lbGVtZW50LT5kb2N1bWVudCgpLT53cml0ZURpc2FibGVkKCkpOworICAgICAgICAgICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0ZURpc2FibGVkKGZhbHNlKTsKKyAgICAgICAg
fQorCiAgICAgICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50cygpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaCBiL1dlYkNvcmUv
ZG9tL1NjcmlwdEVsZW1lbnQuaAppbmRleCBjNjYzZTQzNzYzODQwODA3NjdjMTE4Y2JkNTc0N2M4
OTg2Y2UzN2U0Li42OThmZmJjOGRhNmYwYWQ1MWRhMjk3NGZiNjFmNDA0MGJlYjUyMjMxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vU2Ny
aXB0RWxlbWVudC5oCkBAIC04Miw2ICs4Miw4IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CiAgICAgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NyZWF0ZWRCeVBhcnNlcjsgfQogICAgIHZvaWQgc2V0Q3Jl
YXRlZEJ5UGFyc2VyKGJvb2wgdmFsdWUpIHsgbV9jcmVhdGVkQnlQYXJzZXIgPSB2YWx1ZTsgfQor
ICAgIGJvb2wgd3JpdGVEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JpdGVEaXNhYmxlZDsg
fQorICAgIHZvaWQgc2V0V3JpdGVEaXNhYmxlZChib29sIHZhbHVlKSB7IG1fd3JpdGVEaXNhYmxl
ZCA9IHZhbHVlOyB9CiAgICAgYm9vbCBoYXZlRmlyZWRMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZpcmVkTG9hZDsgfQogICAgIHZvaWQgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KGJvb2wgZmly
ZWRMb2FkKSB7IG1fZmlyZWRMb2FkID0gZmlyZWRMb2FkOyB9CiAKQEAgLTk5LDYgKzEwMSw3IEBA
IHByaXZhdGU6CiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgYm9vbCBtX2NyZWF0ZWRCeVBh
cnNlcjsgLy8gSFRNTDU6ICJwYXJzZXItaW5zZXJ0ZWQiCisgICAgYm9vbCBtX3dyaXRlRGlzYWJs
ZWQ7IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
I3dyaXRlLW5ldXRyYWxpc2VkCiAgICAgYm9vbCBtX3JlcXVlc3RlZDsKICAgICBib29sIG1fZXZh
bHVhdGVkOyAvLyBIVE1MNTogImFscmVhZHkgc3RhcnRlZCIKICAgICBib29sIG1fZmlyZWRMb2Fk
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBiYWY2ZTI1NTVlMmFhODA2OTNj
MmQ0YzY2Y2MzMzZlZDY0YTA3NDc1Li43MjNmYmU3NjIzZWNlYjMyZWJjM2ViY2M2ZTAxYTE2YjMx
NGNjMWNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMjEzLDIyICsyMTMs
MTYgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmRpZFB1bXBMZXhlcigpCiAjZW5kaWYKIH0K
IAorYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6Omhhc0luc2VydGlvblBvaW50KCkKK3sKKyAgICBy
ZXR1cm4gbV9pbnB1dC5oYXNJbnNlcnRpb25Qb2ludCgpOworfQorCiB2b2lkIEhUTUxEb2N1bWVu
dFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogewogICAgIGlm
IChtX3BhcnNlclN0b3BwZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3NjcmlwdFJ1
bm5lciAmJiAhbV9zY3JpcHRSdW5uZXItPmluU2NyaXB0RXhlY3V0aW9uKCkgJiYgbV9pbnB1dC5o
YXZlU2VlbkVuZE9mRmlsZSgpKSB7Ci0gICAgICAgIC8vIGRvY3VtZW50LndyaXRlIHdhcyBjYWxs
ZWQgd2l0aG91dCBhIGN1cnJlbnQgaW5zZXJ0aW9uIHBvaW50LgotICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIHNwZWMsIHdlJ3JlIHN1cHBvc2VkIHRvIGltcGxpY2l0bHkgb3BlbiB0aGUKLSAg
ICAgICAgLy8gZG9jdW1lbnQuICBVbmZvcnR1bmF0ZWx5LCB0aGF0IGJlaGF2aW9yIGlzbid0IHN1
ZmZpY2llbnRseSBjb21wYXRpYmxlCi0gICAgICAgIC8vIHdpdGggdGhlIHdlYi4gIFRoZSB3b3Jr
aW5nIGdyb3VwIGlzIG11bGxpbmcgb3ZlciB3aGF0IGV4YWN0bHkgdG8KLSAgICAgICAgLy8gZG8u
ICBJbiB0aGUgbWVhbnRpbWUsIHdlJ3JlIGdvaW5nIHRvIHRyeSBvbmUgb2YgdGhlIHBvdGVudGlh
bAotICAgICAgICAvLyBzb2x1dGlvbnMsIHdoaWNoIGlzIHRvIGlnbm9yZSB0aGUgd3JpdGUuCi0g
ICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD05
NzY3Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB7CiAgICAgICAgIE5lc3RpbmdMZXZl
bEluY3JlbWVudGVyIG5lc3RpbmdMZXZlbEluY3JlbWVudGVyKG1fd3JpdGVOZXN0aW5nTGV2ZWwp
OwogCkBAIC0zMjQsNyArMzE4LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmluU2NyaXB0
RXhlY3V0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5pblNjcmlwdEV4ZWN1dGlv
bigpOworICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKTsKIH0K
IAogaW50IEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CkBAIC00MDIsNyAr
Mzk2LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0Zv
clN0eWxlc2hlZXRzKCkKICAgICAvLyBpcyBhIHJlLWVudHJhbnQgY2FsbCBmcm9tIGVuY291bnRl
cmluZyBhIDwvIHN0eWxlPiB0YWcuCiAgICAgaWYgKCFtX3NjcmlwdFJ1bm5lci0+aGFzU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFt
X3NjcmlwdFJ1bm5lci0+aW5TY3JpcHRFeGVjdXRpb24oKSk7CisgICAgQVNTRVJUKCFtX3Njcmlw
dFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXIt
PmlzUGF1c2VkKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3Jp
cHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8gaXMgdGhlIG9uZSB3
ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGIyYTY1Y2ExZTNjYTlmNjgzN2EzODI4OWJjNzEy
NjYzMWZiNWRiZmMuLmNjNDZkMzEzZjI1MmYyZjlhNWEzYWFiYmQzMjRmYjcxMTc1OGRmMjkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIC8vIERvY3VtZW50UGFyc2VyCisgICAgdmlydHVhbCBib29sIGhhc0luc2Vy
dGlvblBvaW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydChjb25zdCBTZWdtZW50ZWRTdHJp
bmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwog
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRTdHJlYW0uaCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCBkN2Mx
YzljYjdhNWY3Mjc4NDcwYWYzODZiNmVlZDBiZTgzMWM4YTFhLi5hNzA5YmQ5YmQ1YjIxZDExN2Vl
ZmE0NTEyODhiMjZiMGZiNzk0MWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
U3RyZWFtLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dFN0cmVhbS5oCkBAIC02NCw2ICs2
NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZmlyc3QuYXBwZW5kKHN0cmluZyk7CiAgICAgfQog
CisgICAgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
Jm1fZmlyc3QgIT0gbV9sYXN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghaGF2ZVNlZW5FbmRPZkZpbGUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFNvbWVob3cg
d2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAgICAg
IC8vIGlucHV0IHN0cmVhbXMgdGhhdCBhcmUgY29taW5nIG9mZiB0aGUgbmV0d29yayBhbmQgc3Ry
ZWFtcyB0aGF0CisgICAgICAgICAgICAvLyB3ZXJlIGNyZWF0ZWQgd2l0aCBkb2N1bWVudC5vcGVu
KCkuIEluIHRoZSBsYXRlciBjYXNlLCB3ZSBhbHdheXMKKyAgICAgICAgICAgIC8vIGhhdmUgYW4g
aXNlcnRpb24gcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHVudGlsIHNvbWVvbmUKKyAg
ICAgICAgICAgIC8vIGNhbGxzIGRvY3VtZW50LmNsb3NlKCkuCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgdm9p
ZCBtYXJrRW5kT2ZGaWxlKCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1
c2UgSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcgpAQCAtNzMsNyArODgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGFzdC0+Y2xvc2UoKTsKICAgICB9CiAKLSAgICBib29s
IGhhdmVTZWVuRW5kT2ZGaWxlKCkKKyAgICBib29sIGhhdmVTZWVuRW5kT2ZGaWxlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2xhc3QtPmlzQ2xvc2VkKCk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDI5NzkwYzA1NmJkOTQ1OWNhYzA3ZTM1N2M5YzgwYjRk
OTA0MzRjNzYuLmY0YjcwMTMzZTJhOGQ5NzNmNjNhNmI4YjI4MDdiOGRkOTBhMzhiYzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxTY3Jp
cHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU2NyaXB0U291
cmNlQ29kZSYgcwogICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKICAgICBpZiAoIXNjcmlwdEVs
ZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChpblNjcmlwdEV4ZWN1dGlvbigpKTsKKyAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3Jp
cHQoKSk7CiAgICAgaWYgKCFtX2RvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29k
ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdFJ1bm5lci5oIGIvV2ViQ29y
ZS9odG1sL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCBmOTNhZTEwMmI3ZDI4ZTcyMTVjZTc5OGEx
ZGFmN2QyZjRlN2Y5MGFkLi5jYzY5NDQzNTE0NDE3YmUzMzNjZjRkYTc4YzA5MjQ0YzIyMzM5YmZi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQogICAgIGJvb2wgZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKIAotICAgIGJvb2wgaW5TY3JpcHRFeGVjdXRpb24o
KSB7IHJldHVybiAhIW1fc2NyaXB0TmVzdGluZ0xldmVsOyB9CisgICAgYm9vbCBpc0V4ZWN1dGlu
Z1NjcmlwdCgpIHsgcmV0dXJuICEhbV9zY3JpcHROZXN0aW5nTGV2ZWw7IH0KIAogcHJpdmF0ZToK
ICAgICAvLyBBIGNvbnRhaW5lciBmb3IgYW4gZXh0ZXJuYWwgc2NyaXB0IHdoaWNoIG1heSBiZSBs
b2FkZWQgYW5kIGV4ZWN1dGVkLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>