<?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>27032</bug_id>
          
          <creation_ts>2009-07-07 08:36:44 -0700</creation_ts>
          <short_desc>document.title does not replace or remove space characters</short_desc>
          <delta_ts>2010-01-07 13:32:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>EasyFix, HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="hito">hitobasira</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>christian.webkit</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>Ms2ger</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130215</commentid>
    <comment_count>0</comment_count>
    <who name="hito">hitobasira</who>
    <bug_when>2009-07-07 08:36:44 -0700</bug_when>
    <thetext>According to current HTML5 draft.(http://dev.w3.org/html5/spec/Overview.html#document.title)
the value of the document.title attribute for following title element...

&lt;title&gt;
   foo    bar    
&lt;/title&gt;

must be &quot;foo bar&quot;.
But at Safari 4.0(530.17), the value is &quot;\n    foo    bar    \n&quot;.
This is against HTML5 draft or any other major browser&apos;s implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131066</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-10 22:09:12 -0700</bug_when>
    <thetext>Confirmed with ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161371</commentid>
    <comment_count>2</comment_count>
      <attachid>42702</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-11-07 13:30:31 -0800</bug_when>
    <thetext>Created attachment 42702
Patch and test case for collapsing whitespace when using document.title</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161374</commentid>
    <comment_count>3</comment_count>
      <attachid>42702</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-07 14:24:42 -0800</bug_when>
    <thetext>Comment on attachment 42702
Patch and test case for collapsing whitespace when using document.title

Thanks for taking this on!

This new work seems to be a subset of the work already done in the DocumentLoader function canonicalizedTitle. I don&apos;t think Document::title should have its own separate copy of the logic. Some of what canonicalizedTitle does may be specific to display -- I&apos;m thinking specifically of displayBufferModifiedByEncoding -- but most of it should be shared in common with Document::title.

I think that rather than adding new code for this, instead you should be moving some of the code from DocumentLoader to Document.

A single title in the test case is really light coverage. I&apos;d like to see a test case that sets all sorts of title strings to test the various edge cases and lots of characters other than just letters and the space character. The simplest way to write such a test would be to set and then get the document&apos;s title. I recommend a script-tests style test rather than writing your own mini test harness. See an example such as fast/Element/script-tests/element-traversal.js. The HTML driver file for the script test is made by typing make-script-test-wrappers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162028</commentid>
    <comment_count>4</comment_count>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-11-10 06:13:06 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 42702 [details])
&gt; Thanks for taking this on!

No problem.

&gt; 
&gt; This new work seems to be a subset of the work already done in the
&gt; DocumentLoader function canonicalizedTitle. I don&apos;t think Document::title
&gt; should have its own separate copy of the logic. Some of what canonicalizedTitle
&gt; does may be specific to display -- I&apos;m thinking specifically of
&gt; displayBufferModifiedByEncoding -- but most of it should be shared in common
&gt; with Document::title.

It seems odd that the implementation in canonicalizedTitle is not using the already existing methods in String to strip whitespace (e.g. the ones I used in Document::title(). Also one of the comments in canonicalizedTitle is misleading as it states that it will replace backslashes with currency symbols. That doesn&apos;t happen until in displayBufferModifiedByEncoding.


&gt; 
&gt; I think that rather than adding new code for this, instead you should be moving
&gt; some of the code from DocumentLoader to Document.

How about keeping the code I have for Document and then in DocumentLoader call displayBufferModifiedByEncoding and remove the whitespace removal code?

&gt; 
&gt; A single title in the test case is really light coverage. I&apos;d like to see a
&gt; test case that sets all sorts of title strings to test the various edge cases
&gt; and lots of characters other than just letters and the space character. The
&gt; simplest way to write such a test would be to set and then get the document&apos;s
&gt; title. I recommend a script-tests style test rather than writing your own mini
&gt; test harness. See an example such as
&gt; fast/Element/script-tests/element-traversal.js. The HTML driver file for the
&gt; script test is made by typing make-script-test-wrappers.

I agree and thanks for the pointer. I will change and update the tests with more coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164970</commentid>
    <comment_count>5</comment_count>
      <attachid>43500</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-11-19 07:32:35 -0800</bug_when>
    <thetext>Created attachment 43500
Second version of patch

This patch now unifies the functionality of stripping white space between Document and DocumentLoader. In the unified white apace function there is now also support for Unicode white space which also fixes using Unicode white space in the option element (updated test case there as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165023</commentid>
    <comment_count>6</comment_count>
      <attachid>43500</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-19 10:51:28 -0800</bug_when>
    <thetext>Comment on attachment 43500
Second version of patch

Thanks for tackling this. This patch combines refactoring and at least three different behavior changes. We should ideally do these separately and each behavior change needs either a test or a justification about why it can&apos;t be tested.

&gt; +	Unify the behaviour of stripping whitespace from the title of the 
&gt; +	window and when using document.title. So in cases where whitespace had 
&gt; +	to be removed isSpaceOrNewline am now taking into account Unicode separator 
&gt; +	characters. 

Can&apos;t land patches with tabs. There are quite a few tabs in the patch.

&gt; +        * dom/Document.cpp:
&gt; +        (WebCore::canonicalizedTitle):
&gt; +        (WebCore::Document::updateTitle):
&gt; +        * dom/Document.h:
&gt; +        (WebCore::Document::title):
&gt; +        * loader/DocumentLoader.cpp:
&gt; +        (WebCore::DocumentLoader::setTitle):
&gt; +        * platform/text/StringImpl.h:
&gt; +        (WebCore::isSpaceOrNewline):

It&apos;s better to have per-function comments. It seems I am one of the few people still doing this. You can win points with me by doing it, though!

&gt; +/*
&gt; + * Performs three operations:
&gt; + *  1. Trim leading and trailing whitespace
&gt; + *  2. Collapse internal whitespace.
&gt; +*/

We use &quot;//&quot; comments almost all the time, not &quot;/* */&quot; except in rare cases.

I&apos;m also not sure this is an important comment. Comments should usually state &quot;why&quot;, not &quot;what&quot;. The &quot;what&quot; part should be expressed in the function names and code itself.

&gt; +static inline String canonicalizedTitle(const String&amp; title)
&gt; +{
&gt; +    //ASSERT(!title.isEmpty());

Assertion should either be removed or added, not added in commented-out.

&gt; +        
&gt; +    String canonicalTitle = title.stripWhiteSpace();
&gt; +    canonicalTitle = canonicalTitle.simplifyWhiteSpace();
&gt; +        
&gt; +    return canonicalTitle;
&gt; +}

Is there a a good reason to not write this one one line?

    return title.stripWhiteSpace().simplifyWhiteSpace();

&gt; +    m_canonicalizedTitle = canonicalizedTitle(m_title);

It seems to me that if we store the canonicalized title, then we should check if it changes, and avoid the setTitle call when the title has not changed.

&gt; -    String title() const { return m_title; }
&gt; +    String title() const { return m_canonicalizedTitle; }

This is a bad situation. We do not want a class where there is a data member named m_title and a function named title, and they are not the same thing.

We need to adjust the names for clarity. Do we even need an m_title data member at all? Maybe m_canonicalizedTitle should be the only thing we store. Who uses m_title?

Maybe m_title should stay and change purpose.

&gt; -/*
&gt; - * Performs four operations:
&gt; - *  1. Convert backslashes to currency symbols
&gt; - *  2. Convert control characters to spaces
&gt; - *  3. Trim leading and trailing spaces
&gt; - *  4. Collapse internal whitespace.
&gt; - */

You eliminated conversion of of control characters to spaces. Why are you sure that&apos;s OK? I&apos;d like to see a separate patch for that behavior change which does not combine that change with all the refactoring.

&gt; -static inline String canonicalizedTitle(const String&amp; title, Frame* frame)
&gt; -{
&gt; -    ASSERT(!title.isEmpty());
&gt; -
&gt; -    const UChar* characters = title.characters();
&gt; -    unsigned length = title.length();
&gt; -    unsigned i;
&gt; -
&gt; -    StringBuffer buffer(length);
&gt; -    unsigned builderIndex = 0;
&gt; -
&gt; -    // Skip leading spaces and leading characters that would convert to spaces
&gt; -    for (i = 0; i &lt; length; ++i) {
&gt; -        UChar c = characters[i];
&gt; -        if (!(c &lt;= 0x20 || c == 0x7F))
&gt; -            break;
&gt; -    }
&gt; -
&gt; -    if (i == length)
&gt; -        return &quot;&quot;;
&gt; -
&gt; -    // Replace control characters with spaces, and backslashes with currency symbols, and collapse whitespace.
&gt; -    bool previousCharWasWS = false;
&gt; -    for (; i &lt; length; ++i) {
&gt; -        UChar c = characters[i];
&gt; -        if (c &lt;= 0x20 || c == 0x7F || (WTF::Unicode::category(c) &amp; (WTF::Unicode::Separator_Line | WTF::Unicode::Separator_Paragraph))) {
&gt; -            if (previousCharWasWS)
&gt; -                continue;
&gt; -            buffer[builderIndex++] = &apos; &apos;;
&gt; -            previousCharWasWS = true;
&gt; -        } else {
&gt; -            buffer[builderIndex++] = c;
&gt; -            previousCharWasWS = false;
&gt; -        }
&gt; -    }
&gt; -
&gt; -    // Strip trailing spaces
&gt; -    while (builderIndex &gt; 0) {
&gt; -        --builderIndex;
&gt; -        if (buffer[builderIndex] != &apos; &apos;)
&gt; -            break;
&gt; -    }
&gt; -
&gt; -    if (!builderIndex &amp;&amp; buffer[builderIndex] == &apos; &apos;)
&gt; -        return &quot;&quot;;
&gt; -
&gt; -    buffer.shrink(builderIndex + 1);
&gt; -    
&gt; -    // Replace the backslashes with currency symbols if the encoding requires it.
&gt; -    frame-&gt;document()-&gt;displayBufferModifiedByEncoding(buffer.characters(), buffer.length());
&gt; -
&gt; -    return String::adopt(buffer);
&gt; -}

This is a hot code path, and one of the reasons the function was written the way it was is for performance. Making your change is OK if we know the performance has not changed. Have you found a way to determine this does not slow down performance?

&gt; -    String trimmed = canonicalizedTitle(title, m_frame);
&gt; -    if (!trimmed.isEmpty() &amp;&amp; m_pageTitle != trimmed) {
&gt; +    if (!title.isEmpty() &amp;&amp; m_pageTitle != title) {
&gt;          frameLoader()-&gt;willChangeTitle(this);
&gt; -        m_pageTitle = trimmed;
&gt; +        // Replace the backslashes with currency symbols if the encoding requires it.
&gt; +        m_pageTitle = m_frame-&gt;document()-&gt;displayStringModifiedByEncoding(title);
&gt;          frameLoader()-&gt;didChangeTitle(this);
&gt;      }

This changes behavior for titles that would be empty if made canonical. Is that OK? Did you test behavior in other browsers? I&apos;d prefer to have the behavior change in a separate patch from the refactoring for clarity, where the change is clearly justified and tested.

&gt;  static inline bool isSpaceOrNewline(UChar c)
&gt;  {
&gt; -    // Use isASCIISpace() for basic Latin-1.
&gt; -    // This will include newlines, which aren&apos;t included in Unicode DirWS.
&gt; -    return c &lt;= 0x7F ? WTF::isASCIISpace(c) : WTF::Unicode::direction(c) == WTF::Unicode::WhiteSpaceNeutral;
&gt; +    // Use isASCIISpace() for ASCII
&gt; +    if (c &lt;= 0x7F)
&gt; +        return WTF::isASCIISpace(c);
&gt; +    
&gt; +    // Unicode characters in the space, line or paragraph separator
&gt; +    // category are treated as white space
&gt; +    return ((WTF::Unicode::category(c) &amp; 
&gt; +             (WTF::Unicode::Separator_Space | 
&gt; +              WTF::Unicode::Separator_Line | 
&gt; +              WTF::Unicode::Separator_Paragraph)));
&gt;  }

What&apos;s the motivation for this change? Is this about correctness? If so, where&apos;s the test case that shows the old behavior was incorrect? Is it about efficiency?

The formatting seems inferior to the existing to me and doesn&apos;t follow our rules about where to put boolean operators in multiple lines.

One way to make these more readable is to use &quot;using namespace&quot; inside the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165059</commentid>
    <comment_count>7</comment_count>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-11-19 12:39:24 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 43500 [details])
&gt; Thanks for tackling this. This patch combines refactoring and at least three
&gt; different behavior changes. We should ideally do these separately and each
&gt; behavior change needs either a test or a justification about why it can&apos;t be
&gt; tested.

I am not sure I agree about the behavior changes as I have indicated below.

&gt; 
&gt; &gt; +	Unify the behaviour of stripping whitespace from the title of the 
&gt; &gt; +	window and when using document.title. So in cases where whitespace had 
&gt; &gt; +	to be removed isSpaceOrNewline am now taking into account Unicode separator 
&gt; &gt; +	characters. 
&gt; 
&gt; Can&apos;t land patches with tabs. There are quite a few tabs in the patch.
&gt; 

Oops, will fix that.

&gt; &gt; +        * dom/Document.cpp:
&gt; &gt; +        (WebCore::canonicalizedTitle):
&gt; &gt; +        (WebCore::Document::updateTitle):
&gt; &gt; +        * dom/Document.h:
&gt; &gt; +        (WebCore::Document::title):
&gt; &gt; +        * loader/DocumentLoader.cpp:
&gt; &gt; +        (WebCore::DocumentLoader::setTitle):
&gt; &gt; +        * platform/text/StringImpl.h:
&gt; &gt; +        (WebCore::isSpaceOrNewline):
&gt; 
&gt; It&apos;s better to have per-function comments. It seems I am one of the few people
&gt; still doing this. You can win points with me by doing it, though!
&gt; 

I am a bit behind on points so I better do it then :)

&gt; &gt; +/*
&gt; &gt; + * Performs three operations:
&gt; &gt; + *  1. Trim leading and trailing whitespace
&gt; &gt; + *  2. Collapse internal whitespace.
&gt; &gt; +*/
&gt; 
&gt; We use &quot;//&quot; comments almost all the time, not &quot;/* */&quot; except in rare cases.
&gt; 
&gt; I&apos;m also not sure this is an important comment. Comments should usually state
&gt; &quot;why&quot;, not &quot;what&quot;. The &quot;what&quot; part should be expressed in the function names
&gt; and code itself.
&gt;

I actually just edited the existing comment to reflect what the function actually does but I agree it isn&apos;t important, so I will remove it. 
 
&gt; &gt; +static inline String canonicalizedTitle(const String&amp; title)
&gt; &gt; +{
&gt; &gt; +    //ASSERT(!title.isEmpty());
&gt; 
&gt; Assertion should either be removed or added, not added in commented-out.
&gt; 

Doh, will remove the assertion.

&gt; &gt; +        
&gt; &gt; +    String canonicalTitle = title.stripWhiteSpace();
&gt; &gt; +    canonicalTitle = canonicalTitle.simplifyWhiteSpace();
&gt; &gt; +        
&gt; &gt; +    return canonicalTitle;
&gt; &gt; +}
&gt; 
&gt; Is there a a good reason to not write this one one line?
&gt; 
&gt;     return title.stripWhiteSpace().simplifyWhiteSpace();

Nope.

&gt; 
&gt; &gt; +    m_canonicalizedTitle = canonicalizedTitle(m_title);
&gt; 
&gt; It seems to me that if we store the canonicalized title, then we should check
&gt; if it changes, and avoid the setTitle call when the title has not changed.
&gt; 

This already happens in Document.setTitle() with

    if (m_title == title)
        return;

&gt; &gt; -    String title() const { return m_title; }
&gt; &gt; +    String title() const { return m_canonicalizedTitle; }
&gt; 
&gt; This is a bad situation. We do not want a class where there is a data member
&gt; named m_title and a function named title, and they are not the same thing.
&gt; 
&gt; We need to adjust the names for clarity. Do we even need an m_title data member
&gt; at all? Maybe m_canonicalizedTitle should be the only thing we store. Who uses
&gt; m_title?
&gt; 
&gt; Maybe m_title should stay and change purpose.
&gt; 

I agree that this is not ideal, but this is to prevent the situation you mention above, to not change the title if it hasn&apos;t changed. Do you have an idea for another way of solving that situation?

&gt; &gt; -/*
&gt; &gt; - * Performs four operations:
&gt; &gt; - *  1. Convert backslashes to currency symbols
&gt; &gt; - *  2. Convert control characters to spaces
&gt; &gt; - *  3. Trim leading and trailing spaces
&gt; &gt; - *  4. Collapse internal whitespace.
&gt; &gt; - */
&gt; 
&gt; You eliminated conversion of of control characters to spaces. Why are you sure
&gt; that&apos;s OK? I&apos;d like to see a separate patch for that behavior change which does
&gt; not combine that change with all the refactoring.
&gt; 

Actually, isASCIISpace has the same check for control characters, so there isn&apos;t any behavior change.


&gt; &gt; -static inline String canonicalizedTitle(const String&amp; title, Frame* frame)
&gt; &gt; -{
&gt; &gt; -    ASSERT(!title.isEmpty());
&gt; &gt; -
&gt; &gt; -    const UChar* characters = title.characters();
&gt; &gt; -    unsigned length = title.length();
&gt; &gt; -    unsigned i;
&gt; &gt; -
&gt; &gt; -    StringBuffer buffer(length);
&gt; &gt; -    unsigned builderIndex = 0;
&gt; &gt; -
&gt; &gt; -    // Skip leading spaces and leading characters that would convert to spaces
&gt; &gt; -    for (i = 0; i &lt; length; ++i) {
&gt; &gt; -        UChar c = characters[i];
&gt; &gt; -        if (!(c &lt;= 0x20 || c == 0x7F))
&gt; &gt; -            break;
&gt; &gt; -    }
&gt; &gt; -
&gt; &gt; -    if (i == length)
&gt; &gt; -        return &quot;&quot;;
&gt; &gt; -
&gt; &gt; -    // Replace control characters with spaces, and backslashes with currency symbols, and collapse whitespace.
&gt; &gt; -    bool previousCharWasWS = false;
&gt; &gt; -    for (; i &lt; length; ++i) {
&gt; &gt; -        UChar c = characters[i];
&gt; &gt; -        if (c &lt;= 0x20 || c == 0x7F || (WTF::Unicode::category(c) &amp; (WTF::Unicode::Separator_Line | WTF::Unicode::Separator_Paragraph))) {
&gt; &gt; -            if (previousCharWasWS)
&gt; &gt; -                continue;
&gt; &gt; -            buffer[builderIndex++] = &apos; &apos;;
&gt; &gt; -            previousCharWasWS = true;
&gt; &gt; -        } else {
&gt; &gt; -            buffer[builderIndex++] = c;
&gt; &gt; -            previousCharWasWS = false;
&gt; &gt; -        }
&gt; &gt; -    }
&gt; &gt; -
&gt; &gt; -    // Strip trailing spaces
&gt; &gt; -    while (builderIndex &gt; 0) {
&gt; &gt; -        --builderIndex;
&gt; &gt; -        if (buffer[builderIndex] != &apos; &apos;)
&gt; &gt; -            break;
&gt; &gt; -    }
&gt; &gt; -
&gt; &gt; -    if (!builderIndex &amp;&amp; buffer[builderIndex] == &apos; &apos;)
&gt; &gt; -        return &quot;&quot;;
&gt; &gt; -
&gt; &gt; -    buffer.shrink(builderIndex + 1);
&gt; &gt; -    
&gt; &gt; -    // Replace the backslashes with currency symbols if the encoding requires it.
&gt; &gt; -    frame-&gt;document()-&gt;displayBufferModifiedByEncoding(buffer.characters(), buffer.length());
&gt; &gt; -
&gt; &gt; -    return String::adopt(buffer);
&gt; &gt; -}
&gt; 
&gt; This is a hot code path, and one of the reasons the function was written the
&gt; way it was is for performance. Making your change is OK if we know the
&gt; performance has not changed. Have you found a way to determine this does not
&gt; slow down performance?

I haven&apos;t run a profiler on this to determine the difference in performance, but there is a performance penalty just due to the fact that this in done in two functions and the string buffer is copied two times instead of once. I can revert the code back to the original if you think that is better?

Out of curiosity, why is this a hot code path and how can I find out if something is considered a hot code path? E.g. in this case canonicalizedTitle is only called once per document.

&gt; 
&gt; &gt; -    String trimmed = canonicalizedTitle(title, m_frame);
&gt; &gt; -    if (!trimmed.isEmpty() &amp;&amp; m_pageTitle != trimmed) {
&gt; &gt; +    if (!title.isEmpty() &amp;&amp; m_pageTitle != title) {
&gt; &gt;          frameLoader()-&gt;willChangeTitle(this);
&gt; &gt; -        m_pageTitle = trimmed;
&gt; &gt; +        // Replace the backslashes with currency symbols if the encoding requires it.
&gt; &gt; +        m_pageTitle = m_frame-&gt;document()-&gt;displayStringModifiedByEncoding(title);
&gt; &gt;          frameLoader()-&gt;didChangeTitle(this);
&gt; &gt;      }
&gt; 
&gt; This changes behavior for titles that would be empty if made canonical. Is that
&gt; OK? Did you test behavior in other browsers? I&apos;d prefer to have the behavior
&gt; change in a separate patch from the refactoring for clarity, where the change
&gt; is clearly justified and tested.

The title passed to the DocumentLoader has already been canonicalized, so there is no change in behavior here.

&gt; 
&gt; &gt;  static inline bool isSpaceOrNewline(UChar c)
&gt; &gt;  {
&gt; &gt; -    // Use isASCIISpace() for basic Latin-1.
&gt; &gt; -    // This will include newlines, which aren&apos;t included in Unicode DirWS.
&gt; &gt; -    return c &lt;= 0x7F ? WTF::isASCIISpace(c) : WTF::Unicode::direction(c) == WTF::Unicode::WhiteSpaceNeutral;
&gt; &gt; +    // Use isASCIISpace() for ASCII
&gt; &gt; +    if (c &lt;= 0x7F)
&gt; &gt; +        return WTF::isASCIISpace(c);
&gt; &gt; +    
&gt; &gt; +    // Unicode characters in the space, line or paragraph separator
&gt; &gt; +    // category are treated as white space
&gt; &gt; +    return ((WTF::Unicode::category(c) &amp; 
&gt; &gt; +             (WTF::Unicode::Separator_Space | 
&gt; &gt; +              WTF::Unicode::Separator_Line | 
&gt; &gt; +              WTF::Unicode::Separator_Paragraph)));
&gt; &gt;  }
&gt; 
&gt; What&apos;s the motivation for this change? Is this about correctness? If so,
&gt; where&apos;s the test case that shows the old behavior was incorrect? Is it about
&gt; efficiency?

AFAICT the code: WTF::Unicode::direction(c) == WTF::Unicode::WhiteSpaceNeutral really doesn&apos;t do anything that has anything to do with determining whether the character is a space or newline. I believe the right implementation is to check for all the Unicode separator categories if the input character isn&apos;t ASCII. The test case fast/dom/Document/document-title-get.html I added the one I extended in fast/dom/HTMLOptionElement/option-text.html are testing this code. It will exhibit the wrong behavior in the old code. 

&gt; 
&gt; The formatting seems inferior to the existing to me and doesn&apos;t follow our
&gt; rules about where to put boolean operators in multiple lines.
&gt; 
&gt; One way to make these more readable is to use &quot;using namespace&quot; inside the
&gt; function.

OK, thanks for the review, I will upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165395</commentid>
    <comment_count>8</comment_count>
    <who name="Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
    <bug_when>2009-11-20 12:35:31 -0800</bug_when>
    <thetext>Please note that the only characters that HTML5 allows to be collapsed are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), U+000C FORM FEED (FF), and U+000D CARRIAGE RETURN (CR).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169766</commentid>
    <comment_count>9</comment_count>
      <attachid>44480</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-12-08 13:10:09 -0800</bug_when>
    <thetext>Created attachment 44480
Third attempt

In this patch I have taken into account comment #8 and have responded to the previous review in comment #7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169768</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-08 13:14:15 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44480 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170926</commentid>
    <comment_count>11</comment_count>
      <attachid>44480</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 14:13:01 -0800</bug_when>
    <thetext>Comment on attachment 44480
Third attempt

Thanks for tackling this. I would love to see this fixed.

&gt; +static inline String canonicalizedTitle(const String&amp; title)
&gt; +{
&gt; +    if (title.isEmpty())
&gt; +        return title;
&gt; +        
&gt; +    return title.stripWhiteSpace().simplifyWhiteSpace();
&gt; +}

Why the early exit for empty string? I think stripWhiteSpace and simplifyWhiteSpace already are fast and correct for the empty string.

Maybe it&apos;s my fault? Did I suggest it?

&gt;  void Document::updateTitle()
&gt;  {
&gt; +    m_canonicalizedTitle = canonicalizedTitle(m_title);
&gt;      if (Frame* f = frame())
&gt; -        f-&gt;loader()-&gt;setTitle(m_title);
&gt; +        f-&gt;loader()-&gt;setTitle(m_canonicalizedTitle);
&gt;  }

It seems to me this should only call setTitle if the new m_canonicalizedTitle is different from the old. I know that DocumentLoader::setTitle has a similar optimization, but I&apos;d like to see it at this level too.

&gt; -    String title() const { return m_title; }
&gt; +    String title() const { return m_canonicalizedTitle; }

I&apos;m sorry, I know you quibbled with my comment last time, but I have to reiterate. It is not acceptable to have a class with a title function and an m_title data member, but have those be different things. You need to rename either title or m_title.

&gt; &gt; You eliminated conversion of of control characters to spaces. Why are you sure
&gt; &gt; that&apos;s OK? I&apos;d like to see a separate patch for that behavior change which does
&gt; &gt; not combine that change with all the refactoring.
&gt; 
&gt; Actually, isASCIISpace has the same check for control characters, so there
&gt; isn&apos;t any behavior change.

isASCIISpace does not return true for control characters. The check in isASCIISpace is a performance optimization. The isASCIISpace function returns false for characters like U+0000 and U+0001.

&gt;  static inline bool isSpaceOrNewline(UChar c)
&gt;  {
&gt; +    // According to HTML 5 space characters, are defined as U+0020 SPACE, 
&gt; +    // U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF), 
&gt; +    // U+000C FORM FEED (FF) and U+000D CARRIAGE RETURN (CR).
&gt; +    return c &lt;= 0x7F ? isASCIISpace(c) : false;
&gt;  }

While it&apos;s nice to have that comment there, it&apos;s not what the code implements. isASCIISpace returns true for U+000B, and thus so does this function. I think it&apos;s not good to put the comment in there, implying that&apos;s what the function does.

The check for &lt;= 0x7F is unnecessary. The isASCIISpace function already returns false for non-ASCII characters, so you don&apos;t need to redo that work.

I think the function should be named isHTMLSpace, and should be correctly implemented to return false for U+000B.

Also, since you are fixing this function, we need to write tests to show the bugs we&apos;re fixing by correcting the definition. We need to look at call sites and see which ones we&apos;re changing. There&apos;s a chance that for at least some of the call sites, the HTML space character definition is not what&apos;s wanted, and we need test cases to figure this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174968</commentid>
    <comment_count>12</comment_count>
      <attachid>45516</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-12-26 16:37:15 -0800</bug_when>
    <thetext>Created attachment 45516
Fourth attempt

Simpler patch now, that moves the canonicalizedTitle function from DocumentLoader.cpp to Document.cpp and adds an extra member variable to Document (m_rawTitle) that stores the title passed in, while m_title has the canonicalizedTitle now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174969</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-26 16:42:41 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45516 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175309</commentid>
    <comment_count>14</comment_count>
      <attachid>45574</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2009-12-28 14:38:11 -0800</bug_when>
    <thetext>Created attachment 45574
Updated &quot;Fourth attempt&quot; by keeping the patch more true to the original code

An update to the 4th patch keeping the display buffer encoding code in the canonicalization of the title function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175310</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 14:43:44 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45574 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175471</commentid>
    <comment_count>16</comment_count>
      <attachid>45574</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-29 00:20:59 -0800</bug_when>
    <thetext>Comment on attachment 45574
Updated &quot;Fourth attempt&quot; by keeping the patch more true to the original code

Be sure to mark your attachments as patches, with type text/plain.  Various patch uploading tools including &quot;bugzilla-tool post-diff&quot; or &quot;bugzilla-tool post-commits&quot; will handle that for you (see WebKitTools/Scripts/bugzilla-tool --help).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176266</commentid>
    <comment_count>17</comment_count>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2010-01-01 04:06:19 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 45574 [details])
