<?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>37913</bug_id>
          
          <creation_ts>2010-04-20 23:59:36 -0700</creation_ts>
          <short_desc>MD5 is required for WebSocket new protocol implementation</short_desc>
          <delta_ts>2010-04-23 12:16:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>35572</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Fumitoshi Ukai">ukai</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>215181</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-20 23:59:36 -0700</bug_when>
    <thetext>WebSocket new protocol described in http://www.whatwg.org/specs/web-socket-protocol/ requires MD5 implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215240</commentid>
    <comment_count>1</comment_count>
      <attachid>53939</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-21 04:18:19 -0700</bug_when>
    <thetext>Created attachment 53939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215250</commentid>
    <comment_count>2</comment_count>
      <attachid>53939</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-04-21 04:48:03 -0700</bug_when>
    <thetext>Comment on attachment 53939
Patch

&gt; diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
&gt; index df0181e..4cbfb29 100644
&gt; --- a/JavaScriptCore/GNUmakefile.am
&gt; +++ b/JavaScriptCore/GNUmakefile.am
&gt; @@ -244,6 +244,8 @@ javascriptcore_sources += \
&gt;  	JavaScriptCore/wtf/ListHashSet.h \
&gt;  	JavaScriptCore/wtf/ListRefPtr.h \
&gt;  	JavaScriptCore/wtf/Locker.h \
&gt; +        JavaScriptCore/wtf/MD5.cpp \
&gt; +        JavaScriptCore/wtf/MD5.h \

This indentation looks wrong.


&gt; diff --git a/JavaScriptCore/wtf/MD5.cpp b/JavaScriptCore/wtf/MD5.cpp
&gt; new file mode 100644
&gt; index 0000000..5ad44c0
&gt; --- /dev/null
&gt; +++ b/JavaScriptCore/wtf/MD5.cpp
&gt; @@ -0,0 +1,232 @@
&gt; +// The original file was copied from sqlite, and was in the public domain.
&gt; +// Modifications Copyright 2006 Google Inc. All Rights Reserved

This suggests that the original code was in the public domain, but modifications are copyright Google.  Shouldn’t this mention which license Google is releasing their modifications under?

&gt; +#include &lt;wtf/OwnPtr.h&gt;

This doesn’t seem to be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215350</commentid>
    <comment_count>3</comment_count>
      <attachid>53939</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-21 09:19:06 -0700</bug_when>
    <thetext>Comment on attachment 53939
Patch

&gt;  	JavaScriptCore/wtf/Locker.h \
&gt; +        JavaScriptCore/wtf/MD5.cpp \
&gt; +        JavaScriptCore/wtf/MD5.h \
&gt;  	JavaScriptCore/wtf/MainThread.cpp \

Looks like existing entries here use tabs and your new entry uses spaces.

&gt; +static void byteReverse(uint8_t *buf, unsigned longs)

The &quot;*&quot; should be next to the type, uint8_t.

The name here is not great. The words &quot;byte reverse&quot; are not a verb phrase. I think reverseBytes would be better.

&gt; +{
&gt; +    uint32_t t;
&gt; +    do {
&gt; +        t = static_cast&lt;uint32_t&gt;(static_cast&lt;unsigned&gt;(buf[3]) &lt;&lt; 8 | buf[2]) &lt;&lt; 16 | (static_cast&lt;unsigned&gt;(buf[1]) &lt;&lt; 8 | buf[0]);

The casts to unsigned here are not helpful. The code will work fine without them, because the operation sizes are based on the type &quot;unsigned&quot; not the type &quot;uint8_t&quot; due how the C language works.

&gt; +        *(reinterpret_cast&lt;uint32_t *&gt;(buf)) = t;

There is an extra set of parentheses here that is to needed.

This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See StringHash.h for an example of this.

&gt; +        buf += 4;
&gt; +    } while (--longs);

Since this will malfunction if passed 0 for &quot;longs&quot; there should be an assertion that longs is non-zero.

&gt; +}
&gt; +// The four core functions - F1 is optimized somewhat
&gt; +

This comment is about the code below, so it should have a blank line before it and possibly no blank line below it.

&gt; +// #define F1(x, y, z) (x &amp; y | ~x &amp; z)
&gt; +#define F1(x, y, z) (z ^ (x &amp; (y ^ z)))

It is unclear to have the commented out F1 as well as the real F1. The comment above saying &quot;F1 is optimized somewhat&quot; does not make things clear enough. I think there&apos;s a better way to write the comment and say explicitly what&apos;s going on.

&gt; +#define F2(x, y, z) F1(z, x, y)
&gt; +#define F3(x, y, z) (x ^ y ^ z)
&gt; +#define F4(x, y, z) (y ^ (x | ~z))
&gt; +
&gt; +// This is the central step in the MD5 algorithm.
&gt; +#define MD5STEP(f, w, x, y, z, data, s) \
&gt; +    (w += f(x, y, z) + data,  w = w &lt;&lt; s | w &gt;&gt; (32 - s),  w += x)

Extra spaces here after the commas.

&gt; +    register uint32_t a, b, c, d;
&gt; +
&gt; +    a = buf[0];
&gt; +    b = buf[1];
&gt; +    c = buf[2];
&gt; +    d = buf[3];

The use of &quot;register&quot; here is quaint and outdated. No compiler we use responds to that keyword.

The variables should be declared when they are initialized, not on a separate line.

&gt; +    uint32_t t;
&gt; +
&gt; +    // Update bitcount
&gt; +
&gt; +    t = m_bits[0];

THe variable t should be initialized on the same line it&apos;s declared on.

&gt; +    if ((m_bits[0] = t + (static_cast&lt;uint32_t&gt;(length) &lt;&lt; 3)) &lt; t)

Is the static_cast here needed?

Can this code be written with the assignment outside the if statement instead?

&gt; +        m_bits[1]++; // Carry from low to high
&gt; +    m_bits[1] += static_cast&lt;uint32_t&gt;(length &gt;&gt; 29);

Is the static_cast here needed? Does it silence a warning?

&gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));

The &quot;*&quot; goes next to the type.

This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See StringHash.h for an example of this.

&gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));

The &quot;*&quot; goes next to the type.

This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See StringHash.h for an example of this.

&gt; +Vector&lt;uint8_t, 16&gt; MD5::checksum()
&gt; +{
&gt; +    unsigned count;
&gt; +    uint8_t* p;
&gt; +
&gt; +    // Compute number of bytes mod 64
&gt; +    count = (m_bits[0] &gt;&gt; 3) &amp; 0x3F;
&gt; +
&gt; +    // Set the first char of padding to 0x80.  This is safe since there is
&gt; +    // always at least one byte free
&gt; +    p = m_in + count;

THe variables count and p should be initialized on the same line they are declared on.

&gt; +        // Two lots of padding:  Pad the first block to 64 bytes

I don&apos;t understand the term &quot;lots of padding&quot;. What is a &quot;lot&quot;?

&gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));

The &quot;*&quot; goes next to the type.

This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See StringHash.h for an example of this.

&gt; +    // Append length in bits and transform
&gt; +    (reinterpret_cast&lt;uint32_t *&gt;(m_in))[14] = m_bits[0];
&gt; +    (reinterpret_cast&lt;uint32_t *&gt;(m_in))[15] = m_bits[1];
&gt; +
&gt; +    MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));

The &quot;*&quot; goes next to the type.

This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See StringHash.h for an example of this.

&gt; +    byteReverse(reinterpret_cast&lt;uint8_t *&gt;(m_buf), 4);

The &quot;*&quot; goes next to the type.

Does this work on both little-endian and big-endian platforms?

&gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; +#include &lt;wtf/Vector.h&gt;

There is no reason to include the OwnPtr.h header here.

&gt; +    ~MD5() { }

Please omit this destructor. It has no effect and matches what the compiler would generate if you didn&apos;t write anything.

&gt; +    void addBytes(const Vector&lt;uint8_t&gt;&amp; input)
&gt; +    {
&gt; +        addBytes(input.data(), input.size());
&gt; +    }
&gt; +    void addBytes(const uint8_t* input, size_t length);
&gt; +    Vector&lt;uint8_t, 16&gt; checksum();

I think you need some sort of comment to make clear that calling checksum has a side effect of resetting the state of the object. And the checksum function should go in a separate paragraph.

I know that often we have classes with no testing. But it&apos;s critical we have a unit test for this class somewhere. If nothing else, people porting will need to know that this compiled and works properly. It could be as simple as having a debug only function that runs the unit test in debug builds the first time the MD5 constructor is called.

review- primarily because of the alignment issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215710</commentid>
    <comment_count>4</comment_count>
      <attachid>54026</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-21 23:08:45 -0700</bug_when>
    <thetext>Created attachment 54026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215714</commentid>
    <comment_count>5</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-21 23:12:36 -0700</bug_when>
    <thetext>Thanks for review.

