<?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>38146</bug_id>
          
          <creation_ts>2010-04-26 15:52:40 -0700</creation_ts>
          <short_desc>document.write is not synchronous after page load</short_desc>
          <delta_ts>2010-05-13 17:05:57 -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>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>ian</cc>
    
    <cc>joepeck</cc>
    
    <cc>mjs</cc>
    
    <cc>ml</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217333</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-04-26 15:52:40 -0700</bug_when>
    <thetext>HTML5 describes document.write as:
http://www.whatwg.org/specs/web-apps/current-work/multipage/apis-in-html-documents.html#document.write()

Part 5 describes processing the characters one at a time until reaching the insertion point. This is not 100% followed by WebKit. WebKit can break early in the HTMLTokenizer and put the remaining work on a timer. This may result in incorrect results if running DOM operations immediately after a document.write.

This is difficult to test. The only idea I have had is processing a very large string to hit the 500ms limit. This is not future proof, as there could always be a CPU fast enough to complete the write() in less than the time limit. Also, a large enough string may hang the browser.

Is it desired that we follow the spec here?

Other Browsers:

  Firefox 3.6 is synchronous or hangs.
  Chrome 5.0.342.9 is synchronous or hangs.
  Safari 4.0.4 is like WebKit and breaks after a long enough time.

Example of Issue:

  var doc = document.implementation.createHTMLDocument();
  doc.write( sufficientlyLongString );
  doc.getElementsByTagName(&quot;*&quot;).length; // DOM Operation may have undefined results

WebKit will eventually complete the parsing, but it just fills in the DOM in the background. There is no way to know when it is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217348</commentid>
    <comment_count>1</comment_count>
      <attachid>54344</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-04-26 16:16:45 -0700</bug_when>
    <thetext>Created attachment 54344
[TEST] Manual Test - Beware this may crash some browsers.

This test builds a very long string and passes it to document.write, then does some DOM queries immediately after the write call. Sample output of WebKit shows the undesired behavior:

Sample output:

&gt;  49987 nodes immediately after the call (NOTE this number may vary)
&gt;  65539 nodes 100 milliseconds later
&gt;  65539 nodes 1 second later</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217350</commentid>
    <comment_count>2</comment_count>
      <attachid>54345</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-04-26 16:28:48 -0700</bug_when>
    <thetext>Created attachment 54345
[PATCH] Force Document.write to be Synchronous

Parts 1-4 of the HTML5 spec still apply, and document.write with pending scripts will still break. However, if it gets past that point in HTMLTokenizer::write then the data in document.write will be parsed synchronously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218831</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-04-28 22:31:59 -0700</bug_when>
    <thetext>Anyone want to comment on this? I&apos;ll try asking some people in #webkit tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219519</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-04-30 10:22:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Anyone want to comment on this? I&apos;ll try asking some people in #webkit
&gt; tomorrow.

Added Hixie in case he would like to comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219747</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-01 14:11:35 -0700</bug_when>
    <thetext>It was asked that I do some more testing and impact research:

&gt; I think matching other browsers is cool and a good enough reason
&gt; to do something ... but more testing / compat impact info would be
&gt; really valuable

Here goes:


How this patch affects behavior:
--------------------------------

  1. Typical page load times should be unaffected. This is because
  any document.write which happens in a &lt;script&gt; on page load time
  will increment m_executingScript and cause the document.write to
  be synchronous anyways.
  
  2. Entire pages written with document.write (where it writes over
  the existing page) will be affected. I haven&apos;t seen usage of this,
  and it appears to be discouraged at all of the above articles.
  
  3. However, in those cases we will match the spec and other
  browsers. I have tested on Mac OS X 10.6 - Firefox 3.6,
  Chrome 5.0.342.9, Opera 10.53


Test Cases:
-----------

I tested the state of the tokenizer right before it makes its decision to yield or not. I show below how the state of the tokenizer will change, and whether or not that will change behavior (as I mentioned above).

  1. Inline &lt;script&gt; document.write on page load
      
      state.loadingExtScript(): false
      state.forceSynchronous(): false  [will become true, but no change]
      m_executingScript       : true
      allowedYield            : false

  2. External &lt;script src=&quot;...&quot;&gt; with document.write on page load

      state.loadingExtScript(): true
      state.forceSynchronous(): false  [will become true, but no change]
      m_executingScript       : true
      allowedYield            : false
      
  3. document.write after page is done loading

      state.loadingExtScript(): false/true
      state.forceSynchronous(): false  [will become true, changes behavior]
      m_executingScript       : true
      allowedYield            : false

Case 3 is what I mention above. Below is some research I did to see how this could affect things. For instance the &quot;Public perception&quot; or &quot;what the web is saying&quot; about document.write:


Top Google Hits:
----------------

- http://javascript.about.com/library/blwrite.htm
Advises use only while the page is loading, because otherwise it writes over the existing page content. Also, document.write doesn&apos;t apply to XML and therefore XHTML.


- http://www.sitepoint.com/blogs/2007/07/11/insert-in-place-without-documentwrite/
Advises DOM creation instead of document.write.

&gt;   And there you have it – a simple but elegant way of inserting
&gt;   content in place, removing the last vestige of need for
&gt;   document.write!


- http://java-programming.suite101.com/article.cfm/javascript_documentwrite_tutorial
2008 article describing how to use it and why it is useful. This article does not mention any alternatives. It does warn that usage should be restricted to page loading:

&gt;  The document.write command must be carried out during the loading of
&gt;  the page. So, if it is attached to any event that executes after the
&gt;  page has loaded, then the whole page will be replaced with the
&gt;  contents of the document.write command.

However you can still find recent articles proposing document.write as useful:

- http://www.joshstauffer.com/ways-to-use-document-write/

&gt;  The document.write command is a standard, yet powerful, JavaScript
&gt;  command for writing output to a page. In this article I’ve outline
&gt;  3 ways to use document.write statements.


Common document.write usage across the Web:
-------------------------------------------

- Google Analytics
http://code.google.com/apis/analytics/docs/tracking/gaTrackingOverview.html
The &quot;traditional&quot; snippet used across the web for free analytics uses document.write. However its usage should be unaffected by this patch. Its also worth noting that the newer asynchronous tracking snippet is described as &quot;an improved way&quot;, and this does not use document.write.


Summary:
--------