&gt; Be sure to mark your attachments as patches, with type text/plain.  Various
&gt; patch uploading tools including &quot;bugzilla-tool post-diff&quot; or &quot;bugzilla-tool
&gt; post-commits&quot; will handle that for you (see WebKitTools/Scripts/bugzilla-tool
&gt; --help).
Apologies, it was an oversight from my side. As you may see the previous 4 patches were marked as such. Thanks for correcting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176714</commentid>
    <comment_count>18</comment_count>
      <attachid>45574</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-04 09:05:28 -0800</bug_when>
    <thetext>Comment on attachment 45574
Updated &quot;Fourth attempt&quot; by keeping the patch more true to the original code

&gt; +static inline String canonicalizedTitle(Document* doc, const String&amp; title)

We normally do not abbreviate names like &quot;doc&quot;. Using &quot;document&quot; would be better.

&gt; +}
&gt; +
&gt; +
&gt;  void Document::updateTitle()

Other functions in this file have one blank line between them.

&gt;  {
&gt; +    m_title = canonicalizedTitle(this, m_rawTitle);
&gt;      if (Frame* f = frame())
&gt;          f-&gt;loader()-&gt;setTitle(m_title);
&gt;  }

It would be good to call setTitle only if m_title is different than it was previously.

&gt; +debug(&apos;Test with Unicode whitespace in the space separator category&apos;);
&gt; +document.title = &quot;\u0020\u0020one\u0020\u0020\u0020space\u0020\u0020&quot;;
&gt; +shouldBeEqualToString(&quot;document.title&quot;,&quot;one space&quot;);

This test does not do what it says. The spaces are all &quot;\u0020&quot; which is just a normal space expressed with &quot;\u&quot; syntax. It would be good to have tests of other whitespace characters as the comment indicates.

&gt; Index: LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt
&gt; ===================================================================
&gt; --- LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt	(revision 52602)
&gt; +++ LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt	(working copy)
&gt; @@ -6,4 +6,5 @@ PASS: got &quot;foo&quot; as expected.
&gt;  PASS: got &quot;Â¥&quot; as expected.
&gt;  PASS: got &quot;foo bar&quot; as expected.
&gt;  PASS: got &quot;label&quot; as expected.
&gt; +PASS: got &quot;one space&quot; as expected.
&gt;  
&gt; Index: LayoutTests/fast/dom/HTMLOptionElement/option-text.html
&gt; ===================================================================
&gt; --- LayoutTests/fast/dom/HTMLOptionElement/option-text.html	(revision 52602)
&gt; +++ LayoutTests/fast/dom/HTMLOptionElement/option-text.html	(working copy)
&gt; @@ -20,6 +20,7 @@
&gt;          &lt;option id=&quot;o3&quot;&gt;\&lt;/option&gt;
&gt;          &lt;option id=&quot;o4&quot;&gt;foo   bar&lt;/option&gt;
&gt;          &lt;option id=&quot;o5&quot; label=&quot; label &quot;&gt;ignored&lt;/option&gt;
&gt; +	&lt;option id=&quot;o6&quot;&gt;&amp;#x0020;one&amp;#x0009;&amp;#x000a;&amp;#x000c;&amp;#x000d;space&amp;#x0020;&lt;/option&gt;
&gt;      &lt;/select&gt;
&gt;      &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
&gt;      &lt;script&gt;
&gt; @@ -42,6 +43,7 @@
&gt;          test(&quot;o3&quot;, &quot;\u00a5&quot;);
&gt;          test(&quot;o4&quot;, &quot;foo bar&quot;);
&gt;          test(&quot;o5&quot;, &quot;label&quot;);
&gt; +	test(&quot;o6&quot;, &quot;one space&quot;);
&gt;      &lt;/script&gt;
&gt;  &lt;/body&gt;
&gt;  &lt;/html&gt;

This change to this test seems unrelated, and has tab characters in it. I think these tab characters are the reason this patch won&apos;t auto-apply.

I&apos;m going to say review-, but *only* because of the option-text mistake. Otherwise seems good.

I think we could follow this up by eliminating m_rawTitle entirely. And perhaps make some of the other changes from earlier versions of your patch if there are good reasons to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177571</commentid>
    <comment_count>19</comment_count>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2010-01-06 05:42:25 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 45574 [details])
&gt; &gt; +static inline String canonicalizedTitle(Document* doc, const String&amp; title)
&gt; 
&gt; We normally do not abbreviate names like &quot;doc&quot;. Using &quot;document&quot; would be
&gt; better.

Fixed.

&gt; 
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +
&gt; &gt;  void Document::updateTitle()
&gt; 
&gt; Other functions in this file have one blank line between them.

Fixed.

&gt; &gt;  {
&gt; &gt; +    m_title = canonicalizedTitle(this, m_rawTitle);
&gt; &gt;      if (Frame* f = frame())
&gt; &gt;          f-&gt;loader()-&gt;setTitle(m_title);
&gt; &gt;  }
&gt; 
&gt; It would be good to call setTitle only if m_title is different than it was
&gt; previously.

In setTitle there is the following check:

    if (m_rawTitle == title)
        return;

So updateTitle() isn&apos;t called unless they are different.

&gt; &gt; +debug(&apos;Test with Unicode whitespace in the space separator category&apos;);
&gt; &gt; +document.title = &quot;\u0020\u0020one\u0020\u0020\u0020space\u0020\u0020&quot;;
&gt; &gt; +shouldBeEqualToString(&quot;document.title&quot;,&quot;one space&quot;);
&gt; 
&gt; This test does not do what it says. The spaces are all &quot;\u0020&quot; which is just a
&gt; normal space expressed with &quot;\u&quot; syntax. It would be good to have tests of
&gt; other whitespace characters as the comment indicates.

I took out this case as the only whitespace that we need to remove in the space separator category is &quot;\u0020&quot;. I have added &quot;\u0020&quot; to the next test. 

&gt; 
&gt; &gt; Index: LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt
&gt; &gt; ===================================================================
&gt; &gt; --- LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt	(revision 52602)
&gt; &gt; +++ LayoutTests/fast/dom/HTMLOptionElement/option-text-expected.txt	(working copy)
&gt; &gt; @@ -6,4 +6,5 @@ PASS: got &quot;foo&quot; as expected.
&gt; &gt;  PASS: got &quot;Â¥&quot; as expected.
&gt; &gt;  PASS: got &quot;foo bar&quot; as expected.
&gt; &gt;  PASS: got &quot;label&quot; as expected.
&gt; &gt; +PASS: got &quot;one space&quot; as expected.
&gt; &gt;  
&gt; &gt; Index: LayoutTests/fast/dom/HTMLOptionElement/option-text.html
&gt; &gt; ===================================================================
&gt; &gt; --- LayoutTests/fast/dom/HTMLOptionElement/option-text.html	(revision 52602)
&gt; &gt; +++ LayoutTests/fast/dom/HTMLOptionElement/option-text.html	(working copy)
&gt; &gt; @@ -20,6 +20,7 @@
&gt; &gt;          &lt;option id=&quot;o3&quot;&gt;\&lt;/option&gt;
&gt; &gt;          &lt;option id=&quot;o4&quot;&gt;foo   bar&lt;/option&gt;
&gt; &gt;          &lt;option id=&quot;o5&quot; label=&quot; label &quot;&gt;ignored&lt;/option&gt;
&gt; &gt; +	&lt;option id=&quot;o6&quot;&gt;&amp;#x0020;one&amp;#x0009;&amp;#x000a;&amp;#x000c;&amp;#x000d;space&amp;#x0020;&lt;/option&gt;
&gt; &gt;      &lt;/select&gt;
&gt; &gt;      &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
&gt; &gt;      &lt;script&gt;
&gt; &gt; @@ -42,6 +43,7 @@
&gt; &gt;          test(&quot;o3&quot;, &quot;\u00a5&quot;);
&gt; &gt;          test(&quot;o4&quot;, &quot;foo bar&quot;);
&gt; &gt;          test(&quot;o5&quot;, &quot;label&quot;);
&gt; &gt; +	test(&quot;o6&quot;, &quot;one space&quot;);
&gt; &gt;      &lt;/script&gt;
&gt; &gt;  &lt;/body&gt;
&gt; &gt;  &lt;/html&gt;
&gt; 
&gt; This change to this test seems unrelated, and has tab characters in it. I think
&gt; these tab characters are the reason this patch won&apos;t auto-apply.

I reverted the changes.

&gt; 
&gt; I&apos;m going to say review-, but *only* because of the option-text mistake.
&gt; Otherwise seems good.

Thanks for your patience with me.

&gt; 
&gt; I think we could follow this up by eliminating m_rawTitle entirely. And perhaps
&gt; make some of the other changes from earlier versions of your patch if there are
&gt; good reasons to do so.

Sounds like a good idea. I will file a follow-up bug once this gets in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177576</commentid>
    <comment_count>20</comment_count>
      <attachid>45961</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2010-01-06 05:56:52 -0800</bug_when>
    <thetext>Created attachment 45961
Updated final(?) patch

A few minor changes according to comments in comment #18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177577</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 05:57:41 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45961 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177587</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 08:18:37 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt;  {
&gt; &gt; &gt; +    m_title = canonicalizedTitle(this, m_rawTitle);
&gt; &gt; &gt;      if (Frame* f = frame())
&gt; &gt; &gt;          f-&gt;loader()-&gt;setTitle(m_title);
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; It would be good to call setTitle only if m_title is different than it was
&gt; &gt; previously.
&gt; 
&gt; In setTitle there is the following check:
&gt; 
&gt;     if (m_rawTitle == title)
&gt;         return;
&gt; 
&gt; So updateTitle() isn&apos;t called unless they are different.

Yes, my point was simply that two different raw titles could result in the same canonicalized title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177588</commentid>
    <comment_count>23</comment_count>
      <attachid>45961</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 08:19:35 -0800</bug_when>
    <thetext>Comment on attachment 45961
Updated final(?) patch

&gt; +debug(&apos;Test with various length strings&apos;);

A title here, but no tests.

&gt; +var successfullyParsed = true;
&gt; \ No newline at end of file

Normally we put newlines at ends of files like this.

r=me -- we can fix up more in followups</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177945</commentid>
    <comment_count>24</comment_count>
      <attachid>45961</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-06 20:23:28 -0800</bug_when>
    <thetext>Comment on attachment 45961
Updated final(?) patch

Rejecting patch 45961 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11881 test cases.
fast/dom/Document/document-title-get.html -&gt; failed

Exiting early after 1 failures. 5673 tests run.
84.13s total testing time