(In reply to comment #2)
&gt; (From update of attachment 53939 [details])
&gt; &gt; diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
&gt; &gt; index df0181e..4cbfb29 100644
&gt; &gt; --- a/JavaScriptCore/GNUmakefile.am
&gt; &gt; +++ b/JavaScriptCore/GNUmakefile.am
&gt; &gt; @@ -244,6 +244,8 @@ javascriptcore_sources += \
&gt; &gt;  	JavaScriptCore/wtf/ListHashSet.h \
&gt; &gt;  	JavaScriptCore/wtf/ListRefPtr.h \
&gt; &gt;  	JavaScriptCore/wtf/Locker.h \
&gt; &gt; +        JavaScriptCore/wtf/MD5.cpp \
&gt; &gt; +        JavaScriptCore/wtf/MD5.h \
&gt; 
&gt; This indentation looks wrong.

Fixed.

&gt; 
&gt; 
&gt; &gt; diff --git a/JavaScriptCore/wtf/MD5.cpp b/JavaScriptCore/wtf/MD5.cpp
&gt; &gt; new file mode 100644
&gt; &gt; index 0000000..5ad44c0
&gt; &gt; --- /dev/null
&gt; &gt; +++ b/JavaScriptCore/wtf/MD5.cpp
&gt; &gt; @@ -0,0 +1,232 @@
&gt; &gt; +// The original file was copied from sqlite, and was in the public domain.
&gt; &gt; +// Modifications Copyright 2006 Google Inc. All Rights Reserved
&gt; 
&gt; This suggests that the original code was in the public domain, but
&gt; modifications are copyright Google.  Shouldn’t this mention which license
&gt; Google is releasing their modifications under?

Add license terms.

&gt; 
&gt; &gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; 
&gt; This doesn’t seem to be used.

Oops. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215717</commentid>
    <comment_count>6</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-21 23:22:47 -0700</bug_when>
    <thetext>Thanks for review.

(In reply to comment #3)
&gt; (From update of attachment 53939 [details])
&gt; &gt;  	JavaScriptCore/wtf/Locker.h \
&gt; &gt; +        JavaScriptCore/wtf/MD5.cpp \
&gt; &gt; +        JavaScriptCore/wtf/MD5.h \
&gt; &gt;  	JavaScriptCore/wtf/MainThread.cpp \
&gt; 
&gt; Looks like existing entries here use tabs and your new entry uses spaces.

Fixed.

&gt; 
&gt; &gt; +static void byteReverse(uint8_t *buf, unsigned longs)
&gt; 
&gt; The &quot;*&quot; should be next to the type, uint8_t.

Fixed.

&gt; 
&gt; The name here is not great. The words &quot;byte reverse&quot; are not a verb phrase. I
&gt; think reverseBytes would be better.

Ok. renamed to reverseBytes.

&gt; 
&gt; &gt; +{
&gt; &gt; +    uint32_t t;
&gt; &gt; +    do {
&gt; &gt; +        t = static_cast&lt;uint32_t&gt;(static_cast&lt;unsigned&gt;(buf[3]) &lt;&lt; 8 | buf[2]) &lt;&lt; 16 | (static_cast&lt;unsigned&gt;(buf[1]) &lt;&lt; 8 | buf[0]);
&gt; 
&gt; The casts to unsigned here are not helpful. The code will work fine without
&gt; them, because the operation sizes are based on the type &quot;unsigned&quot; not the type
&gt; &quot;uint8_t&quot; due how the C language works.

Ok. original code had (unsigned) cast here, but I agree we don&apos;t need it.
Removed casts to unsigned.

&gt; 
&gt; &gt; +        *(reinterpret_cast&lt;uint32_t *&gt;(buf)) = t;
&gt; 
&gt; There is an extra set of parentheses here that is to needed.

Fixed.
 
&gt; This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See
&gt; StringHash.h for an example of this.

I believe buf is always aligned to uint32_t natural boundary here.
I added assertion to check alignement.  Is it ok?

&gt; 
&gt; &gt; +        buf += 4;
&gt; &gt; +    } while (--longs);
&gt; 
&gt; Since this will malfunction if passed 0 for &quot;longs&quot; there should be an
&gt; assertion that longs is non-zero.

Add ASSERT(longs &gt; 0) at the beginning of reverseBytes().

&gt; 
&gt; &gt; +}
&gt; &gt; +// The four core functions - F1 is optimized somewhat
&gt; &gt; +
&gt; 
&gt; This comment is about the code below, so it should have a blank line before it
&gt; and possibly no blank line below it.
&gt; 
&gt; &gt; +// #define F1(x, y, z) (x &amp; y | ~x &amp; z)
&gt; &gt; +#define F1(x, y, z) (z ^ (x &amp; (y ^ z)))
&gt; 
&gt; It is unclear to have the commented out F1 as well as the real F1. The comment
&gt; above saying &quot;F1 is optimized somewhat&quot; does not make things clear enough. I
&gt; think there&apos;s a better way to write the comment and say explicitly what&apos;s going
&gt; on.

Updated.

&gt; 
&gt; &gt; +#define F2(x, y, z) F1(z, x, y)
&gt; &gt; +#define F3(x, y, z) (x ^ y ^ z)
&gt; &gt; +#define F4(x, y, z) (y ^ (x | ~z))
&gt; &gt; +
&gt; &gt; +// This is the central step in the MD5 algorithm.
&gt; &gt; +#define MD5STEP(f, w, x, y, z, data, s) \
&gt; &gt; +    (w += f(x, y, z) + data,  w = w &lt;&lt; s | w &gt;&gt; (32 - s),  w += x)
&gt; 
&gt; Extra spaces here after the commas.

Fixed.

&gt; 
&gt; &gt; +    register uint32_t a, b, c, d;
&gt; &gt; +
&gt; &gt; +    a = buf[0];
&gt; &gt; +    b = buf[1];
&gt; &gt; +    c = buf[2];
&gt; &gt; +    d = buf[3];
&gt; 
&gt; The use of &quot;register&quot; here is quaint and outdated. No compiler we use responds
&gt; to that keyword.
&gt; 
&gt; The variables should be declared when they are initialized, not on a separate
&gt; line.

Fixed.

&gt; 
&gt; &gt; +    uint32_t t;
&gt; &gt; +
&gt; &gt; +    // Update bitcount
&gt; &gt; +
&gt; &gt; +    t = m_bits[0];
&gt; 
&gt; THe variable t should be initialized on the same line it&apos;s declared on.

Fixed.

&gt; 
&gt; &gt; +    if ((m_bits[0] = t + (static_cast&lt;uint32_t&gt;(length) &lt;&lt; 3)) &lt; t)
&gt; 
&gt; Is the static_cast here needed?

I don&apos;t think we need casts here.  Removed.

&gt; 
&gt; Can this code be written with the assignment outside the if statement instead?

Ok. refactored.

&gt; 
&gt; &gt; +        m_bits[1]++; // Carry from low to high
&gt; &gt; +    m_bits[1] += static_cast&lt;uint32_t&gt;(length &gt;&gt; 29);
&gt; 
&gt; Is the static_cast here needed? Does it silence a warning?

Maybe, unnecessary.

&gt; 
&gt; &gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));
&gt; 
&gt; The &quot;*&quot; goes next to the type.

Fixed.
 
&gt; This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See
&gt; StringHash.h for an example of this.

I think m_in is always aligned to uint32_t natural boundary.
I added alignement check of m_in in MD5 constructor.  Is it ok?

&gt; 
&gt; &gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));
&gt; 
&gt; The &quot;*&quot; goes next to the type.

Fixed.

&gt; 
&gt; This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See
&gt; StringHash.h for an example of this.
&gt; 
&gt; &gt; +Vector&lt;uint8_t, 16&gt; MD5::checksum()
&gt; &gt; +{
&gt; &gt; +    unsigned count;
&gt; &gt; +    uint8_t* p;
&gt; &gt; +
&gt; &gt; +    // Compute number of bytes mod 64
&gt; &gt; +    count = (m_bits[0] &gt;&gt; 3) &amp; 0x3F;
&gt; &gt; +
&gt; &gt; +    // Set the first char of padding to 0x80.  This is safe since there is
&gt; &gt; +    // always at least one byte free
&gt; &gt; +    p = m_in + count;
&gt; 
&gt; THe variables count and p should be initialized on the same line they are
&gt; declared on.

Fixed.

&gt; 
&gt; &gt; +        // Two lots of padding:  Pad the first block to 64 bytes
&gt; 
&gt; I don&apos;t understand the term &quot;lots of padding&quot;. What is a &quot;lot&quot;?
&gt; 
&gt; &gt; +        MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));
&gt; 
&gt; The &quot;*&quot; goes next to the type.

Fixed.

&gt; 
&gt; This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See
&gt; StringHash.h for an example of this.
&gt; 
&gt; &gt; +    // Append length in bits and transform
&gt; &gt; +    (reinterpret_cast&lt;uint32_t *&gt;(m_in))[14] = m_bits[0];
&gt; &gt; +    (reinterpret_cast&lt;uint32_t *&gt;(m_in))[15] = m_bits[1];
&gt; &gt; +
&gt; &gt; +    MD5Transform(m_buf, reinterpret_cast&lt;uint32_t *&gt;(m_in));
&gt; 
&gt; The &quot;*&quot; goes next to the type.

Fixed.

&gt; 
&gt; This won&apos;t work on all WebKit platforms -- some CPUs require alignment. See
&gt; StringHash.h for an example of this.
&gt; 
&gt; &gt; +    byteReverse(reinterpret_cast&lt;uint8_t *&gt;(m_buf), 4);
&gt; 
&gt; The &quot;*&quot; goes next to the type.

Fixed.

&gt; 
&gt; Does this work on both little-endian and big-endian platforms?

I think so, because it comes from sqlite and I believe sqlite works on both little-endian and big-endian platforms.

&gt; 
&gt; &gt; +#include &lt;wtf/OwnPtr.h&gt;
&gt; &gt; +#include &lt;wtf/Vector.h&gt;
&gt; 
&gt; There is no reason to include the OwnPtr.h header here.

Fixed.

&gt; 
&gt; &gt; +    ~MD5() { }
&gt; 
&gt; Please omit this destructor. It has no effect and matches what the compiler
&gt; would generate if you didn&apos;t write anything.

Removed.

&gt; 
&gt; &gt; +    void addBytes(const Vector&lt;uint8_t&gt;&amp; input)
&gt; &gt; +    {
&gt; &gt; +        addBytes(input.data(), input.size());
&gt; &gt; +    }
&gt; &gt; +    void addBytes(const uint8_t* input, size_t length);
&gt; &gt; +    Vector&lt;uint8_t, 16&gt; checksum();
&gt; 
&gt; I think you need some sort of comment to make clear that calling checksum has a
&gt; side effect of resetting the state of the object. And the checksum function
&gt; should go in a separate paragraph.

Ok.  Added comments and separete paragraph for checksum().

&gt; 
&gt; I know that often we have classes with no testing. But it&apos;s critical we have a
&gt; unit test for this class somewhere. If nothing else, people porting will need
&gt; to know that this compiled and works properly. It could be as simple as having
&gt; a debug only function that runs the unit test in debug builds the first time
&gt; the MD5 constructor is called.

Added.

&gt; 
&gt; review- primarily because of the alignment issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216024</commentid>
    <comment_count>7</comment_count>
      <attachid>54026</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-22 12:43:22 -0700</bug_when>
    <thetext>Comment on attachment 54026
Patch

JavaScriptCore/wtf/MD5.cpp:74
 +        snprintf(buf, 3, &quot;%02x&quot;, digest.at(i));
Why the mix of two space and four space indent?

JavaScriptCore/wtf/MD5.h:31
 +  #ifndef MD5_h
I thought we had a WTF in the header guards in WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216182</commentid>
    <comment_count>8</comment_count>
      <attachid>54026</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-22 17:32:34 -0700</bug_when>
    <thetext>Comment on attachment 54026
Patch

JavaScriptCore/wtf/MD5.cpp:61
 +  #define testMD5() /* do nothing */
Could use an inline function instead of a macro for this.

JavaScriptCore/wtf/MD5.cpp:112
 +  // #define F1(x, y, z) (x &amp; y | ~x &amp; z)
This line should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216196</commentid>
    <comment_count>9</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-22 18:08:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 54026 [details])
&gt; JavaScriptCore/wtf/MD5.cpp:74
&gt;  +        snprintf(buf, 3, &quot;%02x&quot;, digest.at(i));
&gt; Why the mix of two space and four space indent?

Fixed.

&gt; 
&gt; JavaScriptCore/wtf/MD5.h:31
&gt;  +  #ifndef MD5_h
&gt; I thought we had a WTF in the header guards in WTF.

Ok. but check-webkit-style reports
JavaScriptCore/wtf/MD5.h:31:  #ifndef header guard has wrong style, please use: MD5_h  [build/header_guard] [5]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216197</commentid>
    <comment_count>10</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-22 18:09:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 54026 [details])
&gt; JavaScriptCore/wtf/MD5.cpp:61
&gt;  +  #define testMD5() /* do nothing */
&gt; Could use an inline function instead of a macro for this.

Fixed.

&gt; 
&gt; JavaScriptCore/wtf/MD5.cpp:112
&gt;  +  // #define F1(x, y, z) (x &amp; y | ~x &amp; z)
&gt; This line should be removed.

Ok. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216198</commentid>
    <comment_count>11</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-22 18:13:59 -0700</bug_when>
    <thetext>Committed r58136: &lt;http://trac.webkit.org/changeset/58136&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216202</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-22 18:26:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58136 might have broken Chromium Mac Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53939</attachid>
            <date>2010-04-21 04:18:19 -0700</date>
            <delta_ts>2010-04-21 23:08:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37913-20100421201817.patch</filename>
            <type>text/plain</type>
            <size>20733</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3YzgwY2U0Li5mMWViNGI2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTAtMDQtMjEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTUQ1IGlzIHJlcXVp