I don&apos;t see anyone recommending usage of document.write after page load. Its possible that I just haven&apos;t seen it. Its arguably more likely that document.implementation.createHTMLDocument and write() on the newly created document could be used on some sites, but &quot;document.implementation&quot; is not available on all browsers and in those cases we would start matching other browser&apos;s behavior and give the results users would expect by matching WebKit&apos;s own behavior of document.write on page loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219749</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-01 14:17:10 -0700</bug_when>
    <thetext>Correction to my above comment. In Test Case 3: m_executingScript should be false. A copy &amp; paste error on my part. This flag was not set for me when I executed a script in window.onload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219765</commentid>
    <comment_count>7</comment_count>
      <attachid>54345</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-05-01 17:41:05 -0700</bug_when>
    <thetext>Comment on attachment 54345
[PATCH] Force Document.write to be Synchronous

Code change looks good, but I have two suggestions for improving this patch:

1) it would probably be good to mention the external script exception to synchronous behavior in the ChangeLog
2) it would be good to add a test case, even if it only  fails part of the time in the bad case, or even if it is a manual test

r- for now for the lack of test. I&apos;ll gladly r+ if the points above are addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219992</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 19:32:22 -0700</bug_when>
    <thetext>Attachment 54345 was posted by a committer and has review+, assigning to Joseph Pecoraro for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220145</commentid>
    <comment_count>9</comment_count>
      <attachid>54934</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-03 09:46:19 -0700</bug_when>
    <thetext>Created attachment 54934
[PATCH] Addressed Comments - Added Test

&gt; 1) it would probably be good to mention the external script exception to
&gt; synchronous behavior in the ChangeLog

Sure, I&apos;ve added a comment to the code as well as the ChangeLog.


&gt; 2) it would be good to add a test case, even if it only  fails part of the time
&gt; in the bad case, or even if it is a manual test

I added a LayoutTest in fast/dom since I&apos;m told &quot;fast&quot; is a misnomer. This isn&apos;t really a fast test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220146</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-03 09:47:21 -0700</bug_when>
    <thetext>Updated bug title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220148</commentid>
    <comment_count>11</comment_count>
      <attachid>54934</attachid>
    <who name="">mitz</who>
    <bug_when>2010-05-03 09:48:25 -0700</bug_when>
    <thetext>Comment on attachment 54934
[PATCH] Addressed Comments - Added Test

&gt; +    HTMLTokenizer* htmlTokenizer = (m_tokenizer-&gt;isHTMLTokenizer() ? static_cast&lt;HTMLTokenizer*&gt;(m_tokenizer.get()) : 0);

Redundant parentheses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220151</commentid>
    <comment_count>12</comment_count>
      <attachid>54935</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-03 10:01:52 -0700</bug_when>
    <thetext>Created attachment 54935
[PATCH] Fixed a Few Style Issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220834</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-04 15:41:13 -0700</bug_when>
    <thetext>Maciej I added a new patch addressing your comments (add test and comments). Just noticed you weren&apos;t CC&apos;d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221169</commentid>
    <comment_count>14</comment_count>
      <attachid>54935</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 10:15:11 -0700</bug_when>
    <thetext>Comment on attachment 54935
[PATCH] Fixed a Few Style Issues

WebCore/dom/Document.cpp:1963
 +      HTMLTokenizer* htmlTokenizer = (m_tokenizer-&gt;isHTMLTokenizer() ? static_cast&lt;HTMLTokenizer*&gt;(m_tokenizer.get()) : 0);
No outer parenthesis needed.

WebCore/dom/Document.cpp:1963
 +      HTMLTokenizer* htmlTokenizer = (m_tokenizer-&gt;isHTMLTokenizer() ? static_cast&lt;HTMLTokenizer*&gt;(m_tokenizer.get()) : 0);
This seems like it should be an asHTMLTokenzer method of m_tokenizer.  Does this pattern occur elsewhere in this file?  RTTI is usually a bad idea.

WebCore/dom/Document.cpp:1972
 +          htmlTokenizer-&gt;setForceSynchronous(savedForceSynchronous);
Can we do this with a RAII class?  The implementation you have is error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221340</commentid>
    <comment_count>15</comment_count>
      <attachid>55169</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-05 16:19:08 -0700</bug_when>
    <thetext>Created attachment 55169
[PATCH] Fixed Comments - Added RAII Class

&gt; No outer parenthesis needed.

Arg, I attached the same patch for patch 3 instead of the one fixing style issues. Thanks.


&gt; This seems like it should be an asHTMLTokenzer method of m_tokenizer.  Does
&gt; this pattern occur elsewhere in this file?  RTTI is usually a bad idea.

I&apos;m not sure how useful this will be. I still need to do the same thing I am doing, checking if it is an HTMLTokenizer and casting it. But I haven&apos;t had much experience using this idiom.

Document.cpp uses the following pattern a lot, which is similar:

    if (node-&gt;hasLocalName(someTag))
        sheet = static_cast&lt;HTMLSomeElement*&gt;(n)-&gt;...

There is one other use of `isHTMLTokenizer()`, in HTMLFormControlElement.cpp.


&gt; WebCore/dom/Document.cpp:1972
&gt;  +          htmlTokenizer-&gt;setForceSynchronous(savedForceSynchronous);
&gt; Can we do this with a RAII class?  The implementation you have is error prone.

Added this in the recent patch. I&apos;d appreciate feedback on the name to make it clearer what this is doing.

I&apos;m still worried about this test being too long. It takes ~7 seconds on my machine. If anyone else thinks that is too long I&apos;ll gladly make this a manual test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221342</commentid>
    <comment_count>16</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-05 16:22:57 -0700</bug_when>
    <thetext>&gt; ~7 seconds on my machine

I should clarify that this is In a debug build. It should be much faster in a Release build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222059</commentid>
    <comment_count>17</comment_count>
      <attachid>55169</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-06 16:50:47 -0700</bug_when>
    <thetext>Comment on attachment 55169
[PATCH] Fixed Comments - Added RAII Class

Looks good.  A 7 second test is somewhat worrying.  Please address the comments below before landing.

LayoutTests/fast/dom/script-tests/document-write-synchronous.js:3
 +  var immediateElementCount, delayedElementCount;
I&apos;m not sure this does what you think it does.

WebCore/dom/Document.cpp:217
 +          m_htmlTokenizer = asHTMLTokenizer(tokenizer);
Oh, I meant to add asHTMLTokenizer as a virtual function on Tokenizer to avoid the static_cast.

WebCore/html/HTMLTokenizer.h:436
 +      ASSERT(tokenizer-&gt;isHTMLTokenizer());