5672 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
1 test case (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/166084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178018</commentid>
    <comment_count>25</comment_count>
      <attachid>45961</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 23:01:37 -0800</bug_when>
    <thetext>Comment on attachment 45961
Updated final(?) patch

Failure seen on the commit-bot:
--- /tmp/layout-test-results/fast/dom/Document/document-title-get-expected.txt	2010-01-06 20:23:24.000000000 -0800
+++ /tmp/layout-test-results/fast/dom/Document/document-title-get-actual.txt	2010-01-06 20:23:24.000000000 -0800
@@ -11,8 +11,6 @@
 PASS document.title is &quot;&quot;
 Test with no whitespace
 PASS document.title is &quot;nowhitespacetitle&quot;
-Test with Unicode whitespace in the space separator category
-PASS document.title is &quot;one space&quot;
 Test with whitespace
 PASS document.title is &quot;one space&quot;
 Test with various whitespace lengths and fields

Looks like this patch is going to need one more round of update.  Marking r- since it would cause a test to fail as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178019</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-06 23:02:52 -0800</bug_when>
    <thetext>Actually, it looks like the restuls are just out of date.  You could land this with Darin&apos;s review if you fixed the expected results.  Or you could simply re-post and we can r+/cq+ it again.  I can&apos;t remember if you&apos;re a committer or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178049</commentid>
    <comment_count>27</comment_count>
      <attachid>46028</attachid>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2010-01-07 00:15:08 -0800</bug_when>
    <thetext>Created attachment 46028
Updated patch

Removed the obsolete expected result. Doh!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178060</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 00:53:04 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46028 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178357</commentid>
    <comment_count>29</comment_count>
      <attachid>46028</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-07 13:32:24 -0800</bug_when>
    <thetext>Comment on attachment 46028
Updated patch

Clearing flags on attachment: 46028

Committed r52944: &lt;http://trac.webkit.org/changeset/52944&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178358</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-07 13:32:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42702</attachid>
            <date>2009-11-07 13:30:31 -0800</date>
            <delta_ts>2009-11-19 07:32:35 -0800</delta_ts>
            <desc>Patch and test case for collapsing whitespace when using document.title</desc>
            <filename>collapse-whitespace.patch</filename>
            <type>text/plain</type>
            <size>5034</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTEtMDcgIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlcGxhY2UgYW55IHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIGNvbnNlY3V0
aXZlIHNwYWNlIGNoYXJhY3RlcnMgd2l0aCAKKyAgICAgICAgYSBzaW5nbGUgc3BhY2UgYW5kIHJl
bW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgY2hhcmFjdGVycywgCisgICAgICAg
IGFzIHBlciBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjZG9jdW1l
bnQudGl0bGUKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjcwMzIKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9Eb2N1bWVudC90aXRsZS1wcm9wZXJ0
eS1nZXQtY29sbGFwc2VzLXdoaXRlc3BhY2UuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aXRsZSk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisKIDIwMDktMTEtMDcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA1MDYxNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA2Nyw2ICsxMDY3LDE5IEBAIEVsZW1lbnQqIERvY3VtZW50OjpnZXRFbGVtZW50
QnlBY2Nlc3NLZXkKICAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNjZXNzS2V5LmdldChrZXkuaW1w
bCgpKTsKIH0KIAorU3RyaW5nIERvY3VtZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgU3RyaW5n
IGNvbGxhcHNlZFRpdGxlOworICAgIAorICAgIC8vIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGlu
ZyB3aGl0ZXNwYWNlCisgICAgY29sbGFwc2VkVGl0bGUgPSBtX3RpdGxlLnN0cmlwV2hpdGVTcGFj
ZSgpOworICAgIAorICAgIC8vIFJlcGxhY2UgYW55IHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIGNv
bnNlY3V0aXZlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAg
IGNvbGxhcHNlZFRpdGxlID0gY29sbGFwc2VkVGl0bGUuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7Cisg
ICAgCisgICAgcmV0dXJuIGNvbGxhcHNlZFRpdGxlOworfQorICAgIAogdm9pZCBEb2N1bWVudDo6
dXBkYXRlVGl0bGUoKQogewogICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDUwNjE1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcxLDcgKzY3MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIDAgaWYgdGhpcyBp
cyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgogICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNv
bnN0OwogCi0gICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAg
IFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiwg
RWxlbWVudCogdGl0bGVFbGVtZW50ID0gMCk7CiAgICAgdm9pZCByZW1vdmVUaXRsZShFbGVtZW50
KiB0aXRsZUVsZW1lbnQpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MDYxNikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA5LTExLTA3
ICBDaHJpc3RpYW4gU2VqZXJzZW4gIDxjaHJpc3RpYW4ud2Via2l0QGdtYWlsLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBkb2N1bWVudC50aXRs
ZSBkb2VzIG5vdCByZXBsYWNlIG9yIHJlbW92ZSBzcGFjZSBjaGFyYWN0ZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzAzMgorCisgICAgICAgIEFk
ZCB0ZXN0IGZvciBlbnN1cmluZyBkb2N1bWVudC50aXRsZSByZXR1cm5zIGEgc3RyaW5nIHdpdGgg
YWxsIAorICAgICAgICB3aGl0ZXNwYWNlIGNvbGxhcHNlZC4KKworICAgICAgICAqIGZhc3QvZG9t
L0RvY3VtZW50L3RpdGxlLXByb3BlcnR5LWdldC1jb2xsYXBzZXMtd2hpdGVzcGFjZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L3RpdGxlLXByb3BlcnR5
LWdldC1jb2xsYXBzZXMtd2hpdGVzcGFjZS5odG1sOiBBZGRlZC4KKwogMjAwOS0xMS0wNiAgQW5h
bnRhbmFyYXlhbmFuIEcgSXllbmdhciAgPGFuYW50YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3Vt
ZW50L3RpdGxlLXByb3BlcnR5LWdldC1jb2xsYXBzZXMtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvdGl0bGUtcHJvcGVy
dHktZ2V0LWNvbGxhcHNlcy13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3RpdGxlLXByb3BlcnR5LWdldC1jb2xsYXBz
ZXMtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAor
VGVzdCB0aGF0IGdldHRpbmcgZG9jdW1lbnQudGl0bGUgcmVwbGFjZXMgYW55IHNlcXVlbmNlIG9m
IG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIHNwYWNlIGNoYXJhY3RlcnMgd2l0aCBhIHNpbmdsZSBz
cGFjZSBhbmQgcmVtb3ZlcyBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgY2hhcmFjdGVy
cywgYXMgcGVyIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNkb2N1
bWVudC50aXRsZS4KKworRXhwZWN0ZWQgQSBjb2xsYXBzYWJsZSB0aXRsZSwgZ290IEEgY29sbGFw
c2FibGUgdGl0bGU6IFBBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3Rp
dGxlLXByb3BlcnR5LWdldC1jb2xsYXBzZXMtd2hpdGVzcGFjZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3RpdGxlLXByb3BlcnR5LWdldC1jb2xsYXBz
ZXMtd2hpdGVzcGFjZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
RG9jdW1lbnQvdGl0bGUtcHJvcGVydHktZ2V0LWNvbGxhcHNlcy13aGl0ZXNwYWNlLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+CisKKyBB
IAorICAgICAgICAgICAgY29sbGFwc2FibGUgICAgICAgICAKKworICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpdGxlCisgICAgIAorPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVz
c2FnZSkKK3sKKyAgICB2YXIgcGFyYWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIp
OworICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNz
YWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGls
ZChwYXJhZ3JhcGgpOworfQorCitmdW5jdGlvbiBleHBlY3QoZXhwZWN0ZWQsIGFjdHVhbCkKK3sK
KyAgICB2YXIgbXNnID0gIkV4cGVjdGVkICIgKyBleHBlY3RlZCArICIsIGdvdCAiICsgYWN0dWFs
ICsgIjogIjsKKyAgICBpZiAoZXhwZWN0ZWQgPT0gYWN0dWFsKQorICAgICAgICBsb2cobXNnICsg
IlBBU1MiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZyhtc2cgKyAiRkFJTCIpOworfQorCitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgZXhw
ZWN0KCJBIGNvbGxhcHNhYmxlIHRpdGxlIiwgZG9jdW1lbnQudGl0bGUpOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRlc3QgdGhhdCBnZXR0aW5nIGRvY3VtZW50LnRpdGxlIHJl
cGxhY2VzIGFueSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBjb25zZWN1dGl2ZSBzcGFjZSBjaGFy
YWN0ZXJzIHdpdGggYSBzaW5nbGUgc3BhY2UgYW5kIHJlbW92ZXMgYW55IGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHNwYWNlIGNoYXJhY3RlcnMsIGFzIHBlciA8YSBocmVmPSdodHRwOi8vZGV2LnczLm9y
Zy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjZG9jdW1lbnQudGl0bGUnPmh0dHA6Ly9kZXYudzMu
b3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNkb2N1bWVudC50aXRsZTwvYT4uPC9wPgorPGhy
PgorPGRpdiBpZD0nY29uc29sZScvPgorPHNjcmlwdD4KKyAgICB0ZXN0KCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="24263"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43500</attachid>
            <date>2009-11-19 07:32:35 -0800</date>
            <delta_ts>2009-12-08 13:10:09 -0800</delta_ts>
            <desc>Second version of patch</desc>
            <filename>collapse-whitespace-round2.patch</filename>
            <type>text/plain</type>
            <size>13208</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTEyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMTEtMTggIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworCVVuaWZ5IHRoZSBiZWhhdmlvdXIgb2Ygc3RyaXBwaW5nIHdoaXRl
c3BhY2UgZnJvbSB0aGUgdGl0bGUgb2YgdGhlIAorCXdpbmRvdyBhbmQgd2hlbiB1c2luZyBkb2N1
bWVudC50aXRsZS4gU28gaW4gY2FzZXMgd2hlcmUgd2hpdGVzcGFjZSBoYWQgCisJdG8gYmUgcmVt
b3ZlZCBpc1NwYWNlT3JOZXdsaW5lIGFtIG5vdyB0YWtpbmcgaW50byBhY2NvdW50IFVuaWNvZGUg
c2VwYXJhdG9yIAorCWNoYXJhY3RlcnMuIAorCQorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxpemVkVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnVwZGF0ZVRpdGxlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aXRsZSk6CisgICAgICAgICogbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzZXRUaXRs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlOjppc1NwYWNlT3JOZXdsaW5lKToKKwogMjAwOS0xMS0xOCAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNo
ZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA1MTExOCkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NywxMCArMTA2NywyNiBAQCBFbGVtZW50KiBE
b2N1bWVudDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5CiAgICAgcmV0dXJuIG1fZWxlbWVudHNCeUFj
Y2Vzc0tleS5nZXQoa2V5LmltcGwoKSk7CiB9CiAKKy8qCisgKiBQZXJmb3JtcyB0aHJlZSBvcGVy
YXRpb25zOgorICogIDEuIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorICog
IDIuIENvbGxhcHNlIGludGVybmFsIHdoaXRlc3BhY2UuCisqLworc3RhdGljIGlubGluZSBTdHJp
bmcgY2Fub25pY2FsaXplZFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgLy9BU1NF
UlQoIXRpdGxlLmlzRW1wdHkoKSk7CisgICAgICAgIAorICAgIFN0cmluZyBjYW5vbmljYWxUaXRs
ZSA9IHRpdGxlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGNhbm9uaWNhbFRpdGxlID0gY2Fub25p
Y2FsVGl0bGUuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7CisgICAgICAgIAorICAgIHJldHVybiBjYW5v
bmljYWxUaXRsZTsKK30KKyAgICAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRpdGxlKCkKIHsKKyAg
ICBtX2Nhbm9uaWNhbGl6ZWRUaXRsZSA9IGNhbm9uaWNhbGl6ZWRUaXRsZShtX3RpdGxlKTsKICAg
ICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQotICAgICAgICBmLT5sb2FkZXIoKS0+c2V0VGl0bGUo
bV90aXRsZSk7CisgICAgICAgIGYtPmxvYWRlcigpLT5zZXRUaXRsZShtX2Nhbm9uaWNhbGl6ZWRU
aXRsZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUs
IEVsZW1lbnQqIHRpdGxlRWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNTExMTgpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAg
cHVibGljOgogICAgIC8vIFJldHVybnMgMCBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1l
bnQuCiAgICAgRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5vbmljYWxpemVkVGl0bGU7IH0KICAgICB2b2lkIHNldFRpdGxlKGNvbnN0
IFN0cmluZyYsIEVsZW1lbnQqIHRpdGxlRWxlbWVudCA9IDApOwogICAgIHZvaWQgcmVtb3ZlVGl0
bGUoRWxlbWVudCogdGl0bGVFbGVtZW50KTsKIApAQCAtMTA0OSw2ICsxMDQ5LDcgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNjcm9sbGluZzsKIAogICAg
IFN0cmluZyBtX3RpdGxlOworICAgIFN0cmluZyBtX2Nhbm9uaWNhbGl6ZWRUaXRsZTsKICAgICBi
b29sIG1fdGl0bGVTZXRFeHBsaWNpdGx5OwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3RpdGxlRWxl
bWVudDsKICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDUx
MTE4KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2NiArNTQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gKiBQZXJm
b3JtcyBmb3VyIG9wZXJhdGlvbnM6Ci0gKiAgMS4gQ29udmVydCBiYWNrc2xhc2hlcyB0byBjdXJy
ZW5jeSBzeW1ib2xzCi0gKiAgMi4gQ29udmVydCBjb250cm9sIGNoYXJhY3RlcnMgdG8gc3BhY2Vz
Ci0gKiAgMy4gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMKLSAqICA0LiBDb2xsYXBz
ZSBpbnRlcm5hbCB3aGl0ZXNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYW5vbmlj
YWxpemVkVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFT
U0VSVCghdGl0bGUuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
dGl0bGUuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRpdGxlLmxlbmd0aCgp
OwotICAgIHVuc2lnbmVkIGk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCk7Ci0g
ICAgdW5zaWduZWQgYnVpbGRlckluZGV4ID0gMDsKLQotICAgIC8vIFNraXAgbGVhZGluZyBzcGFj
ZXMgYW5kIGxlYWRpbmcgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGNvbnZlcnQgdG8gc3BhY2VzCi0g
ICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFy
YWN0ZXJzW2ldOwotICAgICAgICBpZiAoIShjIDw9IDB4MjAgfHwgYyA9PSAweDdGKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChpID09IGxlbmd0aCkKLSAgICAgICAgcmV0
dXJuICIiOwotCi0gICAgLy8gUmVwbGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMs
IGFuZCBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0
ZXNwYWNlLgotICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKLSAgICBmb3IgKDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAg
ICAgICBpZiAoYyA8PSAweDIwIHx8IGMgPT0gMHg3RiB8fCAoV1RGOjpVbmljb2RlOjpjYXRlZ29y
eShjKSAmIChXVEY6OlVuaWNvZGU6OlNlcGFyYXRvcl9MaW5lIHwgV1RGOjpVbmljb2RlOjpTZXBh
cmF0b3JfUGFyYWdyYXBoKSkpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c0NoYXJXYXNXUykK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5k
ZXgrK10gPSAnICc7Ci0gICAgICAgICAgICBwcmV2aW91c0NoYXJXYXNXUyA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXJbYnVpbGRlckluZGV4KytdID0gYzsKLSAg
ICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBTdHJpcCB0cmFpbGluZyBzcGFjZXMKLSAgICB3aGlsZSAoYnVpbGRlckluZGV4ID4g
MCkgewotICAgICAgICAtLWJ1aWxkZXJJbmRleDsKLSAgICAgICAgaWYgKGJ1ZmZlcltidWlsZGVy
SW5kZXhdICE9ICcgJykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghYnVp
bGRlckluZGV4ICYmIGJ1ZmZlcltidWlsZGVySW5kZXhdID09ICcgJykKLSAgICAgICAgcmV0dXJu
ICIiOwotCi0gICAgYnVmZmVyLnNocmluayhidWlsZGVySW5kZXggKyAxKTsKLSAgICAKLSAgICAv
LyBSZXBsYWNlIHRoZSBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMgaWYgdGhlIGVu
Y29kaW5nIHJlcXVpcmVzIGl0LgotICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaXNwbGF5QnVmZmVy
TW9kaWZpZWRCeUVuY29kaW5nKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7
Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQogCiBzdGF0aWMgdm9pZCBj
YW5jZWxBbGwoY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMpCiB7CkBAIC02NjIsMTAg
KzYwMiwxMCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRUaXRsZShjb25zdCBTdHJpCiAgICAg
aWYgKHRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRyaW1t
ZWQgPSBjYW5vbmljYWxpemVkVGl0bGUodGl0bGUsIG1fZnJhbWUpOwotICAgIGlmICghdHJpbW1l
ZC5pc0VtcHR5KCkgJiYgbV9wYWdlVGl0bGUgIT0gdHJpbW1lZCkgeworICAgIGlmICghdGl0bGUu
aXNFbXB0eSgpICYmIG1fcGFnZVRpdGxlICE9IHRpdGxlKSB7CiAgICAgICAgIGZyYW1lTG9hZGVy
KCktPndpbGxDaGFuZ2VUaXRsZSh0aGlzKTsKLSAgICAgICAgbV9wYWdlVGl0bGUgPSB0cmltbWVk
OworICAgICAgICAvLyBSZXBsYWNlIHRoZSBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJv
bHMgaWYgdGhlIGVuY29kaW5nIHJlcXVpcmVzIGl0LgorICAgICAgICBtX3BhZ2VUaXRsZSA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcodGl0bGUp
OwogICAgICAgICBmcmFtZUxvYWRlcigpLT5kaWRDaGFuZ2VUaXRsZSh0aGlzKTsKICAgICB9CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDUxMTE4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDkgKzMwMSwxNiBAQCBpbmxpbmUgdW5zaWduZWQgU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goCiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYWNlT3JOZXdsaW5lKFVDaGFyIGMpCiB7Ci0gICAgLy8g
VXNlIGlzQVNDSUlTcGFjZSgpIGZvciBiYXNpYyBMYXRpbi0xLgotICAgIC8vIFRoaXMgd2lsbCBp
bmNsdWRlIG5ld2xpbmVzLCB3aGljaCBhcmVuJ3QgaW5jbHVkZWQgaW4gVW5pY29kZSBEaXJXUy4K
LSAgICByZXR1cm4gYyA8PSAweDdGID8gV1RGOjppc0FTQ0lJU3BhY2UoYykgOiBXVEY6OlVuaWNv
ZGU6OmRpcmVjdGlvbihjKSA9PSBXVEY6OlVuaWNvZGU6OldoaXRlU3BhY2VOZXV0cmFsOworICAg
IC8vIFVzZSBpc0FTQ0lJU3BhY2UoKSBmb3IgQVNDSUkKKyAgICBpZiAoYyA8PSAweDdGKQorICAg
ICAgICByZXR1cm4gV1RGOjppc0FTQ0lJU3BhY2UoYyk7CisgICAgCisgICAgLy8gVW5pY29kZSBj
aGFyYWN0ZXJzIGluIHRoZSBzcGFjZSwgbGluZSBvciBwYXJhZ3JhcGggc2VwYXJhdG9yCisgICAg
Ly8gY2F0ZWdvcnkgYXJlIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UKKyAgICByZXR1cm4gKChXVEY6
OlVuaWNvZGU6OmNhdGVnb3J5KGMpICYgCisgICAgICAgICAgICAgKFdURjo6VW5pY29kZTo6U2Vw
YXJhdG9yX1NwYWNlIHwgCisgICAgICAgICAgICAgIFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xp
bmUgfCAKKyAgICAgICAgICAgICAgV1RGOjpVbmljb2RlOjpTZXBhcmF0b3JfUGFyYWdyYXBoKSkp
OwogfQogCiAvLyBUaGlzIGlzIGEgaG90IGZ1bmN0aW9uIGJlY2F1c2UgaXQncyB1c2VkIHdoZW4g
cGFyc2luZyBIVE1MLgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTExMjEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0xMS0xOCAgQ2hy
aXN0aWFuIFNlamVyc2VuICA8Y2hyaXN0aWFuLndlYmtpdEBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZG9jdW1lbnQudGl0bGUgZG9l
cyBub3QgcmVwbGFjZSBvciByZW1vdmUgc3BhY2UgY2hhcmFjdGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwMzIKKworCUFkZCBzY3JpcHQgdGVz
dHMgZm9yIHJldHJpZXZpbmcgZG9jdW1lbnQudGl0bGUKKwlFbmhhbmNlIHRlc3Qgb2Ygb3B0aW9u
IGVsZW1lbnQgd2l0aCB0ZXN0IGZvciByZW1vdmluZyBVbmljb2RlIHNlcGFyYXRvcgorCQorICAg
ICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1bWVudC9zY3JpcHQtdGVzdHMvZG9j
dW1lbnQtdGl0bGUtZ2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9IVE1MT3B0aW9u
RWxlbWVudC9vcHRpb24tdGV4dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vSFRN
TE9wdGlvbkVsZW1lbnQvb3B0aW9uLXRleHQuaHRtbDoKKwogMjAwOS0xMS0xNyAgSnVsaWUgUGFy
ZW50ICA8anBhcmVudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5
IFRpdG92LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0
bGUtZ2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9E
b2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUg
aW1wbGVtZW50YXRpb24gb2YgZ2V0dGluZyB0aGUgZG9jdW1lbnQudGl0bGUgYXR0cmlidXRlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdCB3aXRoIG5vIHRpdGxlIHNldAor
UEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRoIGVtcHR5IHRpdGxlCitQQVNTIGRv
Y3VtZW50LnRpdGxlIGlzICIiCitUZXN0IHdpdGggb25seSB3aGl0ZXNwYWNlCitQQVNTIGRvY3Vt
ZW50LnRpdGxlIGlzICIiCitUZXN0IHdpdGggbm8gd2hpdGVzcGFjZQorUEFTUyBkb2N1bWVudC50
aXRsZSBpcyAibm93aGl0ZXNwYWNldGl0bGUiCitUZXN0IHdpdGggVW5pY29kZSB3aGl0ZXNwYWNl
IGluIHRoZSBzcGFjZSBzZXBhcmF0b3IgY2F0ZWdvcnkKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMg
Im9uZSBzcGFjZSIKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIm9uZSBzcGFjZSIKK1Rlc3Qgd2l0
aCBVbmljb2RlIHdoaXRlc3BhY2UgaW4gdGhlIGxpbmUgc2VwYXJhdG9yIGNhdGVnb3J5CitQQVNT
IGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGggVW5pY29kZSB3aGl0ZXNw
YWNlIGluIHRoZSBsaW5lIHNlcGFyYXRvciBjYXRlZ29yeQorUEFTUyBkb2N1bWVudC50aXRsZSBp
cyAib25lIHNwYWNlIgorVGVzdCB3aXRoIG5vLWJyZWFrIHNwYWNlCitQQVNTIGRvY3VtZW50LnRp
dGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGggd2hpdGVzcGFjZQorUEFTUyBkb2N1bWVudC50
aXRsZSBpcyAib25lIHNwYWNlIgorVGVzdCB3aXRoIHZhcmlvdXMgd2hpdGVzcGFjZSBsZW5ndGhz
IGFuZCBmaWVsZHMKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgImxvdHMgb2Ygd2hpdGVzcGFjZSBh
bmQgbmV3bGluZXMiCitUZXN0IHdpdGggdmFyaW91cyBsZW5ndGggc3RyaW5ncworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZG9jdW1lbnQt
dGl0bGUtZ2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRl
c3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW5nIHRoZSBkb2N1bWVudC50aXRsZSBhdHRyaWJ1dGUu
Iik7CisKK2RlYnVnKCdUZXN0IHdpdGggbm8gdGl0bGUgc2V0Jyk7CitzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImRvY3VtZW50LnRpdGxlIiwgIiIpOworCitkZWJ1ZygnVGVzdCB3aXRoIGVtcHR5IHRp
dGxlJyk7Citkb2N1bWVudC50aXRsZSA9ICIiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1
bWVudC50aXRsZSIsIiIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG9ubHkgd2hpdGVzcGFjZScpOwor
ZG9jdW1lbnQudGl0bGUgPSAiXHRcblxyICAgIFxyICAgICBcdFxuXG4iOworc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIiIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG5vIHdo
aXRlc3BhY2UnKTsKK2RvY3VtZW50LnRpdGxlID0gIm5vd2hpdGVzcGFjZXRpdGxlIjsKK3Nob3Vs
ZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCJub3doaXRlc3BhY2V0aXRsZSIpOwor
CitkZWJ1ZygnVGVzdCB3aXRoIFVuaWNvZGUgd2hpdGVzcGFjZSBpbiB0aGUgc3BhY2Ugc2VwYXJh
dG9yIGNhdGVnb3J5Jyk7Citkb2N1bWVudC50aXRsZSA9ICJcdTAwMjBcdTAwMjBvbmVcdTAwMjBc
dTAwMjBcdTAwMjBzcGFjZVx1MDAyMFx1MDAyMCI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRv
Y3VtZW50LnRpdGxlIiwib25lIHNwYWNlIik7CisKK2RvY3VtZW50LnRpdGxlID0gIlx1MTY4MFx1
MTgwZW9uZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNXNwYWNlXHUyMDA2XHUy
MDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDJmXHUyMDVmXHUzMDAwIjsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCJvbmUgc3BhY2UiKTsKKworZGVidWcoJ1Rlc3Qgd2l0
aCBVbmljb2RlIHdoaXRlc3BhY2UgaW4gdGhlIGxpbmUgc2VwYXJhdG9yIGNhdGVnb3J5Jyk7Citk
b2N1bWVudC50aXRsZSA9ICJcdTIwMjhvbmVcdTIwMjhcdTIwMjhzcGFjZVx1MjAyOFx1MjAyOCI7
CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwib25lIHNwYWNlIik7CisK
K2RlYnVnKCdUZXN0IHdpdGggVW5pY29kZSB3aGl0ZXNwYWNlIGluIHRoZSBsaW5lIHNlcGFyYXRv
ciBjYXRlZ29yeScpOworZG9jdW1lbnQudGl0bGUgPSAiXHUyMDI5b25lXHUyMDI5XHUyMDI5c3Bh
Y2VcdTIwMjlcdTIwMjkiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIs
Im9uZSBzcGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG5vLWJyZWFrIHNwYWNlJyk7Citkb2N1
bWVudC50aXRsZSA9ICJcdTAwYTBcdTAwYTBvbmVcdTAwYTBcdTAwYTBzcGFjZVx1MDBhMFx1MDBh
MCI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwib25lIHNwYWNlIik7
CisKK2RlYnVnKCdUZXN0IHdpdGggd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHUw
MDA5XHUwMGEwb25lXHUwMDBiXHUwMDBjc3BhY2VcdTAwMGQiOworc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJkb2N1bWVudC50aXRsZSIsIm9uZSBzcGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZh
cmlvdXMgd2hpdGVzcGFjZSBsZW5ndGhzIGFuZCBmaWVsZHMnKTsKK2RvY3VtZW50LnRpdGxlID0g
IiAgIGxvdHMgb2YgXHIgd2hpdGVzcGFjZSBhbmQgXG5cblxuICAgIFx0ICAgIG5ld2xpbmVzIFx0
IjsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAibG90cyBvZiB3aGl0
ZXNwYWNlIGFuZCBuZXdsaW5lcyIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgbGVuZ3Ro
IHN0cmluZ3MnKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVs
ZW1lbnQvb3B0aW9uLXRleHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNTExMTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9v
cHRpb24tdGV4dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNCArNiw1IEBAIFBB
U1M6IGdvdCAiZm9vIiBhcyBleHBlY3RlZC4KIFBBU1M6IGdvdCAiwqUiIGFzIGV4cGVjdGVkLgog
UEFTUzogZ290ICJmb28gYmFyIiBhcyBleHBlY3RlZC4KIFBBU1M6IGdvdCAibGFiZWwiIGFzIGV4
cGVjdGVkLgorUEFTUzogZ290ICJvbmUgc3BhY2UiIGFzIGV4cGVjdGVkLgogCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10
ZXh0Lmh0bWwJKHJldmlzaW9uIDUxMTE4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9w
dGlvbkVsZW1lbnQvb3B0aW9uLXRleHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAs
NyBAQAogICAgICAgICA8b3B0aW9uIGlkPSJvMyI+XDwvb3B0aW9uPgogICAgICAgICA8b3B0aW9u
IGlkPSJvNCI+Zm9vICAgYmFyPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gaWQ9Im81IiBsYWJl
bD0iIGxhYmVsICI+aWdub3JlZDwvb3B0aW9uPgorCTxvcHRpb24gaWQ9Im82Ij4mI3gyMDAwOyYj
eDIwMDE7JiN4MjAwMTsmI3gyMDAyOyYjeDIwMDI7b25lJiN4MjAwMzsmI3gyMDA0OyYjeDIwMDU7
JiN4MjAwNjsmI3gyMDA3O3NwYWNlJiN4MjAwODs8L29wdGlvbj4KICAgICA8L3NlbGVjdD4KICAg
ICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KICAgICA8c2NyaXB0PgpAQCAtNDIsNiArNDMsNyBA
QAogICAgICAgICB0ZXN0KCJvMyIsICJcdTAwYTUiKTsKICAgICAgICAgdGVzdCgibzQiLCAiZm9v
IGJhciIpOwogICAgICAgICB0ZXN0KCJvNSIsICJsYWJlbCIpOworCXRlc3QoIm82IiwgIm9uZSBz
cGFjZSIpOwogICAgIDwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>
<flag name="review"
          id="25220"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44480</attachid>
            <date>2009-12-08 13:10:09 -0800</date>
            <delta_ts>2009-12-26 16:37:15 -0800</delta_ts>
            <desc>Third attempt</desc>
            <filename>collapse-whitespace-round3.patch</filename>
            <type>text/plain</type>
            <size>11734</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTg2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDktMTItMDggIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjYW5vbmljYWxpemVkVGl0bGUpOiBOZXcgZnVuY3Rpb24gdG8gY2Fub25pY2FsaXpl
IHRpdGxlCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOiBTZXRzIGEg
Y2Fub25pY2FsaXplZCB0aXRsZWQgbm93CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGl0bGUpOiBSZXR1cm5zIHRoZSBjYW5vbmljYWxpemVk
IHRpdGxlLiBOb3RlLCB0aGF0IHRpdGxlKCkKKyAgICAgICAgbm93IHJldHVybnMgbV9jYW5vbmlj
YWxpemVkVGl0bGUgaW5zdGVhZCBvZiBtX3RpdGxlCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzZXRUaXRsZSk6
IElzIG5vdyBjYWxsZWQgd2l0aCBhIGNhbm9uaWNhbGl6ZWQgdGl0bGUKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BhY2VPck5ld2xp
bmUpOiBVcGRhdGUgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgSFRNTCA1IHNwZWMgYW5kIHJlbW92
ZWQKKyAgICAgICAgbm9vcCBmdW5jdGlvbmFsaXR5CisKIDIwMDktMTItMDggIERtaXRyeSBUaXRv
diAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA1MTc2OCkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NiwxMCArMTA2NiwxOSBAQCBFbGVtZW50KiBE
b2N1bWVudDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5CiAgICAgcmV0dXJuIG1fZWxlbWVudHNCeUFj
Y2Vzc0tleS5nZXQoa2V5LmltcGwoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9u
aWNhbGl6ZWRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGlmICh0aXRsZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0aXRsZTsKKyAgICAgICAgCisgICAgcmV0dXJuIHRpdGxl
LnN0cmlwV2hpdGVTcGFjZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworfQorICAgIAogdm9pZCBE
b2N1bWVudDo6dXBkYXRlVGl0bGUoKQogeworICAgIG1fY2Fub25pY2FsaXplZFRpdGxlID0gY2Fu
b25pY2FsaXplZFRpdGxlKG1fdGl0bGUpOwogICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCi0g
ICAgICAgIGYtPmxvYWRlcigpLT5zZXRUaXRsZShtX3RpdGxlKTsKKyAgICAgICAgZi0+bG9hZGVy
KCktPnNldFRpdGxlKG1fY2Fub25pY2FsaXplZFRpdGxlKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6
c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgRWxlbWVudCogdGl0bGVFbGVtZW50KQpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiA1MTc2OCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY3Myw3ICs2NzMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyAwIGlm
IHRoaXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBFbGVtZW50KiBvd25lckVsZW1l
bnQoKSBjb25zdDsKIAotICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7
IH0KKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX2Nhbm9uaWNhbGl6ZWRUaXRs
ZTsgfQogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiwgRWxlbWVudCogdGl0bGVFbGVt
ZW50ID0gMCk7CiAgICAgdm9pZCByZW1vdmVUaXRsZShFbGVtZW50KiB0aXRsZUVsZW1lbnQpOwog
CkBAIC0xMDU4LDYgKzEwNTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mcmFtZUVsZW1lbnRz
U2hvdWxkSWdub3JlU2Nyb2xsaW5nOwogCiAgICAgU3RyaW5nIG1fdGl0bGU7CisgICAgU3RyaW5n
IG1fY2Fub25pY2FsaXplZFRpdGxlOwogICAgIGJvb2wgbV90aXRsZVNldEV4cGxpY2l0bHk7CiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0bGVFbGVtZW50OwogCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwCShyZXZpc2lvbiA1MTc2OCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNjYgKzU0LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0vKgotICogUGVyZm9ybXMgZm91ciBvcGVyYXRpb25zOgotICogIDEuIENv
bnZlcnQgYmFja3NsYXNoZXMgdG8gY3VycmVuY3kgc3ltYm9scwotICogIDIuIENvbnZlcnQgY29u
dHJvbCBjaGFyYWN0ZXJzIHRvIHNwYWNlcwotICogIDMuIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxp
bmcgc3BhY2VzCi0gKiAgNC4gQ29sbGFwc2UgaW50ZXJuYWwgd2hpdGVzcGFjZS4KLSAqLwotc3Rh
dGljIGlubGluZSBTdHJpbmcgY2Fub25pY2FsaXplZFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUs
IEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoIXRpdGxlLmlzRW1wdHkoKSk7Ci0KLSAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnMoKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBpOwotCi0gICAgU3RyaW5n
QnVmZmVyIGJ1ZmZlcihsZW5ndGgpOwotICAgIHVuc2lnbmVkIGJ1aWxkZXJJbmRleCA9IDA7Ci0K
LSAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2VzIGFuZCBsZWFkaW5nIGNoYXJhY3RlcnMgdGhhdCB3
b3VsZCBjb252ZXJ0IHRvIHNwYWNlcwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYgKCEoYyA8PSAw
eDIwIHx8IGMgPT0gMHg3RikpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAo
aSA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIC8vIFJlcGxhY2UgY29udHJv
bCBjaGFyYWN0ZXJzIHdpdGggc3BhY2VzLCBhbmQgYmFja3NsYXNoZXMgd2l0aCBjdXJyZW5jeSBz
eW1ib2xzLCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZS4KLSAgICBib29sIHByZXZpb3VzQ2hhcldh
c1dTID0gZmFsc2U7Ci0gICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hh
ciBjID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYgKGMgPD0gMHgyMCB8fCBjID09IDB4N0Yg
fHwgKFdURjo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoV1RGOjpVbmljb2RlOjpTZXBhcmF0b3Jf
TGluZSB8IFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX1BhcmFncmFwaCkpKSB7Ci0gICAgICAgICAg
ICBpZiAocHJldmlvdXNDaGFyV2FzV1MpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBidWZmZXJbYnVpbGRlckluZGV4KytdID0gJyAnOwotICAgICAgICAgICAgcHJldmlv
dXNDaGFyV2FzV1MgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnVmZmVy
W2J1aWxkZXJJbmRleCsrXSA9IGM7Ci0gICAgICAgICAgICBwcmV2aW91c0NoYXJXYXNXUyA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RyaXAgdHJhaWxpbmcgc3BhY2VzCi0g
ICAgd2hpbGUgKGJ1aWxkZXJJbmRleCA+IDApIHsKLSAgICAgICAgLS1idWlsZGVySW5kZXg7Ci0g
ICAgICAgIGlmIChidWZmZXJbYnVpbGRlckluZGV4XSAhPSAnICcpCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1aWxkZXJJbmRleCAmJiBidWZmZXJbYnVpbGRlckluZGV4
XSA9PSAnICcpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGJ1ZmZlci5zaHJpbmsoYnVpbGRl
ckluZGV4ICsgMSk7Ci0gICAgCi0gICAgLy8gUmVwbGFjZSB0aGUgYmFja3NsYXNoZXMgd2l0aCBj
dXJyZW5jeSBzeW1ib2xzIGlmIHRoZSBlbmNvZGluZyByZXF1aXJlcyBpdC4KLSAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+ZGlzcGxheUJ1ZmZlck1vZGlmaWVkQnlFbmNvZGluZyhidWZmZXIuY2hhcmFj
dGVycygpLCBidWZmZXIubGVuZ3RoKCkpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVm
ZmVyKTsKLX0KIAogc3RhdGljIHZvaWQgY2FuY2VsQWxsKGNvbnN0IFJlc291cmNlTG9hZGVyU2V0
JiBsb2FkZXJzKQogewpAQCAtNjYyLDEwICs2MDIsMTAgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6
c2V0VGl0bGUoY29uc3QgU3RyaQogICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZyB0cmltbWVkID0gY2Fub25pY2FsaXplZFRpdGxlKHRpdGxlLCBt
X2ZyYW1lKTsKLSAgICBpZiAoIXRyaW1tZWQuaXNFbXB0eSgpICYmIG1fcGFnZVRpdGxlICE9IHRy
aW1tZWQpIHsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3BhZ2VUaXRsZSAhPSB0aXRs
ZSkgewogICAgICAgICBmcmFtZUxvYWRlcigpLT53aWxsQ2hhbmdlVGl0bGUodGhpcyk7Ci0gICAg
ICAgIG1fcGFnZVRpdGxlID0gdHJpbW1lZDsKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgYmFja3Ns
YXNoZXMgd2l0aCBjdXJyZW5jeSBzeW1ib2xzIGlmIHRoZSBlbmNvZGluZyByZXF1aXJlcyBpdC4K
KyAgICAgICAgbV9wYWdlVGl0bGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5n
TW9kaWZpZWRCeUVuY29kaW5nKHRpdGxlKTsKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+ZGlkQ2hh
bmdlVGl0bGUodGhpcyk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5oCShyZXZpc2lvbiA1MTc2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw5ICszMDEsMTAgQEAgaW5saW5lIHVuc2lnbmVkIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKAogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZU9yTmV3
bGluZShVQ2hhciBjKQogewotICAgIC8vIFVzZSBpc0FTQ0lJU3BhY2UoKSBmb3IgYmFzaWMgTGF0
aW4tMS4KLSAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSBuZXdsaW5lcywgd2hpY2ggYXJlbid0IGlu
Y2x1ZGVkIGluIFVuaWNvZGUgRGlyV1MuCi0gICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6aXNB
U0NJSVNwYWNlKGMpIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYykgPT0gV1RGOjpVbmljb2Rl
OjpXaGl0ZVNwYWNlTmV1dHJhbDsKKyAgICAvLyBBY2NvcmRpbmcgdG8gSFRNTCA1IHNwYWNlIGNo
YXJhY3RlcnMsIGFyZSBkZWZpbmVkIGFzIFUrMDAyMCBTUEFDRSwgCisgICAgLy8gVSswMDA5IENI
QVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpLCBVKzAwMEEgTElORSBGRUVEIChMRiksIAorICAgIC8v
IFUrMDAwQyBGT1JNIEZFRUQgKEZGKSBhbmQgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpLgor
ICAgIHJldHVybiBjIDw9IDB4N0YgPyBpc0FTQ0lJU3BhY2UoYykgOiBmYWxzZTsKIH0KIAogLy8g
VGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgdXNlZCB3aGVuIHBhcnNpbmcgSFRN
TC4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxODY5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMTItMDggIENocmlzdGlhbiBTZWpl
cnNlbiAgPGNocmlzdGlhbi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxh
Y2Ugb3IgcmVtb3ZlIHNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDMyCisKKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1bWVu
dC9kb2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0aW9uLXRleHQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10
ZXh0Lmh0bWw6CisKIDIwMDktMTItMDggIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50
L2RvY3VtZW50LXRpdGxlLWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjQgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbmcgdGhl
IGRvY3VtZW50LnRpdGxlIGF0dHJpYnV0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1Rlc3Qgd2l0aCBubyB0aXRsZSBzZXQKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIiIKK1Rl
c3Qgd2l0aCBlbXB0eSB0aXRsZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRo
IG9ubHkgd2hpdGVzcGFjZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRoIG5v
IHdoaXRlc3BhY2UKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIm5vd2hpdGVzcGFjZXRpdGxlIgor
VGVzdCB3aXRoIFVuaWNvZGUgd2hpdGVzcGFjZSBpbiB0aGUgc3BhY2Ugc2VwYXJhdG9yIGNhdGVn
b3J5CitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGggd2hpdGVz
cGFjZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAib25lIHNwYWNlIgorVGVzdCB3aXRoIHZhcmlv
dXMgd2hpdGVzcGFjZSBsZW5ndGhzIGFuZCBmaWVsZHMKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMg
ImxvdHMgb2Ygd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMiCitUZXN0IHdpdGggdmFyaW91cyBsZW5n
dGggc3RyaW5ncworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxl
LWdldC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2Rv
Y3VtZW50LXRpdGxlLWdldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0
cy9kb2N1bWVudC10aXRsZS1nZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0cy9kb2N1bWVu
dC10aXRsZS1nZXQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKK2Rlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW5nIHRoZSBkb2N1
bWVudC50aXRsZSBhdHRyaWJ1dGUuIik7CisKK2RlYnVnKCdUZXN0IHdpdGggbm8gdGl0bGUgc2V0
Jyk7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwgIiIpOworCitkZWJ1
ZygnVGVzdCB3aXRoIGVtcHR5IHRpdGxlJyk7Citkb2N1bWVudC50aXRsZSA9ICIiOworc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIiIpOworCitkZWJ1ZygnVGVzdCB3aXRo
IG9ubHkgd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHRcblxyICAgIFxyICAgICBc
dFxuXG4iOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIiIpOworCitk
ZWJ1ZygnVGVzdCB3aXRoIG5vIHdoaXRlc3BhY2UnKTsKK2RvY3VtZW50LnRpdGxlID0gIm5vd2hp
dGVzcGFjZXRpdGxlIjsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCJu
b3doaXRlc3BhY2V0aXRsZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIFVuaWNvZGUgd2hpdGVzcGFj
ZSBpbiB0aGUgc3BhY2Ugc2VwYXJhdG9yIGNhdGVnb3J5Jyk7Citkb2N1bWVudC50aXRsZSA9ICJc
dTAwMjBcdTAwMjBvbmVcdTAwMjBcdTAwMjBcdTAwMjBzcGFjZVx1MDAyMFx1MDAyMCI7CitzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwib25lIHNwYWNlIik7CisKK2RlYnVn
KCdUZXN0IHdpdGggd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHUwMDA5XHUwMDBh
b25lXHUwMDBiXHUwMDBjc3BhY2VcdTAwMGQiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1
bWVudC50aXRsZSIsIm9uZSBzcGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgd2hp
dGVzcGFjZSBsZW5ndGhzIGFuZCBmaWVsZHMnKTsKK2RvY3VtZW50LnRpdGxlID0gIiAgIGxvdHMg
b2YgXHIgd2hpdGVzcGFjZSBhbmQgXG5cblxuICAgIFx0ICAgIG5ld2xpbmVzIFx0IjsKK3Nob3Vs
ZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAibG90cyBvZiB3aGl0ZXNwYWNlIGFu
ZCBuZXdsaW5lcyIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgbGVuZ3RoIHN0cmluZ3Mn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0
aW9uLXRleHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTE3
NjgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4
dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNCArNiw1IEBAIFBBU1M6IGdvdCAi
Zm9vIiBhcyBleHBlY3RlZC4KIFBBU1M6IGdvdCAiwqUiIGFzIGV4cGVjdGVkLgogUEFTUzogZ290
ICJmb28gYmFyIiBhcyBleHBlY3RlZC4KIFBBU1M6IGdvdCAibGFiZWwiIGFzIGV4cGVjdGVkLgor
UEFTUzogZ290ICJvbmUgc3BhY2UiIGFzIGV4cGVjdGVkLgogCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0Lmh0bWwJ
KHJldmlzaW9uIDUxNzY4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1l
bnQvb3B0aW9uLXRleHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogICAg
ICAgICA8b3B0aW9uIGlkPSJvMyI+XDwvb3B0aW9uPgogICAgICAgICA8b3B0aW9uIGlkPSJvNCI+
Zm9vICAgYmFyPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gaWQ9Im81IiBsYWJlbD0iIGxhYmVs
ICI+aWdub3JlZDwvb3B0aW9uPgorCTxvcHRpb24gaWQ9Im82Ij4mI3gwMDIwO29uZSYjeDAwMDk7
JiN4MDAwYTsmI3gwMDBjOyYjeDAwMGQ7c3BhY2UmI3gwMDIwOzwvb3B0aW9uPgogICAgIDwvc2Vs
ZWN0PgogICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogICAgIDxzY3JpcHQ+CkBAIC00Miw2
ICs0Myw3IEBACiAgICAgICAgIHRlc3QoIm8zIiwgIlx1MDBhNSIpOwogICAgICAgICB0ZXN0KCJv
NCIsICJmb28gYmFyIik7CiAgICAgICAgIHRlc3QoIm81IiwgImxhYmVsIik7CisJdGVzdCgibzYi
LCAib25lIHNwYWNlIik7CiAgICAgPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>
<flag name="review"
          id="26351"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45516</attachid>
            <date>2009-12-26 16:37:15 -0800</date>
            <delta_ts>2009-12-28 14:38:11 -0800</delta_ts>
            <desc>Fourth attempt</desc>
            <filename>canonical_title.patch</filename>
            <type>text/plain</type>
            <size>13323</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjU2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMTItMjYgIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KTogCisgICAgICAgIEluaXRpYWxpemF0aW9uIG9m
IG1fcmF3VGl0bGUKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6IAorICAg
ICAgICBNb3ZlZCBmcm9tIERvY3VtZW50TG9hZGVyLmNwcCB3aXRoIG1pbm9yIGVkaXRzCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOiAKKyAgICAgICAgRW5zdXJlcyB0
aGUgdGl0bGUgaXMgY2Fub25pY2FsaXplZAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
dFRpdGxlKTogCisgICAgICAgIFVzZXMgbV9yYXdUaXRsZSBpbnN0YWVkIG9mIG1fdGl0bGUgCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlVGl0bGUpOiAKKyAgICAgICAgVXNlcyBt
X3Jhd1RpdGxlIGluc3RlYWQgb2YgbV90aXRsZQorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDogCisgICAgICAgIEFkZGVkIG1fcmF3VGl0bGUgdGhhdCBzdG9yZXMgdGhlIHBhc3Nl
ZCBpbiB0aXRsZSwgbV90aXRsZSBub3cgc3RvcmVzIHRoZSAKKyAgICAgICAgY2Fub25pY2FsaXpl
ZCB0aXRsZQorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKTogCisgICAgICAgIFRo
ZSB0aXRsZSBwYXNzZWQgaW4gaXMgbm93IGNhbm9uaWNhbGl6ZWQgaW4gRG9jdW1lbnQuY3BwCisK
IDIwMDktMTItMjUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNTI1NjUp
CisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsx
MTQsNyBAQAogI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC0zMjMsNiArMzI0LDcgQEAgRG9jdW1l
bnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgICwgbV9zdHlsZVJlY2FsY1Rp
bWVyKHRoaXMsICZEb2N1bWVudDo6c3R5bGVSZWNhbGNUaW1lckZpcmVkKQogICAgICwgbV9mcmFt
ZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nKGZhbHNlKQogICAgICwgbV90aXRsZSgiIikK
KyAgICAsIG1fcmF3VGl0bGUoIiIpCiAgICAgLCBtX3RpdGxlU2V0RXhwbGljaXRseShmYWxzZSkK
ICAgICAsIG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXIodGhpcywgJkRvY3VtZW50Ojp1cGRh
dGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKQogICAgICwgbV9leGVjdXRlU2NyaXB0U29vblRp
bWVyKHRoaXMsICZEb2N1bWVudDo6ZXhlY3V0ZVNjcmlwdFNvb25UaW1lckZpcmVkKQpAQCAtMTA2
Myw4ICsxMDY1LDY1IEBAIEVsZW1lbnQqIERvY3VtZW50OjpnZXRFbGVtZW50QnlBY2Nlc3NLZXkK
ICAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAor
LyoKKyAqIFBlcmZvcm1zIHRocmVlIG9wZXJhdGlvbnM6CisgKiAgMS4gQ29udmVydCBjb250cm9s
IGNoYXJhY3RlcnMgdG8gc3BhY2VzCisgKiAgMi4gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBz
cGFjZXMKKyAqICAzLiBDb2xsYXBzZSBpbnRlcm5hbCB3aGl0ZXNwYWNlLgorICovCitzdGF0aWMg
aW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sK
KyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnMoKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpOworCisgICAg
U3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgpOworICAgIHVuc2lnbmVkIGJ1aWxkZXJJbmRleCA9
IDA7CisKKyAgICAvLyBTa2lwIGxlYWRpbmcgc3BhY2VzIGFuZCBsZWFkaW5nIGNoYXJhY3RlcnMg
dGhhdCB3b3VsZCBjb252ZXJ0IHRvIHNwYWNlcworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgaWYgKCEo
YyA8PSAweDIwIHx8IGMgPT0gMHg3RikpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoaSA9PSBsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIC8vIFJlcGxhY2Ug
Y29udHJvbCBjaGFyYWN0ZXJzIHdpdGggc3BhY2VzLCBhbmQgYmFja3NsYXNoZXMgd2l0aCBjdXJy
ZW5jeSBzeW1ib2xzLCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZS4KKyAgICBib29sIHByZXZpb3Vz
Q2hhcldhc1dTID0gZmFsc2U7CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBVQ2hhciBjID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgaWYgKGMgPD0gMHgyMCB8fCBjID09
IDB4N0YgfHwgKFdURjo6VW5pY29kZTo6Y2F0ZWdvcnkoYykgJiAoV1RGOjpVbmljb2RlOjpTZXBh
cmF0b3JfTGluZSB8IFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX1BhcmFncmFwaCkpKSB7CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNDaGFyV2FzV1MpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBidWZmZXJbYnVpbGRlckluZGV4KytdID0gJyAnOworICAgICAgICAgICAg
cHJldmlvdXNDaGFyV2FzV1MgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YnVmZmVyW2J1aWxkZXJJbmRleCsrXSA9IGM7CisgICAgICAgICAgICBwcmV2aW91c0NoYXJXYXNX
UyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU3RyaXAgdHJhaWxpbmcgc3Bh
Y2VzCisgICAgd2hpbGUgKGJ1aWxkZXJJbmRleCA+IDApIHsKKyAgICAgICAgLS1idWlsZGVySW5k
ZXg7CisgICAgICAgIGlmIChidWZmZXJbYnVpbGRlckluZGV4XSAhPSAnICcpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWJ1aWxkZXJJbmRleCAmJiBidWZmZXJbYnVpbGRl
ckluZGV4XSA9PSAnICcpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGJ1ZmZlci5zaHJpbmso
YnVpbGRlckluZGV4ICsgMSk7CisgICAgCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVy
KTsKK30KKworCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZSgpCiB7CisgICAgbV90aXRsZSA9
IGNhbm9uaWNhbGl6ZWRUaXRsZShtX3Jhd1RpdGxlKTsKICAgICBpZiAoRnJhbWUqIGYgPSBmcmFt
ZSgpKQogICAgICAgICBmLT5sb2FkZXIoKS0+c2V0VGl0bGUobV90aXRsZSk7CiB9CkBAIC0xMDkx
LDEwICsxMTUwLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGkK
ICAgICAgICAgbV90aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW1lbnQ7CiAgICAgfQogCi0gICAgaWYg
KG1fdGl0bGUgPT0gdGl0bGUpCisgICAgaWYgKG1fcmF3VGl0bGUgPT0gdGl0bGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fdGl0bGUgPSB0aXRsZTsKKyAgICBtX3Jhd1RpdGxlID0gdGl0bGU7
CiAgICAgdXBkYXRlVGl0bGUoKTsKIAogICAgIGlmIChtX3RpdGxlU2V0RXhwbGljaXRseSAmJiBt
X3RpdGxlRWxlbWVudCAmJiBtX3RpdGxlRWxlbWVudC0+aGFzVGFnTmFtZSh0aXRsZVRhZykpCkBA
IC0xMTE5LDggKzExNzgsOCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVUaXRsZShFbGVtZW50KiB0
aXRsCiAgICAgICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFtX3RpdGxlRWxlbWVudCAmJiAh
bV90aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV90aXRsZSA9ICIiOworICAgIGlmICghbV90
aXRsZUVsZW1lbnQgJiYgIW1fcmF3VGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmF3VGl0
bGUgPSAiIjsKICAgICAgICAgdXBkYXRlVGl0bGUoKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJl
dmlzaW9uIDUyNTY1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA2OSw2ICsxMDY5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZnJhbWVFbGVtZW50c1No
b3VsZElnbm9yZVNjcm9sbGluZzsKIAogICAgIFN0cmluZyBtX3RpdGxlOworICAgIFN0cmluZyBt
X3Jhd1RpdGxlOwogICAgIGJvb2wgbV90aXRsZVNldEV4cGxpY2l0bHk7CiAgICAgUmVmUHRyPEVs
ZW1lbnQ+IG1fdGl0bGVFbGVtZW50OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3Bw
CShyZXZpc2lvbiA1MjU2NSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNp
bmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01NCw2NyArNTMsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8qCi0gKiBQZXJmb3JtcyBmb3VyIG9wZXJhdGlvbnM6Ci0gKiAgMS4gQ29u
dmVydCBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1ib2xzCi0gKiAgMi4gQ29udmVydCBjb250
cm9sIGNoYXJhY3RlcnMgdG8gc3BhY2VzCi0gKiAgMy4gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGlu
ZyBzcGFjZXMKLSAqICA0LiBDb2xsYXBzZSBpbnRlcm5hbCB3aGl0ZXNwYWNlLgotICovCi1zdGF0
aWMgaW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
RnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCghdGl0bGUuaXNFbXB0eSgpKTsKLQotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGl0bGUuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRpdGxlLmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIGk7Ci0KLSAgICBTdHJpbmdC
dWZmZXIgYnVmZmVyKGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgYnVpbGRlckluZGV4ID0gMDsKLQot
ICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMgYW5kIGxlYWRpbmcgY2hhcmFjdGVycyB0aGF0IHdv
dWxkIGNvbnZlcnQgdG8gc3BhY2VzCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoIShjIDw9IDB4
MjAgfHwgYyA9PSAweDdGKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChp
ID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgLy8gUmVwbGFjZSBjb250cm9s
IGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFuZCBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5
bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlLgotICAgIGJvb2wgcHJldmlvdXNDaGFyV2Fz
V1MgPSBmYWxzZTsKLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFy
IGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAoYyA8PSAweDIwIHx8IGMgPT0gMHg3RiB8
fCAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeShjKSAmIChXVEY6OlVuaWNvZGU6OlNlcGFyYXRvcl9M
aW5lIHwgV1RGOjpVbmljb2RlOjpTZXBhcmF0b3JfUGFyYWdyYXBoKSkpIHsKLSAgICAgICAgICAg
IGlmIChwcmV2aW91c0NoYXJXYXNXUykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgrK10gPSAnICc7Ci0gICAgICAgICAgICBwcmV2aW91
c0NoYXJXYXNXUyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXJb
YnVpbGRlckluZGV4KytdID0gYzsKLSAgICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTdHJpcCB0cmFpbGluZyBzcGFjZXMKLSAg
ICB3aGlsZSAoYnVpbGRlckluZGV4ID4gMCkgewotICAgICAgICAtLWJ1aWxkZXJJbmRleDsKLSAg
ICAgICAgaWYgKGJ1ZmZlcltidWlsZGVySW5kZXhdICE9ICcgJykKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGlmICghYnVpbGRlckluZGV4ICYmIGJ1ZmZlcltidWlsZGVySW5kZXhd
ID09ICcgJykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgYnVmZmVyLnNocmluayhidWlsZGVy
SW5kZXggKyAxKTsKLSAgICAKLSAgICAvLyBSZXBsYWNlIHRoZSBiYWNrc2xhc2hlcyB3aXRoIGN1
cnJlbmN5IHN5bWJvbHMgaWYgdGhlIGVuY29kaW5nIHJlcXVpcmVzIGl0LgotICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5kaXNwbGF5QnVmZmVyTW9kaWZpZWRCeUVuY29kaW5nKGJ1ZmZlci5jaGFyYWN0
ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZm
ZXIpOwotfQotCiBzdGF0aWMgdm9pZCBjYW5jZWxBbGwoY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQm
IGxvYWRlcnMpCiB7CiAgICAgY29uc3QgUmVzb3VyY2VMb2FkZXJTZXQgY29weSA9IGxvYWRlcnM7
CkBAIC02NjIsNyArNjAwLDExIEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKGNvbnN0
IFN0cmkKICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgdHJpbW1lZCA9IGNhbm9uaWNhbGl6ZWRUaXRsZSh0aXRsZSwgbV9mcmFtZSk7CisgICAg
U3RyaW5nIHRyaW1tZWQgPSB0aXRsZTsKKyAgICAKKyAgICAvLyBSZXBsYWNlIHRoZSBiYWNrc2xh
c2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMgaWYgdGhlIGVuY29kaW5nIHJlcXVpcmVzIGl0Lgor
ICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
dHJpbW1lZCk7CisgICAgCiAgICAgaWYgKCF0cmltbWVkLmlzRW1wdHkoKSAmJiBtX3BhZ2VUaXRs
ZSAhPSB0cmltbWVkKSB7CiAgICAgICAgIGZyYW1lTG9hZGVyKCktPndpbGxDaGFuZ2VUaXRsZSh0
aGlzKTsKICAgICAgICAgbV9wYWdlVGl0bGUgPSB0cmltbWVkOwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NTI1NjUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAwOS0xMi0yNiAgQ2hyaXN0aWFuIFNlamVyc2VuICA8Y2hyaXN0aWFuLndlYmtp
dEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgZG9jdW1lbnQudGl0bGUgZG9lcyBub3QgcmVwbGFjZSBvciByZW1vdmUgc3BhY2UgY2hh
cmFjdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjcwMzIKKworICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50
LXRpdGxlLWdldC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1bWVudC9zY3Jp
cHQtdGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0aW9uLXRleHQuaHRtbDoKKwogMjAwOS0xMi0y
NiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1YmJl
ci1zdGFtcGVkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
RG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1l
bnQtdGl0bGUtZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAor
VGhpcyB0ZXN0IGNoZWNrcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGluZyB0aGUgZG9jdW1l
bnQudGl0bGUgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVz
dCB3aXRoIG5vIHRpdGxlIHNldAorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRo
IGVtcHR5IHRpdGxlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICIiCitUZXN0IHdpdGggb25seSB3
aGl0ZXNwYWNlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICIiCitUZXN0IHdpdGggbm8gd2hpdGVz
cGFjZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAibm93aGl0ZXNwYWNldGl0bGUiCitUZXN0IHdp
dGggVW5pY29kZSB3aGl0ZXNwYWNlIGluIHRoZSBzcGFjZSBzZXBhcmF0b3IgY2F0ZWdvcnkKK1BB
U1MgZG9jdW1lbnQudGl0bGUgaXMgIm9uZSBzcGFjZSIKK1Rlc3Qgd2l0aCB3aGl0ZXNwYWNlCitQ
QVNTIGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGggdmFyaW91cyB3aGl0
ZXNwYWNlIGxlbmd0aHMgYW5kIGZpZWxkcworUEFTUyBkb2N1bWVudC50aXRsZSBpcyAibG90cyBv
ZiB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyIKK1Rlc3Qgd2l0aCB2YXJpb3VzIGxlbmd0aCBzdHJp
bmdzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1
bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3Vt
ZW50LXRpdGxlLWdldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1
bWVudC9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0LmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxl
LWdldC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorZGVzY3JpcHRpb24oIlRoaXMg
dGVzdCBjaGVja3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbmcgdGhlIGRvY3VtZW50LnRp
dGxlIGF0dHJpYnV0ZS4iKTsKKworZGVidWcoJ1Rlc3Qgd2l0aCBubyB0aXRsZSBzZXQnKTsKK3No
b3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAiIik7CisKK2RlYnVnKCdUZXN0
IHdpdGggZW1wdHkgdGl0bGUnKTsKK2RvY3VtZW50LnRpdGxlID0gIiI7CitzaG91bGRCZUVxdWFs
VG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwiIik7CisKK2RlYnVnKCdUZXN0IHdpdGggb25seSB3
aGl0ZXNwYWNlJyk7Citkb2N1bWVudC50aXRsZSA9ICJcdFxuXHIgICAgXHIgICAgIFx0XG5cbiI7
CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwiIik7CisKK2RlYnVnKCdU
ZXN0IHdpdGggbm8gd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAibm93aGl0ZXNwYWNl
dGl0bGUiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIm5vd2hpdGVz
cGFjZXRpdGxlIik7CisKK2RlYnVnKCdUZXN0IHdpdGggVW5pY29kZSB3aGl0ZXNwYWNlIGluIHRo
ZSBzcGFjZSBzZXBhcmF0b3IgY2F0ZWdvcnknKTsKK2RvY3VtZW50LnRpdGxlID0gIlx1MDAyMFx1
MDAyMG9uZVx1MDAyMFx1MDAyMFx1MDAyMHNwYWNlXHUwMDIwXHUwMDIwIjsKK3Nob3VsZEJlRXF1
YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCJvbmUgc3BhY2UiKTsKKworZGVidWcoJ1Rlc3Qg
d2l0aCB3aGl0ZXNwYWNlJyk7Citkb2N1bWVudC50aXRsZSA9ICJcdTAwMDlcdTAwMGFvbmVcdTAw
MGJcdTAwMGNzcGFjZVx1MDAwZCI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRp
dGxlIiwib25lIHNwYWNlIik7CisKK2RlYnVnKCdUZXN0IHdpdGggdmFyaW91cyB3aGl0ZXNwYWNl
IGxlbmd0aHMgYW5kIGZpZWxkcycpOworZG9jdW1lbnQudGl0bGUgPSAiICAgbG90cyBvZiBcciB3
aGl0ZXNwYWNlIGFuZCBcblxuXG4gICAgXHQgICAgbmV3bGluZXMgXHQiOworc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsICJsb3RzIG9mIHdoaXRlc3BhY2UgYW5kIG5ld2xp
bmVzIik7CisKK2RlYnVnKCdUZXN0IHdpdGggdmFyaW91cyBsZW5ndGggc3RyaW5ncycpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9w
dGlvbkVsZW1lbnQvb3B0aW9uLXRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MjU2NSkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiw0ICs2LDUgQEAgUEFTUzogZ290ICJmb28iIGFz
IGV4cGVjdGVkLgogUEFTUzogZ290ICLCpSIgYXMgZXhwZWN0ZWQuCiBQQVNTOiBnb3QgImZvbyBi
YXIiIGFzIGV4cGVjdGVkLgogUEFTUzogZ290ICJsYWJlbCIgYXMgZXhwZWN0ZWQuCitQQVNTOiBn
b3QgIm9uZSBzcGFjZSIgYXMgZXhwZWN0ZWQuCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0aW9uLXRleHQuaHRtbAkocmV2aXNp
b24gNTI1NjUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRp
b24tdGV4dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAgICAgICAgIDxv
cHRpb24gaWQ9Im8zIj5cPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gaWQ9Im80Ij5mb28gICBi
YXI8L29wdGlvbj4KICAgICAgICAgPG9wdGlvbiBpZD0ibzUiIGxhYmVsPSIgbGFiZWwgIj5pZ25v
cmVkPC9vcHRpb24+CisJPG9wdGlvbiBpZD0ibzYiPiYjeDAwMjA7b25lJiN4MDAwOTsmI3gwMDBh
OyYjeDAwMGM7JiN4MDAwZDtzcGFjZSYjeDAwMjA7PC9vcHRpb24+CiAgICAgPC9zZWxlY3Q+CiAg
ICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiAgICAgPHNjcmlwdD4KQEAgLTQyLDYgKzQzLDcg
QEAKICAgICAgICAgdGVzdCgibzMiLCAiXHUwMGE1Iik7CiAgICAgICAgIHRlc3QoIm80IiwgImZv
byBiYXIiKTsKICAgICAgICAgdGVzdCgibzUiLCAibGFiZWwiKTsKKwl0ZXN0KCJvNiIsICJvbmUg
c3BhY2UiKTsKICAgICA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45574</attachid>
            <date>2009-12-28 14:38:11 -0800</date>
            <delta_ts>2010-01-06 05:58:11 -0800</delta_ts>
            <desc>Updated &quot;Fourth attempt&quot; by keeping the patch more true to the original code</desc>
            <filename>canonical_title.2.patch</filename>
            <type>text/plain</type>
            <size>13438</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjYwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMTItMjggIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KTogCisgICAgICAgIEluaXRpYWxpemF0aW9uIG9m
IG1fcmF3VGl0bGUKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6IAorICAg
ICAgICBNb3ZlZCBmcm9tIERvY3VtZW50TG9hZGVyLmNwcCB3aXRoIG1pbm9yIGVkaXRzCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOiAKKyAgICAgICAgRW5zdXJlcyB0
aGUgdGl0bGUgaXMgY2Fub25pY2FsaXplZAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
dFRpdGxlKTogCisgICAgICAgIFVzZXMgbV9yYXdUaXRsZSBpbnN0YWVkIG9mIG1fdGl0bGUgCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlVGl0bGUpOiAKKyAgICAgICAgVXNlcyBt
X3Jhd1RpdGxlIGluc3RlYWQgb2YgbV90aXRsZQorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDogCisgICAgICAgIEFkZGVkIG1fcmF3VGl0bGUgdGhhdCBzdG9yZXMgdGhlIHBhc3Nl
ZCBpbiB0aXRsZSwgbV90aXRsZSBub3cgc3RvcmVzIHRoZSAKKyAgICAgICAgY2Fub25pY2FsaXpl
ZCB0aXRsZQorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKTogCisgICAgICAgIFRo
ZSB0aXRsZSBwYXNzZWQgaW4gaXMgbm93IGNhbm9uaWNhbGl6ZWQgaW4gRG9jdW1lbnQuY3BwCisK
IDIwMDktMTItMjggIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA1MjYwMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDYgKzExNCw3IEBACiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
U3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTMyMyw2ICszMjQsNyBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAgICAgLCBtX3N0eWxl
UmVjYWxjVGltZXIodGhpcywgJkRvY3VtZW50OjpzdHlsZVJlY2FsY1RpbWVyRmlyZWQpCiAgICAg
LCBtX2ZyYW1lRWxlbWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoZmFsc2UpCiAgICAgLCBtX3Rp
dGxlKCIiKQorICAgICwgbV9yYXdUaXRsZSgiIikKICAgICAsIG1fdGl0bGVTZXRFeHBsaWNpdGx5
KGZhbHNlKQogICAgICwgbV91cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lcih0aGlzLCAmRG9jdW1l
bnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyRmlyZWQpCiAgICAgLCBtX2V4ZWN1dGVTY3Jp
cHRTb29uVGltZXIodGhpcywgJkRvY3VtZW50OjpleGVjdXRlU2NyaXB0U29vblRpbWVyRmlyZWQp
CkBAIC0xMDYzLDggKzEwNjUsNjggQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFj
Y2Vzc0tleQogICAgIHJldHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkp
OwogfQogCisvKgorICogUGVyZm9ybXMgdGhyZWUgb3BlcmF0aW9uczoKKyAqICAxLiBDb252ZXJ0
IGNvbnRyb2wgY2hhcmFjdGVycyB0byBzcGFjZXMKKyAqICAyLiBUcmltIGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHNwYWNlcworICogIDMuIENvbGxhcHNlIGludGVybmFsIHdoaXRlc3BhY2UuCisgKi8K
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCogZG9jLCBj
b25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGl0
bGUuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRpdGxlLmxlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIGk7CisKKyAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCk7CisgICAg
dW5zaWduZWQgYnVpbGRlckluZGV4ID0gMDsKKworICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMg
YW5kIGxlYWRpbmcgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGNvbnZlcnQgdG8gc3BhY2VzCisgICAg
Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0
ZXJzW2ldOworICAgICAgICBpZiAoIShjIDw9IDB4MjAgfHwgYyA9PSAweDdGKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChpID09IGxlbmd0aCkKKyAgICAgICAgcmV0dXJu
ICIiOworCisgICAgLy8gUmVwbGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFu
ZCBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0ZXNw
YWNlLgorICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKKyAgICBmb3IgKDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAg
ICBpZiAoYyA8PSAweDIwIHx8IGMgPT0gMHg3RiB8fCAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeShj
KSAmIChXVEY6OlVuaWNvZGU6OlNlcGFyYXRvcl9MaW5lIHwgV1RGOjpVbmljb2RlOjpTZXBhcmF0
b3JfUGFyYWdyYXBoKSkpIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0NoYXJXYXNXUykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgr
K10gPSAnICc7CisgICAgICAgICAgICBwcmV2aW91c0NoYXJXYXNXUyA9IHRydWU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBidWZmZXJbYnVpbGRlckluZGV4KytdID0gYzsKKyAgICAg
ICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBTdHJpcCB0cmFpbGluZyBzcGFjZXMKKyAgICB3aGlsZSAoYnVpbGRlckluZGV4ID4gMCkg
eworICAgICAgICAtLWJ1aWxkZXJJbmRleDsKKyAgICAgICAgaWYgKGJ1ZmZlcltidWlsZGVySW5k
ZXhdICE9ICcgJykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghYnVpbGRl
ckluZGV4ICYmIGJ1ZmZlcltidWlsZGVySW5kZXhdID09ICcgJykKKyAgICAgICAgcmV0dXJuICIi
OworCisgICAgYnVmZmVyLnNocmluayhidWlsZGVySW5kZXggKyAxKTsKKworICAgIC8vIFJlcGxh
Y2UgdGhlIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scyBpZiB0aGUgZW5jb2Rpbmcg
cmVxdWlyZXMgaXQuCisgICAgZG9jLT5kaXNwbGF5QnVmZmVyTW9kaWZpZWRCeUVuY29kaW5nKGJ1
ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgICAgCisgICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQoYnVmZmVyKTsKK30KKworCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZSgp
CiB7CisgICAgbV90aXRsZSA9IGNhbm9uaWNhbGl6ZWRUaXRsZSh0aGlzLCBtX3Jhd1RpdGxlKTsK
ICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQogICAgICAgICBmLT5sb2FkZXIoKS0+c2V0VGl0
bGUobV90aXRsZSk7CiB9CkBAIC0xMDkxLDEwICsxMTUzLDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnNl
dFRpdGxlKGNvbnN0IFN0cmluZyYgdGkKICAgICAgICAgbV90aXRsZUVsZW1lbnQgPSB0aXRsZUVs
ZW1lbnQ7CiAgICAgfQogCi0gICAgaWYgKG1fdGl0bGUgPT0gdGl0bGUpCisgICAgaWYgKG1fcmF3
VGl0bGUgPT0gdGl0bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGl0bGUgPSB0aXRsZTsK
KyAgICBtX3Jhd1RpdGxlID0gdGl0bGU7CiAgICAgdXBkYXRlVGl0bGUoKTsKIAogICAgIGlmICht
X3RpdGxlU2V0RXhwbGljaXRseSAmJiBtX3RpdGxlRWxlbWVudCAmJiBtX3RpdGxlRWxlbWVudC0+
aGFzVGFnTmFtZSh0aXRsZVRhZykpCkBAIC0xMTE5LDggKzExODEsOCBAQCB2b2lkIERvY3VtZW50
OjpyZW1vdmVUaXRsZShFbGVtZW50KiB0aXRsCiAgICAgICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKCFtX3RpdGxlRWxlbWVudCAmJiAhbV90aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV90
aXRsZSA9ICIiOworICAgIGlmICghbV90aXRsZUVsZW1lbnQgJiYgIW1fcmF3VGl0bGUuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fcmF3VGl0bGUgPSAiIjsKICAgICAgICAgdXBkYXRlVGl0bGUoKTsK
ICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDUyNjAyKQorKysgV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2OSw2ICsxMDY5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fZnJhbWVFbGVtZW50c1Nob3VsZElnbm9yZVNjcm9sbGluZzsKIAogICAgIFN0cmlu
ZyBtX3RpdGxlOworICAgIFN0cmluZyBtX3Jhd1RpdGxlOwogICAgIGJvb2wgbV90aXRsZVNldEV4
cGxpY2l0bHk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0bGVFbGVtZW50OwogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA1MjYwMikKKysrIFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRl
ICJYTUxUb2tlbml6ZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01NCw2
NyArNTMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gKiBQZXJmb3JtcyBmb3Vy
IG9wZXJhdGlvbnM6Ci0gKiAgMS4gQ29udmVydCBiYWNrc2xhc2hlcyB0byBjdXJyZW5jeSBzeW1i
b2xzCi0gKiAgMi4gQ29udmVydCBjb250cm9sIGNoYXJhY3RlcnMgdG8gc3BhY2VzCi0gKiAgMy4g
VHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMKLSAqICA0LiBDb2xsYXBzZSBpbnRlcm5h
bCB3aGl0ZXNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYW5vbmljYWxpemVkVGl0
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVCghdGl0
bGUuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGl0bGUuY2hh
cmFjdGVycygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRpdGxlLmxlbmd0aCgpOwotICAgIHVu
c2lnbmVkIGk7Ci0KLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCk7Ci0gICAgdW5zaWdu
ZWQgYnVpbGRlckluZGV4ID0gMDsKLQotICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMgYW5kIGxl
YWRpbmcgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGNvbnZlcnQgdG8gc3BhY2VzCi0gICAgZm9yIChp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ld
OwotICAgICAgICBpZiAoIShjIDw9IDB4MjAgfHwgYyA9PSAweDdGKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGlmIChpID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOwot
Ci0gICAgLy8gUmVwbGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFuZCBiYWNr
c2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlLgot
ICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKLSAgICBmb3IgKDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBpZiAo
YyA8PSAweDIwIHx8IGMgPT0gMHg3RiB8fCAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeShjKSAmIChX
VEY6OlVuaWNvZGU6OlNlcGFyYXRvcl9MaW5lIHwgV1RGOjpVbmljb2RlOjpTZXBhcmF0b3JfUGFy
YWdyYXBoKSkpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c0NoYXJXYXNXUykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgrK10gPSAn
ICc7Ci0gICAgICAgICAgICBwcmV2aW91c0NoYXJXYXNXUyA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBidWZmZXJbYnVpbGRlckluZGV4KytdID0gYzsKLSAgICAgICAgICAg
IHByZXZpb3VzQ2hhcldhc1dTID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBT
dHJpcCB0cmFpbGluZyBzcGFjZXMKLSAgICB3aGlsZSAoYnVpbGRlckluZGV4ID4gMCkgewotICAg
ICAgICAtLWJ1aWxkZXJJbmRleDsKLSAgICAgICAgaWYgKGJ1ZmZlcltidWlsZGVySW5kZXhdICE9
ICcgJykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghYnVpbGRlckluZGV4
ICYmIGJ1ZmZlcltidWlsZGVySW5kZXhdID09ICcgJykKLSAgICAgICAgcmV0dXJuICIiOwotCi0g
ICAgYnVmZmVyLnNocmluayhidWlsZGVySW5kZXggKyAxKTsKLSAgICAKLSAgICAvLyBSZXBsYWNl
IHRoZSBiYWNrc2xhc2hlcyB3aXRoIGN1cnJlbmN5IHN5bWJvbHMgaWYgdGhlIGVuY29kaW5nIHJl
cXVpcmVzIGl0LgotICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaXNwbGF5QnVmZmVyTW9kaWZpZWRC
eUVuY29kaW5nKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQotCiBzdGF0aWMgdm9pZCBjYW5jZWxBbGwo
Y29uc3QgUmVzb3VyY2VMb2FkZXJTZXQmIGxvYWRlcnMpCiB7CiAgICAgY29uc3QgUmVzb3VyY2VM
b2FkZXJTZXQgY29weSA9IGxvYWRlcnM7CkBAIC02NjIsMTAgKzYwMCw5IEBAIHZvaWQgRG9jdW1l
bnRMb2FkZXI6OnNldFRpdGxlKGNvbnN0IFN0cmkKICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdHJpbW1lZCA9IGNhbm9uaWNhbGl6ZWRUaXRs
ZSh0aXRsZSwgbV9mcmFtZSk7Ci0gICAgaWYgKCF0cmltbWVkLmlzRW1wdHkoKSAmJiBtX3BhZ2VU
aXRsZSAhPSB0cmltbWVkKSB7CisgICAgaWYgKG1fcGFnZVRpdGxlICE9IHRpdGxlKSB7CiAgICAg
ICAgIGZyYW1lTG9hZGVyKCktPndpbGxDaGFuZ2VUaXRsZSh0aGlzKTsKLSAgICAgICAgbV9wYWdl
VGl0bGUgPSB0cmltbWVkOworICAgICAgICBtX3BhZ2VUaXRsZSA9IHRpdGxlOwogICAgICAgICBm
cmFtZUxvYWRlcigpLT5kaWRDaGFuZ2VUaXRsZSh0aGlzKTsKICAgICB9CiB9CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1MjYwMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDA5LTEyLTI4ICBDaHJpc3RpYW4gU2VqZXJzZW4gIDxjaHJpc3Rp
YW4ud2Via2l0QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBkb2N1bWVudC50aXRsZSBkb2VzIG5vdCByZXBsYWNlIG9yIHJlbW92ZSBz
cGFjZSBjaGFyYWN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzAzMgorCisgICAgICAgICogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0
bGUtZ2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRG9jdW1lbnQv
ZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0RvY3Vt
ZW50L3NjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQuanM6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0LWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC5odG1sOgorCiAy
MDA5LTEyLTI4ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3Vt
ZW50LXRpdGxlLWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAK
K1RoaXMgdGVzdCBjaGVja3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbmcgdGhlIGRvY3Vt
ZW50LnRpdGxlIGF0dHJpYnV0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rl
c3Qgd2l0aCBubyB0aXRsZSBzZXQKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIiIKK1Rlc3Qgd2l0
aCBlbXB0eSB0aXRsZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRoIG9ubHkg
d2hpdGVzcGFjZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAiIgorVGVzdCB3aXRoIG5vIHdoaXRl
c3BhY2UKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIm5vd2hpdGVzcGFjZXRpdGxlIgorVGVzdCB3
aXRoIFVuaWNvZGUgd2hpdGVzcGFjZSBpbiB0aGUgc3BhY2Ugc2VwYXJhdG9yIGNhdGVnb3J5CitQ
QVNTIGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGggd2hpdGVzcGFjZQor
UEFTUyBkb2N1bWVudC50aXRsZSBpcyAib25lIHNwYWNlIgorVGVzdCB3aXRoIHZhcmlvdXMgd2hp
dGVzcGFjZSBsZW5ndGhzIGFuZCBmaWVsZHMKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgImxvdHMg
b2Ygd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMiCitUZXN0IHdpdGggdmFyaW91cyBsZW5ndGggc3Ry
aW5ncworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50
LXRpdGxlLWdldC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9j
dW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0cy9kb2N1
bWVudC10aXRsZS1nZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9j
dW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L3NjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRs
ZS1nZXQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKK2Rlc2NyaXB0aW9uKCJUaGlz
IHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW5nIHRoZSBkb2N1bWVudC50
aXRsZSBhdHRyaWJ1dGUuIik7CisKK2RlYnVnKCdUZXN0IHdpdGggbm8gdGl0bGUgc2V0Jyk7Citz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwgIiIpOworCitkZWJ1ZygnVGVz
dCB3aXRoIGVtcHR5IHRpdGxlJyk7Citkb2N1bWVudC50aXRsZSA9ICIiOworc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIiIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG9ubHkg
d2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHRcblxyICAgIFxyICAgICBcdFxuXG4i
Oworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIiIpOworCitkZWJ1Zygn
VGVzdCB3aXRoIG5vIHdoaXRlc3BhY2UnKTsKK2RvY3VtZW50LnRpdGxlID0gIm5vd2hpdGVzcGFj
ZXRpdGxlIjsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCJub3doaXRl
c3BhY2V0aXRsZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIFVuaWNvZGUgd2hpdGVzcGFjZSBpbiB0
aGUgc3BhY2Ugc2VwYXJhdG9yIGNhdGVnb3J5Jyk7Citkb2N1bWVudC50aXRsZSA9ICJcdTAwMjBc
dTAwMjBvbmVcdTAwMjBcdTAwMjBcdTAwMjBzcGFjZVx1MDAyMFx1MDAyMCI7CitzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwib25lIHNwYWNlIik7CisKK2RlYnVnKCdUZXN0
IHdpdGggd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHUwMDA5XHUwMDBhb25lXHUw
MDBiXHUwMDBjc3BhY2VcdTAwMGQiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50
aXRsZSIsIm9uZSBzcGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgd2hpdGVzcGFj
ZSBsZW5ndGhzIGFuZCBmaWVsZHMnKTsKK2RvY3VtZW50LnRpdGxlID0gIiAgIGxvdHMgb2YgXHIg
d2hpdGVzcGFjZSBhbmQgXG5cblxuICAgIFx0ICAgIG5ld2xpbmVzIFx0IjsKK3Nob3VsZEJlRXF1
YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAibG90cyBvZiB3aGl0ZXNwYWNlIGFuZCBuZXds
aW5lcyIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgbGVuZ3RoIHN0cmluZ3MnKTsKKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0aW9uLXRl
eHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxP
cHRpb25FbGVtZW50L29wdGlvbi10ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTI2MDIpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNCArNiw1IEBAIFBBU1M6IGdvdCAiZm9vIiBh
cyBleHBlY3RlZC4KIFBBU1M6IGdvdCAiwqUiIGFzIGV4cGVjdGVkLgogUEFTUzogZ290ICJmb28g
YmFyIiBhcyBleHBlY3RlZC4KIFBBU1M6IGdvdCAibGFiZWwiIGFzIGV4cGVjdGVkLgorUEFTUzog
Z290ICJvbmUgc3BhY2UiIGFzIGV4cGVjdGVkLgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9IVE1MT3B0aW9uRWxlbWVudC9vcHRpb24tdGV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0hUTUxPcHRpb25FbGVtZW50L29wdGlvbi10ZXh0Lmh0bWwJKHJldmlz
aW9uIDUyNjAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTE9wdGlvbkVsZW1lbnQvb3B0
aW9uLXRleHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogICAgICAgICA8
b3B0aW9uIGlkPSJvMyI+XDwvb3B0aW9uPgogICAgICAgICA8b3B0aW9uIGlkPSJvNCI+Zm9vICAg
YmFyPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gaWQ9Im81IiBsYWJlbD0iIGxhYmVsICI+aWdu
b3JlZDwvb3B0aW9uPgorCTxvcHRpb24gaWQ9Im82Ij4mI3gwMDIwO29uZSYjeDAwMDk7JiN4MDAw
YTsmI3gwMDBjOyYjeDAwMGQ7c3BhY2UmI3gwMDIwOzwvb3B0aW9uPgogICAgIDwvc2VsZWN0Pgog
ICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogICAgIDxzY3JpcHQ+CkBAIC00Miw2ICs0Myw3
IEBACiAgICAgICAgIHRlc3QoIm8zIiwgIlx1MDBhNSIpOwogICAgICAgICB0ZXN0KCJvNCIsICJm
b28gYmFyIik7CiAgICAgICAgIHRlc3QoIm81IiwgImxhYmVsIik7CisJdGVzdCgibzYiLCAib25l
IHNwYWNlIik7CiAgICAgPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>
<flag name="review"
          id="27632"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45961</attachid>
            <date>2010-01-06 05:56:52 -0800</date>
            <delta_ts>2010-01-07 00:15:08 -0800</delta_ts>
            <desc>Updated final(?) patch</desc>
            <filename>canonical_title.3.patch</filename>
            <type>text/plain</type>
            <size>11903</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mjg1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMDYgIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KTogCisgICAgICAgIEluaXRpYWxpemF0aW9uIG9m
IG1fcmF3VGl0bGUKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6IAorICAg
ICAgICBNb3ZlZCBmcm9tIERvY3VtZW50TG9hZGVyLmNwcCB3aXRoIG1pbm9yIGVkaXRzCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOiAKKyAgICAgICAgRW5zdXJlcyB0
aGUgdGl0bGUgaXMgY2Fub25pY2FsaXplZAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
dFRpdGxlKTogCisgICAgICAgIFVzZXMgbV9yYXdUaXRsZSBpbnN0YWVkIG9mIG1fdGl0bGUgCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlVGl0bGUpOiAKKyAgICAgICAgVXNlcyBt
X3Jhd1RpdGxlIGluc3RlYWQgb2YgbV90aXRsZQorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDogCisgICAgICAgIEFkZGVkIG1fcmF3VGl0bGUgdGhhdCBzdG9yZXMgdGhlIHBhc3Nl
ZCBpbiB0aXRsZSwgbV90aXRsZSBub3cgc3RvcmVzIHRoZSAKKyAgICAgICAgY2Fub25pY2FsaXpl
ZCB0aXRsZQorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKTogCisgICAgICAgIFRo
ZSB0aXRsZSBwYXNzZWQgaW4gaXMgbm93IGNhbm9uaWNhbGl6ZWQgaW4gRG9jdW1lbnQuY3BwCisK
IDIwMTAtMDEtMDYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQgdHJpdmlhbCBRdCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA1Mjg1NCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDYgKzExNCw3IEBACiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNp
bmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTMyMyw2
ICszMjQsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAgICAg
LCBtX3N0eWxlUmVjYWxjVGltZXIodGhpcywgJkRvY3VtZW50OjpzdHlsZVJlY2FsY1RpbWVyRmly
ZWQpCiAgICAgLCBtX2ZyYW1lRWxlbWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoZmFsc2UpCiAg
ICAgLCBtX3RpdGxlKCIiKQorICAgICwgbV9yYXdUaXRsZSgiIikKICAgICAsIG1fdGl0bGVTZXRF
eHBsaWNpdGx5KGZhbHNlKQogICAgICwgbV91cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lcih0aGlz
LCAmRG9jdW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyRmlyZWQpCiAgICAgLCBtX2V4
ZWN1dGVTY3JpcHRTb29uVGltZXIodGhpcywgJkRvY3VtZW50OjpleGVjdXRlU2NyaXB0U29vblRp
bWVyRmlyZWQpCkBAIC0xMDYzLDggKzEwNjUsNjcgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVs
ZW1lbnRCeUFjY2Vzc0tleQogICAgIHJldHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtl
eS5pbXBsKCkpOwogfQogCisvKgorICogUGVyZm9ybXMgdGhyZWUgb3BlcmF0aW9uczoKKyAqICAx
LiBDb252ZXJ0IGNvbnRyb2wgY2hhcmFjdGVycyB0byBzcGFjZXMKKyAqICAyLiBUcmltIGxlYWRp
bmcgYW5kIHRyYWlsaW5nIHNwYWNlcworICogIDMuIENvbGxhcHNlIGludGVybmFsIHdoaXRlc3Bh
Y2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMgPSB0aXRsZS5jaGFyYWN0ZXJzKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0
bGUubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaTsKKworICAgIFN0cmluZ0J1ZmZlciBidWZmZXIo
bGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBidWlsZGVySW5kZXggPSAwOworCisgICAgLy8gU2tpcCBs
ZWFkaW5nIHNwYWNlcyBhbmQgbGVhZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0
byBzcGFjZXMKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNo
YXIgYyA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIGlmICghKGMgPD0gMHgyMCB8fCBjID09IDB4
N0YpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGkgPT0gbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gIiI7CisKKyAgICAvLyBSZXBsYWNlIGNvbnRyb2wgY2hhcmFjdGVycyB3
aXRoIHNwYWNlcywgYW5kIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scywgYW5kIGNv
bGxhcHNlIHdoaXRlc3BhY2UuCisgICAgYm9vbCBwcmV2aW91c0NoYXJXYXNXUyA9IGZhbHNlOwor
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3Rl
cnNbaV07CisgICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNv
ZGU6OmNhdGVnb3J5KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVu
aWNvZGU6OlNlcGFyYXRvcl9QYXJhZ3JhcGgpKSkgeworICAgICAgICAgICAgaWYgKHByZXZpb3Vz
Q2hhcldhc1dTKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYnVmZmVy
W2J1aWxkZXJJbmRleCsrXSA9ICcgJzsKKyAgICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgr
K10gPSBjOworICAgICAgICAgICAgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNwYWNlcworICAgIHdoaWxlIChidWls
ZGVySW5kZXggPiAwKSB7CisgICAgICAgIC0tYnVpbGRlckluZGV4OworICAgICAgICBpZiAoYnVm
ZmVyW2J1aWxkZXJJbmRleF0gIT0gJyAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKCFidWlsZGVySW5kZXggJiYgYnVmZmVyW2J1aWxkZXJJbmRleF0gPT0gJyAnKQorICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1aWxkZXJJbmRleCArIDEpOwor
CisgICAgLy8gUmVwbGFjZSB0aGUgYmFja3NsYXNoZXMgd2l0aCBjdXJyZW5jeSBzeW1ib2xzIGlm
IHRoZSBlbmNvZGluZyByZXF1aXJlcyBpdC4KKyAgICBkb2N1bWVudC0+ZGlzcGxheUJ1ZmZlck1v
ZGlmaWVkQnlFbmNvZGluZyhidWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXIubGVuZ3RoKCkpOwor
ICAgIAorICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Cit9CisKIHZvaWQgRG9jdW1l
bnQ6OnVwZGF0ZVRpdGxlKCkKIHsKKyAgICBtX3RpdGxlID0gY2Fub25pY2FsaXplZFRpdGxlKHRo
aXMsIG1fcmF3VGl0bGUpOwogICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCiAgICAgICAgIGYt
PmxvYWRlcigpLT5zZXRUaXRsZShtX3RpdGxlKTsKIH0KQEAgLTEwOTEsMTAgKzExNTIsMTAgQEAg
dm9pZCBEb2N1bWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aQogICAgICAgICBtX3RpdGxl
RWxlbWVudCA9IHRpdGxlRWxlbWVudDsKICAgICB9CiAKLSAgICBpZiAobV90aXRsZSA9PSB0aXRs
ZSkKKyAgICBpZiAobV9yYXdUaXRsZSA9PSB0aXRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV90aXRsZSA9IHRpdGxlOworICAgIG1fcmF3VGl0bGUgPSB0aXRsZTsKICAgICB1cGRhdGVUaXRs
ZSgpOwogCiAgICAgaWYgKG1fdGl0bGVTZXRFeHBsaWNpdGx5ICYmIG1fdGl0bGVFbGVtZW50ICYm
IG1fdGl0bGVFbGVtZW50LT5oYXNUYWdOYW1lKHRpdGxlVGFnKSkKQEAgLTExMTksOCArMTE4MCw4
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZVRpdGxlKEVsZW1lbnQqIHRpdGwKICAgICAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIW1fdGl0bGVFbGVtZW50ICYmICFtX3RpdGxlLmlzRW1wdHko
KSkgewotICAgICAgICBtX3RpdGxlID0gIiI7CisgICAgaWYgKCFtX3RpdGxlRWxlbWVudCAmJiAh
bV9yYXdUaXRsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yYXdUaXRsZSA9ICIiOwogICAgICAg
ICB1cGRhdGVUaXRsZSgpOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNTI4NTQpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYgKzEwNjks
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xs
aW5nOwogCiAgICAgU3RyaW5nIG1fdGl0bGU7CisgICAgU3RyaW5nIG1fcmF3VGl0bGU7CiAgICAg
Ym9vbCBtX3RpdGxlU2V0RXhwbGljaXRseTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVs
ZW1lbnQ7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDUyODU0
KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN0cmluZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KQEAgLTU0LDY3ICs1Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLyoK
LSAqIFBlcmZvcm1zIGZvdXIgb3BlcmF0aW9uczoKLSAqICAxLiBDb252ZXJ0IGJhY2tzbGFzaGVz
IHRvIGN1cnJlbmN5IHN5bWJvbHMKLSAqICAyLiBDb252ZXJ0IGNvbnRyb2wgY2hhcmFjdGVycyB0
byBzcGFjZXMKLSAqICAzLiBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcwotICogIDQu
IENvbGxhcHNlIGludGVybmFsIHdoaXRlc3BhY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgU3RyaW5n
IGNhbm9uaWNhbGl6ZWRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCi17
Ci0gICAgQVNTRVJUKCF0aXRsZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMgPSB0aXRsZS5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0bGUu
bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVu
Z3RoKTsKLSAgICB1bnNpZ25lZCBidWlsZGVySW5kZXggPSAwOwotCi0gICAgLy8gU2tpcCBsZWFk
aW5nIHNwYWNlcyBhbmQgbGVhZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBz
cGFjZXMKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmICghKGMgPD0gMHgyMCB8fCBjID09IDB4N0Yp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGkgPT0gbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gIiI7Ci0KLSAgICAvLyBSZXBsYWNlIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRo
IHNwYWNlcywgYW5kIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scywgYW5kIGNvbGxh
cHNlIHdoaXRlc3BhY2UuCi0gICAgYm9vbCBwcmV2aW91c0NoYXJXYXNXUyA9IGZhbHNlOwotICAg
IGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNb
aV07Ci0gICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNvZGU6
OmNhdGVnb3J5KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVuaWNv
ZGU6OlNlcGFyYXRvcl9QYXJhZ3JhcGgpKSkgewotICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2hh
cldhc1dTKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnVmZmVyW2J1
aWxkZXJJbmRleCsrXSA9ICcgJzsKLSAgICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgrK10g
PSBjOwotICAgICAgICAgICAgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNwYWNlcwotICAgIHdoaWxlIChidWlsZGVy
SW5kZXggPiAwKSB7Ci0gICAgICAgIC0tYnVpbGRlckluZGV4OwotICAgICAgICBpZiAoYnVmZmVy
W2J1aWxkZXJJbmRleF0gIT0gJyAnKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKCFidWlsZGVySW5kZXggJiYgYnVmZmVyW2J1aWxkZXJJbmRleF0gPT0gJyAnKQotICAgICAg
ICByZXR1cm4gIiI7Ci0KLSAgICBidWZmZXIuc2hyaW5rKGJ1aWxkZXJJbmRleCArIDEpOwotICAg
IAotICAgIC8vIFJlcGxhY2UgdGhlIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scyBp
ZiB0aGUgZW5jb2RpbmcgcmVxdWlyZXMgaXQuCi0gICAgZnJhbWUtPmRvY3VtZW50KCktPmRpc3Bs
YXlCdWZmZXJNb2RpZmllZEJ5RW5jb2RpbmcoYnVmZmVyLmNoYXJhY3RlcnMoKSwgYnVmZmVyLmxl
bmd0aCgpKTsKLQotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci19Ci0KIHN0YXRp
YyB2b2lkIGNhbmNlbEFsbChjb25zdCBSZXNvdXJjZUxvYWRlclNldCYgbG9hZGVycykKIHsKICAg
ICBjb25zdCBSZXNvdXJjZUxvYWRlclNldCBjb3B5ID0gbG9hZGVyczsKQEAgLTY2MiwxMCArNjAw
LDkgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3RyaQogICAgIGlmICh0
aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB0cmltbWVkID0g
Y2Fub25pY2FsaXplZFRpdGxlKHRpdGxlLCBtX2ZyYW1lKTsKLSAgICBpZiAoIXRyaW1tZWQuaXNF
bXB0eSgpICYmIG1fcGFnZVRpdGxlICE9IHRyaW1tZWQpIHsKKyAgICBpZiAobV9wYWdlVGl0bGUg
IT0gdGl0bGUpIHsKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+d2lsbENoYW5nZVRpdGxlKHRoaXMp
OwotICAgICAgICBtX3BhZ2VUaXRsZSA9IHRyaW1tZWQ7CisgICAgICAgIG1fcGFnZVRpdGxlID0g
dGl0bGU7CiAgICAgICAgIGZyYW1lTG9hZGVyKCktPmRpZENoYW5nZVRpdGxlKHRoaXMpOwogICAg
IH0KIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyODU0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDEtMDYgIENocmlzdGlhbiBT
ZWplcnNlbiAgPGNocmlzdGlhbi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJl
cGxhY2Ugb3IgcmVtb3ZlIHNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDMyCisKKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1
bWVudC9kb2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qczog
QWRkZWQuCisKIDIwMTAtMDEtMDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1n
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9j
dW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNCBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGlu
ZyB0aGUgZG9jdW1lbnQudGl0bGUgYXR0cmlidXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworVGVzdCB3aXRoIG5vIHRpdGxlIHNldAorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAi
IgorVGVzdCB3aXRoIGVtcHR5IHRpdGxlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICIiCitUZXN0
IHdpdGggb25seSB3aGl0ZXNwYWNlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICIiCitUZXN0IHdp
dGggbm8gd2hpdGVzcGFjZQorUEFTUyBkb2N1bWVudC50aXRsZSBpcyAibm93aGl0ZXNwYWNldGl0
bGUiCitUZXN0IHdpdGggVW5pY29kZSB3aGl0ZXNwYWNlIGluIHRoZSBzcGFjZSBzZXBhcmF0b3Ig
Y2F0ZWdvcnkKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIm9uZSBzcGFjZSIKK1Rlc3Qgd2l0aCB3
aGl0ZXNwYWNlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitUZXN0IHdpdGgg
dmFyaW91cyB3aGl0ZXNwYWNlIGxlbmd0aHMgYW5kIGZpZWxkcworUEFTUyBkb2N1bWVudC50aXRs
ZSBpcyAibG90cyBvZiB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyIKK1Rlc3Qgd2l0aCB2YXJpb3Vz
IGxlbmd0aCBzdHJpbmdzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1l
bnQvZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0
LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9Eb2N1bWVudC9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2Rv
Y3VtZW50LXRpdGxlLWdldC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorZGVzY3Jp
cHRpb24oIlRoaXMgdGVzdCBjaGVja3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbmcgdGhl
IGRvY3VtZW50LnRpdGxlIGF0dHJpYnV0ZS4iKTsKKworZGVidWcoJ1Rlc3Qgd2l0aCBubyB0aXRs
ZSBzZXQnKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAiIik7CisK
K2RlYnVnKCdUZXN0IHdpdGggZW1wdHkgdGl0bGUnKTsKK2RvY3VtZW50LnRpdGxlID0gIiI7Citz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwiIik7CisKK2RlYnVnKCdUZXN0
IHdpdGggb25seSB3aGl0ZXNwYWNlJyk7Citkb2N1bWVudC50aXRsZSA9ICJcdFxuXHIgICAgXHIg
ICAgIFx0XG5cbiI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwiIik7
CisKK2RlYnVnKCdUZXN0IHdpdGggbm8gd2hpdGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAi
bm93aGl0ZXNwYWNldGl0bGUiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRs
ZSIsIm5vd2hpdGVzcGFjZXRpdGxlIik7CisKK2RlYnVnKCdUZXN0IHdpdGggd2hpdGVzcGFjZScp
OworZG9jdW1lbnQudGl0bGUgPSAiXHUwMDA5XHUwMDBhb25lXHUwMDBiXHUwMDBjc3BhY2VcdTAw
MGRcdTAwMjAiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRsZSIsIm9uZSBz
cGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgd2hpdGVzcGFjZSBsZW5ndGhzIGFu
ZCBmaWVsZHMnKTsKK2RvY3VtZW50LnRpdGxlID0gIiAgIGxvdHMgb2YgXHIgd2hpdGVzcGFjZSBh
bmQgXG5cblxuICAgIFx0ICAgIG5ld2xpbmVzIFx0IjsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygi
ZG9jdW1lbnQudGl0bGUiLCAibG90cyBvZiB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyIpOworCitk
ZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgbGVuZ3RoIHN0cmluZ3MnKTsKKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="28145"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="28154"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46028</attachid>
            <date>2010-01-07 00:15:08 -0800</date>
            <delta_ts>2010-01-07 13:32:24 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>canonical_title.4.patch</filename>
            <type>text/plain</type>
            <size>11798</size>
            <attacher name="Christian Sejersen">christian.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjkwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMDcgIENocmlzdGlhbiBTZWplcnNlbiAgPGNocmlzdGlh
bi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3IgcmVtb3ZlIHNw
YWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDMyCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQt
dGl0bGUtZ2V0Lmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KTogCisgICAgICAgIEluaXRpYWxpemF0aW9uIG9m
IG1fcmF3VGl0bGUKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6IAorICAg
ICAgICBNb3ZlZCBmcm9tIERvY3VtZW50TG9hZGVyLmNwcCB3aXRoIG1pbm9yIGVkaXRzCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVGl0bGUpOiAKKyAgICAgICAgRW5zdXJlcyB0
aGUgdGl0bGUgaXMgY2Fub25pY2FsaXplZAorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNl
dFRpdGxlKTogCisgICAgICAgIFVzZXMgbV9yYXdUaXRsZSBpbnN0YWVkIG9mIG1fdGl0bGUgCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlVGl0bGUpOiAKKyAgICAgICAgVXNlcyBt
X3Jhd1RpdGxlIGluc3RlYWQgb2YgbV90aXRsZQorICAgICAgICAKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDogCisgICAgICAgIEFkZGVkIG1fcmF3VGl0bGUgdGhhdCBzdG9yZXMgdGhlIHBhc3Nl
ZCBpbiB0aXRsZSwgbV90aXRsZSBub3cgc3RvcmVzIHRoZSAKKyAgICAgICAgY2Fub25pY2FsaXpl
ZCB0aXRsZQorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldFRpdGxlKTogCisgICAgICAgIFRo
ZSB0aXRsZSBwYXNzZWQgaW4gaXMgbm93IGNhbm9uaWNhbGl6ZWQgaW4gRG9jdW1lbnQuY3BwCisK
IDIwMTAtMDEtMDYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA1MjkwMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDYgKzExNCw3IEBACiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
U3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTMyMyw2ICszMjQsNyBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAgICAgLCBtX3N0eWxl
UmVjYWxjVGltZXIodGhpcywgJkRvY3VtZW50OjpzdHlsZVJlY2FsY1RpbWVyRmlyZWQpCiAgICAg
LCBtX2ZyYW1lRWxlbWVudHNTaG91bGRJZ25vcmVTY3JvbGxpbmcoZmFsc2UpCiAgICAgLCBtX3Rp
dGxlKCIiKQorICAgICwgbV9yYXdUaXRsZSgiIikKICAgICAsIG1fdGl0bGVTZXRFeHBsaWNpdGx5
KGZhbHNlKQogICAgICwgbV91cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lcih0aGlzLCAmRG9jdW1l
bnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyRmlyZWQpCiAgICAgLCBtX2V4ZWN1dGVTY3Jp
cHRTb29uVGltZXIodGhpcywgJkRvY3VtZW50OjpleGVjdXRlU2NyaXB0U29vblRpbWVyRmlyZWQp
CkBAIC0xMDYzLDggKzEwNjUsNjcgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFj
Y2Vzc0tleQogICAgIHJldHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkp
OwogfQogCisvKgorICogUGVyZm9ybXMgdGhyZWUgb3BlcmF0aW9uczoKKyAqICAxLiBDb252ZXJ0
IGNvbnRyb2wgY2hhcmFjdGVycyB0byBzcGFjZXMKKyAqICAyLiBUcmltIGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHNwYWNlcworICogIDMuIENvbGxhcHNlIGludGVybmFsIHdoaXRlc3BhY2UuCisgKi8K
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSB0aXRsZS5jaGFyYWN0ZXJzKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0bGUubGVuZ3Ro
KCk7CisgICAgdW5zaWduZWQgaTsKKworICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKTsK
KyAgICB1bnNpZ25lZCBidWlsZGVySW5kZXggPSAwOworCisgICAgLy8gU2tpcCBsZWFkaW5nIHNw
YWNlcyBhbmQgbGVhZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBzcGFjZXMK
KyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGNo
YXJhY3RlcnNbaV07CisgICAgICAgIGlmICghKGMgPD0gMHgyMCB8fCBjID09IDB4N0YpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGkgPT0gbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gIiI7CisKKyAgICAvLyBSZXBsYWNlIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoIHNwYWNl
cywgYW5kIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scywgYW5kIGNvbGxhcHNlIHdo
aXRlc3BhY2UuCisgICAgYm9vbCBwcmV2aW91c0NoYXJXYXNXUyA9IGZhbHNlOworICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Cisg
ICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNvZGU6OmNhdGVn
b3J5KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVuaWNvZGU6OlNl
cGFyYXRvcl9QYXJhZ3JhcGgpKSkgeworICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2hhcldhc1dT
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYnVmZmVyW2J1aWxkZXJJ
bmRleCsrXSA9ICcgJzsKKyAgICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgrK10gPSBjOwor
ICAgICAgICAgICAgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNwYWNlcworICAgIHdoaWxlIChidWlsZGVySW5kZXgg
PiAwKSB7CisgICAgICAgIC0tYnVpbGRlckluZGV4OworICAgICAgICBpZiAoYnVmZmVyW2J1aWxk
ZXJJbmRleF0gIT0gJyAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFi
dWlsZGVySW5kZXggJiYgYnVmZmVyW2J1aWxkZXJJbmRleF0gPT0gJyAnKQorICAgICAgICByZXR1
cm4gIiI7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1aWxkZXJJbmRleCArIDEpOworCisgICAgLy8g
UmVwbGFjZSB0aGUgYmFja3NsYXNoZXMgd2l0aCBjdXJyZW5jeSBzeW1ib2xzIGlmIHRoZSBlbmNv
ZGluZyByZXF1aXJlcyBpdC4KKyAgICBkb2N1bWVudC0+ZGlzcGxheUJ1ZmZlck1vZGlmaWVkQnlF
bmNvZGluZyhidWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXIubGVuZ3RoKCkpOworICAgIAorICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0
ZVRpdGxlKCkKIHsKKyAgICBtX3RpdGxlID0gY2Fub25pY2FsaXplZFRpdGxlKHRoaXMsIG1fcmF3
VGl0bGUpOwogICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCiAgICAgICAgIGYtPmxvYWRlcigp
LT5zZXRUaXRsZShtX3RpdGxlKTsKIH0KQEAgLTEwOTEsMTAgKzExNTIsMTAgQEAgdm9pZCBEb2N1
bWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aQogICAgICAgICBtX3RpdGxlRWxlbWVudCA9
IHRpdGxlRWxlbWVudDsKICAgICB9CiAKLSAgICBpZiAobV90aXRsZSA9PSB0aXRsZSkKKyAgICBp
ZiAobV9yYXdUaXRsZSA9PSB0aXRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aXRsZSA9
IHRpdGxlOworICAgIG1fcmF3VGl0bGUgPSB0aXRsZTsKICAgICB1cGRhdGVUaXRsZSgpOwogCiAg
ICAgaWYgKG1fdGl0bGVTZXRFeHBsaWNpdGx5ICYmIG1fdGl0bGVFbGVtZW50ICYmIG1fdGl0bGVF
bGVtZW50LT5oYXNUYWdOYW1lKHRpdGxlVGFnKSkKQEAgLTExMTksOCArMTE4MCw4IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZVRpdGxlKEVsZW1lbnQqIHRpdGwKICAgICAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoIW1fdGl0bGVFbGVtZW50ICYmICFtX3RpdGxlLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX3RpdGxlID0gIiI7CisgICAgaWYgKCFtX3RpdGxlRWxlbWVudCAmJiAhbV9yYXdUaXRs
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yYXdUaXRsZSA9ICIiOwogICAgICAgICB1cGRhdGVU
aXRsZSgpOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNTI5MDIpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDYgKzEwNjksNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9mcmFtZUVsZW1lbnRzU2hvdWxkSWdub3JlU2Nyb2xsaW5nOwogCiAg
ICAgU3RyaW5nIG1fdGl0bGU7CisgICAgU3RyaW5nIG1fcmF3VGl0bGU7CiAgICAgYm9vbCBtX3Rp
dGxlU2V0RXhwbGljaXRseTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDUyOTAyKQorKysgV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgog
I2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
QEAgLTU0LDY3ICs1Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLyoKLSAqIFBlcmZv
cm1zIGZvdXIgb3BlcmF0aW9uczoKLSAqICAxLiBDb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGN1cnJl
bmN5IHN5bWJvbHMKLSAqICAyLiBDb252ZXJ0IGNvbnRyb2wgY2hhcmFjdGVycyB0byBzcGFjZXMK
LSAqICAzLiBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcwotICogIDQuIENvbGxhcHNl
IGludGVybmFsIHdoaXRlc3BhY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhbm9uaWNh
bGl6ZWRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNT
RVJUKCF0aXRsZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0
aXRsZS5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0bGUubGVuZ3RoKCk7
Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKTsKLSAg
ICB1bnNpZ25lZCBidWlsZGVySW5kZXggPSAwOwotCi0gICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNl
cyBhbmQgbGVhZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBzcGFjZXMKLSAg
ICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJh
Y3RlcnNbaV07Ci0gICAgICAgIGlmICghKGMgPD0gMHgyMCB8fCBjID09IDB4N0YpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGkgPT0gbGVuZ3RoKQotICAgICAgICByZXR1
cm4gIiI7Ci0KLSAgICAvLyBSZXBsYWNlIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoIHNwYWNlcywg
YW5kIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scywgYW5kIGNvbGxhcHNlIHdoaXRl
c3BhY2UuCi0gICAgYm9vbCBwcmV2aW91c0NoYXJXYXNXUyA9IGZhbHNlOwotICAgIGZvciAoOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07Ci0gICAg
ICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5
KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVuaWNvZGU6OlNlcGFy
YXRvcl9QYXJhZ3JhcGgpKSkgewotICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2hhcldhc1dTKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnVmZmVyW2J1aWxkZXJJbmRl
eCsrXSA9ICcgJzsKLSAgICAgICAgICAgIHByZXZpb3VzQ2hhcldhc1dTID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1ZmZlcltidWlsZGVySW5kZXgrK10gPSBjOwotICAg
ICAgICAgICAgcHJldmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFN0cmlwIHRyYWlsaW5nIHNwYWNlcwotICAgIHdoaWxlIChidWlsZGVySW5kZXggPiAw
KSB7Ci0gICAgICAgIC0tYnVpbGRlckluZGV4OwotICAgICAgICBpZiAoYnVmZmVyW2J1aWxkZXJJ
bmRleF0gIT0gJyAnKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFidWls
ZGVySW5kZXggJiYgYnVmZmVyW2J1aWxkZXJJbmRleF0gPT0gJyAnKQotICAgICAgICByZXR1cm4g
IiI7Ci0KLSAgICBidWZmZXIuc2hyaW5rKGJ1aWxkZXJJbmRleCArIDEpOwotICAgIAotICAgIC8v
IFJlcGxhY2UgdGhlIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scyBpZiB0aGUgZW5j
b2RpbmcgcmVxdWlyZXMgaXQuCi0gICAgZnJhbWUtPmRvY3VtZW50KCktPmRpc3BsYXlCdWZmZXJN
b2RpZmllZEJ5RW5jb2RpbmcoYnVmZmVyLmNoYXJhY3RlcnMoKSwgYnVmZmVyLmxlbmd0aCgpKTsK
LQotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci19Ci0KIHN0YXRpYyB2b2lkIGNh
bmNlbEFsbChjb25zdCBSZXNvdXJjZUxvYWRlclNldCYgbG9hZGVycykKIHsKICAgICBjb25zdCBS
ZXNvdXJjZUxvYWRlclNldCBjb3B5ID0gbG9hZGVyczsKQEAgLTY2MiwxMCArNjAwLDkgQEAgdm9p
ZCBEb2N1bWVudExvYWRlcjo6c2V0VGl0bGUoY29uc3QgU3RyaQogICAgIGlmICh0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB0cmltbWVkID0gY2Fub25pY2Fs
aXplZFRpdGxlKHRpdGxlLCBtX2ZyYW1lKTsKLSAgICBpZiAoIXRyaW1tZWQuaXNFbXB0eSgpICYm
IG1fcGFnZVRpdGxlICE9IHRyaW1tZWQpIHsKKyAgICBpZiAobV9wYWdlVGl0bGUgIT0gdGl0bGUp
IHsKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+d2lsbENoYW5nZVRpdGxlKHRoaXMpOwotICAgICAg
ICBtX3BhZ2VUaXRsZSA9IHRyaW1tZWQ7CisgICAgICAgIG1fcGFnZVRpdGxlID0gdGl0bGU7CiAg
ICAgICAgIGZyYW1lTG9hZGVyKCktPmRpZENoYW5nZVRpdGxlKHRoaXMpOwogICAgIH0KIH0KSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDUyOTA0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDEtMDcgIENocmlzdGlhbiBTZWplcnNlbiAg
PGNocmlzdGlhbi53ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGRvY3VtZW50LnRpdGxlIGRvZXMgbm90IHJlcGxhY2Ugb3Ig
cmVtb3ZlIHNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI3MDMyCisKKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1bWVudC9kb2N1
bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9E
b2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vRG9jdW1lbnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qczogQWRkZWQuCisK
IDIwMTAtMDEtMDYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LXRpdGxlLWdldC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9k
b2N1bWVudC10aXRsZS1nZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIy
IEBACitUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW5nIHRoZSBk
b2N1bWVudC50aXRsZSBhdHRyaWJ1dGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitUZXN0IHdpdGggbm8gdGl0bGUgc2V0CitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICIiCitUZXN0
IHdpdGggZW1wdHkgdGl0bGUKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIiIKK1Rlc3Qgd2l0aCBv
bmx5IHdoaXRlc3BhY2UKK1BBU1MgZG9jdW1lbnQudGl0bGUgaXMgIiIKK1Rlc3Qgd2l0aCBubyB3
aGl0ZXNwYWNlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICJub3doaXRlc3BhY2V0aXRsZSIKK1Rl
c3Qgd2l0aCB3aGl0ZXNwYWNlCitQQVNTIGRvY3VtZW50LnRpdGxlIGlzICJvbmUgc3BhY2UiCitU
ZXN0IHdpdGggdmFyaW91cyB3aGl0ZXNwYWNlIGxlbmd0aHMgYW5kIGZpZWxkcworUEFTUyBkb2N1
bWVudC50aXRsZSBpcyAibG90cyBvZiB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lcyIKK1Rlc3Qgd2l0
aCB2YXJpb3VzIGxlbmd0aCBzdHJpbmdzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQv
ZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vRG9jdW1lbnQvZG9jdW1lbnQtdGl0bGUtZ2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9kb2N1bWVudC10aXRsZS1nZXQuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9kb2N1bWVudC10aXRsZS1nZXQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1l
bnQvc2NyaXB0LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9zY3JpcHQtdGVzdHMvZG9jdW1lbnQtdGl0bGUtZ2V0
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvc2NyaXB0
LXRlc3RzL2RvY3VtZW50LXRpdGxlLWdldC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBA
QAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBjaGVja3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGdl
dHRpbmcgdGhlIGRvY3VtZW50LnRpdGxlIGF0dHJpYnV0ZS4iKTsKKworZGVidWcoJ1Rlc3Qgd2l0
aCBubyB0aXRsZSBzZXQnKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZG9jdW1lbnQudGl0bGUi
LCAiIik7CisKK2RlYnVnKCdUZXN0IHdpdGggZW1wdHkgdGl0bGUnKTsKK2RvY3VtZW50LnRpdGxl
ID0gIiI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRpdGxlIiwiIik7CisKK2Rl
YnVnKCdUZXN0IHdpdGggb25seSB3aGl0ZXNwYWNlJyk7Citkb2N1bWVudC50aXRsZSA9ICJcdFxu
XHIgICAgXHIgICAgIFx0XG5cbiI7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRvY3VtZW50LnRp
dGxlIiwiIik7CisKK2RlYnVnKCdUZXN0IHdpdGggbm8gd2hpdGVzcGFjZScpOworZG9jdW1lbnQu
dGl0bGUgPSAibm93aGl0ZXNwYWNldGl0bGUiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1
bWVudC50aXRsZSIsIm5vd2hpdGVzcGFjZXRpdGxlIik7CisKK2RlYnVnKCdUZXN0IHdpdGggd2hp
dGVzcGFjZScpOworZG9jdW1lbnQudGl0bGUgPSAiXHUwMDA5XHUwMDBhb25lXHUwMDBiXHUwMDBj
c3BhY2VcdTAwMGRcdTAwMjAiOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkb2N1bWVudC50aXRs
ZSIsIm9uZSBzcGFjZSIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgd2hpdGVzcGFjZSBs
ZW5ndGhzIGFuZCBmaWVsZHMnKTsKK2RvY3VtZW50LnRpdGxlID0gIiAgIGxvdHMgb2YgXHIgd2hp
dGVzcGFjZSBhbmQgXG5cblxuICAgIFx0ICAgIG5ld2xpbmVzIFx0IjsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygiZG9jdW1lbnQudGl0bGUiLCAibG90cyBvZiB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5l
cyIpOworCitkZWJ1ZygnVGVzdCB3aXRoIHZhcmlvdXMgbGVuZ3RoIHN0cmluZ3MnKTsKKwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>