cmVkIGZvciBXZWJTb2NrZXQgbmV3IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzkxMworCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5kZWY6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL01ENS5jcHA6IEFkZGVkLgorICAgICAgICAqIHd0Zi9NRDUuaDogQWRkZWQuCisK
IDIwMTAtMDQtMjAgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFu
b3RoZXIgYXR0ZW1wdCB0byBmaXggdGhlIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBk
ZjAxODFlLi40Y2JmYjI5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjQ0LDYgKzI0NCw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9MaXN0SGFz
aFNldC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTGlzdFJlZlB0ci5oIFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvTG9ja2VyLmggXAorICAgICAgICBKYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBc
CisgICAgICAgIEphdmFTY3JpcHRDb3JlL3d0Zi9NRDUuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3Rm
L01haW5UaHJlYWQuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvTWF0aEV4dHJhcy5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAppbmRleCA2YmY1Yjc3Li5kM2JhMGY5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCkBA
IC0zNTEsNiArMzUxLDkgQEAgX19aTjNXVEYzMmRvdWJsZVRvU3RyaW5nSW5KYXZhU2NyaXB0Rm9y
bWF0RWRQY1BqCiBfX1pOM1dURjM2bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4
RXYKIF9fWk4zV1RGMzdwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzRVBLYwog
X19aTjNXVEYzOHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4RXYKK19fWk4z
V1RGM01ENUMxRXYKK19fWk4zV1RGM01ENThjaGVja3N1bUV2CitfX1pOM1dURjNNRDU4YWRkQnl0
ZXNFUEtobQogX19aTjNXVEY1TXV0ZXg0bG9ja0V2CiBfX1pOM1dURjVNdXRleDZ1bmxvY2tFdgog
X19aTjNXVEY1TXV0ZXg3dHJ5TG9ja0V2CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5neXBpIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRl
eCBlZmNjMDNjLi5hZDMxMmVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXBpCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTM3
MCw2ICszNzAsOCBAQAogICAgICAgICAgICAgJ3d0Zi9MaXN0SGFzaFNldC5oJywKICAgICAgICAg
ICAgICd3dGYvTGlzdFJlZlB0ci5oJywKICAgICAgICAgICAgICd3dGYvTG9ja2VyLmgnLAorICAg
ICAgICAgICAgJ3d0Zi9NRDUuY3BwJywKKyAgICAgICAgICAgICd3dGYvTUQ1LmgnLAogICAgICAg
ICAgICAgJ3d0Zi9NYWluVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAnd3RmL01haW5UaHJlYWQu
aCcsCiAgICAgICAgICAgICAnd3RmL01hbGxvY1pvbmVTdXBwb3J0LmgnLApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUucHJvCmluZGV4IDYxZDkyY2UuLmFlODUzZjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5wcm8KQEAgLTE5NSw2ICsxOTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvZHRvYS5j
cHAgXAogICAgIHd0Zi9GYXN0TWFsbG9jLmNwcCBcCiAgICAgd3RmL0hhc2hUYWJsZS5jcHAgXAor
ICAgIHd0Zi9NRDUuY3BwIFwKICAgICB3dGYvTWFpblRocmVhZC5jcHAgXAogICAgIHd0Zi9xdC9N
YWluVGhyZWFkUXQuY3BwIFwKICAgICB3dGYvcXQvVGhyZWFkaW5nUXQuY3BwIFwKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWYgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IDI1NmY5YTcuLjU3NWFjNDUg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgpAQCAtMTEsNiAr
MTEsNyBAQCBFWFBPUlRTCiAgICAgPz8wSlNBcnJheUBKU0NAQFFBRUBWPyROb25OdWxsUGFzc1Jl
ZlB0ckBWU3RydWN0dXJlQEpTQ0BAQFdURkBAQUJWQXJnTGlzdEAxQEBaCiAgICAgPz8wSlNCeXRl
QXJyYXlASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAVj8kTm9uTnVsbFBhc3NSZWZQdHJAVlN0cnVj
dHVyZUBKU0NAQEBXVEZAQFBBVkJ5dGVBcnJheUA0QFBCVUNsYXNzSW5mb0AxQEBaCiAgICAgPz8w
SlNGdW5jdGlvbkBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBWPyROb25OdWxsUGFzc1JlZlB0ckBW
U3RydWN0dXJlQEpTQ0BAQFdURkBASEFCVklkZW50aWZpZXJAMUBQNkk/QVZKU1ZhbHVlQDFAMFBB
VkpTT2JqZWN0QDFAVjYxQEFCVkFyZ0xpc3RAMUBAWkBaCisgICAgPz8wTUQ1QFdURkBAUUFFQFha
CiAgICAgPz8wTXV0ZXhAV1RGQEBRQUVAWFoKICAgICA/PzBQcm90b3R5cGVGdW5jdGlvbkBKU0NA
QFFBRUBQQVZFeGVjU3RhdGVAMUBIQUJWSWRlbnRpZmllckAxQFA2ST9BVkpTVmFsdWVAMUAwUEFW
SlNPYmplY3RAMUBWNDFAQUJWQXJnTGlzdEAxQEBaQFoKICAgICA/PzBQcm90b3R5cGVGdW5jdGlv
bkBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBWPyROb25OdWxsUGFzc1JlZlB0ckBWU3RydWN0dXJl
QEpTQ0BAQFdURkBASEFCVklkZW50aWZpZXJAMUBQNkk/QVZKU1ZhbHVlQDFAMFBBVkpTT2JqZWN0
QDFAVjYxQEFCVkFyZ0xpc3RAMUBAWkBaCkBAIC01NSw2ICs1Niw3IEBAIEVYUE9SVFMKICAgICA/
YWRkQEF0b21pY1N0cmluZ0BXZWJDb3JlQEBDQT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBX
ZWJDb3JlQEBAV1RGQEBQQl9XSUlAWgogICAgID9hZGRASWRlbnRpZmllckBKU0NAQFNBP0FWPyRQ
YXNzUmVmUHRyQFZVU3RyaW5nSW1wbEBKU0NAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBCREBaCiAg
ICAgP2FkZEBQcm9wZXJ0eU5hbWVBcnJheUBKU0NAQFFBRVhQQVZVU3RyaW5nSW1wbEAyQEBaCisg
ICAgP2FkZEJ5dGVzQE1ENUBXVEZAQFFBRVhQQkVJQFoKICAgICA/YWRkUHJvcGVydHlUcmFuc2l0
aW9uQFN0cnVjdHVyZUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJ1Y3R1cmVASlNDQEBAV1RG
QEBQQVYxMkBBQlZJZGVudGlmaWVyQDJASVBBVkpTQ2VsbEAyQEFBSUBaCiAgICAgP2FkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVAU3RydWN0dXJlQEpTQ0BAU0E/QVY/JFBh
c3NSZWZQdHJAVlN0cnVjdHVyZUBKU0NAQEBXVEZAQFBBVjEyQEFCVklkZW50aWZpZXJAMkBJUEFW
SlNDZWxsQDJAQUFJQFoKICAgICA/YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbkBTdHJ1Y3R1
cmVASlNDQEBRQUVJQUJWSWRlbnRpZmllckAyQElQQVZKU0NlbGxAMkBAWgpAQCAtODgsNiArOTAs
NyBAQCBFWFBPUlRTCiAgICAgP2NoZWNrQ3VycmVudElkZW50aWZpZXJUYWJsZUBJZGVudGlmaWVy
QEpTQ0BAQ0FYUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRh
YmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9jaGVja1N5
bnRheEBKU0NAQFlBP0FWQ29tcGxldGlvbkAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlNvdXJjZUNvZGVA
MUBAWgorICAgID9jaGVja3N1bUBNRDVAV1RGQEBRQUU/QVY/JFZlY3RvckBFJDBCQUBAMkBYWgog
ICAgID9jbGFzc0luZm9ASW50ZXJuYWxGdW5jdGlvbkBKU0NAQFVCRVBCVUNsYXNzSW5mb0AyQFha
CiAgICAgP2NsYXNzSW5mb0BKU0NlbGxASlNDQEBVQkVQQlVDbGFzc0luZm9AMkBYWgogICAgID9j
bGFzc05hbWVASlNPYmplY3RASlNDQEBVQkU/QVZVU3RyaW5nQDJAWFoKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiBiL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagppbmRleCAwMTQ1
MzExLi4yY2VkMmJjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL1dURi9XVEYudmNwcm9qCkBAIC0zNzMsNiArMzczLDE0IEBACiAJCQk+DQogCQk8L0Zp
bGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ENS5jcHAiDQorCQkJ
Pg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNRDUu
aCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
d3RmXE1haW5UaHJlYWQuY3BwIg0KIAkJCT4NCiAJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwYWZmMDc4Li5mMmE0MTRlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3Niw2ICsxNzYsOCBAQAog
CQk0MTM1OUNGNzBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMzU5Q0Y1MEZERDg5Q0IwMDIwNjE4MCAv
KiBEYXRlTWF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTQ0MDlEODQ3MEZBRjgwQTIwMDUyM0I4NyAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MEI3QUVEMEZBRjdGQ0Iw
MDczMzIzRSAvKiBPd25QdHJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0NERENDg1MzBGQUVBODUwMDBENkI0RUIgLyogUGFzc093blB0
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRERDQ4
NTIwRkFFQTg1MDAwRDZCNEVCIC8qIFBhc3NPd25QdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTFGQzRDOTExN0VFMjg3MDA0MjUyNzIgLyog
TUQ1LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MUZDNEM3MTE3RUUyM0QwMDQyNTI3MiAvKiBNRDUuY3BwICovOyB9OworCQk1MTFGQzRDQjExN0VF
MkE4MDA0MjUyNzIgLyogTUQ1LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTFGQzRDQTExN0VFMkE4MDA0MjUyNzIgLyogTUQ1LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUQ1MzcyNkYwRTFDNTQ4ODAw
MjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVENTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi87IH07CiAJ
CTVENUQ4QUI2MEUwRDBBNzIwMEY5QzY5MiAvKiBqc2MgaW4gQ29weSBJbnRvIEZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJFMTA4MjJBMUM3MDA3MzY5
NzUgLyoganNjICovOyB9OwogCQk1RDVEOEFEMTBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5k
eWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVE
NUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliICovOyB9OwpAQCAtNjcyLDYg
KzY3NCw4IEBACiAJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRERDQ4NTIwRkFFQTg1MDAw
RDZCNEVCIC8qIFBhc3NPd25QdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFzc093blB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUUxMkQ4ODA2QTQ5
QjBGMDBFOURGODQgLyoganNjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGpzYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gNDsgfTsKKwkJNTExRkM0QzcxMTdFRTIzRDAwNDI1MjcyIC8qIE1ENS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNRDUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTFGQzRDQTExN0VFMkE4MDA0MjUyNzIgLyogTUQ1LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ENS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTg2MTExRDBDQzgyNDgzMDA4MTQxMkIgLyogRGVxdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVxdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0
ZT4iOyB9OwogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2JqYy5keWxpYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5t
YWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9i
amMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xMzM1LDYgKzEzMzks
OCBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTFGQzRDQTExN0VFMkE4MDA0MjUyNzIg
LyogTUQ1LmggKi8sCisJCQkJNTExRkM0QzcxMTdFRTIzRDAwNDI1MjcyIC8qIE1ENS5jcHAgKi8s
CiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKIAkJCQk4NjU2NTczRTEx
NUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMg
LyogdW5pY29kZSAqLywKQEAgLTIwOTIsNiArMjA5OCw3IEBACiAJCQkJODZCOTlBQjkxMTdFMzkx
RTAwREY1QTkwIC8qIFJvcGVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkI5OUFFMzExN0U1
NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkI5OUFF
NDExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nSW1wbEJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMUZDNENCMTE3RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU0
MCw2ICsyNTQ3LDcgQEAKIAkJCQk4NjhCRkEwRTExN0NFRkQxMDBCOTA4QjEgLyogU3RyaW5nSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjhCRkExNzExN0NGMTk5MDBCOTA4QjEgLyogV1RG
U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Qjk5QUI4MTE3RTM5MUUwMERGNUE5MCAv
KiBSb3BlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFGQzRDOTExN0VFMjg3MDA0MjUy
NzIgLyogTUQ1LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
d3RmL01ENS5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41YWQ0NGMwCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5jcHAKQEAgLTAsMCArMSwyMzIgQEAKKy8vIFRoZSBvcmlnaW5hbCBmaWxl
IHdhcyBjb3BpZWQgZnJvbSBzcWxpdGUsIGFuZCB3YXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisv
LyBNb2RpZmljYXRpb25zIENvcHlyaWdodCAyMDA2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQKKworLyoKKyAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIHRoZSBNRDUgbWVzc2FnZS1kaWdl
c3QgYWxnb3JpdGhtLgorICogVGhlIGFsZ29yaXRobSBpcyBkdWUgdG8gUm9uIFJpdmVzdC4gIFRo
aXMgY29kZSB3YXMKKyAqIHdyaXR0ZW4gYnkgQ29saW4gUGx1bWIgaW4gMTk5Mywgbm8gY29weXJp
Z2h0IGlzIGNsYWltZWQuCisgKiBUaGlzIGNvZGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW47IGRv
IHdpdGggaXQgd2hhdCB5b3Ugd2lzaC4KKyAqCisgKiBFcXVpdmFsZW50IGNvZGUgaXMgYXZhaWxh
YmxlIGZyb20gUlNBIERhdGEgU2VjdXJpdHksIEluYy4KKyAqIFRoaXMgY29kZSBoYXMgYmVlbiB0
ZXN0ZWQgYWdhaW5zdCB0aGF0LCBhbmQgaXMgZXF1aXZhbGVudCwKKyAqIGV4Y2VwdCB0aGF0IHlv
dSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdHdvIHBhZ2VzIG9mIGxlZ2FsZXNlCisgKiB3aXRoIGV2
ZXJ5IGNvcHkuCisgKgorICogVG8gY29tcHV0ZSB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBjaHVu
ayBvZiBieXRlcywgY29uc3RydWN0IGFuCisgKiBNRDUgaW5zdGFuY2UsIGNhbGwgYWRkQnl0ZXMg
YXMgbmVlZGVkIG9uIGJ1ZmZlcnMgZnVsbCBvZiBieXRlcywKKyAqIGFuZCB0aGVuIGNhbGwgY2hl
Y2tzdW0sIHdoaWNoIHdpbGwgZmlsbCBhIHN1cHBsaWVkIDE2LWJ5dGUgYXJyYXkKKyAqIHdpdGgg
dGhlIGRpZ2VzdC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTUQ1Lmgi
CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgdm9pZCBieXRlUmV2ZXJzZSh1aW50OF90ICpi
dWYsIHVuc2lnbmVkIGxvbmdzKQoreworICAgIHVpbnQzMl90IHQ7CisgICAgZG8geworICAgICAg
ICB0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZbM10p
IDw8IDggfCBidWZbMl0pIDw8IDE2IHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZbMV0pIDw8
IDggfCBidWZbMF0pOworICAgICAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oYnVm
KSkgPSB0OworICAgICAgICBidWYgKz0gNDsKKyAgICB9IHdoaWxlICgtLWxvbmdzKTsKK30KKy8v
IFRoZSBmb3VyIGNvcmUgZnVuY3Rpb25zIC0gRjEgaXMgb3B0aW1pemVkIHNvbWV3aGF0CisKKy8v
ICNkZWZpbmUgRjEoeCwgeSwgeikgKHggJiB5IHwgfnggJiB6KQorI2RlZmluZSBGMSh4LCB5LCB6
KSAoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIEYyKHgsIHksIHopIEYxKHosIHgsIHkpCisj
ZGVmaW5lIEYzKHgsIHksIHopICh4IF4geSBeIHopCisjZGVmaW5lIEY0KHgsIHksIHopICh5IF4g
KHggfCB+eikpCisKKy8vIFRoaXMgaXMgdGhlIGNlbnRyYWwgc3RlcCBpbiB0aGUgTUQ1IGFsZ29y
aXRobS4KKyNkZWZpbmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBkYXRhLCBzKSBcCisgICAgKHcg
Kz0gZih4LCB5LCB6KSArIGRhdGEsICB3ID0gdyA8PCBzIHwgdyA+PiAoMzIgLSBzKSwgIHcgKz0g
eCkKKworc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKHVpbnQzMl90IGJ1Zls0XSwgY29uc3QgdWlu
dDMyX3QgaW5bMTZdKQoreworICAgIHJlZ2lzdGVyIHVpbnQzMl90IGEsIGIsIGMsIGQ7CisKKyAg
ICBhID0gYnVmWzBdOworICAgIGIgPSBidWZbMV07CisgICAgYyA9IGJ1ZlsyXTsKKyAgICBkID0g
YnVmWzNdOworCisgICAgTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bIDBdKzB4ZDc2YWE0Nzgs
ICA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsgMV0rMHhlOGM3Yjc1NiwgMTIp
OworICAgIE1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWyAyXSsweDI0MjA3MGRiLCAxNyk7Cisg
ICAgTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bIDNdKzB4YzFiZGNlZWUsIDIyKTsKKyAgICBN
RDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsgNF0rMHhmNTdjMGZhZiwgIDcpOworICAgIE1ENVNU
RVAoRjEsIGQsIGEsIGIsIGMsIGluWyA1XSsweDQ3ODdjNjJhLCAxMik7CisgICAgTUQ1U1RFUChG
MSwgYywgZCwgYSwgYiwgaW5bIDZdKzB4YTgzMDQ2MTMsIDE3KTsKKyAgICBNRDVTVEVQKEYxLCBi
LCBjLCBkLCBhLCBpblsgN10rMHhmZDQ2OTUwMSwgMjIpOworICAgIE1ENVNURVAoRjEsIGEsIGIs
IGMsIGQsIGluWyA4XSsweDY5ODA5OGQ4LCAgNyk7CisgICAgTUQ1U1RFUChGMSwgZCwgYSwgYiwg
YywgaW5bIDldKzB4OGI0NGY3YWYsIDEyKTsKKyAgICBNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBp
blsxMF0rMHhmZmZmNWJiMSwgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzEx
XSsweDg5NWNkN2JlLCAyMik7CisgICAgTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMTJdKzB4
NmI5MDExMjIsICA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10rMHhmZDk4
NzE5MywgMTIpOworICAgIE1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzE0XSsweGE2Nzk0Mzhl
LCAxNyk7CisgICAgTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdKzB4NDliNDA4MjEsIDIy
KTsKKworICAgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWyAxXSsweGY2MWUyNTYyLCAgNSk7
CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bIDZdKzB4YzA0MGIzNDAsICA5KTsKKyAg
ICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0rMHgyNjVlNWE1MSwgMTQpOworICAgIE1E
NVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWyAwXSsweGU5YjZjN2FhLCAyMCk7CisgICAgTUQ1U1RF
UChGMiwgYSwgYiwgYywgZCwgaW5bIDVdKzB4ZDYyZjEwNWQsICA1KTsKKyAgICBNRDVTVEVQKEYy
LCBkLCBhLCBiLCBjLCBpblsxMF0rMHgwMjQ0MTQ1MywgIDkpOworICAgIE1ENVNURVAoRjIsIGMs
IGQsIGEsIGIsIGluWzE1XSsweGQ4YTFlNjgxLCAxNCk7CisgICAgTUQ1U1RFUChGMiwgYiwgYywg
ZCwgYSwgaW5bIDRdKzB4ZTdkM2ZiYzgsIDIwKTsKKyAgICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBk
LCBpblsgOV0rMHgyMWUxY2RlNiwgIDUpOworICAgIE1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGlu
WzE0XSsweGMzMzcwN2Q2LCAgOSk7CisgICAgTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bIDNd
KzB4ZjRkNTBkODcsIDE0KTsKKyAgICBNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblsgOF0rMHg0
NTVhMTRlZCwgMjApOworICAgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzEzXSsweGE5ZTNl
OTA1LCAgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bIDJdKzB4ZmNlZmEzZjgs
ICA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsgN10rMHg2NzZmMDJkOSwgMTQp
OworICAgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSsweDhkMmE0YzhhLCAyMCk7CisK
KyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsgNV0rMHhmZmZhMzk0MiwgIDQpOworICAg
IE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWyA4XSsweDg3NzFmNjgxLCAxMSk7CisgICAgTUQ1
U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdKzB4NmQ5ZDYxMjIsIDE2KTsKKyAgICBNRDVTVEVQ
KEYzLCBiLCBjLCBkLCBhLCBpblsxNF0rMHhmZGU1MzgwYywgMjMpOworICAgIE1ENVNURVAoRjMs
IGEsIGIsIGMsIGQsIGluWyAxXSsweGE0YmVlYTQ0LCAgNCk7CisgICAgTUQ1U1RFUChGMywgZCwg
YSwgYiwgYywgaW5bIDRdKzB4NGJkZWNmYTksIDExKTsKKyAgICBNRDVTVEVQKEYzLCBjLCBkLCBh
LCBiLCBpblsgN10rMHhmNmJiNGI2MCwgMTYpOworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEs
IGluWzEwXSsweGJlYmZiYzcwLCAyMyk7CisgICAgTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5b
MTNdKzB4Mjg5YjdlYzYsICA0KTsKKyAgICBNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblsgMF0r
MHhlYWExMjdmYSwgMTEpOworICAgIE1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWyAzXSsweGQ0
ZWYzMDg1LCAxNik7CisgICAgTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bIDZdKzB4MDQ4ODFk
MDUsIDIzKTsKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsgOV0rMHhkOWQ0ZDAzOSwg
IDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzEyXSsweGU2ZGI5OWU1LCAxMSk7
CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTVdKzB4MWZhMjdjZjgsIDE2KTsKKyAg
ICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsgMl0rMHhjNGFjNTY2NSwgMjMpOworCisgICAg
TUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bIDBdKzB4ZjQyOTIyNDQsICA2KTsKKyAgICBNRDVT
VEVQKEY0LCBkLCBhLCBiLCBjLCBpblsgN10rMHg0MzJhZmY5NywgMTApOworICAgIE1ENVNURVAo
RjQsIGMsIGQsIGEsIGIsIGluWzE0XSsweGFiOTQyM2E3LCAxNSk7CisgICAgTUQ1U1RFUChGNCwg
YiwgYywgZCwgYSwgaW5bIDVdKzB4ZmM5M2EwMzksIDIxKTsKKyAgICBNRDVTVEVQKEY0LCBhLCBi
LCBjLCBkLCBpblsxMl0rMHg2NTViNTljMywgIDYpOworICAgIE1ENVNURVAoRjQsIGQsIGEsIGIs
IGMsIGluWyAzXSsweDhmMGNjYzkyLCAxMCk7CisgICAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwg
aW5bMTBdKzB4ZmZlZmY0N2QsIDE1KTsKKyAgICBNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsg
MV0rMHg4NTg0NWRkMSwgMjEpOworICAgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWyA4XSsw
eDZmYTg3ZTRmLCAgNik7CisgICAgTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTVdKzB4ZmUy
Y2U2ZTAsIDEwKTsKKyAgICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsgNl0rMHhhMzAxNDMx
NCwgMTUpOworICAgIE1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzEzXSsweDRlMDgxMWExLCAy
MSk7CisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bIDRdKzB4Zjc1MzdlODIsICA2KTsK
KyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxMV0rMHhiZDNhZjIzNSwgMTApOworICAg
IE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWyAyXSsweDJhZDdkMmJiLCAxNSk7CisgICAgTUQ1
U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bIDldKzB4ZWI4NmQzOTEsIDIxKTsKKworICAgIGJ1Zlsw
XSArPSBhOworICAgIGJ1ZlsxXSArPSBiOworICAgIGJ1ZlsyXSArPSBjOworICAgIGJ1ZlszXSAr
PSBkOworfQorCitNRDU6Ok1ENSgpCit7CisgICAgbV9idWZbMF0gPSAweDY3NDUyMzAxOworICAg
IG1fYnVmWzFdID0gMHhlZmNkYWI4OTsKKyAgICBtX2J1ZlsyXSA9IDB4OThiYWRjZmU7CisgICAg
bV9idWZbM10gPSAweDEwMzI1NDc2OworICAgIG1fYml0c1swXSA9IDA7CisgICAgbV9iaXRzWzFd
ID0gMDsKKyAgICBtZW1zZXQobV9pbiwgMCwgc2l6ZW9mKG1faW4pKTsKK30KKwordm9pZCBNRDU6
OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGNv
bnN0IHVpbnQ4X3QqIGJ1ZiA9IGlucHV0OworICAgIHVpbnQzMl90IHQ7CisKKyAgICAvLyBVcGRh
dGUgYml0Y291bnQKKworICAgIHQgPSBtX2JpdHNbMF07CisgICAgaWYgKChtX2JpdHNbMF0gPSB0
ICsgKHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGgpIDw8IDMpKSA8IHQpCisgICAgICAgIG1f
Yml0c1sxXSsrOyAvLyBDYXJyeSBmcm9tIGxvdyB0byBoaWdoCisgICAgbV9iaXRzWzFdICs9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGggPj4gMjkpOworCisgICAgdCA9ICh0ID4+IDMpICYg
MHgzZjsgLy8gQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhCisKKyAgICAvLyBIYW5kbGUg
YW55IGxlYWRpbmcgb2RkLXNpemVkIGNodW5rcworCisgICAgaWYgKHQpIHsKKyAgICAgICAgdWlu
dDhfdCogcCA9IG1faW4gKyB0OworCisgICAgICAgIHQgPSA2NCAtIHQ7CisgICAgICAgIGlmIChs
ZW5ndGggPCB0KSB7CisgICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW5ndGgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1lbWNweShwLCBidWYsIHQpOworICAg
ICAgICBieXRlUmV2ZXJzZShtX2luLCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShtX2J1Ziwg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCAqPihtX2luKSk7CisgICAgICAgIGJ1ZiArPSB0Owor
ICAgICAgICBsZW5ndGggLT0gdDsKKyAgICB9CisKKyAgICAvLyBQcm9jZXNzIGRhdGEgaW4gNjQt
Ynl0ZSBjaHVua3MKKworICAgIHdoaWxlIChsZW5ndGggPj0gNjQpIHsKKyAgICAgICAgbWVtY3B5
KG1faW4sIGJ1ZiwgNjQpOworICAgICAgICBieXRlUmV2ZXJzZShtX2luLCAxNik7CisgICAgICAg
IE1ENVRyYW5zZm9ybShtX2J1ZiwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCAqPihtX2luKSk7
CisgICAgICAgIGJ1ZiArPSA2NDsKKyAgICAgICAgbGVuZ3RoIC09IDY0OworICAgIH0KKworICAg
IC8vIEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzIG9mIGRhdGEuCisgICAgbWVtY3B5KG1faW4s
IGJ1ZiwgbGVuZ3RoKTsKK30KKworVmVjdG9yPHVpbnQ4X3QsIDE2PiBNRDU6OmNoZWNrc3VtKCkK
K3sKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICB1aW50OF90KiBwOworCisgICAgLy8gQ29tcHV0
ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDY0CisgICAgY291bnQgPSAobV9iaXRzWzBdID4+IDMpICYg
MHgzRjsKKworICAgIC8vIFNldCB0aGUgZmlyc3QgY2hhciBvZiBwYWRkaW5nIHRvIDB4ODAuICBU
aGlzIGlzIHNhZmUgc2luY2UgdGhlcmUgaXMKKyAgICAvLyBhbHdheXMgYXQgbGVhc3Qgb25lIGJ5
dGUgZnJlZQorICAgIHAgPSBtX2luICsgY291bnQ7CisgICAgKnArKyA9IDB4ODA7CisKKyAgICAv
LyBCeXRlcyBvZiBwYWRkaW5nIG5lZWRlZCB0byBtYWtlIDY0IGJ5dGVzCisgICAgY291bnQgPSA2
NCAtIDEgLSBjb3VudDsKKworICAgIC8vIFBhZCBvdXQgdG8gNTYgbW9kIDY0CisgICAgaWYgKGNv
dW50IDwgOCkgeworICAgICAgICAvLyBUd28gbG90cyBvZiBwYWRkaW5nOiAgUGFkIHRoZSBmaXJz
dCBibG9jayB0byA2NCBieXRlcworICAgICAgICBtZW1zZXQocCwgMCwgY291bnQpOworICAgICAg
ICBieXRlUmV2ZXJzZShtX2luLCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShtX2J1ZiwgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCAqPihtX2luKSk7CisKKyAgICAgICAgLy8gTm93IGZpbGwg
dGhlIG5leHQgYmxvY2sgd2l0aCA1NiBieXRlcworICAgICAgICBtZW1zZXQobV9pbiwgMCwgNTYp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFBhZCBibG9jayB0byA1NiBieXRlcworICAgICAg
ICBtZW1zZXQocCwgMCwgY291bnQgLSA4KTsKKyAgICB9CisgICAgYnl0ZVJldmVyc2UobV9pbiwg
MTQpOworCisgICAgLy8gQXBwZW5kIGxlbmd0aCBpbiBiaXRzIGFuZCB0cmFuc2Zvcm0KKyAgICAo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCAqPihtX2luKSlbMTRdID0gbV9iaXRzWzBdOworICAg
IChyZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KG1faW4pKVsxNV0gPSBtX2JpdHNbMV07CisK
KyAgICBNRDVUcmFuc2Zvcm0obV9idWYsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4obV9p
bikpOworICAgIGJ5dGVSZXZlcnNlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPihtX2J1Ziks
IDQpOworICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZGlnZXN0OworICAgIGRpZ2VzdC5hcHBlbmQo
bV9idWYsIDE2KTsKKyAgICAvLyBJbiBjYXNlIGl0J3Mgc2Vuc2l0aXZlCisgICAgbWVtc2V0KG1f
YnVmLCAwLCBzaXplb2YobV9idWYpKTsKKyAgICBtZW1zZXQobV9iaXRzLCAwLCBzaXplb2YobV9i
aXRzKSk7CisgICAgbWVtc2V0KG1faW4sIDAsIHNpemVvZihtX2luKSk7CisgICAgcmV0dXJuIGRp
Z2VzdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvTUQ1LmggYi9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjkyMDYyNgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9NRDUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNRDVfaAorI2RlZmluZSBNRDVf
aAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1ENSB7CitwdWJsaWM6CisgICAgTUQ1KCk7CisgICAg
fk1ENSgpIHsgfQorCisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGlu
cHV0KQorICAgIHsKKyAgICAgICAgYWRkQnl0ZXMoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCkp
OworICAgIH0KKyAgICB2b2lkIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGlucHV0LCBzaXplX3Qg
bGVuZ3RoKTsKKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGNoZWNrc3VtKCk7CisKK3ByaXZhdGU6
CisgICAgdWludDMyX3QgbV9idWZbNF07CisgICAgdWludDMyX3QgbV9iaXRzWzJdOworICAgIHVp
bnQ4X3QgbV9pbls2NF07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpN
RDU7CisKKyNlbmRpZiAvLyBNRDVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MGMyYTdkLi5hZGJiZjBmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDEwLTA0LTIxICBGdW1pdG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ENSBpcyByZXF1aXJlZCBm
b3IgV2ViU29ja2V0IG5ldyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc5MTMKKworICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3d0Zi9NRDUuaDogQWRkZWQuCisKIDIwMTAtMDQtMjEgIEd1c3Rhdm8gU3Zl
cnp1dCBCYXJiaWVyaSAgPGJhcmJpZXJpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL01ENS5oIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTUQ1LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2NTc4NgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ENS5oCkBAIC0wLDAgKzEsNSBA
QAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9NRDVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NRDVfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ENS5oPgorI2VuZGlmCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54026</attachid>
            <date>2010-04-21 23:08:45 -0700</date>
            <delta_ts>2010-04-22 17:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37913-20100422150843.patch</filename>
            <type>text/plain</type>
            <size>24262</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGIwNjFiLi45MzFhOWIyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTAtMDQtMjEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTUQ1IGlzIHJlcXVp