Because write only works on HTML documents?  I think it would be better to make this a virtual function and get rid of the static cast.

WebCore/dom/Document.cpp:1984
 +      SynchronousHTMLTokenizerGuard tokenizerGuard(m_tokenizer.get());
Do we want to use  { } to control the scope of this explicitly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222106</commentid>
    <comment_count>18</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-06 18:22:35 -0700</bug_when>
    <thetext>&gt;  &gt; +          m_htmlTokenizer = asHTMLTokenizer(tokenizer);
&gt; 
&gt;  &gt; +      ASSERT(tokenizer-&gt;isHTMLTokenizer());
&gt;
&gt; I think it would be better to make this a virtual function and get rid of the static cast.

Done.


&gt; WebCore/dom/Document.cpp:1984
&gt;  +      SynchronousHTMLTokenizerGuard tokenizerGuard(m_tokenizer.get());
&gt; Do we want to use  { } to control the scope of this explicitly?

Done.


&gt; &gt;  +  var immediateElementCount, delayedElementCount;
&gt;
&gt; I&apos;m not sure this does what you think it does.

I made my test a manual test. Maciej mentioned it would be okay and I confirmed that Adam would still be okay with it. So, this is no longer necessary, but I can explain it.

This makes two global variables. That way they can be used in shouldBe() which uses eval() with the global scope and so these variables would need to be in the global scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222399</commentid>
    <comment_count>19</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-07 08:45:47 -0700</bug_when>
    <thetext>Committed r58950
	M	WebCore/dom/Tokenizer.h
	M	WebCore/dom/Document.cpp
	M	WebCore/ChangeLog
	M	WebCore/html/HTMLTokenizer.h
	A	WebCore/manual-tests/dom/document-write-synchronous-after-page-load.html
r58950 = cb3dabac1b45534c1fac494a3de74c9a141439a4 (refs/remotes/trunk)
http://trac.webkit.org/changeset/58950</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225577</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-13 17:05:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/7899368&gt;

This has caused bug 39008.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>54344</attachid>
            <date>2010-04-26 16:16:45 -0700</date>
            <delta_ts>2010-04-26 16:16:45 -0700</delta_ts>
            <desc>[TEST] Manual Test - Beware this may crash some browsers.</desc>
            <filename>document-write.html</filename>
            <type>text/html</type>
            <size>1314</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">PCEtLSBOT1RFOiBUaGUgZG9jdW1lbnQgZ2V0cyBvdmVyd3JpdHRlbiBhbnl3YXlzIC0tPgo8cD5U
ZXN0aW5nIFdyaXRpbmcgb2YgTE9UUyBvZiAmbHQ7cCZndDsgZWxlbWVudHMuPC9wPgoKPHNjcmlw
dD4Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKCiAgICAvLyBS
ZXN1bHRzOgogICAgLy8gICAtIENocm9tZSBiYXJlbHkgbWFrZXMgaXQgdG8gMTYgKGNsb3NlIGEg
InNsb3cgc2NyaXB0IGRpYWxvZyBhIGZldyB0aW1lcyksIHN5bmNocm9ub3VzCiAgICAvLyAgIC0g
RmlyZWZveCBoYW5ncyBvbiAxNiwgYnV0IGlzIHN5bmNocm9ub3VzIG90aGVyd2lzZSAoPD0xNSkK
ICAgIC8vICAgLSBXZWJLaXQgYnJlYWtzIGVhcmx5LCBzdGFydGluZyB0byBkZXZpYXRlIH4xNSwg
YnV0IGNhbiBoYW5kbGUgbXVjaCBsYXJnZXIgc3RyaW5ncyAoMjMrKQoKICAgIHZhciBMSU1JVCA9
IDE2OwogICAgdmFyIHN0ciA9ICI8cCBzdHlsZT0nZGlzcGxheTpub25lJz54PC9wPiIKICAgIGZv
ciAodmFyIGk9MDsgaTxMSU1JVDsgKytpKQogICAgICAgIHN0ciArPSBzdHI7CgogICAgZG9jdW1l
bnQud3JpdGUoc3RyKTsKICAgIGNvbnNvbGUubG9nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCcqJykubGVuZ3RoICsgIiBub2RlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgY2FsbCIpOwog
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY29uc29sZS5sb2coZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKS5sZW5ndGggKyAiIG5vZGVzIDEwMCBtaWxsaXNlY29uZHMgbGF0ZXIi
KTsgfSwgMTAwKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoICsgIiBub2RlcyAxIHNlY29uZCBs
YXRlciIpOyB9LCAxMDAwKTsKICAgIAogICAgLy8gTWVhbmluZywgdGhlIGZvbGxvd2luZyBjb2Rl
IChpZiBpdCB3ZXJlIHJ1bikKICAgIC8vICJjb3VsZCIgcHJvZHVjZSBhIGRpZmZlcmVudCB2YWx1
ZSBpbiBXZWJLaXQuCiAgICAvLyBGb3IgYW55IHN0cmluZyBjYXVzaW5nIFdlYktpdCB0byByZWFj
aCBpdHMgdG9rZW5pemVyIHRpbWVvdXQuCiAgICBmdW5jdGlvbiBjb2RlTm90UnVuKHMpIHsKICAg
ICAgICBkb2N1bWVudC53cml0ZShzKTsKICAgICAgICAvLyBXZWJLaXQgbWF5IGhhdmUgYW4gaW5j
b21wbGV0ZSBET00uLi4KICAgICAgICBkb2N1bWVudC5ib2R5Lmxhc3RDaGlsZDsKICAgICAgICBk
b2N1bWVudC5ib2R5LmNoaWxkTm9kZXMubGVuZ3RoOwogICAgfQoKfSwgZmFsc2UpOwo8L3Njcmlw
dD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54345</attachid>
            <date>2010-04-26 16:28:48 -0700</date>
            <delta_ts>2010-05-03 09:46:19 -0700</delta_ts>
            <desc>[PATCH] Force Document.write to be Synchronous</desc>
            <filename>doc-write-sync.patch</filename>
            <type>text/plain</type>
            <size>2559</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGVmZmU3Mi4uNWMxZWJiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wNC0yNiAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGRvY3VtZW50LndyaXRlIGlzIG5vdCBzeW5jaHJvbm91cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgxNDYKKworICAg
ICAgICBEaWZmaWN1bHQgdG8gdGVzdCByZWxpYWJseSBkdWUgdG8gSFRNTFRva2VuaXppbmcgcmVs
eWluZyBvbiBwcm9jZXNzaW5nIHRpbWUuCisgICAgICAgIFRoaXMgY2hhbmdlcyBkb2N1bWVudC53
cml0ZSB0byBiZSBydW4gc3luY2hyb25vdXNseSB3aGVuIHRoZXJlIGFyZSBubyBwZW5kaW5nCisg
ICAgICAgIHNjcmlwdHMgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBicmVhayBvdGhlcndpc2UuCisK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndyaXRlKTogdGVtcG9yYXJpbHkgc2V0IHRoZSB0b2tlbml6ZXIgdG8gc3luY2hyb25vdXMgZHVy
aW5nIGRvY3VtZW50LndyaXRlCisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmg6IGFsbG93
IGFjY2VzcyB0byB0byB0aGUgZm9yY2Ugc3luY2hyb25vdXMgc3RhdGUKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUb2tlbml6ZXI6OmZvcmNlU3luY2hyb25vdXMpOiBhY2Nlc3NvcgorCiAyMDEwLTA0
LTI2ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDA2NzU4ZDYuLjk2OWY2NWEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VyLmgiCiAj
aW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIK
ICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCkBA
IC0xOTUyLDggKzE5NTMsMTkgQEAgdm9pZCBEb2N1bWVudDo6d3JpdGUoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKICAgICAgICAgb3Blbihvd25l
ckRvY3VtZW50KTsKIAogICAgIEFTU0VSVChtX3Rva2VuaXplcik7CisKKyAgICBib29sIHNhdmVk
Rm9yY2VTeW5jaHJvbm91cyA9IGZhbHNlOworICAgIEhUTUxUb2tlbml6ZXIqIGh0bWxUb2tlbml6
ZXIgPSAobV90b2tlbml6ZXItPmlzSFRNTFRva2VuaXplcigpID8gc3RhdGljX2Nhc3Q8SFRNTFRv
a2VuaXplcio+KG1fdG9rZW5pemVyLmdldCgpKSA6IDApOworICAgIGlmIChodG1sVG9rZW5pemVy
KSB7CisgICAgICAgIHNhdmVkRm9yY2VTeW5jaHJvbm91cyA9IGh0bWxUb2tlbml6ZXItPmZvcmNl
U3luY2hyb25vdXMoKTsKKyAgICAgICAgaHRtbFRva2VuaXplci0+c2V0Rm9yY2VTeW5jaHJvbm91
cyh0cnVlKTsKKyAgICB9CisKICAgICBtX3Rva2VuaXplci0+d3JpdGUodGV4dCwgZmFsc2UpOwog
CisgICAgaWYgKGh0bWxUb2tlbml6ZXIpCisgICAgICAgIGh0bWxUb2tlbml6ZXItPnNldEZvcmNl
U3luY2hyb25vdXMoc2F2ZWRGb3JjZVN5bmNocm9ub3VzKTsKKwogI2lmZGVmIElOU1RSVU1FTlRf
TEFZT1VUX1NDSEVEVUxJTkcKICAgICBpZiAoIW93bmVyRWxlbWVudCgpKQogICAgICAgICBwcmlu
dGYoIkVuZGluZyBhIGRvY3VtZW50LndyaXRlIGF0ICVkXG4iLCBlbGFwc2VkVGltZSgpKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmggYi9XZWJDb3JlL2h0bWwvSFRN
TFRva2VuaXplci5oCmluZGV4IGVmN2NiZmMuLmI1MTE3YjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9IVE1MVG9rZW5pemVyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaApA
QCAtMTQxLDYgKzE0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25z
dCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2goKTsKKyAgICB2aXJ0dWFsIGJvb2wgZm9yY2VTeW5jaHJvbm91cygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuZm9yY2VTeW5jaHJvbm91cygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEZv
cmNlU3luY2hyb25vdXMoYm9vbCBmb3JjZSk7CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
clNjcmlwdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKTsK
</data>
<flag name="review"
          id="38285"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54934</attachid>
            <date>2010-05-03 09:46:19 -0700</date>
            <delta_ts>2010-05-03 10:01:52 -0700</delta_ts>
            <desc>[PATCH] Addressed Comments - Added Test</desc>
            <filename>write.patch</filename>
            <type>text/plain</type>
            <size>6065</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzYzE0NTkyLi4yNDllOTU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUt
MDMgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBpcyBub3Qg
c3luY2hyb25vdXMgYWZ0ZXIgcGFnZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zODE0NgorCisgICAgICAgICogZmFzdC9kb20vZG9jdW1lbnQt
d3JpdGUtc3luY2hyb25vdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanM6IEFkZGVkLgor
ICAgICAgICAod2luZG93Lm9ubG9hZCk6CisKIDIwMTAtMDUtMDMgIENzYWJhIE9zenRyb2dvbsOh
YyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBRdCBzcGVjaWZpYyBl
eHBlY3RlZCBmaWxlcyBhZGRlZCBhZnRlciByNTg2NzUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYzE3ZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGRvY3Vt
ZW50LndyaXRlIGFmdGVyIHBhZ2UgbG9hZCBpcyBzeW5jaHJvbm91cy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorUEFTUyBjb3VudCBpcyBmaW5hbENvdW50CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZGY1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2Rv
Y3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LXRlc3RzL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjYxNDYyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanMKQEAgLTAs
MCArMSwzMCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgZG9jdW1lbnQu
d3JpdGUgYWZ0ZXIgcGFnZSBsb2FkIGlzIHN5bmNocm9ub3VzLiIpOworCit2YXIgY291bnQsIGZp
bmFsQ291bnQ7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKword2luZG93Lm9ubG9hZCA9
IGZ1bmN0aW9uKCkgeworCisgICAgLy8gQnVpbGQgYSB2ZXJ5IGxvbmcgc3RyaW5nIHRvIHdyaXRl
LgorICAgIHZhciBMSU1JVCA9IDE3OworICAgIHZhciBzdHIgPSAnPHAgc3R5bGU9ImRpc3BsYXk6
bm9uZSI+eDwvcD4nCisgICAgZm9yICh2YXIgaT0wOyBpPExJTUlUOyArK2kpCisgICAgICAgIHN0
ciArPSBzdHI7CisKKyAgICAvLyBXcml0ZSB0aGUgc3RyaW5nIGFuZCBjaGVjayB0aGUgRE9NIGlt
bWVkaWF0ZWx5IGFuZCBhZnRlciBhIHNtYWxsIGRlbGF5LgorICAgIHZhciBkb2MgPSBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTsKKyAgICBkb2Mud3JpdGUoc3Ry
KTsKKyAgICBjb3VudCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aDsKKyAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5hbENvdW50ID0gZG9jLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoOworICAgICAgICBzaG91bGRCZSgiY291bnQiLCAi
ZmluYWxDb3VudCIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCAxMDApOworCit9CisKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdmYzlj
ZWQuLjIxNmM2YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDUtMDMgIEpvc2VwaCBQZWNvcmFybyAg
PGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBpcyBub3Qgc3luY2hyb25vdXMgYWZ0ZXIgcGFn
ZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODE0NgorCisgICAgICAgIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHNjcmlwdHMsIGEgZG9jdW1l
bnQud3JpdGUgY2FsbCBzaG91bGQgYmUKKyAgICAgICAgc3luY2hyb25vdXMuIFRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycyBhbmQgdGhlIEhUTUw1IHNwZWMuIEZvcmNpbmcKKyAgICAgICAgdGhl
IHRva2VuaXplciB0byBiZSBzeW5jaHJvbm91cyBpbiBEb2N1bWVudDo6d3JpdGUgZG9lcyBub3Qg
YWZmZWN0CisgICAgICAgIGV4dGVybmFsIHNjcmlwdHMgd3JpdHRlbiBieSB0aGUgd3JpdGUgY2Fs
bC4gVGhpcyBzaG91bGQgb25seSBjaGFuZ2UKKyAgICAgICAgYmVoYXZpb3Igb2YgZG9jdW1lbnQu
d3JpdGUgYWZ0ZXIgdGhlIHBhZ2UgaXMgZG9uZSBsb2FkaW5nLgorCisgICAgICAgIERpZmZpY3Vs
dCB0byB0ZXN0IHJlbGlhYmx5IGR1ZSB0byBIVE1MVG9rZW5pemluZyByZWx5aW5nIG9uIHByb2Nl
c3NpbmcgdGltZS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5j
aHJvbm91cy5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OndyaXRlKTogdGVtcG9yYXJpbHkgc2V0IHRoZSB0b2tlbml6ZXIgdG8g
c3luY2hyb25vdXMgZHVyaW5nIGRvY3VtZW50LndyaXRlCisgICAgICAgICogaHRtbC9IVE1MVG9r
ZW5pemVyLmg6IGFsbG93IGFjY2VzcyB0byB0byB0aGUgZm9yY2Ugc3luY2hyb25vdXMgc3RhdGUK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmZvcmNlU3luY2hyb25vdXMpOiBhY2Nl
c3NvcgorCiAyMDEwLTA1LTAzICBKYXJra28gU2Fra2luZW4gIDxqYXJra28uai5zYWtraW5lbkBn
bWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggODlhMDA1ZS4uMjVjYWEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTFRpdGxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNp
bmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlcXVlc3QuaCIKQEAgLTE5NTUsOCArMTk1NiwyMSBAQCB2b2lkIERvY3VtZW50
Ojp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHRleHQsIERvY3VtZW50KiBvd25lckRvY3Vt
ZW50KQogICAgICAgICBvcGVuKG93bmVyRG9jdW1lbnQpOwogCiAgICAgQVNTRVJUKG1fdG9rZW5p
emVyKTsKKworICAgIC8vIEZvcmNpbmcgdGhpcyB3cml0ZSBjYWxsIHRvIGJlIHN5bmNocm9ub3Vz
LCBkb2VzIG5vdCBhZmZlY3QgZXh0ZXJuYWwKKyAgICAvLyBzY3JpcHRzIHdyaXR0ZW4gYnkgdGhp
cyB3cml0ZSBjYWxsLgorICAgIGJvb2wgc2F2ZWRGb3JjZVN5bmNocm9ub3VzID0gZmFsc2U7Cisg
ICAgSFRNTFRva2VuaXplciogaHRtbFRva2VuaXplciA9IChtX3Rva2VuaXplci0+aXNIVE1MVG9r
ZW5pemVyKCkgPyBzdGF0aWNfY2FzdDxIVE1MVG9rZW5pemVyKj4obV90b2tlbml6ZXIuZ2V0KCkp
IDogMCk7CisgICAgaWYgKGh0bWxUb2tlbml6ZXIpIHsKKyAgICAgICAgc2F2ZWRGb3JjZVN5bmNo
cm9ub3VzID0gaHRtbFRva2VuaXplci0+Zm9yY2VTeW5jaHJvbm91cygpOworICAgICAgICBodG1s
VG9rZW5pemVyLT5zZXRGb3JjZVN5bmNocm9ub3VzKHRydWUpOworICAgIH0KKwogICAgIG1fdG9r
ZW5pemVyLT53cml0ZSh0ZXh0LCBmYWxzZSk7CiAKKyAgICBpZiAoaHRtbFRva2VuaXplcikKKyAg
ICAgICAgaHRtbFRva2VuaXplci0+c2V0Rm9yY2VTeW5jaHJvbm91cyhzYXZlZEZvcmNlU3luY2hy
b25vdXMpOworCiAjaWZkZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORwogICAgIGlmICgh
b3duZXJFbGVtZW50KCkpCiAgICAgICAgIHByaW50ZigiRW5kaW5nIGEgZG9jdW1lbnQud3JpdGUg
YXQgJWRcbiIsIGVsYXBzZWRUaW1lKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgKaW5kZXggZWY3Y2JmYy4u
YjUxMTdiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCkBAIC0xNDEsNiArMTQxLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBw
ZW5kRGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgYm9vbCBm
b3JjZVN5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5mb3JjZVN5bmNocm9ub3Vz
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9yY2VTeW5jaHJvbm91cyhib29sIGZvcmNlKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzdG9wUGFyc2luZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54935</attachid>
            <date>2010-05-03 10:01:52 -0700</date>
            <delta_ts>2010-05-05 16:19:08 -0700</delta_ts>
            <desc>[PATCH] Fixed a Few Style Issues</desc>
            <filename>write-2.patch</filename>
            <type>text/plain</type>
            <size>6065</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzYzE0NTkyLi4yNDllOTU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUt
MDMgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBpcyBub3Qg
c3luY2hyb25vdXMgYWZ0ZXIgcGFnZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zODE0NgorCisgICAgICAgICogZmFzdC9kb20vZG9jdW1lbnQt
d3JpdGUtc3luY2hyb25vdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanM6IEFkZGVkLgor
ICAgICAgICAod2luZG93Lm9ubG9hZCk6CisKIDIwMTAtMDUtMDMgIENzYWJhIE9zenRyb2dvbsOh
YyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBRdCBzcGVjaWZpYyBl
eHBlY3RlZCBmaWxlcyBhZGRlZCBhZnRlciByNTg2NzUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYzE3ZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGRvY3Vt
ZW50LndyaXRlIGFmdGVyIHBhZ2UgbG9hZCBpcyBzeW5jaHJvbm91cy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorUEFTUyBjb3VudCBpcyBmaW5hbENvdW50CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZGY1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2Rv
Y3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LXRlc3RzL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjYxNDYyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanMKQEAgLTAs
MCArMSwzMCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgZG9jdW1lbnQu
d3JpdGUgYWZ0ZXIgcGFnZSBsb2FkIGlzIHN5bmNocm9ub3VzLiIpOworCit2YXIgY291bnQsIGZp
bmFsQ291bnQ7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKword2luZG93Lm9ubG9hZCA9
IGZ1bmN0aW9uKCkgeworCisgICAgLy8gQnVpbGQgYSB2ZXJ5IGxvbmcgc3RyaW5nIHRvIHdyaXRl
LgorICAgIHZhciBMSU1JVCA9IDE3OworICAgIHZhciBzdHIgPSAnPHAgc3R5bGU9ImRpc3BsYXk6
bm9uZSI+eDwvcD4nCisgICAgZm9yICh2YXIgaT0wOyBpPExJTUlUOyArK2kpCisgICAgICAgIHN0
ciArPSBzdHI7CisKKyAgICAvLyBXcml0ZSB0aGUgc3RyaW5nIGFuZCBjaGVjayB0aGUgRE9NIGlt
bWVkaWF0ZWx5IGFuZCBhZnRlciBhIHNtYWxsIGRlbGF5LgorICAgIHZhciBkb2MgPSBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTsKKyAgICBkb2Mud3JpdGUoc3Ry
KTsKKyAgICBjb3VudCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aDsKKyAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5hbENvdW50ID0gZG9jLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCcqJykubGVuZ3RoOworICAgICAgICBzaG91bGRCZSgiY291bnQiLCAi
ZmluYWxDb3VudCIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCAxMDApOworCit9CisKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdmYzlj
ZWQuLjIxNmM2YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDUtMDMgIEpvc2VwaCBQZWNvcmFybyAg
PGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBpcyBub3Qgc3luY2hyb25vdXMgYWZ0ZXIgcGFn
ZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODE0NgorCisgICAgICAgIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHNjcmlwdHMsIGEgZG9jdW1l
bnQud3JpdGUgY2FsbCBzaG91bGQgYmUKKyAgICAgICAgc3luY2hyb25vdXMuIFRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycyBhbmQgdGhlIEhUTUw1IHNwZWMuIEZvcmNpbmcKKyAgICAgICAgdGhl
IHRva2VuaXplciB0byBiZSBzeW5jaHJvbm91cyBpbiBEb2N1bWVudDo6d3JpdGUgZG9lcyBub3Qg
YWZmZWN0CisgICAgICAgIGV4dGVybmFsIHNjcmlwdHMgd3JpdHRlbiBieSB0aGUgd3JpdGUgY2Fs
bC4gVGhpcyBzaG91bGQgb25seSBjaGFuZ2UKKyAgICAgICAgYmVoYXZpb3Igb2YgZG9jdW1lbnQu
d3JpdGUgYWZ0ZXIgdGhlIHBhZ2UgaXMgZG9uZSBsb2FkaW5nLgorCisgICAgICAgIERpZmZpY3Vs
dCB0byB0ZXN0IHJlbGlhYmx5IGR1ZSB0byBIVE1MVG9rZW5pemluZyByZWx5aW5nIG9uIHByb2Nl
c3NpbmcgdGltZS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5j
aHJvbm91cy5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OndyaXRlKTogdGVtcG9yYXJpbHkgc2V0IHRoZSB0b2tlbml6ZXIgdG8g
c3luY2hyb25vdXMgZHVyaW5nIGRvY3VtZW50LndyaXRlCisgICAgICAgICogaHRtbC9IVE1MVG9r
ZW5pemVyLmg6IGFsbG93IGFjY2VzcyB0byB0byB0aGUgZm9yY2Ugc3luY2hyb25vdXMgc3RhdGUK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmZvcmNlU3luY2hyb25vdXMpOiBhY2Nl
c3NvcgorCiAyMDEwLTA1LTAzICBKYXJra28gU2Fra2luZW4gIDxqYXJra28uai5zYWtraW5lbkBn
bWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggODlhMDA1ZS4uMjVjYWEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTFRpdGxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNp
bmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlcXVlc3QuaCIKQEAgLTE5NTUsOCArMTk1NiwyMSBAQCB2b2lkIERvY3VtZW50
Ojp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHRleHQsIERvY3VtZW50KiBvd25lckRvY3Vt
ZW50KQogICAgICAgICBvcGVuKG93bmVyRG9jdW1lbnQpOwogCiAgICAgQVNTRVJUKG1fdG9rZW5p
emVyKTsKKworICAgIC8vIEZvcmNpbmcgdGhpcyB3cml0ZSBjYWxsIHRvIGJlIHN5bmNocm9ub3Vz
LCBkb2VzIG5vdCBhZmZlY3QgZXh0ZXJuYWwKKyAgICAvLyBzY3JpcHRzIHdyaXR0ZW4gYnkgdGhp
cyB3cml0ZSBjYWxsLgorICAgIGJvb2wgc2F2ZWRGb3JjZVN5bmNocm9ub3VzID0gZmFsc2U7Cisg
ICAgSFRNTFRva2VuaXplciogaHRtbFRva2VuaXplciA9IChtX3Rva2VuaXplci0+aXNIVE1MVG9r
ZW5pemVyKCkgPyBzdGF0aWNfY2FzdDxIVE1MVG9rZW5pemVyKj4obV90b2tlbml6ZXIuZ2V0KCkp
IDogMCk7CisgICAgaWYgKGh0bWxUb2tlbml6ZXIpIHsKKyAgICAgICAgc2F2ZWRGb3JjZVN5bmNo
cm9ub3VzID0gaHRtbFRva2VuaXplci0+Zm9yY2VTeW5jaHJvbm91cygpOworICAgICAgICBodG1s
VG9rZW5pemVyLT5zZXRGb3JjZVN5bmNocm9ub3VzKHRydWUpOworICAgIH0KKwogICAgIG1fdG9r
ZW5pemVyLT53cml0ZSh0ZXh0LCBmYWxzZSk7CiAKKyAgICBpZiAoaHRtbFRva2VuaXplcikKKyAg
ICAgICAgaHRtbFRva2VuaXplci0+c2V0Rm9yY2VTeW5jaHJvbm91cyhzYXZlZEZvcmNlU3luY2hy
b25vdXMpOworCiAjaWZkZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORwogICAgIGlmICgh
b3duZXJFbGVtZW50KCkpCiAgICAgICAgIHByaW50ZigiRW5kaW5nIGEgZG9jdW1lbnQud3JpdGUg
YXQgJWRcbiIsIGVsYXBzZWRUaW1lKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgKaW5kZXggZWY3Y2JmYy4u
YjUxMTdiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCkBAIC0xNDEsNiArMTQxLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wgYXBw
ZW5kRGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgIHZpcnR1YWwgYm9vbCBm
b3JjZVN5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5mb3JjZVN5bmNocm9ub3Vz
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9yY2VTeW5jaHJvbm91cyhib29sIGZvcmNlKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzdG9wUGFyc2luZygpOwo=
</data>
<flag name="review"
          id="39015"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55169</attachid>
            <date>2010-05-05 16:19:08 -0700</date>
            <delta_ts>2010-05-06 16:50:47 -0700</delta_ts>
            <desc>[PATCH] Fixed Comments - Added RAII Class</desc>
            <filename>changes.patch</filename>
            <type>text/plain</type>
            <size>7281</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNTZhOGM1Li5lNWQ0MTUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUt
MDUgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBkb2N1bWVudC53cml0ZSBpcyBub3Qg
c3luY2hyb25vdXMgYWZ0ZXIgcGFnZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zODE0NgorCisgICAgICAgICogZmFzdC9kb20vZG9jdW1lbnQt
d3JpdGUtc3luY2hyb25vdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuanM6IEFkZGVkLgor
ICAgICAgICAod2luZG93Lm9ubG9hZCk6IHJ1biBhIGRvY3VtZW50LndyaXRlIGFmdGVyIHBhZ2Ug
bG9hZAorCiAyMDEwLTA1LTA0ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkIHRlc3RzIHNraXBzIGZvciBxdC9ndGsuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwYTY0MgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2RvY3VtZW50LXdyaXRlLXN5bmNo
cm9ub3VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0
aGF0IGRvY3VtZW50LndyaXRlIGFmdGVyIHBhZ2UgbG9hZCBpcyBzeW5jaHJvbm91cy4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorUEFTUyBpbW1lZGlhdGVFbGVtZW50Q291bnQgPT09IGRlbGF5
ZWRFbGVtZW50Q291bnQgaXMgdHJ1ZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9kb2N1bWVudC13cml0ZS1zeW5jaHJvbm91cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
ZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yYWRmNWRkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vZG9jdW1lbnQtd3JpdGUtc3luY2hyb25vdXMuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RvY3VtZW50
LXdyaXRlLXN5bmNocm9ub3VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9kb2N1bWVudC13cml0ZS1z
eW5jaHJvbm91cy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9kb2N1bWVu
dC13cml0ZS1zeW5jaHJvbm91cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xMjUzMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LXRlc3RzL2RvY3VtZW50LXdyaXRlLXN5bmNocm9ub3VzLmpzCkBAIC0wLDAgKzEsMjkgQEAKK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGRvY3VtZW50LndyaXRlIGFmdGVyIHBh
Z2UgbG9hZCBpcyBzeW5jaHJvbm91cy4iKTsKKwordmFyIGltbWVkaWF0ZUVsZW1lbnRDb3VudCwg
ZGVsYXllZEVsZW1lbnRDb3VudDsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit3aW5k
b3cub25sb2FkID0gZnVuY3Rpb24oKSB7CisKKyAgICAvLyBCdWlsZCBhIHZlcnkgbG9uZyBzdHJp
bmcgdG8gd3JpdGUuCisgICAgdmFyIExJTUlUID0gMTc7CisgICAgdmFyIHN0ciA9ICc8cCBzdHls
ZT0iZGlzcGxheTpub25lIj54PC9wPic7CisgICAgZm9yICh2YXIgaT0wOyBpPExJTUlUOyArK2kp
CisgICAgICAgIHN0ciArPSBzdHI7CisKKyAgICAvLyBXcml0ZSB0aGUgc3RyaW5nIGFuZCBjaGVj
ayB0aGUgRE9NIGltbWVkaWF0ZWx5IGFuZCBhZnRlciBhIHNtYWxsIGRlbGF5LgorICAgIHZhciBk
b2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTsKKyAgICBk
b2Mud3JpdGUoc3RyKTsKKyAgICBpbW1lZGlhdGVFbGVtZW50Q291bnQgPSBkb2MuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJyonKS5sZW5ndGg7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgZGVsYXllZEVsZW1lbnRDb3VudCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicp
Lmxlbmd0aDsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJpbW1lZGlhdGVFbGVtZW50Q291bnQgPT09
IGRlbGF5ZWRFbGVtZW50Q291bnQiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgfSwgMTAwKTsKKworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggM2Q4OGRkYy4uODBiNTA1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wNS0wNSAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGRvY3VtZW50LndyaXRlIGlzIG5vdCBzeW5jaHJvbm91cyBh
ZnRlciBwYWdlIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4MTQ2CisKKyAgICAgICAgSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgc2NyaXB0cywg
YSBkb2N1bWVudC53cml0ZSBjYWxsIHNob3VsZCBiZQorICAgICAgICBzeW5jaHJvbm91cy4gVGhp
cyBtYXRjaGVzIG90aGVyIGJyb3dzZXJzIGFuZCB0aGUgSFRNTDUgc3BlYy4gRm9yY2luZworICAg
ICAgICB0aGUgdG9rZW5pemVyIHRvIGJlIHN5bmNocm9ub3VzIGluIERvY3VtZW50Ojp3cml0ZSBk
b2VzIG5vdCBhZmZlY3QKKyAgICAgICAgZXh0ZXJuYWwgc2NyaXB0cyB3cml0dGVuIGJ5IHRoZSB3
cml0ZSBjYWxsLiBUaGlzIHNob3VsZCBvbmx5IGNoYW5nZQorICAgICAgICBiZWhhdmlvciBvZiBk
b2N1bWVudC53cml0ZSBhZnRlciB0aGUgcGFnZSBpcyBkb25lIGxvYWRpbmcuCisKKyAgICAgICAg
RGlmZmljdWx0IHRvIHRlc3QgcmVsaWFibHkgZHVlIHRvIEhUTUxUb2tlbml6aW5nIHJlbHlpbmcg
b24gcHJvY2Vzc2luZyB0aW1lLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2RvY3VtZW50LXdy
aXRlLXN5bmNocm9ub3VzLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c0hUTUxUb2tlbml6ZXJHdWFyZDo6U3luY2hyb25vdXNI
VE1MVG9rZW5pemVyR3VhcmQpOiBpZiB0aGUgcHJvdmlkZWQgdG9rZW5pemVyIGlzIGFuIEhUTUxU
b2tlbml6ZXIgbWFrZSBzeW5jaHJvbm91cworICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNI
VE1MVG9rZW5pemVyR3VhcmQ6On5TeW5jaHJvbm91c0hUTUxUb2tlbml6ZXJHdWFyZCk6IGlmIHRo
ZSBwcm92aWRlZCB0b2tlbml6ZXIgd2FzIGFuIEhUTUxUb2tlbml6ZXIgcmV0dXJuIHN5bmNocm9u
b3VzIHN0YXRlCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d3JpdGUpOiB0ZW1wb3Jhcmls
eSBzZXQgdGhlIHRva2VuaXplciB0byBzeW5jaHJvbm91cyBkdXJpbmcgZG9jdW1lbnQud3JpdGUK
KyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuaDogYWxsb3cgYWNjZXNzIHRvIHRvIHRoZSBm
b3JjZSBzeW5jaHJvbm91cyBzdGF0ZQorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6
Zm9yY2VTeW5jaHJvbm91cyk6IGFjY2Vzc29yCisgICAgICAgIChXZWJDb3JlOjphc0hUTUxUb2tl
bml6ZXIpOiBoZWxwZXIgdG8gdHVybiBhIFRva2VuaXplciBpbnRvIGFuIEhUTUxUb2tlbml6ZXIK
KwogMjAxMC0wNS0wNCAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggOGUzODQ3Yi4u
YzE5NDQ1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIkhUTUxQYXJz
ZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRpdGxl
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVFRQUGFy
c2Vycy5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVl
c3QuaCIKQEAgLTIwNCw2ICsyMDUsMzEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCitjbGFzcyBTeW5jaHJvbm91c0hUTUxUb2tlbml6ZXJHdWFy
ZCB7CitwdWJsaWM6CisgICAgU3luY2hyb25vdXNIVE1MVG9rZW5pemVyR3VhcmQoVG9rZW5pemVy
KiB0b2tlbml6ZXIpCisgICAgICAgIDogbV9odG1sVG9rZW5pemVyKDApCisgICAgICAgICwgbV9z
YXZlZEZvcmNlU3luY2hyb25vdXMoZmFsc2UpCisgICAgeworICAgICAgICBpZiAoIXRva2VuaXpl
ci0+aXNIVE1MVG9rZW5pemVyKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9o
dG1sVG9rZW5pemVyID0gYXNIVE1MVG9rZW5pemVyKHRva2VuaXplcik7CisgICAgICAgIG1fc2F2
ZWRGb3JjZVN5bmNocm9ub3VzID0gbV9odG1sVG9rZW5pemVyLT5mb3JjZVN5bmNocm9ub3VzKCk7
CisgICAgICAgIG1faHRtbFRva2VuaXplci0+c2V0Rm9yY2VTeW5jaHJvbm91cyh0cnVlKTsKKyAg
ICB9CisKKyAgICB+U3luY2hyb25vdXNIVE1MVG9rZW5pemVyR3VhcmQoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1faHRtbFRva2VuaXplcikKKyAgICAgICAgICAgIG1faHRtbFRva2VuaXplci0+c2V0
Rm9yY2VTeW5jaHJvbm91cyhtX3NhdmVkRm9yY2VTeW5jaHJvbm91cyk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEhUTUxUb2tlbml6ZXIqIG1faHRtbFRva2VuaXplcjsKKyAgICBib29sIG1fc2F2
ZWRGb3JjZVN5bmNocm9ub3VzOworfTsKKwogLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9T
Q0hFRFVMSU5HIDEKIAogLy8gVGhpcyBhbW91bnQgb2YgdGltZSBtdXN0IGhhdmUgZWxhcHNlZCBi
ZWZvcmUgd2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxpbmcgYSBsYXlvdXQgd2l0aG91dCBh
IGRlbGF5LgpAQCAtMTk1NSw2ICsxOTgxLDcgQEAgdm9pZCBEb2N1bWVudDo6d3JpdGUoY29uc3Qg
U2VnbWVudGVkU3RyaW5nJiB0ZXh0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKICAgICAgICAg
b3Blbihvd25lckRvY3VtZW50KTsKIAogICAgIEFTU0VSVChtX3Rva2VuaXplcik7CisgICAgU3lu
Y2hyb25vdXNIVE1MVG9rZW5pemVyR3VhcmQgdG9rZW5pemVyR3VhcmQobV90b2tlbml6ZXIuZ2V0
KCkpOwogICAgIG1fdG9rZW5pemVyLT53cml0ZSh0ZXh0LCBmYWxzZSk7CiAKICNpZmRlZiBJTlNU
UlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRv
a2VuaXplci5oIGIvV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAppbmRleCBlZjdjYmZjLi4x
NzFjM2FiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgKQEAgLTE0MSw2ICsxNDEsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBl
bmREYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CisgICAgdmlydHVhbCBib29sIGZv
cmNlU3luY2hyb25vdXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZvcmNlU3luY2hyb25vdXMo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JjZVN5bmNocm9ub3VzKGJvb2wgZm9yY2UpOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3BQYXJzaW5nKCk7CkBAIC00MzAsNiArNDMxLDEyIEBAIHZvaWQgcGFyc2VIVE1M
RG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21l
bnRTY3JpcHRpCiAKIFVDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKIAoraW5s
aW5lIEhUTUxUb2tlbml6ZXIqIGFzSFRNTFRva2VuaXplcihUb2tlbml6ZXIqIHRva2VuaXplcikK
K3sKKyAgICBBU1NFUlQodG9rZW5pemVyLT5pc0hUTUxUb2tlbml6ZXIoKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxUb2tlbml6ZXIqPih0b2tlbml6ZXIpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBIVE1MVG9rZW5pemVyX2gK
</data>
<flag name="review"
          id="39285"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="39480"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>