cmVkIGZvciBXZWJTb2NrZXQgbmV3IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzkxMworCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5kZWY6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL01ENS5jcHA6IEFkZGVkLgorICAgICAgICAqIHd0Zi9NRDUuaDogQWRkZWQuCisK
IDIwMTAtMDQtMjEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1
YmJlciBzdGFtcGVkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMmQwMjRj
MS4uN2QyZWI5ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTI0Niw2ICsyNDYsOCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTGlzdEhhc2hTZXQu
aCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RSZWZQdHIuaCBcCiAJSmF2YVNjcmlwdENvcmUv
d3RmL0xvY2tlci5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAgXAog
CUphdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9N
YXRoRXh0cmFzLmggXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU4ZTM0ZWUuLmMz
ZDMyNGQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTM0Niw2ICszNDYsOSBAQCBf
X1pOM1dURjMyZG91YmxlVG9TdHJpbmdJbkphdmFTY3JpcHRGb3JtYXRFZFBjUGoKIF9fWk4zV1RG
MzZsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhFdgogX19aTjNXVEYzN3BhcnNl
RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnNFUEtjCiBfX1pOM1dURjM4dW5sb2NrQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhFdgorX19aTjNXVEYzTUQ1QzFFdgorX19aTjNX
VEYzTUQ1OGNoZWNrc3VtRXYKK19fWk4zV1RGM01ENThhZGRCeXRlc0VQS2htCiBfX1pOM1dURjVN
dXRleDRsb2NrRXYKIF9fWk4zV1RGNU11dGV4NnVubG9ja0V2CiBfX1pOM1dURjVNdXRleDd0cnlM
b2NrRXYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IGFkMmQwOWUuLmJhZGZiYzYg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMzcwLDYgKzM3MCw4IEBACiAgICAg
ICAgICAgICAnd3RmL0xpc3RIYXNoU2V0LmgnLAogICAgICAgICAgICAgJ3d0Zi9MaXN0UmVmUHRy
LmgnLAogICAgICAgICAgICAgJ3d0Zi9Mb2NrZXIuaCcsCisgICAgICAgICAgICAnd3RmL01ENS5j
cHAnLAorICAgICAgICAgICAgJ3d0Zi9NRDUuaCcsCiAgICAgICAgICAgICAnd3RmL01haW5UaHJl
YWQuY3BwJywKICAgICAgICAgICAgICd3dGYvTWFpblRocmVhZC5oJywKICAgICAgICAgICAgICd3
dGYvTWFsbG9jWm9uZVN1cHBvcnQuaCcsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5wcm8gYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KaW5kZXgg
ZjMzYmUwNS4uZmJhMzRkZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwpAQCAtMTk0LDYg
KzE5NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9kdG9hLmNwcCBcCiAgICAgd3RmL0Zhc3RN
YWxsb2MuY3BwIFwKICAgICB3dGYvSGFzaFRhYmxlLmNwcCBcCisgICAgd3RmL01ENS5jcHAgXAog
ICAgIHd0Zi9NYWluVGhyZWFkLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgXAog
ICAgIHd0Zi9xdC9TdHJpbmdRdC5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZiBiL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5kZWYKaW5kZXggMmNkYmVkZi4uODAxMDY1OSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZgorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCkBAIC0xMSw2ICsxMSw3IEBAIEVYUE9SVFMKICAgICA/
PzBKU0FycmF5QEpTQ0BAUUFFQFY/JE5vbk51bGxQYXNzUmVmUHRyQFZTdHJ1Y3R1cmVASlNDQEBA
V1RGQEBBQlZBcmdMaXN0QDFAQFoKICAgICA/PzBKU0J5dGVBcnJheUBKU0NAQFFBRUBQQVZFeGVj
U3RhdGVAMUBWPyROb25OdWxsUGFzc1JlZlB0ckBWU3RydWN0dXJlQEpTQ0BAQFdURkBAUEFWQnl0
ZUFycmF5QDRAUEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/PzBKU0Z1bmN0aW9uQEpTQ0BAUUFFQFBB
VkV4ZWNTdGF0ZUAxQFY/JE5vbk51bGxQYXNzUmVmUHRyQFZTdHJ1Y3R1cmVASlNDQEBAV1RGQEBI
QUJWSWRlbnRpZmllckAxQFA2ST9BVkpTVmFsdWVAMUAwUEFWSlNPYmplY3RAMUBWNjFAQUJWQXJn
TGlzdEAxQEBaQFoKKyAgICA/PzBNRDVAV1RGQEBRQUVAWFoKICAgICA/PzBNdXRleEBXVEZAQFFB
RUBYWgogICAgID8/MFByb3RvdHlwZUZ1bmN0aW9uQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQEhB
QlZJZGVudGlmaWVyQDFAUDZJP0FWSlNWYWx1ZUAxQDBQQVZKU09iamVjdEAxQFY0MUBBQlZBcmdM
aXN0QDFAQFpAWgogICAgID8/MFByb3RvdHlwZUZ1bmN0aW9uQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0
ZUAxQFY/JE5vbk51bGxQYXNzUmVmUHRyQFZTdHJ1Y3R1cmVASlNDQEBAV1RGQEBIQUJWSWRlbnRp
ZmllckAxQFA2ST9BVkpTVmFsdWVAMUAwUEFWSlNPYmplY3RAMUBWNjFAQUJWQXJnTGlzdEAxQEBa
QFoKQEAgLTU0LDYgKzU1LDcgQEAgRVhQT1JUUwogICAgID9hZGRAQXRvbWljU3RyaW5nQFdlYkNv
cmVAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdlYkNvcmVAQEBXVEZAQFBCX1dJSUBa
CiAgICAgP2FkZEBJZGVudGlmaWVyQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxA
V2ViQ29yZUBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJEQFoKICAgICA/YWRkQFByb3BlcnR5TmFt
ZUFycmF5QEpTQ0BAUUFFWFBBVlN0cmluZ0ltcGxAV2ViQ29yZUBAQFoKKyAgICA/YWRkQnl0ZXNA
TUQ1QFdURkBAUUFFWFBCRUlAWgogICAgID9hZGRQcm9wZXJ0eVRyYW5zaXRpb25AU3RydWN0dXJl
QEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVlN0cnVjdHVyZUBKU0NAQEBXVEZAQFBBVjEyQEFCVklk
ZW50aWZpZXJAMkBJUEFWSlNDZWxsQDJAQUFJQFoKICAgICA/YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUBTdHJ1Y3R1cmVASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWU3Ry
dWN0dXJlQEpTQ0BAQFdURkBAUEFWMTJAQUJWSWRlbnRpZmllckAyQElQQVZKU0NlbGxAMkBBQUlA
WgogICAgID9hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uQFN0cnVjdHVyZUBKU0NAQFFBRUlB
QlZJZGVudGlmaWVyQDJASVBBVkpTQ2VsbEAyQEBaCkBAIC04Niw2ICs4OCw3IEBAIEVYUE9SVFMK
ICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50aWZpZXJASlNDQEBDQVhQQVZF
eGVjU3RhdGVAMkBAWgogICAgID9jaGVja0N1cnJlbnRJZGVudGlmaWVyVGFibGVASWRlbnRpZmll
ckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NoZWNrU3ludGF4QEpTQ0BAWUE/
QVZDb21wbGV0aW9uQDFAUEFWRXhlY1N0YXRlQDFAQUJWU291cmNlQ29kZUAxQEBaCisgICAgP2No
ZWNrc3VtQE1ENUBXVEZAQFFBRT9BVj8kVmVjdG9yQEUkMEJBQEAyQFhaCiAgICAgP2NsYXNzSW5m
b0BJbnRlcm5hbEZ1bmN0aW9uQEpTQ0BAVUJFUEJVQ2xhc3NJbmZvQDJAWFoKICAgICA/Y2xhc3NJ
bmZvQEpTQ2VsbEBKU0NAQFVCRVBCVUNsYXNzSW5mb0AyQFhaCiAgICAgP2NsYXNzTmFtZUBKU09i
amVjdEBKU0NAQFVCRT9BVlVTdHJpbmdAMkBYWgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDAxNDUzMTEuLjJjZWQyYmMg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RG
LnZjcHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dU
Ri52Y3Byb2oKQEAgLTM3Myw2ICszNzMsMTQgQEAKIAkJCT4NCiAJCTwvRmlsZT4NCiAJCTxGaWxl
DQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTUQ1LmNwcCINCisJCQk+DQorCQk8L0ZpbGU+
DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ENS5oIg0KKwkJCT4NCisJ
CTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWFpblRocmVh
ZC5jcHAiDQogCQkJPg0KIAkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDlkZmY3ZWYuLjMx
YWFjZjIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc2LDYgKzE3Niw4IEBACiAJCTQxMzU5Q0Y3MEZE
RDg5Q0IwMDIwNjE4MCAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEzNTlDRjUwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQwOUQ4
NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQwQjdBRUQwRkFGN0ZDQjAwNzMzMjNFIC8qIE93
blB0ckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTQ0REQ0ODUzMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERENDg1MjBGQUVBODUwMDBE
NkI0RUIgLyogUGFzc093blB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUxMUZDNEM5MTE3RUUyODcwMDQyNTI3MiAvKiBNRDUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRkM0QzcxMTdFRTIz
RDAwNDI1MjcyIC8qIE1ENS5jcHAgKi87IH07CisJCTUxMUZDNENCMTE3RUUyQTgwMDQyNTI3MiAv
KiBNRDUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MUZDNENBMTE3RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJh
Y2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1
MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLzsgfTsKIAkJNUQ1RDhBQjYwRTBE
MEE3MjAwRjlDNjkyIC8qIGpzYyBpbiBDb3B5IEludG8gRnJhbWV3b3JrICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi87
IH07CiAJCTVENUQ4QUQxMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVC
RTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CkBAIC02NzEsNiArNjczLDggQEAKIAkJ
NDQ5MDk3RUUwRjhGODFCNTAwNzZBMzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NERENDg1MjBGQUVBODUwMDBENkI0RUIgLyogUGFz
c093blB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzT3duUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAv
KiBqc2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0ganNjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB9
OworCQk1MTFGQzRDNzExN0VFMjNEMDA0MjUyNzIgLyogTUQ1LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ENS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxMUZDNENBMTE3RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTUQ1Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODYx
MTFEMENDODI0ODMwMDgxNDEyQiAvKiBEZXF1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZXF1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9
IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
Rm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUx
RjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJvYmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7
IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291
cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTEzMzMsNiArMTMzNyw4IEBACiAJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTUxMUZDNENBMTE3RUUyQTgwMDQyNTI3MiAvKiBNRDUuaCAqLywK
KwkJCQk1MTFGQzRDNzExN0VFMjNEMDA0MjUyNzIgLyogTUQ1LmNwcCAqLywKIAkJCQkwNkQzNThB
MDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0
MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICov
LApAQCAtMjA4OSw2ICsyMDk1LDcgQEAKIAkJCQk4NkI5OUFCOTExN0UzOTFFMDBERjVBOTAgLyog
Um9wZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Qjk5QUUzMTE3RTU3ODEwMERGNUE5MCAv
KiBTdHJpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Qjk5QUU0MTE3RTU3ODEwMERG
NUE5MCAvKiBTdHJpbmdJbXBsQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTExRkM0Q0IxMTdF
RTJBODAwNDI1MjcyIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTM2LDYgKzI1NDMsNyBA
QAogCQkJCTg2OEJGQTBFMTE3Q0VGRDEwMEI5MDhCMSAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2OEJGQTE3MTE3Q0YxOTkwMEI5MDhCMSAvKiBXVEZTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZCOTlBQjgxMTdFMzkxRTAwREY1QTkwIC8qIFJvcGVJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUZDNEM5MTE3RUUyODcwMDQyNTI3MiAvKiBNRDUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBi
L0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEyMTFiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1
LmNwcApAQCAtMCwwICsxLDMwNSBAQAorLy8gVGhlIG9yaWdpbmFsIGZpbGUgd2FzIGNvcGllZCBm
cm9tIHNxbGl0ZSwgYW5kIHdhcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKy8vIE1vZGlmaWNhdGlv
bnMgQ29weXJpZ2h0IDIwMDYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisvKgorICogVGhp
cyBjb2RlIGltcGxlbWVudHMgdGhlIE1ENSBtZXNzYWdlLWRpZ2VzdCBhbGdvcml0aG0uCisgKiBU
aGUgYWxnb3JpdGhtIGlzIGR1ZSB0byBSb24gUml2ZXN0LiAgVGhpcyBjb2RlIHdhcworICogd3Jp
dHRlbiBieSBDb2xpbiBQbHVtYiBpbiAxOTkzLCBubyBjb3B5cmlnaHQgaXMgY2xhaW1lZC4KKyAq
IFRoaXMgY29kZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbjsgZG8gd2l0aCBpdCB3aGF0IHlvdSB3
aXNoLgorICoKKyAqIEVxdWl2YWxlbnQgY29kZSBpcyBhdmFpbGFibGUgZnJvbSBSU0EgRGF0YSBT
ZWN1cml0eSwgSW5jLgorICogVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoYXQs
IGFuZCBpcyBlcXVpdmFsZW50LAorICogZXhjZXB0IHRoYXQgeW91IGRvbid0IG5lZWQgdG8gaW5j
bHVkZSB0d28gcGFnZXMgb2YgbGVnYWxlc2UKKyAqIHdpdGggZXZlcnkgY29weS4KKyAqCisgKiBU
byBjb21wdXRlIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiBhIGNodW5rIG9mIGJ5dGVzLCBjb25zdHJ1
Y3QgYW4KKyAqIE1ENSBpbnN0YW5jZSwgY2FsbCBhZGRCeXRlcyBhcyBuZWVkZWQgb24gYnVmZmVy
cyBmdWxsIG9mIGJ5dGVzLAorICogYW5kIHRoZW4gY2FsbCBjaGVja3N1bSwgd2hpY2ggd2lsbCBm
aWxsIGEgc3VwcGxpZWQgMTYtYnl0ZSBhcnJheQorICogd2l0aCB0aGUgZGlnZXN0LgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNRDUuaCIKKworI2luY2x1ZGUgIkFzc2Vy
dGlvbnMuaCIKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IldURlN0cmluZy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisjaWZkZWYgTkRFQlVH
CisjZGVmaW5lIHRlc3RNRDUoKSAvKiBkbyBub3RoaW5nICovCisjZWxzZQorLy8gTUQ1IHRlc3Qg
Y2FzZS4KK3N0YXRpYyBib29sIGlzVGVzdE1ENURvbmU7CisKK3N0YXRpYyB2b2lkIGV4cGVjdE1E
NShDU3RyaW5nIGlucHV0LCBDU3RyaW5nIGV4cGVjdGVkKQoreworICAgIE1ENSBtZDU7CisgICAg
bWQ1LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlucHV0LmRhdGEo
KSksIGlucHV0Lmxlbmd0aCgpKTsKKyAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdCA9IG1k
NS5jaGVja3N1bSgpOworICAgIGNoYXIqIGJ1ZiA9IDA7CisgICAgQ1N0cmluZyBhY3R1YWwgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKDMyLCBidWYpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMTY7IGkrKykgeworICAgICAgc25wcmludGYoYnVmLCAzLCAiJTAyeCIsIGRpZ2VzdC5h
dChpKSk7CisgICAgICBidWYgKz0gMjsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShh
Y3R1YWwgPT0gZXhwZWN0ZWQsICJpbnB1dDolc1slZF0gYWN0dWFsOiVzIGV4cGVjdGVkOiVzIiwg
aW5wdXQuZGF0YSgpLCBpbnB1dC5sZW5ndGgoKSwgYWN0dWFsLmRhdGEoKSwgZXhwZWN0ZWQuZGF0
YSgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE1ENSgpCit7CisgICAgaWYgKGlzVGVzdE1ENURv
bmUpCisgICAgICAgIHJldHVybjsKKyAgICBpc1Rlc3RNRDVEb25lID0gdHJ1ZTsKKworICAgIC8v
IE1ENSBUZXN0IHN1aXRlIGZyb20gaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTMyMS50eHQK
KyAgICBleHBlY3RNRDUoIiIsICJkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSIpOwor
ICAgIGV4cGVjdE1ENSgiYSIsICIwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MSIpOwor
ICAgIGV4cGVjdE1ENSgiYWJjIiwgIjkwMDE1MDk4M2NkMjRmYjBkNjk2M2Y3ZDI4ZTE3ZjcyIik7
CisgICAgZXhwZWN0TUQ1KCJtZXNzYWdlIGRpZ2VzdCIsICJmOTZiNjk3ZDdjYjc5MzhkNTI1YTJm
MzFhYWYxNjFkMCIpOworICAgIGV4cGVjdE1ENSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi
LCAiYzNmY2QzZDc2MTkyZTQwMDdkZmI0OTZjY2E2N2UxM2IiKTsKKyAgICBleHBlY3RNRDUoIkFC
Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2
Nzg5IiwgImQxNzRhYjk4ZDI3N2Q5ZjVhNTYxMWMyYzlmNDE5ZDlmIik7CisgICAgZXhwZWN0TUQ1
KCIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICI1N2VkZjRhMjJiZTNjOTU1YWM0OWRhMmUyMTA3
YjY3YSIpOworfQorI2VuZGlmCisKKy8vIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBs
aXR0bGUtZW5kaWFuIG1hY2hpbmVzLgorCitzdGF0aWMgdm9pZCByZXZlcnNlQnl0ZXModWludDhf
dCogYnVmLCB1bnNpZ25lZCBsb25ncykKK3sKKyAgICBBU1NFUlQobG9uZ3MgPiAwKTsKKyAgICBk
byB7CisgICAgICAgIHVpbnQzMl90IHQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYnVmWzNdIDw8
IDggfCBidWZbMl0pIDw8IDE2IHwgYnVmWzFdIDw8IDggfCBidWZbMF07CisgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYnVmKSAlIHNpemVv
Zih0KSksICJhbGlnbm1lbnQgZXJyb3Igb2YgYnVmIik7CisgICAgICAgICpyZWludGVycHJldF9j
YXN0PHVpbnQzMl90ICo+KGJ1ZikgPSB0OworICAgICAgICBidWYgKz0gNDsKKyAgICB9IHdoaWxl
ICgtLWxvbmdzKTsKK30KKworLy8gVGhlIGZvdXIgY29yZSBmdW5jdGlvbnMuCisvLyBGMSBpcyBv
cmlnaW5hbGx5IGRlZmluZWQgYXMgKHggJiB5IHwgfnggJiB6KSwgYnV0IG9wdGltaXplZCBzb21l
d2hhdDogNCBiaXQgb3BzIC0+IDMgYml0IG9wcy4KKy8vICNkZWZpbmUgRjEoeCwgeSwgeikgKHgg
JiB5IHwgfnggJiB6KQorI2RlZmluZSBGMSh4LCB5LCB6KSAoeiBeICh4ICYgKHkgXiB6KSkpCisj
ZGVmaW5lIEYyKHgsIHksIHopIEYxKHosIHgsIHkpCisjZGVmaW5lIEYzKHgsIHksIHopICh4IF4g
eSBeIHopCisjZGVmaW5lIEY0KHgsIHksIHopICh5IF4gKHggfCB+eikpCisKKy8vIFRoaXMgaXMg
dGhlIGNlbnRyYWwgc3RlcCBpbiB0aGUgTUQ1IGFsZ29yaXRobS4KKyNkZWZpbmUgTUQ1U1RFUChm
LCB3LCB4LCB5LCB6LCBkYXRhLCBzKSBcCisgICAgKHcgKz0gZih4LCB5LCB6KSArIGRhdGEsIHcg
PSB3IDw8IHMgfCB3ID4+ICgzMiAtIHMpLCB3ICs9IHgpCisKK3N0YXRpYyB2b2lkIE1ENVRyYW5z
Zm9ybSh1aW50MzJfdCBidWZbNF0sIGNvbnN0IHVpbnQzMl90IGluWzE2XSkKK3sKKyAgICB1aW50
MzJfdCBhID0gYnVmWzBdOworICAgIHVpbnQzMl90IGIgPSBidWZbMV07CisgICAgdWludDMyX3Qg
YyA9IGJ1ZlsyXTsKKyAgICB1aW50MzJfdCBkID0gYnVmWzNdOworCisgICAgTUQ1U1RFUChGMSwg
YSwgYiwgYywgZCwgaW5bIDBdKzB4ZDc2YWE0NzgsICA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBh
LCBiLCBjLCBpblsgMV0rMHhlOGM3Yjc1NiwgMTIpOworICAgIE1ENVNURVAoRjEsIGMsIGQsIGEs
IGIsIGluWyAyXSsweDI0MjA3MGRiLCAxNyk7CisgICAgTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwg
aW5bIDNdKzB4YzFiZGNlZWUsIDIyKTsKKyAgICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsg
NF0rMHhmNTdjMGZhZiwgIDcpOworICAgIE1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWyA1XSsw
eDQ3ODdjNjJhLCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bIDZdKzB4YTgz
MDQ2MTMsIDE3KTsKKyAgICBNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblsgN10rMHhmZDQ2OTUw
MSwgMjIpOworICAgIE1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWyA4XSsweDY5ODA5OGQ4LCAg
Nyk7CisgICAgTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bIDldKzB4OGI0NGY3YWYsIDEyKTsK
KyAgICBNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxMF0rMHhmZmZmNWJiMSwgMTcpOworICAg
IE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzExXSsweDg5NWNkN2JlLCAyMik7CisgICAgTUQ1
U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMTJdKzB4NmI5MDExMjIsICA3KTsKKyAgICBNRDVTVEVQ
KEYxLCBkLCBhLCBiLCBjLCBpblsxM10rMHhmZDk4NzE5MywgMTIpOworICAgIE1ENVNURVAoRjEs
IGMsIGQsIGEsIGIsIGluWzE0XSsweGE2Nzk0MzhlLCAxNyk7CisgICAgTUQ1U1RFUChGMSwgYiwg
YywgZCwgYSwgaW5bMTVdKzB4NDliNDA4MjEsIDIyKTsKKworICAgIE1ENVNURVAoRjIsIGEsIGIs
IGMsIGQsIGluWyAxXSsweGY2MWUyNTYyLCAgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwg
YywgaW5bIDZdKzB4YzA0MGIzNDAsICA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBp
blsxMV0rMHgyNjVlNWE1MSwgMTQpOworICAgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWyAw
XSsweGU5YjZjN2FhLCAyMCk7CisgICAgTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bIDVdKzB4
ZDYyZjEwNWQsICA1KTsKKyAgICBNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0rMHgwMjQ0
MTQ1MywgIDkpOworICAgIE1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzE1XSsweGQ4YTFlNjgx
LCAxNCk7CisgICAgTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bIDRdKzB4ZTdkM2ZiYzgsIDIw
KTsKKyAgICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsgOV0rMHgyMWUxY2RlNiwgIDUpOwor
ICAgIE1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzE0XSsweGMzMzcwN2Q2LCAgOSk7CisgICAg
TUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bIDNdKzB4ZjRkNTBkODcsIDE0KTsKKyAgICBNRDVT
VEVQKEYyLCBiLCBjLCBkLCBhLCBpblsgOF0rMHg0NTVhMTRlZCwgMjApOworICAgIE1ENVNURVAo
RjIsIGEsIGIsIGMsIGQsIGluWzEzXSsweGE5ZTNlOTA1LCAgNSk7CisgICAgTUQ1U1RFUChGMiwg
ZCwgYSwgYiwgYywgaW5bIDJdKzB4ZmNlZmEzZjgsICA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBk
LCBhLCBiLCBpblsgN10rMHg2NzZmMDJkOSwgMTQpOworICAgIE1ENVNURVAoRjIsIGIsIGMsIGQs
IGEsIGluWzEyXSsweDhkMmE0YzhhLCAyMCk7CisKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBk
LCBpblsgNV0rMHhmZmZhMzk0MiwgIDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGlu
WyA4XSsweDg3NzFmNjgxLCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFd
KzB4NmQ5ZDYxMjIsIDE2KTsKKyAgICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsxNF0rMHhm
ZGU1MzgwYywgMjMpOworICAgIE1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWyAxXSsweGE0YmVl
YTQ0LCAgNCk7CisgICAgTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bIDRdKzB4NGJkZWNmYTks
IDExKTsKKyAgICBNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsgN10rMHhmNmJiNGI2MCwgMTYp
OworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSsweGJlYmZiYzcwLCAyMyk7Cisg
ICAgTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bMTNdKzB4Mjg5YjdlYzYsICA0KTsKKyAgICBN
RDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblsgMF0rMHhlYWExMjdmYSwgMTEpOworICAgIE1ENVNU
RVAoRjMsIGMsIGQsIGEsIGIsIGluWyAzXSsweGQ0ZWYzMDg1LCAxNik7CisgICAgTUQ1U1RFUChG
MywgYiwgYywgZCwgYSwgaW5bIDZdKzB4MDQ4ODFkMDUsIDIzKTsKKyAgICBNRDVTVEVQKEYzLCBh
LCBiLCBjLCBkLCBpblsgOV0rMHhkOWQ0ZDAzOSwgIDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEs
IGIsIGMsIGluWzEyXSsweGU2ZGI5OWU1LCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwg
YiwgaW5bMTVdKzB4MWZhMjdjZjgsIDE2KTsKKyAgICBNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBp
blsgMl0rMHhjNGFjNTY2NSwgMjMpOworCisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5b
IDBdKzB4ZjQyOTIyNDQsICA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsgN10r
MHg0MzJhZmY5NywgMTApOworICAgIE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzE0XSsweGFi
OTQyM2E3LCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bIDVdKzB4ZmM5M2Ew
MzksIDIxKTsKKyAgICBNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0rMHg2NTViNTljMywg
IDYpOworICAgIE1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWyAzXSsweDhmMGNjYzkyLCAxMCk7
CisgICAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTBdKzB4ZmZlZmY0N2QsIDE1KTsKKyAg
ICBNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsgMV0rMHg4NTg0NWRkMSwgMjEpOworICAgIE1E
NVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWyA4XSsweDZmYTg3ZTRmLCAgNik7CisgICAgTUQ1U1RF
UChGNCwgZCwgYSwgYiwgYywgaW5bMTVdKzB4ZmUyY2U2ZTAsIDEwKTsKKyAgICBNRDVTVEVQKEY0
LCBjLCBkLCBhLCBiLCBpblsgNl0rMHhhMzAxNDMxNCwgMTUpOworICAgIE1ENVNURVAoRjQsIGIs
IGMsIGQsIGEsIGluWzEzXSsweDRlMDgxMWExLCAyMSk7CisgICAgTUQ1U1RFUChGNCwgYSwgYiwg
YywgZCwgaW5bIDRdKzB4Zjc1MzdlODIsICA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBj
LCBpblsxMV0rMHhiZDNhZjIzNSwgMTApOworICAgIE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGlu
WyAyXSsweDJhZDdkMmJiLCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bIDld
KzB4ZWI4NmQzOTEsIDIxKTsKKworICAgIGJ1ZlswXSArPSBhOworICAgIGJ1ZlsxXSArPSBiOwor
ICAgIGJ1ZlsyXSArPSBjOworICAgIGJ1ZlszXSArPSBkOworfQorCitNRDU6Ok1ENSgpCit7Cisg
ICAgdGVzdE1ENSgpOworICAgIG1fYnVmWzBdID0gMHg2NzQ1MjMwMTsKKyAgICBtX2J1ZlsxXSA9
IDB4ZWZjZGFiODk7CisgICAgbV9idWZbMl0gPSAweDk4YmFkY2ZlOworICAgIG1fYnVmWzNdID0g
MHgxMDMyNTQ3NjsKKyAgICBtX2JpdHNbMF0gPSAwOworICAgIG1fYml0c1sxXSA9IDA7CisgICAg
bWVtc2V0KG1faW4sIDAsIHNpemVvZihtX2luKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2luKSAlIHNpemVvZih1aW50MzJfdCkpLCAi
YWxpZ25tZW50IGVycm9yIG9mIG1faW4iKTsKK30KKwordm9pZCBNRDU6OmFkZEJ5dGVzKGNvbnN0
IHVpbnQ4X3QqIGlucHV0LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1
ZiA9IGlucHV0OworCisgICAgLy8gVXBkYXRlIGJpdGNvdW50CisgICAgdWludDMyX3QgdCA9IG1f
Yml0c1swXTsKKyAgICBtX2JpdHNbMF0gPSB0ICsgKGxlbmd0aCA8PCAzKTsKKyAgICBpZiAobV9i
aXRzWzBdIDwgdCkKKyAgICAgICAgbV9iaXRzWzFdKys7IC8vIENhcnJ5IGZyb20gbG93IHRvIGhp
Z2gKKyAgICBtX2JpdHNbMV0gKz0gbGVuZ3RoID4+IDI5OworCisgICAgdCA9ICh0ID4+IDMpICYg
MHgzZjsgLy8gQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhCisKKyAgICAvLyBIYW5kbGUg
YW55IGxlYWRpbmcgb2RkLXNpemVkIGNodW5rcworCisgICAgaWYgKHQpIHsKKyAgICAgICAgdWlu
dDhfdCogcCA9IG1faW4gKyB0OworCisgICAgICAgIHQgPSA2NCAtIHQ7CisgICAgICAgIGlmIChs
ZW5ndGggPCB0KSB7CisgICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW5ndGgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1lbWNweShwLCBidWYsIHQpOworICAg
ICAgICByZXZlcnNlQnl0ZXMobV9pbiwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0obV9idWYs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtX2luKSk7IC8vIG1faW4gaXMgNC1ieXRlIGFs
aWduZWQuCisgICAgICAgIGJ1ZiArPSB0OworICAgICAgICBsZW5ndGggLT0gdDsKKyAgICB9CisK
KyAgICAvLyBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MKKworICAgIHdoaWxlIChsZW5n
dGggPj0gNjQpIHsKKyAgICAgICAgbWVtY3B5KG1faW4sIGJ1ZiwgNjQpOworICAgICAgICByZXZl
cnNlQnl0ZXMobV9pbiwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0obV9idWYsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihtX2luKSk7IC8vIG1faW4gaXMgNC1ieXRlIGFsaWduZWQuCisg
ICAgICAgIGJ1ZiArPSA2NDsKKyAgICAgICAgbGVuZ3RoIC09IDY0OworICAgIH0KKworICAgIC8v
IEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzIG9mIGRhdGEuCisgICAgbWVtY3B5KG1faW4sIGJ1
ZiwgbGVuZ3RoKTsKK30KKworVmVjdG9yPHVpbnQ4X3QsIDE2PiBNRDU6OmNoZWNrc3VtKCkKK3sK
KyAgICAvLyBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQKKyAgICB1bnNpZ25lZCBjb3Vu
dCA9IChtX2JpdHNbMF0gPj4gMykgJiAweDNGOworCisgICAgLy8gU2V0IHRoZSBmaXJzdCBjaGFy
IG9mIHBhZGRpbmcgdG8gMHg4MC4gIFRoaXMgaXMgc2FmZSBzaW5jZSB0aGVyZSBpcworICAgIC8v
IGFsd2F5cyBhdCBsZWFzdCBvbmUgYnl0ZSBmcmVlCisgICAgdWludDhfdCogcCA9IG1faW4gKyBj
b3VudDsKKyAgICAqcCsrID0gMHg4MDsKKworICAgIC8vIEJ5dGVzIG9mIHBhZGRpbmcgbmVlZGVk
IHRvIG1ha2UgNjQgYnl0ZXMKKyAgICBjb3VudCA9IDY0IC0gMSAtIGNvdW50OworCisgICAgLy8g
UGFkIG91dCB0byA1NiBtb2QgNjQKKyAgICBpZiAoY291bnQgPCA4KSB7CisgICAgICAgIC8vIFR3
byBsb3RzIG9mIHBhZGRpbmc6ICBQYWQgdGhlIGZpcnN0IGJsb2NrIHRvIDY0IGJ5dGVzCisgICAg
ICAgIG1lbXNldChwLCAwLCBjb3VudCk7CisgICAgICAgIHJldmVyc2VCeXRlcyhtX2luLCAxNik7
CisgICAgICAgIE1ENVRyYW5zZm9ybShtX2J1ZiwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCAq
PihtX2luKSk7IC8vIG1faW4gaXMgNC1ieXRlIGFsaWduZWQuCisKKyAgICAgICAgLy8gTm93IGZp
bGwgdGhlIG5leHQgYmxvY2sgd2l0aCA1NiBieXRlcworICAgICAgICBtZW1zZXQobV9pbiwgMCwg
NTYpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFBhZCBibG9jayB0byA1NiBieXRlcworICAg
ICAgICBtZW1zZXQocCwgMCwgY291bnQgLSA4KTsKKyAgICB9CisgICAgcmV2ZXJzZUJ5dGVzKG1f
aW4sIDE0KTsKKworICAgIC8vIEFwcGVuZCBsZW5ndGggaW4gYml0cyBhbmQgdHJhbnNmb3JtCisg
ICAgLy8gbV9pbiBpcyA0LWJ5dGUgYWxpZ25lZC4KKyAgICAocmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KG1faW4pKVsxNF0gPSBtX2JpdHNbMF07CisgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihtX2luKSlbMTVdID0gbV9iaXRzWzFdOworCisgICAgTUQ1VHJhbnNmb3JtKG1fYnVm
LCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4obV9pbikpOworICAgIHJldmVyc2VCeXRlcyhy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2J1ZiksIDQpOworICAgIFZlY3Rvcjx1aW50OF90
LCAxNj4gZGlnZXN0OworICAgIGRpZ2VzdC5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9idWYpLCAxNik7CisKKyAgICAvLyBJbiBjYXNlIGl0J3Mgc2Vuc2l0aXZlCisgICAgbWVt
c2V0KG1fYnVmLCAwLCBzaXplb2YobV9idWYpKTsKKyAgICBtZW1zZXQobV9iaXRzLCAwLCBzaXpl
b2YobV9iaXRzKSk7CisgICAgbWVtc2V0KG1faW4sIDAsIHNpemVvZihtX2luKSk7CisgICAgcmV0
dXJuIGRpZ2VzdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS93dGYvTUQ1LmggYi9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRkMDMwMgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NRDUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNRDVfaAorI2RlZmlu
ZSBNRDVfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Y2xhc3MgTUQ1IHsKK3B1YmxpYzoKKyAgICBNRDUoKTsKKworICAgIHZvaWQgYWRkQnl0ZXMoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKKyAgICB7CisgICAgICAgIGFkZEJ5dGVzKGlucHV0
LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKKyAgICB9CisgICAgdm9pZCBhZGRCeXRlcyhjb25zdCB1
aW50OF90KiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CisKKyAgICAvLyBjaGVja3N1bSBoYXMgYSBz
aWRlIGVmZmVjdCBvZiByZXNldHRpbmcgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QuCisgICAgVmVj
dG9yPHVpbnQ4X3QsIDE2PiBjaGVja3N1bSgpOworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1f
YnVmWzRdOworICAgIHVpbnQzMl90IG1fYml0c1syXTsKKyAgICB1aW50OF90IG1faW5bNjRdOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TUQ1OworCisjZW5kaWYgLy8g
TUQ1X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNjQ0ZGU3Yi4uZjgyZjUyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0wNC0yMSAgRnVtaXRv
c2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNRDUgaXMgcmVxdWlyZWQgZm9yIFdlYlNvY2tldCBuZXcg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM3OTEzCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYv
TUQ1Lmg6IEFkZGVkLgorCiAyMDEwLTA0LTIxICBSYXkgUmlzY2hwYXRlciAgPFJheW1vbmQuUmlz
Y2hwYXRlckBOb2tpYS5jb20+CiAKICAgICAgICAgSW4gSFRNTElucHV0RWxlbWVudC5jcHAgdGhl
cmUgYXJlIG51bWVyb3VzIHN0eWxlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9NRDUuaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ENS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjU3ODYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NRDUuaApAQCAtMCwwICsxLDUgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfTUQ1X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfTUQ1X2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9NRDUuaD4KKyNlbmRpZgorCg==
</data>
<flag name="review"
          id="37880"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="37974"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>