<?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>93742</bug_id>
          
          <creation_ts>2012-08-10 14:12:54 -0700</creation_ts>
          <short_desc>HTML Parser should produce 8bit substrings for inline style and script elements</short_desc>
          <delta_ts>2012-08-17 13:33:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>94295</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>jturcotte</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>tkent</cc>
    
    <cc>tobias.netzel</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>692874</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-10 14:12:54 -0700</bug_when>
    <thetext>The HTML parser produces 16 bit strings for all elements.  The JavaScript parser can accept 8-bit strings and work on the CSS parser is under way.

This change should not create 8-bit strings for actual text as it would slow down the render code which expects 16-bit strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692875</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-10 14:13:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/12067032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692941</commentid>
    <comment_count>2</comment_count>
      <attachid>157827</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-10 16:03:20 -0700</bug_when>
    <thetext>Created attachment 157827
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692960</commentid>
    <comment_count>3</comment_count>
      <attachid>157827</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-10 16:39:00 -0700</bug_when>
    <thetext>Comment on attachment 157827
Patch for review

Attachment 157827 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13477347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692977</commentid>
    <comment_count>4</comment_count>
      <attachid>157827</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-10 17:01:13 -0700</bug_when>
    <thetext>Comment on attachment 157827
Patch for review

Attachment 157827 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13475383</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692981</commentid>
    <comment_count>5</comment_count>
      <attachid>157840</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-10 17:12:50 -0700</bug_when>
    <thetext>Created attachment 157840
Updated patch without default template parameter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693079</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-11 02:38:11 -0700</bug_when>
    <thetext>Do we have any perf numbers for this work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693150</commentid>
    <comment_count>7</comment_count>
      <attachid>157840</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-11 14:48:26 -0700</bug_when>
    <thetext>Comment on attachment 157840
Updated patch without default template parameter

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

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:106
&gt; +#if CPU(X86_64) &amp;&amp; COMPILER(GCC) &amp;&amp; PLATFORM(MAC)

Do you mean OS(DARWIN)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693296</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-12 11:17:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Do we have any perf numbers for this work?

Here they are as measured across three runs.
Basically the CSS tests are slightly slower (we make 8 bit strings and then up convert to 16 bit before parsing). Most of the HTML tests improve, except tiny-inner.  The work is a prerequisite for the CSS parsing work I&apos;m doing and I expect the combination of this change and the 8 bit CSS parser work will be a progression.

                        Baseline   With 8 bit 
                         r124894   inline elems
css-parser-yui            367.40    353.73  runs/s
css-parser-yui            365.62    364.73  runs/s
css-parser-yui            366.07    366.65  runs/s
          Mean            366.36    361.70  -1.27%
html-parser              1862.65   1830.80  ms
html-parser              1847.40   1816.15  ms
html-parser              1848.10   1828.20  ms
          Mean           1852.72   1825.05   1.49%
html5-full-render       21604.50  21405.50  ms
html5-full-render       21702.50  21459.50  ms
html5-full-render       21532.50  21286.50  ms
          Mean          21613.17  21383.83   1.06%
innerHTML-setter          300.55    296.74  runs/s
innerHTML-setter          289.15    303.01  runs/s
innerHTML-setter          301.40    297.82  runs/s
          Mean            297.03    299.19   0.73%
query-selector-deep       389.34    385.73  runs/s
query-selector-deep       397.66    395.53  runs/s
query-selector-deep       397.74    396.02  runs/s
          Mean            394.92    392.42  -0.63%
query-selector-first     2084.10   2015.10  runs/s
query-selector-first     2092.48   2036.31  runs/s
query-selector-first     2045.50   2006.66  runs/s
          Mean           2074.03   2019.35  -2.64%
query-selector-last       385.78    385.75  runs/s
query-selector-last       386.03    379.85  runs/s
query-selector-last       385.45    385.52  runs/s
          Mean            385.75    383.71  -0.53%
simple-url                 49.85     48.64  runs/s
simple-url                 47.66     48.65  runs/s
simple-url                 47.40     48.42  runs/s
          Mean             48.30     48.57   0.55%
textarea-parsing           56.77     55.45  runs/s
textarea-parsing           56.77     56.05  runs/s
textarea-parsing           55.68     56.06  runs/s
          Mean             56.40     55.85  -0.98%
tiny-innerHTML              5.53      5.29  runs/s
tiny-innerHTML              5.53      5.17  runs/s
tiny-innerHTML              5.40      4.99  runs/s
          Mean              5.48      5.15  -6.11%
url-parser                111.89    112.25  runs/s
url-parser                112.15    113.04  runs/s
url-parser                110.36    111.82  runs/s
          Mean            111.47    112.37   0.81%
xml-parser                  7.55      7.59  runs/s
xml-parser                  7.62      7.60  runs/s
xml-parser                  7.48      7.46  runs/s
          Mean              7.55      7.55   0.04%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693297</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-12 11:21:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 157840 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157840&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/ASCIIFastPath.h:106
&gt; &gt; +#if CPU(X86_64) &amp;&amp; COMPILER(GCC) &amp;&amp; PLATFORM(MAC)
&gt; 
&gt; Do you mean OS(DARWIN)?

Actually, if someone on the chrome side could test this on Linux, the last term could be changed to (PLATFORM(MAC) || OS(LINUX)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693299</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-12 11:32:44 -0700</bug_when>
    <thetext>Do we understand what the perf regressions come from?  Presumably from converting 8 bit strings back to 16 bit.  Just curious if you&apos;ve looked at the sample for the tests which got slower (in case avoiding such is an easy fix).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693300</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-12 11:35:30 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 157840 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157840&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/text/ASCIIFastPath.h:106
&gt; &gt; &gt; +#if CPU(X86_64) &amp;&amp; COMPILER(GCC) &amp;&amp; PLATFORM(MAC)
&gt; &gt; 
&gt; &gt; Do you mean OS(DARWIN)?
&gt; 
&gt; Actually, if someone on the chrome side could test this on Linux, the last term could be changed to (PLATFORM(MAC) || OS(LINUX)).

My understanding is that PLATFORM(MAC) means only the Apple Mac port.  If you wan to include Chromium Mac, and Qt on Mac, Gtk on Mac, etc. you&apos;ll need to use OS(DARWIN).  But perhaps you intend only the Apple mac port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693331</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-12 15:45:21 -0700</bug_when>
    <thetext>I can look at this tomorrow if you want.

&gt; Actually, if someone on the chrome side could test this on Linux, the last term could be changed to (PLATFORM(MAC) || OS(LINUX)).

I think it shouldn&apos;t be changed.

SSSE3 is not a mandatory extension of x86_64 (only SSE and SSE2 are). I think this patch is safe for Mac because the supported hardware start with the Intel Core Architecture.

On Linux, WebKit runs on plenty of CPUs without SSSE3.
To support this in a cross platform way, one should use the CPU extensions detection at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693779</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-13 10:18:05 -0700</bug_when>
    <thetext>&gt; I think it shouldn&apos;t be changed.

It sounds like it should be OS(DARWIN) rather than PLAFORM(MAC).  PLATFORM(MAC) is just the apple-mac port, and excludes Qt, Chromium, and other ports that run on Mac OS X.

Can you also post benchmark numbers for how the non-ASM code path performs?  If the ASM is only a small win, it might not be worth the maintenance burden.  If the non-ASM path is a regression for Windows and Linux ports of WebKit, that&apos;s also a concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693780</commentid>
    <comment_count>14</comment_count>
      <attachid>157840</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-13 10:18:29 -0700</bug_when>
    <thetext>Comment on attachment 157840
Updated patch without default template parameter

r- for incorrect ifdef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693909</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-13 11:58:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Do we understand what the perf regressions come from?  Presumably from converting 8 bit strings back to 16 bit.  Just curious if you&apos;ve looked at the sample for the tests which got slower (in case avoiding such is an easy fix).

From using instruments, 1.6% of css-parser-yui is spent up converting the string back to 16 bits.  The rest of the tests with regressions don&apos;t not show such an obvious source of the slowdown.
The most curious slowdown is tiny-innerHTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693956</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-13 12:33:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; It sounds like it should be OS(DARWIN) rather than PLAFORM(MAC).  PLATFORM(MAC) is just the apple-mac port, and excludes Qt, Chromium, and other ports that run on Mac OS X.

I completely disagree. Read my previous comment.

You cannot blindly assume SSSE3 is available on x86_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693961</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-13 12:42:14 -0700</bug_when>
    <thetext>I think there&apos;s some miscommunication.  Let&apos;s be concrete.

1) Can you describe a system that runs chromium-mac or qt-mac port that doesn&apos;t have SSSE3?
2) Can you describe a system that uses WebKit with OS(DARWIN) that doesn&apos;t have SSSE3?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693982</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-13 12:58:54 -0700</bug_when>
    <thetext>&gt; 1) Can you describe a system that runs chromium-mac or qt-mac port that doesn&apos;t have SSSE3?

All the AMD (and most of the Atom) hackintosh.

I think it is ok for OS(MAC) to not support that, but pushing this on all ports seems unfair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694017</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-13 13:25:04 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; 1) Can you describe a system that runs chromium-mac or qt-mac port that doesn&apos;t have SSSE3?
&gt; 
&gt; All the AMD (and most of the Atom) hackintosh.

I don&apos;t think chromium-mac has any desire to run on non-Apple Mac OS X hardware.  We can ask the qt-mac folks for there opinion on that topic.

&gt; I think it is ok for OS(MAC) to not support that, but pushing this on all ports seems unfair.

I wasn&apos;t aware that there was an OS(MAC).  Do you mean PLATFORM(MAC)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694049</commentid>
    <comment_count>20</comment_count>
      <attachid>158097</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-13 13:58:49 -0700</bug_when>
    <thetext>Created attachment 158097
Performance Comparison of Patch including char loop vs Asm loop

The attached data shows that the character at a time loop version is a progression for the HTML tests except tiny-innrHTML.
The inline asm version improves on most tests. For example html-parser&apos;s performance goes from +.75% to +1.5% with the inline asm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694054</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-13 14:01:49 -0700</bug_when>
    <thetext>Cool.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695413</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-14 14:42:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt; 1) Can you describe a system that runs chromium-mac or qt-mac port that doesn&apos;t have SSSE3?
&gt; &gt; 
&gt; &gt; All the AMD (and most of the Atom) hackintosh.
&gt; 
&gt; I don&apos;t think chromium-mac has any desire to run on non-Apple Mac OS X hardware.  We can ask the qt-mac folks for there opinion on that topic.
&gt; 
&gt; &gt; I think it is ok for OS(MAC) to not support that, but pushing this on all ports seems unfair.
&gt; 
&gt; I wasn&apos;t aware that there was an OS(MAC).  Do you mean PLATFORM(MAC)?

I think the choice is between OS(DARWIN) and PLATFORM(MAC) (with the CPU(X86_64) &amp;&amp; COMPILER(GCC) qualifiers).  Who do we need to contact in qt land to rule out OS(DARWIN)?

What other holdups are there for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695417</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-14 14:47:22 -0700</bug_when>
    <thetext>&gt; I think the choice is between OS(DARWIN) and PLATFORM(MAC) (with the CPU(X86_64) &amp;&amp; COMPILER(GCC) qualifiers).  Who do we need to contact in qt land to rule out OS(DARWIN)?
&gt; 
&gt; What other holdups are there for this patch?

Actually...
I would much prefer intrinsics over inline assembly. I would also remove CPU(X86_64) &amp;&amp; COMPILER(GCC) if you use intrinsics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695418</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-14 14:49:22 -0700</bug_when>
    <thetext>I would not hold up this patch based on theoretical concerns for QtMac. :)  Hackintosh is not a supported platform of the WebKit project.  We can safely assume that OS(DARWIN) means &quot;Apple hardware&quot; IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695831</commentid>
    <comment_count>25</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-08-15 01:38:39 -0700</bug_when>
    <thetext>I cc-ed Qt Mac guys. The question is simple: Do we have any x86_64 hardware
without SSE3 support? ( I don&apos;t think so, but everything is possible. :) )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696164</commentid>
    <comment_count>26</comment_count>
      <attachid>158598</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-15 11:13:23 -0700</bug_when>
    <thetext>Created attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

The performance of this version appears to be identical to the prior inline asm version.

Also made a minor alignment fix, relaxing the alignment that can use the SSE loop to 16 byte, instead of 16 word.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696218</commentid>
    <comment_count>27</comment_count>
      <attachid>158598</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-15 11:49:04 -0700</bug_when>
    <thetext>Comment on attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

Attachment 158598 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13501729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696350</commentid>
    <comment_count>28</comment_count>
      <attachid>158598</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-15 13:55:05 -0700</bug_when>
    <thetext>Comment on attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

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

Quick comments, I&apos;ll review later.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:25
&gt; +#if OS(DARWIN)

&amp;&amp; CPU(X86_64) || CPU(X86)

Or defined(__SSSE3__)

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:106
&gt; +template &lt;uintptr_t mask&gt;
&gt; +inline bool isAlignedTo(const void* pointer)
&gt; +{
&gt; +    return !(reinterpret_cast&lt;uintptr_t&gt;(pointer) &amp; mask);
&gt; +}

Maybe move this to wtf/Alignment.h?

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:110
&gt; +#if OS(DARWIN)

Ditto for the #define.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:121
&gt; +    const UChar* alignedEnd = reinterpret_cast&lt;const UChar*&gt;((reinterpret_cast&lt;const uintptr_t&gt;(source + length))&amp;~sourceLoadMask);

Any way to get rid of the reinterpret_cast?
Coding style: spaces around the &quot;&amp;&quot; operator.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:126
&gt; +    for (unsigned i = 0; i &lt; length;) {
&gt; +        if (isAlignedTo&lt;memoryAccessMask&gt;(&amp;source[i])) {

This is a little unusually construction.

Usually, we have a prefix aligning the input, the simd code, the a suffix finishing the input.

Nothing wrong with this code, just for info.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:130
&gt; +                    ASSERT(!(source[i+checkIndex]&amp;0xff00));

Coding style: space for the &quot;&amp;&quot; operator.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:146
&gt; +        ASSERT(!(source[i]&amp;0xff00));

!(source[i] &amp; 0xff00)

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:152
&gt; +        ASSERT(!(*source&amp;0xff00));

Space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696438</commentid>
    <comment_count>29</comment_count>
      <attachid>158598</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-15 15:34:35 -0700</bug_when>
    <thetext>Comment on attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

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

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:114
&gt; +    // See Intel documentation for how the shuffle control mask works.

I don&apos;t think that comment adds much :)

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:120
&gt; +    const __m128i xmmShuf1 = {0x0e0c0a0806040200ll, 0x8080808080808080ll};
&gt; +    const __m128i xmmShuf2 = {0x8080808080808080ll, 0x0e0c0a0806040200ll};

I think mm_setr_pi16 would be clearer for the masks.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:137
&gt; +                __m128i first8LChars = _mm_shuffle_epi8(first8UChars, xmmShuf1);
&gt; +                __m128i second8LChars = _mm_shuffle_epi8(second8UChars, xmmShuf2);
&gt; +                __m128i all16LChars = _mm_or_si128(first8LChars, second8LChars);

Could mm_packus_epi16 do the trick?

I clear the flag while you try regular packing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696453</commentid>
    <comment_count>30</comment_count>
      <attachid>158598</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-15 15:58:54 -0700</bug_when>
    <thetext>Comment on attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

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

&gt; Source/WTF/wtf/text/WTFString.cpp:775
&gt; +    if (!source || !length)

!length should be enough.

&gt; Source/WTF/wtf/text/WTFString.cpp:779
&gt; +    if (length &gt; numeric_limits&lt;unsigned&gt;::max())
&gt; +        CRASH();

StringImpl does that for you, you should not have to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696790</commentid>
    <comment_count>31</comment_count>
      <attachid>158598</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-15 23:45:50 -0700</bug_when>
    <thetext>Comment on attachment 158598
Updated Patch using OS(DARWIN) and intrinsics

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

&gt;&gt; Source/WTF/wtf/text/ASCIIFastPath.h:121
&gt;&gt; +    const UChar* alignedEnd = reinterpret_cast&lt;const UChar*&gt;((reinterpret_cast&lt;const uintptr_t&gt;(source + length))&amp;~sourceLoadMask);
&gt; 
&gt; Any way to get rid of the reinterpret_cast?
&gt; Coding style: spaces around the &quot;&amp;&quot; operator.

If length so small that you do not pass the next 16bytes alignment, alignedEnd is invalid (&lt; source).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696793</commentid>
    <comment_count>32</comment_count>
      <attachid>158723</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-15 23:49:34 -0700</bug_when>
    <thetext>Created attachment 158723
Trivial bench

Here is a trivial benchmark of the 3 implementations.

On my Mac Pro, the PACKUSWB gives me better results than PSHUFB.
Both are a lot faster than the trivial implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697328</commentid>
    <comment_count>33</comment_count>
      <attachid>158867</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-16 11:50:01 -0700</bug_when>
    <thetext>Created attachment 158867
Patch updated with suggested changes including using PACKUSWB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697372</commentid>
    <comment_count>34</comment_count>
      <attachid>158867</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-16 12:40:20 -0700</bug_when>
    <thetext>Comment on attachment 158867
Patch updated with suggested changes including using PACKUSWB

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

I have a few comments but everything seems good to me.

I wonder if this patch will also help with the cascading StringImp::getData16SlowCase() we get later in the execution.

&gt; Source/WTF/wtf/Alignment.h:60
&gt; -
&gt; +    

Whilespaces.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:25
&gt; +#if OS(DARWIN) 

Because of iOS, I think you also need &quot;&amp;&amp; (CPU(X86) || CPU(X86_64))&quot;.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:104
&gt; +#if OS(DARWIN)

Ditto for iOS.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:108
&gt; +    unsigned i = 0;

This should probably be size_t since length is also size_t.

&gt; Source/WTF/wtf/text/ASCIIFastPath.h:131
&gt; +    for (; i &lt; length; ++i) {
&gt; +        ASSERT(!(source[i] &amp; 0xff00));
&gt; +        destination[i] = source[i];
&gt; +    }

If you want this assertion, you should also have it in the prefix code.

Maybe you should just add an ALWAYS_INLINE function doing the loop, and use it in the prefix, postfix and !OS(darwin) version.

&gt; Source/WTF/wtf/text/WTFString.h:104
&gt; +template&lt;bool isSpecialCharacter(UChar), typename CharType&gt;
&gt; +bool isAllSpecialCharacters(const CharType*, size_t);

More and more we tend to use CharacterType instead of CharType.

&gt; Source/WTF/wtf/text/WTFString.h:573
&gt; -template&lt;bool isSpecialCharacter(UChar)&gt; inline bool isAllSpecialCharacters(const UChar* characters, size_t length)
&gt; +template&lt;bool isSpecialCharacter(UChar), typename CharType&gt;
&gt; +inline bool isAllSpecialCharacters(const CharType* characters, size_t length)

CharType -&gt; CharacterType would be nice.

&gt; Source/WebCore/ChangeLog:13
&gt; +        Currently all data associated with a token is stored and processed as UChars.
&gt; +        Added code to determine that the contents of token data is all 8 bit by keeping
&gt; +        the logical OR value of all prior characters.  Also added a flag that the parser
&gt; +        can set to indicate when the token data is converted to a String that we want
&gt; +        to make an 8 bit string if possible.  Enabled this handling for script, style,
&gt; +        iframe, noembed, noframes, noscript and xmp tags.

Double space after each period.

&gt; Source/WebCore/xml/parser/MarkupTokenBase.h:307
&gt; +    void setConvertTo8Bit()

setConvertTo8Bit() -&gt; setConvertTo8BitIfPossible()?

The method name setConvertTo8Bit() seems to imply the token is always gonna be converted to 8bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697389</commentid>
    <comment_count>35</comment_count>
      <attachid>158867</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 12:54:42 -0700</bug_when>
    <thetext>Comment on attachment 158867
Patch updated with suggested changes including using PACKUSWB

Attachment 158867 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13508724</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697520</commentid>
    <comment_count>36</comment_count>
      <attachid>158903</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-16 14:24:10 -0700</bug_when>
    <thetext>Created attachment 158903
Patch with Reviewer&apos;s Changes and Speculative Chromium Linux Build Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697828</commentid>
    <comment_count>37</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-16 19:54:02 -0700</bug_when>
    <thetext>Committed r125846: &lt;http://trac.webkit.org/changeset/125846&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697832</commentid>
    <comment_count>38</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-16 19:59:20 -0700</bug_when>
    <thetext>Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697883</commentid>
    <comment_count>39</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-16 22:26:12 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Committed r125846: &lt;http://trac.webkit.org/changeset/125846&gt;

It broke Chromium-mac build, and I landed a fix: http://trac.webkit.org/changeset/125855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697887</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 22:27:41 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94295</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698376</commentid>
    <comment_count>41</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-17 08:52:24 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #37)
&gt; &gt; Committed r125846: &lt;http://trac.webkit.org/changeset/125846&gt;
&gt; 
&gt; It broke Chromium-mac build, and I landed a fix: http://trac.webkit.org/changeset/125855

Thanks for fixing this.  Looks like I left two includes in WTFString.cpp from when I was debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698592</commentid>
    <comment_count>42</comment_count>
    <who name="Tobias Netzel">tobias.netzel</who>
    <bug_when>2012-08-17 13:13:35 -0700</bug_when>
    <thetext>Mozilla also has SIMD code for string conversions, for example this one:
https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/xpcom/string/src/nsUTF8UtilsSSE2.cpp

They do the same thing using the same intrinsics but seem to have found out that unrolling the loop to process 32 UChars in one loop iteration improves performance. I know that it does speed up things on PowerPC (TenFourFox has an Altivec version of that code).

Other parts where mozilla uses SIMD (SSE in this case) code for string processing:
https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/content/base/src/nsTextFragmentSSE2.cpp : Find out if there are any 16 bit characters in a UChar buffer.
https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/intl/uconv/src/nsUTF8ToUnicodeSSE2.cpp : Copy from an LChar buffer to a UChar buffer (somewhat different to the one in nsUTF8UtilsSSE2)

Maybe that can inspire some more SIMD code in WebKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698605</commentid>
    <comment_count>43</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-08-17 13:33:32 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Mozilla also has SIMD code for string conversions, for example this one:
&gt; https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/xpcom/string/src/nsUTF8UtilsSSE2.cpp
&gt; 
&gt; They do the same thing using the same intrinsics but seem to have found out that unrolling the loop to process 32 UChars in one loop iteration improves performance. I know that it does speed up things on PowerPC (TenFourFox has an Altivec version of that code).
&gt; 
&gt; Other parts where mozilla uses SIMD (SSE in this case) code for string processing:
&gt; https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/content/base/src/nsTextFragmentSSE2.cpp : Find out if there are any 16 bit characters in a UChar buffer.
&gt; https://hg.mozilla.org/mozilla-central/file/aecd4db48e8e/intl/uconv/src/nsUTF8ToUnicodeSSE2.cpp : Copy from an LChar buffer to a UChar buffer (somewhat different to the one in nsUTF8UtilsSSE2)
&gt; 
&gt; Maybe that can inspire some more SIMD code in WebKit?

Tobias, thanks for the info.  After working on this patch, I&apos;m already thinking of how we can use SIMD more.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157827</attachid>
            <date>2012-08-10 16:03:20 -0700</date>
            <delta_ts>2012-08-10 17:12:50 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>93742.patch</filename>
            <type>text/plain</type>
            <size>14202</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjUzMzIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgOCBiaXQgcGF0
aCB0byBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKS4gQWRkZWQgbmV3IFN0cmluZyBj
cmVhdG9yCisgICAgICAgIHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgVUNoYXIgYXJyYXkgdGhh
dCBpcyBrbm93biB0byBjb250YWluIG9ubHkgOCBiaXQKKyAgICAgICAgY2hhcmFjdGVycyAoTENo
YXIncykuIEFkZGVkIG5ldyBoZWxwZXIgbWV0aG9kIHRvIGNvcHkgY29udGVudHMgb2YgYQorICAg
ICAgICBVQ2hhciBidWZmZXIgdG8gYSBMQ2hhciBidWZmZXIuIFRoZSBoZWxwZXIgbWV0aG9kIGlu
Y2x1ZGVzIGFuIFg4Ni02NCBpbmxpbmUKKyAgICAgICAgYXNzZW1ibHkgdmVyc2lvbiBmb3IgcGVy
Zm9ybWFuY2UuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg6CisgICAgICAg
IChXVEY6OmlzQWxpZ25lZFRvKToKKyAgICAgICAgKFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNv
dXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RG
U3RyaW5nLmg6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoV1RGOjppc0FsbFNwZWNpYWxD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
KToKKwogMjAxMi0wOC0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgU3RyaW5nIGluaXRpYWxpemF0aW9uIGZyb20gbGl0
ZXJhbCB0byBXVEZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCShy
ZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNjMgQEAgaW5saW5lIGJvb2wgY2hhcmFjdGVyc0Fy
ZUFsbEFTQ0lJKGNvbnN0IAogICAgIHJldHVybiAhKGFsbENoYXJCaXRzICYgbm9uQVNDSUlCaXRN
YXNrKTsKIH0KIAordGVtcGxhdGUgPHVpbnRwdHJfdCBtYXNrPgoraW5saW5lIGJvb2wgaXNBbGln
bmVkVG8oY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICByZXR1cm4gIShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiBtYXNrKTsKK30KKworaW5saW5lIHZvaWQgY29weUxD
aGFyc0Zyb21VQ2hhclNvdXJjZShMQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoR0NDKSAm
JiBQTEFURk9STShNQUMpCisgICAgLy8gQ29weSBtdWx0aXBsZSBjaGFyYWN0ZXJzIGF0IGEgdGlt
ZSB1c2luZyB0aGUgU1NTRTMgUFNIVUZCIGluc3RydWN0aW9uLiBVbmRlciB0aGUKKyAgICAvLyBk
aXJlY3Rpb24gb2YgYSBzaHVmZmxlIGNvbnRyb2wgbWFzayB2YWx1ZSwgdGhlIFBTSFVGQiBpbnN0
cnVjdGlvbiByZWFycmFuZ2VzIGJ5dGVzCisgICAgLy8gYWxsb3dpbmcgdXMgdG8gc3F1ZWV6ZSBv
dXQgdGhlIHplcm8gdXBwZXIgYnl0ZSBmcm9tIHRoZSBzb3VyY2UgVUNoYXIgc3RyaW5nLgorICAg
IC8vIFNlZSBJbnRlbCBkb2N1bWVudGF0aW9uIGZvciBob3cgdGhlIHNodWZmbGUgY29udHJvbCBt
YXNrIHdvcmtzLgorICAgIHR5cGVkZWYgaW50OF90IHhtbV90IF9fYXR0cmlidXRlX18gKCh2ZWN0
b3Jfc2l6ZSAoMTYpKSk7CisgICAgY29uc3QgdWludHB0cl90IHNvdXJjZUxvYWRTaXplID0gMzI7
IC8vIExvYWQgMzIgYnl0ZXMgKDE2IFVDaGFycykgYXQgYSB0aW1lCisgICAgY29uc3QgdWludHB0
cl90IHNvdXJjZUxvYWRNYXNrID0gc291cmNlTG9hZFNpemUtMTsKKyAgICBjb25zdCB4bW1fdCB4
bW1TaHVmMSA9IHswLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAweDgwLCAweDgwLCAweDgwLCAw
eDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfTsKKyAgICBjb25zdCB4bW1fdCB4bW1TaHVmMiA9
IHsweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAwLCAyLCA0
LCA2LCA4LCAxMCwgMTIsIDE0fTsKKyAgICBjb25zdCBVQ2hhciogYWxpZ25lZEVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRy
X3Q+KHNvdXJjZSArIGxlbmd0aCkpJn5zb3VyY2VMb2FkTWFzayk7CisgICAgc2l6ZV90IGFsaWdu
ZWRFbmRMZW5ndGggPSBhbGlnbmVkRW5kIC0gc291cmNlOworICAgIGNvbnN0IHVuc2lnbmVkIHVj
aGFyc1Blckxvb3AgPSBzb3VyY2VMb2FkU2l6ZSAvIHNpemVvZihVQ2hhcik7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOykgeworICAgICAgICBpZiAoaXNBbGlnbmVkVG88
c291cmNlTG9hZE1hc2s+KCZzb3VyY2VbaV0pKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGFs
aWduZWRFbmRMZW5ndGgpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGVja0luZGV4ID0gMDsgY2hlY2tJbmRleCA8IHVjaGFyc1Blckxvb3A7IGNoZWNr
SW5kZXgrKykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCEoc291cmNlW2krY2hlY2tJbmRl
eF0mMHhmZjAwKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBhc20oCisgICAgICAgICAgICAg
ICAgICAgICAibW92ZHFhICglcTIsJXE0LDIpLCUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAg
ICAgICAibW92ZHFhIDE2KCVxMiwlcTQsMiksJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAg
ICAgICJwc2h1ZmIgJTAsJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICJwc2h1ZmIg
JTEsJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICJwb3IgICAgJSV4bW0yLCUleG1t
M1xuXHQiCisgICAgICAgICAgICAgICAgICAgICAibW92ZHF1ICUleG1tMywoJXEzLCVxNCwxKVxu
XHQiCisgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICA6ICJ4IiAo
eG1tU2h1ZjEpLCAieCIgKHhtbVNodWYyKSwgInIiIChzb3VyY2UpLCAiciIgKGRlc3RpbmF0aW9u
KSwgICJyIiAoaSkKKyAgICAgICAgICAgICAgICAgICAgIDogInhtbTIiLCAieG1tMyIKKyAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaSArPSB1Y2hhcnNQZXJMb29wOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaSA+PSBsZW5ndGgpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCEoc291cmNlW2ldJjB4ZmYw
MCkpOworICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKKyAgICAgICAgaSsrOwor
ICAgIH0KKyNlbHNlCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIEFTU0VSVCghKCpzb3VyY2UmMHhmZjAwKSk7CisgICAgICAgICpkZXN0aW5hdGlv
bisrID0gc3RhdGljX2Nhc3Q8TENoYXI+KCpzb3VyY2UrKyk7CisgICAgfQorI2VuZGlmCit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShy
ZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3MCw2ICs3NzAsMjIgQEAgQ1N0cmluZyBTdHJpbmc6OnV0ZjgoYm9v
bCBzdHJpY3QpIGNvbnN0CiAgICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwg
YnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7CiB9CiAKK1N0cmluZyBTdHJpbmc6Om1ha2U4
Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFzb3VyY2UgfHwgIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAg
ICAgIENSQVNIKCk7CisKKyAgICBMQ2hhciogZGVzdGluYXRpb247CisgICAgU3RyaW5nIHJlc3Vs
dCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9uKTsKKwor
ICAgIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3Ro
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNv
bnN0IExDaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3Ro
ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw4IEBAIHB1YmxpYzoKICAgICBvcGVy
YXRvciBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZygpIGNvbnN0OwogI2VuZGlmCiAKKyAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBtYWtlOEJpdEZyb20xNkJpdFNv
dXJjZShjb25zdCBVQ2hhciosIHNpemVfdCk7CisKICAgICAvLyBTdHJpbmc6OmZyb21VVEY4IHdp
bGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYKICAgICAvLyB0aGUgaW5wdXQgZGF0YSBjb250YWlu
cyBpbnZhbGlkIFVURi04IHNlcXVlbmNlcy4KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hhciosIHNpemVfdCk7CkBAIC01NjYsNyArNTY4
LDcgQEAgaW5saW5lIHZvaWQgYXBwZW5kTnVtYmVyKFZlY3RvcjxVQ2hhcj4mIAogICAgIH0KIH0K
IAotdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBpbmxpbmUgYm9vbCBp
c0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQordGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpLCB0eXBlbmFtZSBD
aGFyVHlwZSA9IFVDaGFyPiBpbmxpbmUgYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0
IENoYXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCFpc1NwZWNpYWxDaGFyYWN0
ZXIoY2hhcmFjdGVyc1tpXSkpCkBAIC01NzcsNyArNTc5LDE0IEBAIHRlbXBsYXRlPGJvb2wgaXNT
cGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4KIAogdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0
ZXIoVUNoYXIpPiBpbmxpbmUgYm9vbCBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKSBj
b25zdAogewotICAgIHJldHVybiBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFs
Q2hhcmFjdGVyPihjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKKyAgICBzaXplX3QgbGVuID0gbGVu
Z3RoKCk7CisgICAgCisgICAgaWYgKCFsZW4pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gV1RGOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
PGlzU3BlY2lhbENoYXJhY3RlciwgTENoYXI+KGNoYXJhY3RlcnM4KCksIGxlbik7CisgICAgcmV0
dXJuIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFyYWN0ZXIsIFVDaGFy
PihjaGFyYWN0ZXJzKCksIGxlbik7CiB9CiAKIC8vIFN0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQg
aGFzaCBmb3IgU3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjUzMzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAx
Mi0wOC0xMCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBI
VE1MIFBhcnNlciBzaG91bGQgcHJvZHVjZSA4Yml0IHN1YnN0cmluZ3MgZm9yIGlubGluZSBzdHls
ZSBhbmQgc2NyaXB0IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Mzc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEN1cnJlbnRseSBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB0b2tlbiBp
cyBzdG9yZWQgYW5kIHByb2Nlc3NlZCBhcyBVQ2hhcnMuCisgICAgICAgIEFkZGVkIGNvZGUgdG8g
ZGV0ZXJtaW5lIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRva2VuIGRhdGEgaXMgYWxsIDggYml0IGJ5
IGtlZXBpbmcKKyAgICAgICAgdGhlIGxvZ2ljYWwgT1IgdmFsdWUgb2YgYWxsIHByaW9yIGNoYXJh
Y3RlcnMuICBBbHNvIGFkZGVkIGEgZmxhZyB0aGF0IHRoZSBwYXJzZXIKKyAgICAgICAgY2FuIHNl
dCB0byBpbmRpY2F0ZSB3aGVuIHRoZSB0b2tlbiBkYXRhIGlzIGNvbnZlcnRlZCB0byBhIFN0cmlu
ZyB0aGF0IHdlIHdhbnQKKyAgICAgICAgdG8gbWFrZSBhbiA4IGJpdCBzdHJpbmcgaWYgcG9zc2li
bGUuICBFbmFibGVkIHRoaXMgaGFuZGxpbmcgZm9yIHNjcmlwdCwgc3R5bGUsCisgICAgICAgIGlm
cmFtZSwgbm9lbWJlZCwgbm9mcmFtZXMsIG5vc2NyaXB0IGFuZCB4bXAgdGFncy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIHByb3ZpZGUgY292ZXJhZ2UuCisKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxD
aGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
ZXI6OmlzQWxsOEJpdERhdGEpOgorICAgICAgICAoSFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENo
YXJhY3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFpbmluZyk6CisgICAgICAgICog
eG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRv
a2VuQmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjphcHBl
bmRUb0NoYXJhY3Rlcik6CisgICAgICAgIChNYXJrdXBUb2tlbkJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwVG9rZW5CYXNlOjplcmFzZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwVG9rZW5CYXNlOjpzZXRDb252ZXJ0VG84Qml0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cFRva2VuQmFzZTo6aXNBbGw4Qml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpBdG9t
aWNNYXJrdXBUb2tlbkJhc2U6OkF0b21pY01hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OmlzQWxsOEJpdERhdGEpOgorICAgICAgICAoQXRv
bWljTWFya3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2Vu
QmFzZTo6Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMpOgorCiAyMDEyLTA4LTEwICBNYXggVnVqb3Zp
YyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIEFkZCBibGVu
ZCBtb2RlIGFuZCBjb21wb3NpdGUgb3AgdG8gY29tcGlsZWQgcHJvZ3JhbSBjYWNoZSBrZXkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW5pemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYgKzQ3NCw3IEBAIGJvb2wgSFRNTFRva2VuaXpl
cjo6bmV4dFRva2VuKFNlZ21lbnRlZFMKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4n
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzQXBwcm9wcmlhdGVFbmRUYWcoKSkgewogICAgICAg
ICAgICAgICAgICAgICBtX3RlbXBvcmFyeUJ1ZmZlci5hcHBlbmQoY2MpOworICAgICAgICAgICAg
ICAgICAgICBtX3Rva2VuLT5zZXRDb252ZXJ0VG84Qml0KCk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmbHVzaEVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIEhUTUxUb2tlbml6ZXJTdGF0ZTo6
RGF0YVN0YXRlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDMsNiAr
NTQ0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBcHBy
b3ByaWF0ZUVuZFRhZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdGVtcG9yYXJ5QnVmZmVy
LmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4tPnNldENvbnZlcnRUbzhC
aXQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsdXNoRW1pdEFuZFJlc3VtZUluKHNv
dXJjZSwgSFRNTFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDYgKzI0
OSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVy
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIDogbV9jdXJyZW50KHRva2VuLT5jaGFy
YWN0ZXJzKCkuZGF0YSgpKQogICAgICAgICAsIG1fZW5kKG1fY3VycmVudCArIHRva2VuLT5jaGFy
YWN0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0YSh0b2tlbi0+aXNBbGw4
Qml0RGF0YSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogICAgIH0KQEAg
LTI1Niw2ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRXh0ZXJuYWxDaGFyYWN0ZXJU
b2tlbkJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICAgICAgOiBtX2N1cnJlbnQoc3Ry
aW5nLmNoYXJhY3RlcnMoKSkKICAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyBzdHJpbmcubGVu
Z3RoKCkpCisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKHN0cmluZy5sZW5ndGgoKSAmJiBzdHJp
bmcuaXM4Qml0KCkpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpA
QCAtMjY3LDYgKzI2OSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudCA9PSBtX2VuZDsgfQogCisgICAgYm9vbCBpc0FsbDhCaXREYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0FsbDhCaXREYXRhOyB9CisKICAgICB2b2lkIHNraXBBdE1vc3RP
bmVMZWFkaW5nTmV3bGluZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CkBA
IC0yOTQsNyArMjk4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwog
ICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX2N1cnJlbnQ7CiAgICAgICAgIG1fY3VycmVu
dCA9IG1fZW5kOwotICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXJ0LCBtX2N1cnJlbnQgLSBzdGFy
dCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBtX2N1cnJlbnQgLSBzdGFydDsKKworICAgICAg
ICBpZiAoaXNBbGw4Qml0RGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bWFrZThC
aXRGcm9tMTZCaXRTb3VyY2Uoc3RhcnQsIGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZyhzdGFydCwgbGVuZ3RoKTsKICAgICB9CiAKICAgICB2b2lkIGdpdmVSZW1haW5pbmdUbyhTdHJp
bmdCdWlsZGVyJiByZWNpcGllbnQpCkBAIC0zNDQsNiArMzUzLDcgQEAgcHJpdmF0ZToKIAogICAg
IGNvbnN0IFVDaGFyKiBtX2N1cnJlbnQ7CiAgICAgY29uc3QgVUNoYXIqIG1fZW5kOworICAgIGJv
b2wgbV9pc0FsbDhCaXREYXRhOwogfTsKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL01hcmt1cFRva2VuQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDggQEAgcHVibGljOgogICAgICAgICBtX3JhbmdlLm1fZW5kID0gMDsKICAgICAgICAgbV9i
YXNlT2Zmc2V0ID0gMDsKICAgICAgICAgbV9kYXRhLmNsZWFyKCk7CisgICAgICAgIG1fb3JBbGxE
YXRhID0gMDsKKyAgICAgICAgbV9jb252ZXJ0VG84Qml0SWZQb3NzaWJsZSA9IGZhbHNlOwogICAg
IH0KIAogICAgIGJvb2wgaXNVbmluaXRpYWxpemVkKCkgeyByZXR1cm4gbV90eXBlID09IFR5cGVT
ZXQ6OlVuaW5pdGlhbGl6ZWQ7IH0KQEAgLTE3Miw2ICsxNzQsMTMgQEAgcHVibGljOgogICAgICAg
ICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRUb0No
YXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09
IFR5cGVTZXQ6OkNoYXJhY3Rlcik7CisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsK
KyAgICAgICAgbV9vckFsbERhdGEgfD0gY2hhcmFjdGVyOworICAgIH0KKwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRUb0NoYXJhY3RlcihUIGNoYXJhY3RlcnMpCiAg
ICAgewpAQCAtMjc0LDYgKzI4Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gVHlwZVNldDo6Q2hhcmFjdGVyKTsKICAgICAgICAgbV9kYXRhLmNsZWFyKCk7Cisg
ICAgICAgIG1fb3JBbGxEYXRhID0gMDsKICAgICB9CiAKICAgICB2b2lkIGVyYXNlVmFsdWVPZkF0
dHJpYnV0ZShzaXplX3QgaSkKQEAgLTI5NCw2ICszMDQsMTYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9kYXRhOwogICAgIH0KIAorICAgIHZvaWQgc2V0Q29udmVydFRvOEJpdCgpCisgICAg
eworICAgICAgICBtX2NvbnZlcnRUbzhCaXRJZlBvc3NpYmxlID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29u
dmVydFRvOEJpdElmUG9zc2libGUgJiYgKG1fb3JBbGxEYXRhIDw9IDB4ZmYpOworICAgIH0KKwog
ICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWlzc2luZyBwdWJsaWMgaWRlbnRp
ZmVyIGFuZCBhbiBlbXB0eSBvbmUuCiAgICAgY29uc3QgV1RGOjpWZWN0b3I8VUNoYXI+JiBwdWJs
aWNJZGVudGlmaWVyKCkgY29uc3QKICAgICB7CkBAIC0zNzAsNiArMzkwLDggQEAgcHJvdGVjdGVk
OgogICAgIHR5cGVuYW1lIEF0dHJpYnV0ZTo6UmFuZ2UgbV9yYW5nZTsgLy8gQWx3YXlzIHN0YXJ0
cyBhdCB6ZXJvLgogICAgIGludCBtX2Jhc2VPZmZzZXQ7CiAgICAgRGF0YVZlY3RvciBtX2RhdGE7
CisgICAgVUNoYXIgbV9vckFsbERhdGE7CisgICAgYm9vbCBtX2NvbnZlcnRUbzhCaXRJZlBvc3Np
YmxlOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8RG9jdHlwZURhdGE+IG1fZG9j
dHlwZURhdGE7CkBAIC00MTMsNiArNDM1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkNoYXJhY3RlcjoKICAgICAgICAgICAgIG1fZXh0
ZXJuYWxDaGFyYWN0ZXJzID0gJnRva2VuLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBtX2lz
QWxsOEJpdERhdGEgPSB0b2tlbi0+aXNBbGw4Qml0RGF0YSgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTQyMyw2ICs0NDYsNyBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9uYW1lKG5hbWUp
CiAgICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkKKyAgICAgICAgLCBtX2lzQWxsOEJp
dERhdGEoZmFsc2UpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgewog
ICAgICAgICBBU1NFUlQodXNlc05hbWUoKSk7CkBAIC00NzIsNiArNDk2LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICptX2V4dGVybmFsQ2hhcmFjdGVyczsKICAgICB9CiAKKyAgICBib29s
IGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNBbGw4Qml0
RGF0YTsKKyAgICB9CisKICAgICBjb25zdCBTdHJpbmcmIGNvbW1lbnQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUb2tlbjo6VHlwZTo6Q29tbWVudCk7CkBAIC00OTUs
NiArNTI0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFeHRlcm5hbENoYXJhY3RlcnMoKQog
ICAgIHsKICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnMgPSAwOworICAgICAgICBtX2lzQWxs
OEJpdERhdGEgPSBmYWxzZTsKICAgICB9CiAKIHByb3RlY3RlZDoKQEAgLTUyMiw2ICs1NTIsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gRklYTUU6IEFkZCBhIG1lY2hhbmlzbSBmb3IgImludGVybmFs
aXppbmciIHRoZSBjaGFyYWN0ZXJzIHdoZW4gdGhlCiAgICAgLy8gICAgICAgIEhUTUxUb2tlbiBp
cyBkZXN0cnVjdGVkLgogICAgIGNvbnN0IHR5cGVuYW1lIFRva2VuOjpEYXRhVmVjdG9yKiBtX2V4
dGVybmFsQ2hhcmFjdGVyczsKKyAgICBib29sIG1faXNBbGw4Qml0RGF0YTsKIAogICAgIC8vIEZv
ciBET0NUWVBFCiAgICAgT3duUHRyPHR5cGVuYW1lIFRva2VuOjpEb2N0eXBlRGF0YT4gbV9kb2N0
eXBlRGF0YTsK
</data>
<flag name="commit-queue"
          id="167811"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157840</attachid>
            <date>2012-08-10 17:12:50 -0700</date>
            <delta_ts>2012-08-15 11:13:23 -0700</delta_ts>
            <desc>Updated patch without default template parameter</desc>
            <filename>93742-2.patch</filename>
            <type>text/plain</type>
            <size>14642</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjUzMzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgOCBiaXQgcGF0
aCB0byBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKS4gQWRkZWQgbmV3IFN0cmluZyBj
cmVhdG9yCisgICAgICAgIHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgVUNoYXIgYXJyYXkgdGhh
dCBpcyBrbm93biB0byBjb250YWluIG9ubHkgOCBiaXQKKyAgICAgICAgY2hhcmFjdGVycyAoTENo
YXIncykuIEFkZGVkIG5ldyBoZWxwZXIgbWV0aG9kIHRvIGNvcHkgY29udGVudHMgb2YgYQorICAg
ICAgICBVQ2hhciBidWZmZXIgdG8gYSBMQ2hhciBidWZmZXIuIFRoZSBoZWxwZXIgbWV0aG9kIGlu
Y2x1ZGVzIGFuIFg4Ni02NCBpbmxpbmUKKyAgICAgICAgYXNzZW1ibHkgdmVyc2lvbiBmb3IgcGVy
Zm9ybWFuY2UuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg6CisgICAgICAg
IChXVEY6OmlzQWxpZ25lZFRvKToKKyAgICAgICAgKFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNv
dXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RG
U3RyaW5nLmg6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoV1RGOjppc0FsbFNwZWNpYWxD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
KToKKwogMjAxMi0wOC0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgU3RyaW5nIGluaXRpYWxpemF0aW9uIGZyb20gbGl0
ZXJhbCB0byBXVEZTdHJpbmcKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCShy
ZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNjMgQEAgaW5saW5lIGJvb2wgY2hhcmFjdGVyc0Fy
ZUFsbEFTQ0lJKGNvbnN0IAogICAgIHJldHVybiAhKGFsbENoYXJCaXRzICYgbm9uQVNDSUlCaXRN
YXNrKTsKIH0KIAordGVtcGxhdGUgPHVpbnRwdHJfdCBtYXNrPgoraW5saW5lIGJvb2wgaXNBbGln
bmVkVG8oY29uc3Qgdm9pZCogcG9pbnRlcikKK3sKKyAgICByZXR1cm4gIShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiBtYXNrKTsKK30KKworaW5saW5lIHZvaWQgY29weUxD
aGFyc0Zyb21VQ2hhclNvdXJjZShMQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoR0NDKSAm
JiBQTEFURk9STShNQUMpCisgICAgLy8gQ29weSBtdWx0aXBsZSBjaGFyYWN0ZXJzIGF0IGEgdGlt
ZSB1c2luZyB0aGUgU1NTRTMgUFNIVUZCIGluc3RydWN0aW9uLiBVbmRlciB0aGUKKyAgICAvLyBk
aXJlY3Rpb24gb2YgYSBzaHVmZmxlIGNvbnRyb2wgbWFzayB2YWx1ZSwgdGhlIFBTSFVGQiBpbnN0
cnVjdGlvbiByZWFycmFuZ2VzIGJ5dGVzCisgICAgLy8gYWxsb3dpbmcgdXMgdG8gc3F1ZWV6ZSBv
dXQgdGhlIHplcm8gdXBwZXIgYnl0ZSBmcm9tIHRoZSBzb3VyY2UgVUNoYXIgc3RyaW5nLgorICAg
IC8vIFNlZSBJbnRlbCBkb2N1bWVudGF0aW9uIGZvciBob3cgdGhlIHNodWZmbGUgY29udHJvbCBt
YXNrIHdvcmtzLgorICAgIHR5cGVkZWYgaW50OF90IHhtbV90IF9fYXR0cmlidXRlX18gKCh2ZWN0
b3Jfc2l6ZSAoMTYpKSk7CisgICAgY29uc3QgdWludHB0cl90IHNvdXJjZUxvYWRTaXplID0gMzI7
IC8vIExvYWQgMzIgYnl0ZXMgKDE2IFVDaGFycykgYXQgYSB0aW1lCisgICAgY29uc3QgdWludHB0
cl90IHNvdXJjZUxvYWRNYXNrID0gc291cmNlTG9hZFNpemUtMTsKKyAgICBjb25zdCB4bW1fdCB4
bW1TaHVmMSA9IHswLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAweDgwLCAweDgwLCAweDgwLCAw
eDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfTsKKyAgICBjb25zdCB4bW1fdCB4bW1TaHVmMiA9
IHsweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAwLCAyLCA0
LCA2LCA4LCAxMCwgMTIsIDE0fTsKKyAgICBjb25zdCBVQ2hhciogYWxpZ25lZEVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRy
X3Q+KHNvdXJjZSArIGxlbmd0aCkpJn5zb3VyY2VMb2FkTWFzayk7CisgICAgc2l6ZV90IGFsaWdu
ZWRFbmRMZW5ndGggPSBhbGlnbmVkRW5kIC0gc291cmNlOworICAgIGNvbnN0IHVuc2lnbmVkIHVj
aGFyc1Blckxvb3AgPSBzb3VyY2VMb2FkU2l6ZSAvIHNpemVvZihVQ2hhcik7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOykgeworICAgICAgICBpZiAoaXNBbGlnbmVkVG88
c291cmNlTG9hZE1hc2s+KCZzb3VyY2VbaV0pKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGFs
aWduZWRFbmRMZW5ndGgpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGVja0luZGV4ID0gMDsgY2hlY2tJbmRleCA8IHVjaGFyc1Blckxvb3A7IGNoZWNr
SW5kZXgrKykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCEoc291cmNlW2krY2hlY2tJbmRl
eF0mMHhmZjAwKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBhc20oCisgICAgICAgICAgICAg
ICAgICAgICAibW92ZHFhICglcTIsJXE0LDIpLCUleG1tMlxuXHQiCisgICAgICAgICAgICAgICAg
ICAgICAibW92ZHFhIDE2KCVxMiwlcTQsMiksJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAg
ICAgICJwc2h1ZmIgJTAsJSV4bW0yXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICJwc2h1ZmIg
JTEsJSV4bW0zXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICJwb3IgICAgJSV4bW0yLCUleG1t
M1xuXHQiCisgICAgICAgICAgICAgICAgICAgICAibW92ZHF1ICUleG1tMywoJXEzLCVxNCwxKVxu
XHQiCisgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICA6ICJ4IiAo
eG1tU2h1ZjEpLCAieCIgKHhtbVNodWYyKSwgInIiIChzb3VyY2UpLCAiciIgKGRlc3RpbmF0aW9u
KSwgICJyIiAoaSkKKyAgICAgICAgICAgICAgICAgICAgIDogInhtbTIiLCAieG1tMyIKKyAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaSArPSB1Y2hhcnNQZXJMb29wOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaSA+PSBsZW5ndGgpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCEoc291cmNlW2ldJjB4ZmYw
MCkpOworICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKKyAgICAgICAgaSsrOwor
ICAgIH0KKyNlbHNlCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIEFTU0VSVCghKCpzb3VyY2UmMHhmZjAwKSk7CisgICAgICAgICpkZXN0aW5hdGlv
bisrID0gc3RhdGljX2Nhc3Q8TENoYXI+KCpzb3VyY2UrKyk7CisgICAgfQorI2VuZGlmCit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShy
ZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3MCw2ICs3NzAsMjIgQEAgQ1N0cmluZyBTdHJpbmc6OnV0ZjgoYm9v
bCBzdHJpY3QpIGNvbnN0CiAgICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwg
YnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7CiB9CiAKK1N0cmluZyBTdHJpbmc6Om1ha2U4
Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgaWYgKCFzb3VyY2UgfHwgIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAg
ICAgIENSQVNIKCk7CisKKyAgICBMQ2hhciogZGVzdGluYXRpb247CisgICAgU3RyaW5nIHJlc3Vs
dCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9uKTsKKwor
ICAgIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3Ro
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNv
bnN0IExDaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3Ro
ID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw4IEBAIGVudW0gRmxvYXRDb252ZXJz
aW9uRmxhZ3MgewogICAgIFNob3VsZFRydW5jYXRlVHJhaWxpbmdaZXJvcyA9IDEgPDwgMgogfTsK
IAotdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBib29sIGlzQWxsU3Bl
Y2lhbENoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBzaXplX3QpOwordGVtcGxhdGU8Ym9vbCBpc1Nw
ZWNpYWxDaGFyYWN0ZXIoVUNoYXIpLCB0eXBlbmFtZSBDaGFyVHlwZT4KK2Jvb2wgaXNBbGxTcGVj
aWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSosIHNpemVfdCk7CiAKIGNsYXNzIFN0cmluZyB7
CiBwdWJsaWM6CkBAIC0zOTMsNiArMzk0LDggQEAgcHVibGljOgogICAgIG9wZXJhdG9yIEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KTsKKwogICAgIC8vIFN0cmluZzo6ZnJvbVVURjggd2lsbCByZXR1cm4g
YSBudWxsIHN0cmluZyBpZgogICAgIC8vIHRoZSBpbnB1dCBkYXRhIGNvbnRhaW5zIGludmFsaWQg
VVRGLTggc2VxdWVuY2VzLgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5n
IGZyb21VVEY4KGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKQEAgLTU2Niw3ICs1NjksOCBAQCBpbmxp
bmUgdm9pZCBhcHBlbmROdW1iZXIoVmVjdG9yPFVDaGFyPiYgCiAgICAgfQogfQogCi10ZW1wbGF0
ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGlubGluZSBib29sIGlzQWxsU3BlY2lh
bENoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit0ZW1w
bGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhciksIHR5cGVuYW1lIENoYXJUeXBlPgor
aW5saW5lIGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIGlmICghaXNTcGVjaWFsQ2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0p
KQpAQCAtNTc1LDkgKzU3OSwxNyBAQCB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihV
Q2hhcik+CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hh
cmFjdGVyKFVDaGFyKT4gaW5saW5lIGJvb2wgU3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
KCkgY29uc3QKK3RlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4KK2lubGlu
ZSBib29sIFN0cmluZzo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFyYWN0ZXI+KGNoYXJh
Y3RlcnMoKSwgbGVuZ3RoKCkpOworICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICAKKyAg
ICBpZiAoIWxlbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFj
dGVyLCBMQ2hhcj4oY2hhcmFjdGVyczgoKSwgbGVuKTsKKyAgICByZXR1cm4gV1RGOjppc0FsbFNw
ZWNpYWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3RlciwgVUNoYXI+KGNoYXJhY3RlcnMoKSwg
bGVuKTsKIH0KIAogLy8gU3RyaW5nSGFzaCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBTdHJpbmcK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNTMzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA4LTEwICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3Vs
ZCBwcm9kdWNlIDhiaXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxl
bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkz
NzQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHRva2VuIGlzIHN0b3JlZCBhbmQgcHJv
Y2Vzc2VkIGFzIFVDaGFycy4KKyAgICAgICAgQWRkZWQgY29kZSB0byBkZXRlcm1pbmUgdGhhdCB0
aGUgY29udGVudHMgb2YgdG9rZW4gZGF0YSBpcyBhbGwgOCBiaXQgYnkga2VlcGluZworICAgICAg
ICB0aGUgbG9naWNhbCBPUiB2YWx1ZSBvZiBhbGwgcHJpb3IgY2hhcmFjdGVycy4gIEFsc28gYWRk
ZWQgYSBmbGFnIHRoYXQgdGhlIHBhcnNlcgorICAgICAgICBjYW4gc2V0IHRvIGluZGljYXRlIHdo
ZW4gdGhlIHRva2VuIGRhdGEgaXMgY29udmVydGVkIHRvIGEgU3RyaW5nIHRoYXQgd2Ugd2FudAor
ICAgICAgICB0byBtYWtlIGFuIDggYml0IHN0cmluZyBpZiBwb3NzaWJsZS4gIEVuYWJsZWQgdGhp
cyBoYW5kbGluZyBmb3Igc2NyaXB0LCBzdHlsZSwKKyAgICAgICAgaWZyYW1lLCBub2VtYmVkLCBu
b2ZyYW1lcywgbm9zY3JpcHQgYW5kIHhtcCB0YWdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
RXhpc3RpbmcgdGVzdHMgcHJvdmlkZSBjb3ZlcmFnZS4KKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bmV4
dFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVm
ZmVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6aXNBbGw4Qml0RGF0
YSk6CisgICAgICAgIChIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3Rl
clRva2VuQnVmZmVyOjp0YWtlUmVtYWluaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1
cFRva2VuQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmFwcGVuZFRvQ2hhcmFjdGVyKToK
KyAgICAgICAgKE1hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tl
bkJhc2U6OmVyYXNlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJh
c2U6OnNldENvbnZlcnRUbzhCaXQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNl
Ojppc0FsbDhCaXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFz
ZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1
cFRva2VuQmFzZTo6aXNBbGw4Qml0RGF0YSk6CisgICAgICAgIChBdG9taWNNYXJrdXBUb2tlbkJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpjbGVhckV4dGVy
bmFsQ2hhcmFjdGVycyk6CisKIDIwMTItMDgtMTAgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRv
YmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gQWRkIGJsZW5kIG1vZGUgYW5kIGNvbXBv
c2l0ZSBvcCB0byBjb21waWxlZCBwcm9ncmFtIGNhY2hlIGtleQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEyNDg5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2Vn
bWVudGVkUwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaXNBcHByb3ByaWF0ZUVuZFRhZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
dGVtcG9yYXJ5QnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4t
PnNldENvbnZlcnRUbzhCaXQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsdXNoRW1p
dEFuZFJlc3VtZUluKHNvdXJjZSwgSFRNTFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTU0Myw2ICs1NDQsNyBAQCBib29sIEhU
TUxUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTCiAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNjID09ICc+JykgewogICAgICAgICAgICAgICAgIGlmIChpc0FwcHJvcHJpYXRlRW5kVGFnKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgbV90ZW1wb3JhcnlCdWZmZXIuYXBwZW5kKGNjKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV90b2tlbi0+c2V0Q29udmVydFRvOEJpdCgpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmx1c2hFbWl0QW5kUmVzdW1lSW4oc291cmNlLCBIVE1MVG9rZW5p
emVyU3RhdGU6OkRhdGFTdGF0ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CShyZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKICAgICAgICAgOiBtX2N1cnJlbnQodG9rZW4tPmNoYXJhY3RlcnMoKS5kYXRhKCkp
CiAgICAgICAgICwgbV9lbmQobV9jdXJyZW50ICsgdG9rZW4tPmNoYXJhY3RlcnMoKS5zaXplKCkp
CisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKHRva2VuLT5pc0FsbDhCaXREYXRhKCkpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMjU2LDYgKzI1Nyw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogICAgICAgICA6IG1fY3VycmVudChzdHJpbmcuY2hhcmFjdGVycygp
KQogICAgICAgICAsIG1fZW5kKG1fY3VycmVudCArIHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAg
LCBtX2lzQWxsOEJpdERhdGEoc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZy5pczhCaXQoKSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0yNjcsNiArMjY5LDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
ID09IG1fZW5kOyB9CiAKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdCB7IHJldHVybiBt
X2lzQWxsOEJpdERhdGE7IH0KKwogICAgIHZvaWQgc2tpcEF0TW9zdE9uZUxlYWRpbmdOZXdsaW5l
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKQEAgLTI5NCw3ICsyOTgsMTIg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0IFVD
aGFyKiBzdGFydCA9IG1fY3VycmVudDsKICAgICAgICAgbV9jdXJyZW50ID0gbV9lbmQ7Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoc3RhcnQsIG1fY3VycmVudCAtIHN0YXJ0KTsKKyAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IG1fY3VycmVudCAtIHN0YXJ0OworCisgICAgICAgIGlmIChpc0FsbDhCaXRE
YXRhKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJj
ZShzdGFydCwgbGVuZ3RoKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXJ0LCBsZW5ndGgp
OwogICAgIH0KIAogICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFN0cmluZ0J1aWxkZXImIHJlY2lw
aWVudCkKQEAgLTM0NCw2ICszNTMsNyBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgVUNoYXIqIG1f
Y3VycmVudDsKICAgICBjb25zdCBVQ2hhciogbV9lbmQ7CisgICAgYm9vbCBtX2lzQWxsOEJpdERh
dGE7CiB9OwogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5C
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tl
bkJhc2UuaAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9N
YXJrdXBUb2tlbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOCBAQCBwdWJsaWM6
CiAgICAgICAgIG1fcmFuZ2UubV9lbmQgPSAwOwogICAgICAgICBtX2Jhc2VPZmZzZXQgPSAwOwog
ICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICAgICAgbV9vckFsbERhdGEgPSAwOworICAgICAg
ICBtX2NvbnZlcnRUbzhCaXRJZlBvc3NpYmxlID0gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBp
c1VuaW5pdGlhbGl6ZWQoKSB7IHJldHVybiBtX3R5cGUgPT0gVHlwZVNldDo6VW5pbml0aWFsaXpl
ZDsgfQpAQCAtMTcyLDYgKzE3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS5hcHBlbmQo
Y2hhcmFjdGVyKTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFRvQ2hhcmFjdGVyKFVDaGFyIGNo
YXJhY3RlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6Q2hhcmFj
dGVyKTsKKyAgICAgICAgbV9kYXRhLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICBtX29yQWxs
RGF0YSB8PSBjaGFyYWN0ZXI7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICB2b2lkIGFwcGVuZFRvQ2hhcmFjdGVyKFQgY2hhcmFjdGVycykKICAgICB7CkBAIC0yNzQsNiAr
MjgzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0
OjpDaGFyYWN0ZXIpOwogICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICAgICAgbV9vckFsbERh
dGEgPSAwOwogICAgIH0KIAogICAgIHZvaWQgZXJhc2VWYWx1ZU9mQXR0cmlidXRlKHNpemVfdCBp
KQpAQCAtMjk0LDYgKzMwNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAg
ICAgfQogCisgICAgdm9pZCBzZXRDb252ZXJ0VG84Qml0KCkKKyAgICB7CisgICAgICAgIG1fY29u
dmVydFRvOEJpdElmUG9zc2libGUgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNBbGw4Qml0
RGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb252ZXJ0VG84Qml0SWZQb3Nz
aWJsZSAmJiAobV9vckFsbERhdGEgPD0gMHhmZik7CisgICAgfQorCiAgICAgLy8gRklYTUU6IERp
c3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5kIGFuIGVtcHR5
IG9uZS4KICAgICBjb25zdCBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIoKSBj
b25zdAogICAgIHsKQEAgLTM3MCw2ICszOTAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZW5hbWUg
QXR0cmlidXRlOjpSYW5nZSBtX3JhbmdlOyAvLyBBbHdheXMgc3RhcnRzIGF0IHplcm8uCiAgICAg
aW50IG1fYmFzZU9mZnNldDsKICAgICBEYXRhVmVjdG9yIG1fZGF0YTsKKyAgICBVQ2hhciBtX29y
QWxsRGF0YTsKKyAgICBib29sIG1fY29udmVydFRvOEJpdElmUG9zc2libGU7CiAKICAgICAvLyBG
b3IgRE9DVFlQRQogICAgIE93blB0cjxEb2N0eXBlRGF0YT4gbV9kb2N0eXBlRGF0YTsKQEAgLTQx
Myw2ICs0MzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6Q2hhcmFjdGVyOgogICAgICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnMg
PSAmdG9rZW4tPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXNBbGw4Qml0RGF0YSA9IHRv
a2VuLT5pc0FsbDhCaXREYXRhKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDIzLDYgKzQ0Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX25hbWUobmFtZSkKICAgICAgICAgLCBtX2V4
dGVybmFsQ2hhcmFjdGVycygwKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKICAg
ICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVCh1
c2VzTmFtZSgpKTsKQEAgLTQ3Miw2ICs0OTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Km1fZXh0ZXJuYWxDaGFyYWN0ZXJzOwogICAgIH0KIAorICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pc0FsbDhCaXREYXRhOworICAgIH0KKwog
ICAgIGNvbnN0IFN0cmluZyYgY29tbWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
bV90eXBlID09IFRva2VuOjpUeXBlOjpDb21tZW50KTsKQEAgLTQ5NSw2ICs1MjQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhckV4dGVybmFsQ2hhcmFjdGVycygpCiAgICAgewogICAgICAgICBt
X2V4dGVybmFsQ2hhcmFjdGVycyA9IDA7CisgICAgICAgIG1faXNBbGw4Qml0RGF0YSA9IGZhbHNl
OwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtNTIyLDYgKzU1Miw3IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBGSVhNRTogQWRkIGEgbWVjaGFuaXNtIGZvciAiaW50ZXJuYWxpemluZyIgdGhlIGNoYXJh
Y3RlcnMgd2hlbiB0aGUKICAgICAvLyAgICAgICAgSFRNTFRva2VuIGlzIGRlc3RydWN0ZWQuCiAg
ICAgY29uc3QgdHlwZW5hbWUgVG9rZW46OkRhdGFWZWN0b3IqIG1fZXh0ZXJuYWxDaGFyYWN0ZXJz
OworICAgIGJvb2wgbV9pc0FsbDhCaXREYXRhOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBP
d25QdHI8dHlwZW5hbWUgVG9rZW46OkRvY3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwo=
</data>
<flag name="review"
          id="167817"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>158097</attachid>
            <date>2012-08-13 13:58:49 -0700</date>
            <delta_ts>2012-08-13 13:58:49 -0700</delta_ts>
            <desc>Performance Comparison of Patch including char loop vs Asm loop</desc>
            <filename>93742 Perf.pdf</filename>
            <type>application/pdf</type>
            <size>23069</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">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
f6+Xphnr762oQC7HilJXqWWouXjUyJ+JqhLx1dPosOsaOCmyrXzKjMhzSRWRPArEkirKI7+g/7Tg
CP4WXywbeQT/jSYVM45wQ/G3ZZNpPjd0ZEVFeTuezuohGf8N6gHF/I3VU8PGTOshWe2P19sZr5cG
70O9VJpAPY0GpbF6aRoNq8djWu9AU2rZyAOpqayOU0ZNrE6TU+5b51Qa1ElLY3UcLegUq3PK0ULr
RIayKj4fVPH7WBXsQT5WxYc9rMr0q1VyElXu7q1yN+uJw1fr+OJ1DOd76hjOQ53wf/pTOzwcxgeH
VMydRf/hQ1WwrBZCVeSeFQtckZY5snxgbkXiP0GEqubMXUDT6tpIRbB2ZGRucKR8YMisnymeRYuH
BEceQLPKps44MEupHdk6RBlSFqweWXFw9MSComv6uru3r4KJP9PYRNpYAe1rdNHPFBfR4tG0ryLa
VxHta7QymvWFGI1PnHFAjYZXjJgVTw8SnRbotcqbXDHcITUMZcQ7JNl1u7cDtJW9SBeuiOiDwyMG
CLSo37B+w2gR8BQtMtL/6pEoct0+JNnbgfcmiiTINgeHo3Dz8qblyFVWNzL+2wQ/kNW8nCI8Hoeb
/tUPlJVFlOqR9H+klUeyppRHSifNnHFAFCG3ik4pMrgnT6cra491xjP7Q+ZgmslxvRVpXgnN02gS
Ff/n+i9PpOzCZgs5ehArftyMmiq4iL98KgFRMDXx7xM6QJei20NTBUywCYdxU08biWH33J4NIzrn
ntC8PAElcNGcSONvwitNPSjp/aHICvdirBkaRP8fSwK8dQplbmRzdHJlYW0KZW5kb2JqCgo2IDAg
b2JqCjE4MDY0CmVuZG9iagoKNyAwIG9iago8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1l
L0JBQUFBQStBcmlhbE1UCi9GbGFncyA0Ci9Gb250QkJveFstNjY0IC0zMjQgMjAwMCAxMDA2XS9J
dGFsaWNBbmdsZSAwCi9Bc2NlbnQgOTA1Ci9EZXNjZW50IC0yMTEKL0NhcEhlaWdodCAxMDA1Ci9T
dGVtViA4MAovRm9udEZpbGUyIDUgMCBSCj4+CmVuZG9iagoKOCAwIG9iago8PC9MZW5ndGggNDEz
L0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2TTW6DMBBG95zCy3QRgW0IiYSQUhIkFv1R
0x6AwJAiFYMMWXD7embcVuoi6Nn+xn62JmFRnSrTL+GrHZsLLKLrTWthHu+2AXGFW28CqUTbN4sf
0bcZ6ikIXe1lnRcYKtONWRaEb25tXuwqNsd2vMJDEL7YFmxvbmLzUVzc+HKfpi8YwCwiCvJctNC5
fZ7q6bkeIKSqbdW65X5Zt67kL/C+TiAUjSWrNGML81Q3YGtzgyCLolxkZZkHYNp/a7HmkmvXfNbW
RaWLRlES5Y4V8S5B1sSpQo55foecMJfIO+YTcsoskffMZ+QDs0Y+Eis665H3Jy44c0A+8Tzlz8wx
csmZvWMZEWvMS/bXmJfsr1Nk9tdYK9lf410k+6d4R+n9Kc/+MWW8f4HM/jHtz/4pnYv+Sh4oz/4J
ncX+Gt9Ksr/Cd5Dsr/G+yvujg/L+eC/F/jG+p/L++J6K/RXNs7+iWu+P5yrvT/uwf4z+iv1T2sf7
U4bfP5bUJL4bsF2wn3/aUDR3a10LUtNT72HX9QZ+/xfTOGEV/b4BPFnPlwplbmRzdHJlYW0KZW5k
b2JqCgo5IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0JBQUFB
QStBcmlhbE1UCi9GaXJzdENoYXIgMAovTGFzdENoYXIgNDMKL1dpZHRoc1s3NTAgNjY2IDU1NiAz
MzMgMjc3IDU1NiA4MzMgNTU2IDU1NiA1MDAgMjc3IDU1NiAyMjIgNTAwIDI3NyA1NTYKNTU2IDU1
NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDY2NiAyMjIgNzIyIDUwMCAxMDAwIDYxMCA1NTYgMjc3IDU1
Ngo1NTYgNTU2IDgzMyA1NTYgMzMzIDg4OSA1NTYgNzIyIDU1NiA1NTYgNTAwIDY2NiBdCi9Gb250
RGVzY3JpcHRvciA3IDAgUgovVG9Vbmljb2RlIDggMCBSCj4+CmVuZG9iagoKMTAgMCBvYmoKPDwv
RjEgOSAwIFIKPj4KZW5kb2JqCgoxMSAwIG9iago8PC9Gb250IDEwIDAgUgovUHJvY1NldFsvUERG
L1RleHRdCj4+CmVuZG9iagoKMSAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDQgMCBSL1Jlc291
cmNlcyAxMSAwIFIvTWVkaWFCb3hbMCAwIDYxMiA3OTJdL0dyb3VwPDwvUy9UcmFuc3BhcmVuY3kv
Q1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDIgMCBSPj4KZW5kb2JqCgoxMiAwIG9iago8
PC9Db3VudCAxL0ZpcnN0IDEzIDAgUi9MYXN0IDEzIDAgUgo+PgplbmRvYmoKCjEzIDAgb2JqCjw8
L0NvdW50IDAvVGl0bGU8RkVGRjAwNTMwMDY4MDA2NTAwNjUwMDc0MDAzMT4KL0Rlc3RbMSAwIFIv
WFlaIDAgNzkyIDBdL1BhcmVudCAxMiAwIFI+PgplbmRvYmoKCjQgMCBvYmoKPDwvVHlwZS9QYWdl
cwovUmVzb3VyY2VzIDExIDAgUgovTWVkaWFCb3hbIDAgMCA2MTIgNzkyIF0KL0tpZHNbIDEgMCBS
IF0KL0NvdW50IDE+PgplbmRvYmoKCjE0IDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyA0IDAg
UgovT3BlbkFjdGlvblsxIDAgUiAvWFlaIG51bGwgbnVsbCAwXQovT3V0bGluZXMgMTIgMCBSCj4+
CmVuZG9iagoKMTUgMCBvYmoKPDwvQXV0aG9yPEZFRkYwMDREMDA2OTAwNjMwMDY4MDA2MTAwNjUw
MDZDMDAyMDAwNTMwMDYxMDA2MjAwNkYwMDY2MDA2Nj4KL0NyZWF0b3I8RkVGRjAwNDMwMDYxMDA2
QzAwNjM+Ci9Qcm9kdWNlcjxGRUZGMDA0RjAwNzAwMDY1MDA2RTAwNEYwMDY2MDA2NjAwNjkwMDYz
MDA2NTAwMkUwMDZGMDA3MjAwNjcwMDIwMDAzMzAwMkUwMDMzPgovQ3JlYXRpb25EYXRlKEQ6MjAx
MjA4MTMxMzM4MDktMDcnMDAnKT4+CmVuZG9iagoKeHJlZgowIDE2CjAwMDAwMDAwMDAgNjU1MzUg
ZiAKMDAwMDAyMTc5MiAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDI1MTcgMDAw
MDAgbiAKMDAwMDAyMjA5NiAwMDAwMCBuIAowMDAwMDAyNTM4IDAwMDAwIG4gCjAwMDAwMjA2ODcg
MDAwMDAgbiAKMDAwMDAyMDcwOSAwMDAwMCBuIAowMDAwMDIwODk4IDAwMDAwIG4gCjAwMDAwMjEz
ODAgMDAwMDAgbiAKMDAwMDAyMTcwNSAwMDAwMCBuIAowMDAwMDIxNzM3IDAwMDAwIG4gCjAwMDAw
MjE5MzUgMDAwMDAgbiAKMDAwMDAyMTk5MSAwMDAwMCBuIAowMDAwMDIyMTk1IDAwMDAwIG4gCjAw
MDAwMjIyOTYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDE2L1Jvb3QgMTQgMCBSCi9JbmZvIDE1
IDAgUgovSUQgWyA8QkE5QUFGMEEzMTQzQUE4Q0Q3NTc0Q0E1MEYwOERFQjA+CjxCQTlBQUYwQTMx
NDNBQThDRDc1NzRDQTUwRjA4REVCMD4gXQovRG9jQ2hlY2tzdW0gLzRENkUwOUVDOEI2MTJDMzhE
MUE5Q0RBNTY3MzA4NUU3Cj4+CnN0YXJ0eHJlZgoyMjU0NQolJUVPRgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158598</attachid>
            <date>2012-08-15 11:13:23 -0700</date>
            <delta_ts>2012-08-16 11:50:01 -0700</delta_ts>
            <desc>Updated Patch using OS(DARWIN) and intrinsics</desc>
            <filename>93742-3.patch</filename>
            <type>text/plain</type>
            <size>14907</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjUzMzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgOCBiaXQgcGF0
aCB0byBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKS4gQWRkZWQgbmV3IFN0cmluZyBj
cmVhdG9yCisgICAgICAgIHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgVUNoYXIgYXJyYXkgdGhh
dCBpcyBrbm93biB0byBjb250YWluIG9ubHkgOCBiaXQKKyAgICAgICAgY2hhcmFjdGVycyAoTENo
YXIncykuIEFkZGVkIG5ldyBoZWxwZXIgbWV0aG9kIHRvIGNvcHkgY29udGVudHMgb2YgYQorICAg
ICAgICBVQ2hhciBidWZmZXIgdG8gYSBMQ2hhciBidWZmZXIuIFRoZSBoZWxwZXIgbWV0aG9kIGlu
Y2x1ZGVzIFg4Ni02NCBpbnRyaW5zaWNzCisgICAgICAgIG9mIFNTRSBmYW1pbHkgaW5zdHJ1Y3Rp
b25zIGZvciBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGgu
aDoKKyAgICAgICAgKFdURjo6aXNBbGlnbmVkVG8pOgorICAgICAgICAoV1RGOjpjb3B5TENoYXJz
RnJvbVVDaGFyU291cmNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKToKKyAgICAgICAgKiB3
dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFN0cmluZyk6CisgICAgICAgIChXVEY6Omlz
QWxsU3BlY2lhbENoYXJhY3RlcnMpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmlzQWxsU3BlY2lh
bENoYXJhY3RlcnMpOgorCiAyMDEyLTA4LTEwICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBTdHJpbmcgaW5pdGlhbGl6YXRp
b24gZnJvbSBsaXRlcmFsIHRvIFdURlN0cmluZwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9B
U0NJSUZhc3RQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BU0NJSUZh
c3RQYXRoLmgJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlG
YXN0UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiwxMCBAQAogI2lmbmRlZiBBU0NJ
SUZhc3RQYXRoX2gKICNkZWZpbmUgQVNDSUlGYXN0UGF0aF9oCiAKKyNpZiBPUyhEQVJXSU4pCisj
aW5jbHVkZSA8ZW1taW50cmluLmg+CisjaW5jbHVkZSA8dG1taW50cmluLmg+CisjZW5kaWYKICNp
bmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKQEAg
LTk1LDYgKzk5LDYxIEBAIGlubGluZSBib29sIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShjb25zdCAK
ICAgICByZXR1cm4gIShhbGxDaGFyQml0cyAmIG5vbkFTQ0lJQml0TWFzayk7CiB9CiAKK3RlbXBs
YXRlIDx1aW50cHRyX3QgbWFzaz4KK2lubGluZSBib29sIGlzQWxpZ25lZFRvKGNvbnN0IHZvaWQq
IHBvaW50ZXIpCit7CisgICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgbWFzayk7Cit9CisKK2lubGluZSB2b2lkIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3Vy
Y2UoTENoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCBzaXplX3QgbGVuZ3Ro
KQoreworI2lmIE9TKERBUldJTikKKyAgICAvLyBDb3B5IG11bHRpcGxlIGNoYXJhY3RlcnMgYXQg
YSB0aW1lIHVzaW5nIHRoZSBTU1NFMyBQU0hVRkIgaW5zdHJ1Y3Rpb24uIFVuZGVyIHRoZQorICAg
IC8vIGRpcmVjdGlvbiBvZiBhIHNodWZmbGUgY29udHJvbCBtYXNrIHZhbHVlLCB0aGUgUFNIVUZC
IGluc3RydWN0aW9uIHJlYXJyYW5nZXMgYnl0ZXMKKyAgICAvLyBhbGxvd2luZyB1cyB0byBzcXVl
ZXplIG91dCB0aGUgemVybyB1cHBlciBieXRlIGZyb20gdGhlIHNvdXJjZSBVQ2hhciBzdHJpbmcu
CisgICAgLy8gU2VlIEludGVsIGRvY3VtZW50YXRpb24gZm9yIGhvdyB0aGUgc2h1ZmZsZSBjb250
cm9sIG1hc2sgd29ya3MuCisgICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vzc1NpemUgPSAx
NjsgLy8gTWVtb3J5IGFjY2Vzc2VzIG9uIDE2IGJ5dGUgKDEyOCBiaXQpIGFsaWdubWVudAorICAg
IGNvbnN0IHVpbnRwdHJfdCBtZW1vcnlBY2Nlc3NNYXNrID0gbWVtb3J5QWNjZXNzU2l6ZSAtIDE7
CisgICAgY29uc3QgdWludHB0cl90IHNvdXJjZUxvYWRTaXplID0gMzI7IC8vIFByb2Nlc3MgMzIg
Ynl0ZXMgKDE2IFVDaGFycykgZWFjaCBpdGVyYXRpb24KKyAgICBjb25zdCB1aW50cHRyX3Qgc291
cmNlTG9hZE1hc2sgPSBzb3VyY2VMb2FkU2l6ZSAtIDE7CisgICAgY29uc3QgX19tMTI4aSB4bW1T
aHVmMSA9IHsweDBlMGMwYTA4MDYwNDAyMDBsbCwgMHg4MDgwODA4MDgwODA4MDgwbGx9OworICAg
IGNvbnN0IF9fbTEyOGkgeG1tU2h1ZjIgPSB7MHg4MDgwODA4MDgwODA4MDgwbGwsIDB4MGUwYzBh
MDgwNjA0MDIwMGxsfTsKKyAgICBjb25zdCBVQ2hhciogYWxpZ25lZEVuZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPigocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3Q+KHNv
dXJjZSArIGxlbmd0aCkpJn5zb3VyY2VMb2FkTWFzayk7CisgICAgc2l6ZV90IGFsaWduZWRFbmRM
ZW5ndGggPSBhbGlnbmVkRW5kIC0gc291cmNlOworICAgIGNvbnN0IHVuc2lnbmVkIHVjaGFyc1Bl
ckxvb3AgPSBzb3VyY2VMb2FkU2l6ZSAvIHNpemVvZihVQ2hhcik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOykgeworICAgICAgICBpZiAoaXNBbGlnbmVkVG88bWVtb3J5
QWNjZXNzTWFzaz4oJnNvdXJjZVtpXSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgYWxpZ25l
ZEVuZExlbmd0aCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoZWNrSW5kZXggPSAwOyBjaGVja0luZGV4IDwgdWNoYXJzUGVyTG9vcDsgY2hlY2tJbmRl
eCsrKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIShzb3VyY2VbaStjaGVja0luZGV4XSYw
eGZmMDApKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgX19tMTI4aSBmaXJzdDhVQ2hhcnMg
PSBfbW1fbG9hZF9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNl
W2ldKSk7CisgICAgICAgICAgICAgICAgX19tMTI4aSBzZWNvbmQ4VUNoYXJzID0gX21tX2xvYWRf
c2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVtpKzhdKSk7Cisg
ICAgICAgICAgICAgICAgX19tMTI4aSBmaXJzdDhMQ2hhcnMgPSBfbW1fc2h1ZmZsZV9lcGk4KGZp
cnN0OFVDaGFycywgeG1tU2h1ZjEpOworICAgICAgICAgICAgICAgIF9fbTEyOGkgc2Vjb25kOExD
aGFycyA9IF9tbV9zaHVmZmxlX2VwaTgoc2Vjb25kOFVDaGFycywgeG1tU2h1ZjIpOworICAgICAg
ICAgICAgICAgIF9fbTEyOGkgYWxsMTZMQ2hhcnMgPSBfbW1fb3Jfc2kxMjgoZmlyc3Q4TENoYXJz
LCBzZWNvbmQ4TENoYXJzKTsKKyAgICAgICAgICAgICAgICBfbW1fc3RvcmV1X3NpMTI4KHJlaW50
ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0aW5hdGlvbltpXSksIGFsbDE2TENoYXJzKTsKKwor
ICAgICAgICAgICAgICAgIGkgKz0gdWNoYXJzUGVyTG9vcDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVCghKHNvdXJjZVtpXSYweGZmMDApKTsKKyAgICAgICAgZGVzdGlu
YXRpb25baV0gPSBzb3VyY2VbaV07CisgICAgICAgIGkrKzsKKyAgICB9CisjZWxzZQorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBBU1NFUlQoISgq
c291cmNlJjB4ZmYwMCkpOworICAgICAgICAqZGVzdGluYXRpb24rKyA9IHN0YXRpY19jYXN0PExD
aGFyPigqc291cmNlKyspOworICAgIH0KKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkocmV2aXNpb24gMTI0ODk0KQorKysg
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzAs
NiArNzcwLDIyIEBAIENTdHJpbmcgU3RyaW5nOjp1dGY4KGJvb2wgc3RyaWN0KSBjb25zdAogICAg
IHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rv
ci5kYXRhKCkpOwogfQogCitTdHJpbmcgU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShj
b25zdCBVQ2hhciogc291cmNlLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGlmICghc291cmNlIHx8
ICFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChsZW5ndGggPiBu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBDUkFTSCgpOworCisgICAg
TENoYXIqIGRlc3RpbmF0aW9uOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBkZXN0aW5hdGlvbik7CisKKyAgICBjb3B5TENoYXJzRnJvbVVD
aGFyU291cmNlKGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5nU3Rh
cnQsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDEy
NDg5NCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsOCBAQCBlbnVtIEZsb2F0Q29udmVyc2lvbkZsYWdzIHsKICAgICBTaG91
bGRUcnVuY2F0ZVRyYWlsaW5nWmVyb3MgPSAxIDw8IDIKIH07CiAKLXRlbXBsYXRlPGJvb2wgaXNT
cGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4gYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiwgc2l6ZV90KTsKK3RlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFy
KSwgdHlwZW5hbWUgQ2hhclR5cGU+Citib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoY29uc3Qg
Q2hhclR5cGUqLCBzaXplX3QpOwogCiBjbGFzcyBTdHJpbmcgewogcHVibGljOgpAQCAtMzkzLDYg
KzM5NCw4IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0
cmluZygpIGNvbnN0OwogI2VuZGlmCiAKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGlj
IFN0cmluZyBtYWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciosIHNpemVfdCk7CisK
ICAgICAvLyBTdHJpbmc6OmZyb21VVEY4IHdpbGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYKICAg
ICAvLyB0aGUgaW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIFVURi04IHNlcXVlbmNlcy4KICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hh
ciosIHNpemVfdCk7CkBAIC01NjYsNyArNTY5LDggQEAgaW5saW5lIHZvaWQgYXBwZW5kTnVtYmVy
KFZlY3RvcjxVQ2hhcj4mIAogICAgIH0KIH0KIAotdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFy
YWN0ZXIoVUNoYXIpPiBpbmxpbmUgYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQordGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxD
aGFyYWN0ZXIoVUNoYXIpLCB0eXBlbmFtZSBDaGFyVHlwZT4KK2lubGluZSBib29sIGlzQWxsU3Bl
Y2lhbENoYXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBp
ZiAoIWlzU3BlY2lhbENoYXJhY3RlcihjaGFyYWN0ZXJzW2ldKSkKQEAgLTU3NSw5ICs1NzksMTcg
QEAgdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPgogICAgIHJldHVybiB0
cnVlOwogfQogCi10ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGlubGlu
ZSBib29sIFN0cmluZzo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0Cit0ZW1wbGF0ZTxi
b29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+CitpbmxpbmUgYm9vbCBTdHJpbmc6OmlzQWxs
U3BlY2lhbENoYXJhY3RlcnMoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmlzQWxsU3BlY2lh
bENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFjdGVyPihjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsK
KyAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7CisgICAgCisgICAgaWYgKCFsZW4pCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gV1RGOjpp
c0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3RlciwgTENoYXI+KGNoYXJhY3Rl
cnM4KCksIGxlbik7CisgICAgcmV0dXJuIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1Nw
ZWNpYWxDaGFyYWN0ZXIsIFVDaGFyPihjaGFyYWN0ZXJzKCksIGxlbik7CiB9CiAKIC8vIFN0cmlu
Z0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgU3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMjUzMzIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzOCBAQAorMjAxMi0wOC0xMCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFw
cGxlLmNvbT4KKworICAgICAgICBIVE1MIFBhcnNlciBzaG91bGQgcHJvZHVjZSA4Yml0IHN1YnN0
cmluZ3MgZm9yIGlubGluZSBzdHlsZSBhbmQgc2NyaXB0IGVsZW1lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Mzc0MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbGwgZGF0YSBhc3Nv
Y2lhdGVkIHdpdGggYSB0b2tlbiBpcyBzdG9yZWQgYW5kIHByb2Nlc3NlZCBhcyBVQ2hhcnMuCisg
ICAgICAgIEFkZGVkIGNvZGUgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRva2Vu
IGRhdGEgaXMgYWxsIDggYml0IGJ5IGtlZXBpbmcKKyAgICAgICAgdGhlIGxvZ2ljYWwgT1IgdmFs
dWUgb2YgYWxsIHByaW9yIGNoYXJhY3RlcnMuICBBbHNvIGFkZGVkIGEgZmxhZyB0aGF0IHRoZSBw
YXJzZXIKKyAgICAgICAgY2FuIHNldCB0byBpbmRpY2F0ZSB3aGVuIHRoZSB0b2tlbiBkYXRhIGlz
IGNvbnZlcnRlZCB0byBhIFN0cmluZyB0aGF0IHdlIHdhbnQKKyAgICAgICAgdG8gbWFrZSBhbiA4
IGJpdCBzdHJpbmcgaWYgcG9zc2libGUuICBFbmFibGVkIHRoaXMgaGFuZGxpbmcgZm9yIHNjcmlw
dCwgc3R5bGUsCisgICAgICAgIGlmcmFtZSwgbm9lbWJlZCwgbm9mcmFtZXMsIG5vc2NyaXB0IGFu
ZCB4bXAgdGFncy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIHByb3Zp
ZGUgY292ZXJhZ2UuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5leHRUb2tlbik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6RXh0ZXJuYWxDaGFyYWN0
ZXJUb2tlbkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVy
bmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OmlzQWxsOEJpdERhdGEpOgorICAgICAgICAoSFRNTFRy
ZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJl
bWFpbmluZyk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwVG9rZW5CYXNlOjphcHBlbmRUb0NoYXJhY3Rlcik6CisgICAgICAgIChNYXJrdXBUb2tl
bkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjplcmFzZUNoYXJhY3Rl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpzZXRDb252ZXJ0VG84Qml0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuQmFzZTo6aXNBbGw4Qml0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OkF0b21pY01hcmt1cFRva2Vu
QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OmlzQWxsOEJp
dERhdGEpOgorICAgICAgICAoQXRvbWljTWFya3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMpOgorCiAy
MDEyLTA4LTEwICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBb
Q1NTIFNoYWRlcnNdIEFkZCBibGVuZCBtb2RlIGFuZCBjb21wb3NpdGUgb3AgdG8gY29tcGlsZWQg
cHJvZ3JhbSBjYWNoZSBrZXkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYgKzQ3NCw3
IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlZFMKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2MgPT0gJz4nKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzQXBwcm9wcmlh
dGVFbmRUYWcoKSkgewogICAgICAgICAgICAgICAgICAgICBtX3RlbXBvcmFyeUJ1ZmZlci5hcHBl
bmQoY2MpOworICAgICAgICAgICAgICAgICAgICBtX3Rva2VuLT5zZXRDb252ZXJ0VG84Qml0KCk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVzaEVtaXRBbmRSZXN1bWVJbihzb3VyY2Us
IEhUTUxUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC01NDMsNiArNTQ0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9r
ZW4oU2VnbWVudGVkUwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNBcHByb3ByaWF0ZUVuZFRhZygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1f
dG9rZW4tPnNldENvbnZlcnRUbzhCaXQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZs
dXNoRW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgSFRNTFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gMTI0ODk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ5LDYgKzI0OSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBFeHRlcm5h
bENoYXJhY3RlclRva2VuQnVmZmVyKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIDog
bV9jdXJyZW50KHRva2VuLT5jaGFyYWN0ZXJzKCkuZGF0YSgpKQogICAgICAgICAsIG1fZW5kKG1f
Y3VycmVudCArIHRva2VuLT5jaGFyYWN0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAsIG1faXNBbGw4
Qml0RGF0YSh0b2tlbi0+aXNBbGw4Qml0RGF0YSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFp
c0VtcHR5KCkpOwogICAgIH0KQEAgLTI1Niw2ICsyNTcsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykKICAg
ICAgICAgOiBtX2N1cnJlbnQoc3RyaW5nLmNoYXJhY3RlcnMoKSkKICAgICAgICAgLCBtX2VuZCht
X2N1cnJlbnQgKyBzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgICwgbV9pc0FsbDhCaXREYXRhKHN0
cmluZy5sZW5ndGgoKSAmJiBzdHJpbmcuaXM4Qml0KCkpCiAgICAgewogICAgICAgICBBU1NFUlQo
IWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMjY3LDYgKzI2OSw4IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudCA9PSBtX2VuZDsgfQogCisgICAg
Ym9vbCBpc0FsbDhCaXREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbDhCaXREYXRhOyB9CisK
ICAgICB2b2lkIHNraXBBdE1vc3RPbmVMZWFkaW5nTmV3bGluZSgpCiAgICAgewogICAgICAgICBB
U1NFUlQoIWlzRW1wdHkoKSk7CkBAIC0yOTQsNyArMjk4LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKCFpc0VtcHR5KCkpOwogICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX2N1cnJl
bnQ7CiAgICAgICAgIG1fY3VycmVudCA9IG1fZW5kOwotICAgICAgICByZXR1cm4gU3RyaW5nKHN0
YXJ0LCBtX2N1cnJlbnQgLSBzdGFydCk7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBtX2N1cnJl
bnQgLSBzdGFydDsKKworICAgICAgICBpZiAoaXNBbGw4Qml0RGF0YSgpKQorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2Uoc3RhcnQsIGxlbmd0aCk7CisK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhzdGFydCwgbGVuZ3RoKTsKICAgICB9CiAKICAgICB2b2lk
IGdpdmVSZW1haW5pbmdUbyhTdHJpbmdCdWlsZGVyJiByZWNpcGllbnQpCkBAIC0zNDQsNiArMzUz
LDcgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0IFVDaGFyKiBtX2N1cnJlbnQ7CiAgICAgY29uc3Qg
VUNoYXIqIG1fZW5kOworICAgIGJvb2wgbV9pc0FsbDhCaXREYXRhOwogfTsKIAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHJldmlzaW9uIDEy
NDg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgcHVibGljOgogICAgICAgICBtX3JhbmdlLm1f
ZW5kID0gMDsKICAgICAgICAgbV9iYXNlT2Zmc2V0ID0gMDsKICAgICAgICAgbV9kYXRhLmNsZWFy
KCk7CisgICAgICAgIG1fb3JBbGxEYXRhID0gMDsKKyAgICAgICAgbV9jb252ZXJ0VG84Qml0SWZQ
b3NzaWJsZSA9IGZhbHNlOwogICAgIH0KIAogICAgIGJvb2wgaXNVbmluaXRpYWxpemVkKCkgeyBy
ZXR1cm4gbV90eXBlID09IFR5cGVTZXQ6OlVuaW5pdGlhbGl6ZWQ7IH0KQEAgLTE3Miw2ICsxNzQs
MTMgQEAgcHVibGljOgogICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rlcik7CiAgICAgfQog
CisgICAgdm9pZCBhcHBlbmRUb0NoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAg
ICAgICBBU1NFUlQobV90eXBlID09IFR5cGVTZXQ6OkNoYXJhY3Rlcik7CisgICAgICAgIG1fZGF0
YS5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICAgICAgbV9vckFsbERhdGEgfD0gY2hhcmFjdGVyOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRUb0NoYXJh
Y3RlcihUIGNoYXJhY3RlcnMpCiAgICAgewpAQCAtMjc0LDYgKzI4Myw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6Q2hhcmFjdGVyKTsKICAgICAg
ICAgbV9kYXRhLmNsZWFyKCk7CisgICAgICAgIG1fb3JBbGxEYXRhID0gMDsKICAgICB9CiAKICAg
ICB2b2lkIGVyYXNlVmFsdWVPZkF0dHJpYnV0ZShzaXplX3QgaSkKQEAgLTI5NCw2ICszMDQsMTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0KIAorICAgIHZvaWQgc2V0
Q29udmVydFRvOEJpdCgpCisgICAgeworICAgICAgICBtX2NvbnZlcnRUbzhCaXRJZlBvc3NpYmxl
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fY29udmVydFRvOEJpdElmUG9zc2libGUgJiYgKG1fb3JBbGxEYXRh
IDw9IDB4ZmYpOworICAgIH0KKwogICAgIC8vIEZJWE1FOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGEg
bWlzc2luZyBwdWJsaWMgaWRlbnRpZmVyIGFuZCBhbiBlbXB0eSBvbmUuCiAgICAgY29uc3QgV1RG
OjpWZWN0b3I8VUNoYXI+JiBwdWJsaWNJZGVudGlmaWVyKCkgY29uc3QKICAgICB7CkBAIC0zNzAs
NiArMzkwLDggQEAgcHJvdGVjdGVkOgogICAgIHR5cGVuYW1lIEF0dHJpYnV0ZTo6UmFuZ2UgbV9y
YW5nZTsgLy8gQWx3YXlzIHN0YXJ0cyBhdCB6ZXJvLgogICAgIGludCBtX2Jhc2VPZmZzZXQ7CiAg
ICAgRGF0YVZlY3RvciBtX2RhdGE7CisgICAgVUNoYXIgbV9vckFsbERhdGE7CisgICAgYm9vbCBt
X2NvbnZlcnRUbzhCaXRJZlBvc3NpYmxlOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25Q
dHI8RG9jdHlwZURhdGE+IG1fZG9jdHlwZURhdGE7CkBAIC00MTMsNiArNDM1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OkNoYXJhY3Rl
cjoKICAgICAgICAgICAgIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzID0gJnRva2VuLT5jaGFyYWN0ZXJz
KCk7CisgICAgICAgICAgICBtX2lzQWxsOEJpdERhdGEgPSB0b2tlbi0+aXNBbGw4Qml0RGF0YSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKQEAgLTQyMyw2ICs0NDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAg
ICAgICAgICwgbV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV9leHRlcm5hbENoYXJhY3RlcnMoMCkK
KyAgICAgICAgLCBtX2lzQWxsOEJpdERhdGEoZmFsc2UpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQodXNlc05hbWUoKSk7CkBAIC00NzIs
NiArNDk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2V4dGVybmFsQ2hhcmFjdGVy
czsKICAgICB9CiAKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faXNBbGw4Qml0RGF0YTsKKyAgICB9CisKICAgICBjb25zdCBTdHJpbmcmIGNv
bW1lbnQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUb2tlbjo6VHlw
ZTo6Q29tbWVudCk7CkBAIC00OTUsNiArNTI0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJF
eHRlcm5hbENoYXJhY3RlcnMoKQogICAgIHsKICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnMg
PSAwOworICAgICAgICBtX2lzQWxsOEJpdERhdGEgPSBmYWxzZTsKICAgICB9CiAKIHByb3RlY3Rl
ZDoKQEAgLTUyMiw2ICs1NTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gRklYTUU6IEFkZCBhIG1l
Y2hhbmlzbSBmb3IgImludGVybmFsaXppbmciIHRoZSBjaGFyYWN0ZXJzIHdoZW4gdGhlCiAgICAg
Ly8gICAgICAgIEhUTUxUb2tlbiBpcyBkZXN0cnVjdGVkLgogICAgIGNvbnN0IHR5cGVuYW1lIFRv
a2VuOjpEYXRhVmVjdG9yKiBtX2V4dGVybmFsQ2hhcmFjdGVyczsKKyAgICBib29sIG1faXNBbGw4
Qml0RGF0YTsKIAogICAgIC8vIEZvciBET0NUWVBFCiAgICAgT3duUHRyPHR5cGVuYW1lIFRva2Vu
OjpEb2N0eXBlRGF0YT4gbV9kb2N0eXBlRGF0YTsK
</data>
<flag name="review"
          id="168907"
          type_id="1"
          status="-"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="168757"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>158723</attachid>
            <date>2012-08-15 23:49:34 -0700</date>
            <delta_ts>2012-08-15 23:50:00 -0700</delta_ts>
            <desc>Trivial bench</desc>
            <filename>main.cpp</filename>
            <type>text/plain</type>
            <size>4984</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPGVtbWludHJpbi5oPgojaW5jbHVkZSA8dG1taW50cmluLmg+CgojaW5jbHVkZSA8
c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KCnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgVUNoYXI7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBMQ2hhcjsKCnN0
YXRpYyB2b2lkIGR1bWIoTENoYXIqIGRzdCwgY29uc3QgVUNoYXIqIHNyYywgdW5zaWduZWQgc2l6
ZSkKewogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAqZHN0
KysgPSBzdGF0aWNfY2FzdDxMQ2hhcj4oKnNyYysrKTsKfQoKdGVtcGxhdGUgPHVpbnRwdHJfdCBt
YXNrPgppbmxpbmUgYm9vbCBpc0FsaWduZWRUbyhjb25zdCB2b2lkKiBwb2ludGVyKQp7CiAgICBy
ZXR1cm4gIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiBtYXNrKTsKfQoK
c3RhdGljIHZvaWQgc2h1ZmZsZShMQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UsIHVuc2lnbmVkIGxlbmd0aCkKewogICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vzc1Np
emUgPSAxNjsgLy8gTWVtb3J5IGFjY2Vzc2VzIG9uIDE2IGJ5dGUgKDEyOCBiaXQpIGFsaWdubWVu
dAogICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vzc01hc2sgPSBtZW1vcnlBY2Nlc3NTaXpl
IC0gMTsKICAgIAogICAgdW5zaWduZWQgaSA9IDA7CiAgICBmb3IgKDtpIDwgbGVuZ3RoICYmICFp
c0FsaWduZWRUbzxtZW1vcnlBY2Nlc3NNYXNrPigmc291cmNlW2ldKTsgKytpKQogICAgICAgIGRl
c3RpbmF0aW9uW2ldID0gc291cmNlW2ldOwoKICAgIGNvbnN0IHVpbnRwdHJfdCBzb3VyY2VMb2Fk
U2l6ZSA9IDMyOyAvLyBQcm9jZXNzIDMyIGJ5dGVzICgxNiBVQ2hhcnMpIGVhY2ggaXRlcmF0aW9u
CiAgICBjb25zdCB1bnNpZ25lZCB1Y2hhcnNQZXJMb29wID0gc291cmNlTG9hZFNpemUgLyBzaXpl
b2YoVUNoYXIpOwogICAgaWYgKGxlbmd0aCA+IHVjaGFyc1Blckxvb3ApIHsKICAgICAgICBjb25z
dCB1aW50cHRyX3Qgc291cmNlTG9hZE1hc2sgPSBzb3VyY2VMb2FkU2l6ZSAtIDE7CiAgICAgICAg
Y29uc3QgX19tMTI4aSB4bW1TaHVmMSA9IHsweDBlMGMwYTA4MDYwNDAyMDBsbCwgMHg4MDgwODA4
MDgwODA4MDgwbGx9OwogICAgICAgIGNvbnN0IF9fbTEyOGkgeG1tU2h1ZjIgPSB7MHg4MDgwODA4
MDgwODA4MDgwbGwsIDB4MGUwYzBhMDgwNjA0MDIwMGxsfTsKICAgICAgICBjb25zdCB1bnNpZ25l
ZCBlbmRMZW5ndGggPSBsZW5ndGggLSB1Y2hhcnNQZXJMb29wICsgMTsKICAgICAgICBmb3IgKDsg
aSA8IGVuZExlbmd0aDtpICs9IHVjaGFyc1Blckxvb3ApIHsKICAgICAgICAgICAgX19tMTI4aSBm
aXJzdDhVQ2hhcnMgPSBfbW1fbG9hZF9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEy
OGkqPigmc291cmNlW2ldKSk7CiAgICAgICAgICAgIF9fbTEyOGkgc2Vjb25kOFVDaGFycyA9IF9t
bV9sb2FkX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KCZzb3VyY2VbaSs4
XSkpOwogICAgICAgICAgICBfX20xMjhpIGZpcnN0OExDaGFycyA9IF9tbV9zaHVmZmxlX2VwaTgo
Zmlyc3Q4VUNoYXJzLCB4bW1TaHVmMSk7CiAgICAgICAgICAgIF9fbTEyOGkgc2Vjb25kOExDaGFy
cyA9IF9tbV9zaHVmZmxlX2VwaTgoc2Vjb25kOFVDaGFycywgeG1tU2h1ZjIpOwogICAgICAgICAg
ICBfX20xMjhpIGFsbDE2TENoYXJzID0gX21tX29yX3NpMTI4KGZpcnN0OExDaGFycywgc2Vjb25k
OExDaGFycyk7CiAgICAgICAgICAgIF9tbV9zdG9yZXVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxf
X20xMjhpKj4oJmRlc3RpbmF0aW9uW2ldKSwgYWxsMTZMQ2hhcnMpOwogICAgICAgIH0KICAgIH0K
CiAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc291
cmNlW2ldOwp9CgpzdGF0aWMgdm9pZCBwYWNrKExDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgbGVuZ3RoKQp7CiAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5
QWNjZXNzU2l6ZSA9IDE2OyAvLyBNZW1vcnkgYWNjZXNzZXMgb24gMTYgYnl0ZSAoMTI4IGJpdCkg
YWxpZ25tZW50CiAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5QWNjZXNzTWFzayA9IG1lbW9yeUFj
Y2Vzc1NpemUgLSAxOwogICAgCiAgICB1bnNpZ25lZCBpID0gMDsKICAgIGZvciAoO2kgPCBsZW5n
dGggJiYgIWlzQWxpZ25lZFRvPG1lbW9yeUFjY2Vzc01hc2s+KCZzb3VyY2VbaV0pOyArK2kpCiAg
ICAgICAgZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07CgogICAgY29uc3QgdWludHB0cl90IHNv
dXJjZUxvYWRTaXplID0gMzI7IC8vIFByb2Nlc3MgMzIgYnl0ZXMgKDE2IFVDaGFycykgZWFjaCBp
dGVyYXRpb24KICAgIGNvbnN0IHVuc2lnbmVkIHVjaGFyc1Blckxvb3AgPSBzb3VyY2VMb2FkU2l6
ZSAvIHNpemVvZihVQ2hhcik7CiAgICBpZiAobGVuZ3RoID4gdWNoYXJzUGVyTG9vcCkgewogICAg
ICAgIGNvbnN0IHVpbnRwdHJfdCBzb3VyY2VMb2FkTWFzayA9IHNvdXJjZUxvYWRTaXplIC0gMTsK
ICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRMZW5ndGggPSBsZW5ndGggLSB1Y2hhcnNQZXJMb29w
ICsgMTsKICAgICAgICBmb3IgKDsgaSA8IGVuZExlbmd0aDtpICs9IHVjaGFyc1Blckxvb3ApIHsK
ICAgICAgICAgICAgX19tMTI4aSBmaXJzdDhVQ2hhcnMgPSBfbW1fbG9hZF9zaTEyOChyZWludGVy
cHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW2ldKSk7CiAgICAgICAgICAgIF9fbTEy
OGkgc2Vjb25kOFVDaGFycyA9IF9tbV9sb2FkX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
X19tMTI4aSo+KCZzb3VyY2VbaSs4XSkpOwogICAgICAgICAgICBfX20xMjhpIHBhY2tlZENoYXJz
ID0gX21tX3BhY2t1c19lcGkxNihmaXJzdDhVQ2hhcnMsIHNlY29uZDhVQ2hhcnMpOwogICAgICAg
ICAgICBfbW1fc3RvcmV1X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4aSo+KCZkZXN0aW5h
dGlvbltpXSksIHBhY2tlZENoYXJzKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yICg7IGkgPCBs
ZW5ndGg7ICsraSkKICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKfQoKc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVNvdXJjZShVQ2hhciogc3JjLCB1bnNpZ25lZCBzaXplKQp7CiAgICBM
Q2hhciB2YWx1ZSA9IDA7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQog
ICAgICAgIHNyY1tpXSA9IHZhbHVlKys7Cn0KCnN0YXRpYyB2b2lkIG51bGxpZnlEZXN0aW5hdGlv
bihMQ2hhciogZHN0LCB1bnNpZ25lZCBzaXplKQp7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQogICAgICAgIGRzdFtpXSA9IDA7Cn0KCnZvaWQgdmVyaWZ5UmVzdWx0KExD
aGFyKiBkc3QsIHVuc2lnbmVkIHNpemUpCnsKICAgIFVDaGFyIHNvdXJjZVtzaXplXTsKICAgIExD
aGFyIGNvcnJlY3REZXN0aW5hdGlvbltzaXplXTsKICAgIGluaXRpYWxpemVTb3VyY2Uoc291cmNl
LCBzaXplKTsKICAgIGR1bWIoY29ycmVjdERlc3RpbmF0aW9uLCBzb3VyY2UsIHNpemUpOwoKICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICBpZiAoZHN0W2ld
ICE9IGNvcnJlY3REZXN0aW5hdGlvbltpXSkgewogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkludmFsaWQgcmVzdWx0LCB0cnkgYWdhaW4uXG4iKTsKICAgICAgICAgICAgZXhpdCgxKTsKICAg
ICAgICB9CiAgICB9Cn0KCnR5cGVkZWYgdm9pZCgqUGFja0Z1bmN0b24pKExDaGFyKiwgY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCk7CnZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBuYW1lLCBQYWNrRnVu
Y3RvbiB0ZXN0RnVuY3Rpb24sIHVuc2lnbmVkIHRlc3RTaXplKQp7CiAgICBVQ2hhciBzb3VyY2Vb
dGVzdFNpemVdOwogICAgTENoYXIgZGVzdGluYXRpb25bdGVzdFNpemVdOwoKICAgIGluaXRpYWxp
emVTb3VyY2Uoc291cmNlLCB0ZXN0U2l6ZSk7CiAgICBudWxsaWZ5RGVzdGluYXRpb24oZGVzdGlu
YXRpb24sIHRlc3RTaXplKTsKCiAgICBzdHJ1Y3QgdGltZXZhbCBzdGFydDsKICAgIHN0cnVjdCB0
aW1ldmFsIGVuZDsKICAgIGdldHRpbWVvZmRheSAoJnN0YXJ0LCBOVUxMKTsKICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQogICAgICAgIHRlc3RGdW5jdGlvbihkZXN0aW5h
dGlvbiwgc291cmNlLCB0ZXN0U2l6ZSk7CiAgICBnZXR0aW1lb2ZkYXkgKCZlbmQsIE5VTEwpOwoK
ICAgIHZlcmlmeVJlc3VsdChkZXN0aW5hdGlvbiwgdGVzdFNpemUpOwoKICAgIHVpbnQ2NF90IGVs
YXBzZWQgPSAoZW5kLnR2X3NlYyAqIDEwMDAwMDAgKyBlbmQudHZfdXNlYykgLSAoc3RhcnQudHZf
c2VjICogMTAwMDAwMCArIHN0YXJ0LnR2X3VzZWMpOwogICAgcHJpbnRmKCIlcyBydW4gZm9yICVs
ZHVzIG9uICVkIGNoYXJhY3RlcnNcbiIsIG5hbWUsIGVsYXBzZWQsIHRlc3RTaXplKTsKfQoKaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIgYXJndltdKQp7CiAgICBydW5UZXN0KCJUcml2aWFsIGltcGxl
bWVudGF0aW9uIiwgJmR1bWIsIDEwMDAwKTsKICAgIHJ1blRlc3QoIlNTU0UzIFNodWZmbGUiLCAm
c2h1ZmZsZSwgMTAwMDApOwogICAgcnVuVGVzdCgiU1NFMiBQYWNrIiwgJnBhY2ssIDEwMDAwKTsK
ICAgIHByaW50ZigiXG4iKTsKICAgIHJ1blRlc3QoIlRyaXZpYWwgaW1wbGVtZW50YXRpb24iLCAm
ZHVtYiwgMjApOwogICAgcnVuVGVzdCgiU1NTRTMgU2h1ZmZsZSIsICZzaHVmZmxlLCAyMCk7CiAg
ICBydW5UZXN0KCJTU0UyIFBhY2siLCAmcGFjaywgMjApOwogICAgcHJpbnRmKCJcbiIpOwogICAg
cnVuVGVzdCgiVHJpdmlhbCBpbXBsZW1lbnRhdGlvbiIsICZkdW1iLCAzKTsKICAgIHJ1blRlc3Qo
IlNTU0UzIFNodWZmbGUiLCAmc2h1ZmZsZSwgMyk7CiAgICBydW5UZXN0KCJTU0UyIFBhY2siLCAm
cGFjaywgMyk7CiAgICByZXR1cm4gMDsKfQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158867</attachid>
            <date>2012-08-16 11:50:01 -0700</date>
            <delta_ts>2012-08-16 14:24:10 -0700</delta_ts>
            <desc>Patch updated with suggested changes including using PACKUSWB</desc>
            <filename>93742-4.patch</filename>
            <type>text/plain</type>
            <size>14630</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjU3OTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA4LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgOCBiaXQgcGF0
aCB0byBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKS4gQWRkZWQgbmV3IFN0cmluZyBj
cmVhdG9yCisgICAgICAgIHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgVUNoYXIgYXJyYXkgdGhh
dCBpcyBrbm93biB0byBjb250YWluIG9ubHkgOCBiaXQKKyAgICAgICAgY2hhcmFjdGVycyAoTENo
YXIncykuIEFkZGVkIG5ldyBoZWxwZXIgbWV0aG9kIHRvIGNvcHkgY29udGVudHMgb2YgYQorICAg
ICAgICBVQ2hhciBidWZmZXIgdG8gYSBMQ2hhciBidWZmZXIuIFRoZSBoZWxwZXIgbWV0aG9kIGlu
Y2x1ZGVzIFg4Ni02NCBpbnRyaW5zaWNzCisgICAgICAgIG9mIFNTRSBmYW1pbHkgaW5zdHJ1Y3Rp
b25zIGZvciBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHd0Zi9BbGlnbm1lbnQuaDoKKyAgICAg
ICAgKFdURjo6aXNBbGlnbmVkVG8pOgorICAgICAgICAqIHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGgu
aDoKKyAgICAgICAgKFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNvdXJjZSk6CisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjptYWtlOEJpdEZy
b20xNkJpdFNvdXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAg
IChTdHJpbmcpOgorICAgICAgICAoV1RGOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKToKKwogMjAxMi0wOC0xNCAg
TWlsaWFuIFdvbGZmICA8bWlsaWFuLndvbGZmQGtkYWIuY29tPgogCiAgICAgICAgIFtRdF0gUU5Y
IGJ1aWxkIGZhaWxzIGR1ZSB0byByZWZlcmVuY2UgdG8gTUFEVl9GUkVFX1JFVVNFIGFuZCBNQURW
X0ZSRUVfUkVVU0FCTEUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BbGlnbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsMTIg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQogICAgICAgICAgICAgc3RkOjpzd2FwKGEuYnVmZmVyW2ldLCBiLmJ1ZmZlcltpXSk7CiAg
ICAgfQotCisgICAgCisgICAgdGVtcGxhdGUgPHVpbnRwdHJfdCBtYXNrPgorICAgIGlubGluZSBi
b29sIGlzQWxpZ25lZFRvKGNvbnN0IHZvaWQqIHBvaW50ZXIpCisgICAgeworICAgICAgICByZXR1
cm4gIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiBtYXNrKTsKKyAgICB9
CiB9CiAKICNlbmRpZiAvLyBXVEZfQWxpZ25tZW50X2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQVNDSUlGYXN0UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQVND
SUlGYXN0UGF0aC5oCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0FT
Q0lJRmFzdFBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsMTEgQEAKICNpZm5kZWYg
QVNDSUlGYXN0UGF0aF9oCiAjZGVmaW5lIEFTQ0lJRmFzdFBhdGhfaAogCisjaWYgT1MoREFSV0lO
KSAKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN0ZGludC5oPgor
I2luY2x1ZGUgPHd0Zi9BbGlnbm1lbnQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtOTUsNiArOTksNDMgQEAgaW5saW5lIGJvb2wgY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IAogICAgIHJldHVybiAhKGFsbENoYXJCaXRzICYgbm9u
QVNDSUlCaXRNYXNrKTsKIH0KIAoraW5saW5lIHZvaWQgY29weUxDaGFyc0Zyb21VQ2hhclNvdXJj
ZShMQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgp
Cit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IHVpbnRwdHJfdCBtZW1vcnlBY2Nlc3NTaXpl
ID0gMTY7IC8vIE1lbW9yeSBhY2Nlc3NlcyBvbiAxNiBieXRlICgxMjggYml0KSBhbGlnbm1lbnQK
KyAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5QWNjZXNzTWFzayA9IG1lbW9yeUFjY2Vzc1NpemUg
LSAxOworCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yICg7aSA8IGxlbmd0aCAmJiAhaXNB
bGlnbmVkVG88bWVtb3J5QWNjZXNzTWFzaz4oJnNvdXJjZVtpXSk7ICsraSkKKyAgICAgICAgZGVz
dGluYXRpb25baV0gPSBzb3VyY2VbaV07CisKKyAgICBjb25zdCB1aW50cHRyX3Qgc291cmNlTG9h
ZFNpemUgPSAzMjsgLy8gUHJvY2VzcyAzMiBieXRlcyAoMTYgVUNoYXJzKSBlYWNoIGl0ZXJhdGlv
bgorICAgIGNvbnN0IHVuc2lnbmVkIHVjaGFyc1Blckxvb3AgPSBzb3VyY2VMb2FkU2l6ZSAvIHNp
emVvZihVQ2hhcik7CisgICAgaWYgKGxlbmd0aCA+IHVjaGFyc1Blckxvb3ApIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgZW5kTGVuZ3RoID0gbGVuZ3RoIC0gdWNoYXJzUGVyTG9vcCArIDE7Cisg
ICAgICAgIGZvciAoOyBpIDwgZW5kTGVuZ3RoOyBpICs9IHVjaGFyc1Blckxvb3ApIHsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoZWNrSW5kZXggPSAwOyBjaGVj
a0luZGV4IDwgdWNoYXJzUGVyTG9vcDsgY2hlY2tJbmRleCsrKQorICAgICAgICAgICAgICAgIEFT
U0VSVCghKHNvdXJjZVtpK2NoZWNrSW5kZXhdICYgMHhmZjAwKSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIF9fbTEyOGkgZmlyc3Q4VUNoYXJzID0gX21tX2xvYWRfc2kxMjgocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVtpXSkpOworICAgICAgICAgICAgX19tMTI4aSBzZWNv
bmQ4VUNoYXJzID0gX21tX2xvYWRfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhp
Kj4oJnNvdXJjZVtpKzhdKSk7CisgICAgICAgICAgICBfX20xMjhpIHBhY2tlZENoYXJzID0gX21t
X3BhY2t1c19lcGkxNihmaXJzdDhVQ2hhcnMsIHNlY29uZDhVQ2hhcnMpOworICAgICAgICAgICAg
X21tX3N0b3JldV9zaTEyOChyZWludGVycHJldF9jYXN0PF9fbTEyOGkqPigmZGVzdGluYXRpb25b
aV0pLCBwYWNrZWRDaGFycyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIEFTU0VSVCghKHNvdXJjZVtpXSAmIDB4ZmYwMCkpOworICAg
ICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKKyAgICB9CisjZWxzZQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBBU1NFUlQoISgqc291
cmNlICYgMHhmZjAwKSk7CisgICAgICAgICpkZXN0aW5hdGlvbisrID0gc3RhdGljX2Nhc3Q8TENo
YXI+KCpzb3VyY2UrKyk7CisgICAgfQorI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDEwIEBACiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
VEY4Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorI2lmIE9TKERBUldJTikK
KyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC03NzAsNiArNzc0LDE5IEBAIENTdHJpbmcgU3Ry
aW5nOjp1dGY4KGJvb2wgc3RyaWN0KSBjb25zdAogICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlclZl
Y3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOwogfQogCitTdHJpbmcg
U3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciogc291cmNlLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBMQ2hhciogZGVzdGluYXRpb247CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6
Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9uKTsKKworICAgIGNvcHlMQ2hh
cnNGcm9tVUNoYXJTb3VyY2UoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3RoKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFyKiBz
dHJpbmdTdGFydCwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2
aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw4IEBAIGVudW0gRmxvYXRDb252ZXJzaW9uRmxhZ3Mgewog
ICAgIFNob3VsZFRydW5jYXRlVHJhaWxpbmdaZXJvcyA9IDEgPDwgMgogfTsKIAotdGVtcGxhdGU8
Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBib29sIGlzQWxsU3BlY2lhbENoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqLCBzaXplX3QpOwordGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0
ZXIoVUNoYXIpLCB0eXBlbmFtZSBDaGFyVHlwZT4KK2Jvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVy
cyhjb25zdCBDaGFyVHlwZSosIHNpemVfdCk7CiAKIGNsYXNzIFN0cmluZyB7CiBwdWJsaWM6CkBA
IC0zOTMsNiArMzk0LDggQEAgcHVibGljOgogICAgIG9wZXJhdG9yIEJsYWNrQmVycnk6OldlYktp
dDo6V2ViU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgU3RyaW5nIG1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFVDaGFyKiwgc2l6
ZV90KTsKKwogICAgIC8vIFN0cmluZzo6ZnJvbVVURjggd2lsbCByZXR1cm4gYSBudWxsIHN0cmlu
ZyBpZgogICAgIC8vIHRoZSBpbnB1dCBkYXRhIGNvbnRhaW5zIGludmFsaWQgVVRGLTggc2VxdWVu
Y2VzLgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNv
bnN0IExDaGFyKiwgc2l6ZV90KTsKQEAgLTU2Niw3ICs1NjksOCBAQCBpbmxpbmUgdm9pZCBhcHBl
bmROdW1iZXIoVmVjdG9yPFVDaGFyPiYgCiAgICAgfQogfQogCi10ZW1wbGF0ZTxib29sIGlzU3Bl
Y2lhbENoYXJhY3RlcihVQ2hhcik+IGlubGluZSBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTxib29sIGlz
U3BlY2lhbENoYXJhY3RlcihVQ2hhciksIHR5cGVuYW1lIENoYXJUeXBlPgoraW5saW5lIGJvb2wg
aXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGlmICghaXNTcGVjaWFsQ2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0pKQpAQCAtNTc1LDkg
KzU3OSwxNyBAQCB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFy
KT4gaW5saW5lIGJvb2wgU3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKCkgY29uc3QKK3Rl
bXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4KK2lubGluZSBib29sIFN0cmlu
Zzo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aXNB
bGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFyYWN0ZXI+KGNoYXJhY3RlcnMoKSwgbGVu
Z3RoKCkpOworICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKyAgICAKKyAgICBpZiAoIWxlbikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVy
biBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFjdGVyLCBMQ2hhcj4o
Y2hhcmFjdGVyczgoKSwgbGVuKTsKKyAgICByZXR1cm4gV1RGOjppc0FsbFNwZWNpYWxDaGFyYWN0
ZXJzPGlzU3BlY2lhbENoYXJhY3RlciwgVUNoYXI+KGNoYXJhY3RlcnMoKSwgbGVuKTsKIH0KIAog
Ly8gU3RyaW5nSGFzaCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBTdHJpbmcKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEyNTMzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA4LTEwICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IGFsbCBk
YXRhIGFzc29jaWF0ZWQgd2l0aCBhIHRva2VuIGlzIHN0b3JlZCBhbmQgcHJvY2Vzc2VkIGFzIFVD
aGFycy4KKyAgICAgICAgQWRkZWQgY29kZSB0byBkZXRlcm1pbmUgdGhhdCB0aGUgY29udGVudHMg
b2YgdG9rZW4gZGF0YSBpcyBhbGwgOCBiaXQgYnkga2VlcGluZworICAgICAgICB0aGUgbG9naWNh
bCBPUiB2YWx1ZSBvZiBhbGwgcHJpb3IgY2hhcmFjdGVycy4gIEFsc28gYWRkZWQgYSBmbGFnIHRo
YXQgdGhlIHBhcnNlcgorICAgICAgICBjYW4gc2V0IHRvIGluZGljYXRlIHdoZW4gdGhlIHRva2Vu
IGRhdGEgaXMgY29udmVydGVkIHRvIGEgU3RyaW5nIHRoYXQgd2Ugd2FudAorICAgICAgICB0byBt
YWtlIGFuIDggYml0IHN0cmluZyBpZiBwb3NzaWJsZS4gIEVuYWJsZWQgdGhpcyBoYW5kbGluZyBm
b3Igc2NyaXB0LCBzdHlsZSwKKyAgICAgICAgaWZyYW1lLCBub2VtYmVkLCBub2ZyYW1lcywgbm9z
Y3JpcHQgYW5kIHhtcCB0YWdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgdGVz
dHMgcHJvdmlkZSBjb3ZlcmFnZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpFeHRlcm5h
bENoYXJhY3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6aXNBbGw4Qml0RGF0YSk6CisgICAgICAg
IChIVE1MVHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVy
Ojp0YWtlUmVtYWluaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmFwcGVuZFRvQ2hhcmFjdGVyKToKKyAgICAgICAgKE1h
cmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmVyYXNl
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OnNldENvbnZl
cnRUbzhCaXQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjppc0FsbDhCaXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFy
a3VwVG9rZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6
aXNBbGw4Qml0RGF0YSk6CisgICAgICAgIChBdG9taWNNYXJrdXBUb2tlbkJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpjbGVhckV4dGVybmFsQ2hhcmFjdGVy
cyk6CisKIDIwMTItMDgtMTAgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1MgU2hhZGVyc10gQWRkIGJsZW5kIG1vZGUgYW5kIGNvbXBvc2l0ZSBvcCB0byBj
b21waWxlZCBwcm9ncmFtIGNhY2hlIGtleQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQs
NiArNDc0LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNB
cHByb3ByaWF0ZUVuZFRhZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdGVtcG9yYXJ5QnVm
ZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4tPnNldENvbnZlcnRU
bzhCaXQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsdXNoRW1pdEFuZFJlc3VtZUlu
KHNvdXJjZSwgSFRNTFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KQEAgLTU0Myw2ICs1NDQsNyBAQCBib29sIEhUTUxUb2tlbml6ZXI6
Om5leHRUb2tlbihTZWdtZW50ZWRTCiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+Jykg
ewogICAgICAgICAgICAgICAgIGlmIChpc0FwcHJvcHJpYXRlRW5kVGFnKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV90ZW1wb3JhcnlCdWZmZXIuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV90b2tlbi0+c2V0Q29udmVydFRvOEJpdCgpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmx1c2hFbWl0QW5kUmVzdW1lSW4oc291cmNlLCBIVE1MVG9rZW5pemVyU3RhdGU6OkRh
dGFTdGF0ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAx
MjQ4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAg
ICAgICAgOiBtX2N1cnJlbnQodG9rZW4tPmNoYXJhY3RlcnMoKS5kYXRhKCkpCiAgICAgICAgICwg
bV9lbmQobV9jdXJyZW50ICsgdG9rZW4tPmNoYXJhY3RlcnMoKS5zaXplKCkpCisgICAgICAgICwg
bV9pc0FsbDhCaXREYXRhKHRva2VuLT5pc0FsbDhCaXREYXRhKCkpCiAgICAgewogICAgICAgICBB
U1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMjU2LDYgKzI1Nyw3IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogICAgICAgICA6IG1fY3VycmVudChzdHJpbmcuY2hhcmFjdGVycygpKQogICAgICAgICAs
IG1fZW5kKG1fY3VycmVudCArIHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgLCBtX2lzQWxsOEJp
dERhdGEoc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZy5pczhCaXQoKSkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0yNjcsNiArMjY5LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50ID09IG1fZW5kOyB9
CiAKKyAgICBib29sIGlzQWxsOEJpdERhdGEoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsOEJpdERh
dGE7IH0KKwogICAgIHZvaWQgc2tpcEF0TW9zdE9uZUxlYWRpbmdOZXdsaW5lKCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKQEAgLTI5NCw3ICsyOTgsMTIgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9
IG1fY3VycmVudDsKICAgICAgICAgbV9jdXJyZW50ID0gbV9lbmQ7Ci0gICAgICAgIHJldHVybiBT
dHJpbmcoc3RhcnQsIG1fY3VycmVudCAtIHN0YXJ0KTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IG1fY3VycmVudCAtIHN0YXJ0OworCisgICAgICAgIGlmIChpc0FsbDhCaXREYXRhKCkpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShzdGFydCwgbGVu
Z3RoKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nKHN0YXJ0LCBsZW5ndGgpOwogICAgIH0KIAog
ICAgIHZvaWQgZ2l2ZVJlbWFpbmluZ1RvKFN0cmluZ0J1aWxkZXImIHJlY2lwaWVudCkKQEAgLTM0
NCw2ICszNTMsNyBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgVUNoYXIqIG1fY3VycmVudDsKICAg
ICBjb25zdCBVQ2hhciogbV9lbmQ7CisgICAgYm9vbCBtX2lzQWxsOEJpdERhdGE7CiB9OwogCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAkocmV2
aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmFuZ2UubV9lbmQgPSAwOwogICAgICAgICBtX2Jhc2VPZmZzZXQgPSAwOwogICAgICAgICBtX2Rh
dGEuY2xlYXIoKTsKKyAgICAgICAgbV9vckFsbERhdGEgPSAwOworICAgICAgICBtX2NvbnZlcnRU
bzhCaXRJZlBvc3NpYmxlID0gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBpc1VuaW5pdGlhbGl6
ZWQoKSB7IHJldHVybiBtX3R5cGUgPT0gVHlwZVNldDo6VW5pbml0aWFsaXplZDsgfQpAQCAtMTcy
LDYgKzE3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsK
ICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFRvQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZVNldDo6Q2hhcmFjdGVyKTsKKyAgICAg
ICAgbV9kYXRhLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICBtX29yQWxsRGF0YSB8PSBjaGFy
YWN0ZXI7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVu
ZFRvQ2hhcmFjdGVyKFQgY2hhcmFjdGVycykKICAgICB7CkBAIC0yNzQsNiArMjgzLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDaGFyYWN0ZXIp
OwogICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICAgICAgbV9vckFsbERhdGEgPSAwOwogICAg
IH0KIAogICAgIHZvaWQgZXJhc2VWYWx1ZU9mQXR0cmlidXRlKHNpemVfdCBpKQpAQCAtMjk0LDYg
KzMwNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2RhdGE7CiAgICAgfQogCisgICAg
dm9pZCBzZXRDb252ZXJ0VG84Qml0KCkKKyAgICB7CisgICAgICAgIG1fY29udmVydFRvOEJpdElm
UG9zc2libGUgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9jb252ZXJ0VG84Qml0SWZQb3NzaWJsZSAmJiAobV9v
ckFsbERhdGEgPD0gMHhmZik7CisgICAgfQorCiAgICAgLy8gRklYTUU6IERpc3Rpbmd1aXNoIGJl
dHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIgYW5kIGFuIGVtcHR5IG9uZS4KICAgICBj
b25zdCBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lkZW50aWZpZXIoKSBjb25zdAogICAgIHsK
QEAgLTM3MCw2ICszOTAsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdHlwZW5hbWUgQXR0cmlidXRlOjpS
YW5nZSBtX3JhbmdlOyAvLyBBbHdheXMgc3RhcnRzIGF0IHplcm8uCiAgICAgaW50IG1fYmFzZU9m
ZnNldDsKICAgICBEYXRhVmVjdG9yIG1fZGF0YTsKKyAgICBVQ2hhciBtX29yQWxsRGF0YTsKKyAg
ICBib29sIG1fY29udmVydFRvOEJpdElmUG9zc2libGU7CiAKICAgICAvLyBGb3IgRE9DVFlQRQog
ICAgIE93blB0cjxEb2N0eXBlRGF0YT4gbV9kb2N0eXBlRGF0YTsKQEAgLTQxMyw2ICs0MzUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6
Q2hhcmFjdGVyOgogICAgICAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnMgPSAmdG9rZW4tPmNo
YXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXNBbGw4Qml0RGF0YSA9IHRva2VuLT5pc0FsbDhC
aXREYXRhKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDIzLDYgKzQ0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3R5cGUo
dHlwZSkKICAgICAgICAgLCBtX25hbWUobmFtZSkKICAgICAgICAgLCBtX2V4dGVybmFsQ2hhcmFj
dGVycygwKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0YShmYWxzZSkKICAgICAgICAgLCBtX2F0
dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsK
QEAgLTQ3Miw2ICs0OTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZXh0ZXJuYWxD
aGFyYWN0ZXJzOwogICAgIH0KIAorICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9pc0FsbDhCaXREYXRhOworICAgIH0KKwogICAgIGNvbnN0IFN0
cmluZyYgY29tbWVudCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFRv
a2VuOjpUeXBlOjpDb21tZW50KTsKQEAgLTQ5NSw2ICs1MjQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbGVhckV4dGVybmFsQ2hhcmFjdGVycygpCiAgICAgewogICAgICAgICBtX2V4dGVybmFsQ2hh
cmFjdGVycyA9IDA7CisgICAgICAgIG1faXNBbGw4Qml0RGF0YSA9IGZhbHNlOwogICAgIH0KIAog
cHJvdGVjdGVkOgpAQCAtNTIyLDYgKzU1Miw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBGSVhNRTog
QWRkIGEgbWVjaGFuaXNtIGZvciAiaW50ZXJuYWxpemluZyIgdGhlIGNoYXJhY3RlcnMgd2hlbiB0
aGUKICAgICAvLyAgICAgICAgSFRNTFRva2VuIGlzIGRlc3RydWN0ZWQuCiAgICAgY29uc3QgdHlw
ZW5hbWUgVG9rZW46OkRhdGFWZWN0b3IqIG1fZXh0ZXJuYWxDaGFyYWN0ZXJzOworICAgIGJvb2wg
bV9pc0FsbDhCaXREYXRhOwogCiAgICAgLy8gRm9yIERPQ1RZUEUKICAgICBPd25QdHI8dHlwZW5h
bWUgVG9rZW46OkRvY3R5cGVEYXRhPiBtX2RvY3R5cGVEYXRhOwo=
</data>
<flag name="review"
          id="169069"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="169085"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158903</attachid>
            <date>2012-08-16 14:24:10 -0700</date>
            <delta_ts>2012-08-16 14:24:10 -0700</delta_ts>
            <desc>Patch with Reviewer&apos;s Changes and Speculative Chromium Linux Build Fix</desc>
            <filename>93742-5.patch</filename>
            <type>text/plain</type>
            <size>14882</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjU3OTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA4LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEhUTUwgUGFyc2VyIHNob3VsZCBwcm9kdWNlIDhi
aXQgc3Vic3RyaW5ncyBmb3IgaW5saW5lIHN0eWxlIGFuZCBzY3JpcHQgZWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzQyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgOCBiaXQgcGF0
aCB0byBTdHJpbmc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKS4gQWRkZWQgbmV3IFN0cmluZyBj
cmVhdG9yCisgICAgICAgIHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgVUNoYXIgYXJyYXkgdGhh
dCBpcyBrbm93biB0byBjb250YWluIG9ubHkgOCBiaXQKKyAgICAgICAgY2hhcmFjdGVycyAoTENo
YXIncykuIEFkZGVkIG5ldyBoZWxwZXIgbWV0aG9kIHRvIGNvcHkgY29udGVudHMgb2YgYQorICAg
ICAgICBVQ2hhciBidWZmZXIgdG8gYSBMQ2hhciBidWZmZXIuIFRoZSBoZWxwZXIgbWV0aG9kIGlu
Y2x1ZGVzIFg4Ni02NCBpbnRyaW5zaWNzCisgICAgICAgIG9mIFNTRSBmYW1pbHkgaW5zdHJ1Y3Rp
b25zIGZvciBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIHd0Zi9BbGlnbm1lbnQuaDoKKyAgICAg
ICAgKFdURjo6aXNBbGlnbmVkVG8pOgorICAgICAgICAqIHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGgu
aDoKKyAgICAgICAgKFdURjo6Y29weUxDaGFyc0Zyb21VQ2hhclNvdXJjZSk6CisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjptYWtlOEJpdEZy
b20xNkJpdFNvdXJjZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAg
IChTdHJpbmcpOgorICAgICAgICAoV1RGOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKToKKwogMjAxMi0wOC0xNCAg
TWlsaWFuIFdvbGZmICA8bWlsaWFuLndvbGZmQGtkYWIuY29tPgogCiAgICAgICAgIFtRdF0gUU5Y
IGJ1aWxkIGZhaWxzIGR1ZSB0byByZWZlcmVuY2UgdG8gTUFEVl9GUkVFX1JFVVNFIGFuZCBNQURW
X0ZSRUVfUkVVU0FCTEUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FsaWdubWVudC5oCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BbGlnbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBA
QAogCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC01OCw2ICs2MCwxMSBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHN0ZDo6c3dhcChhLmJ1ZmZlcltpXSwgYi5i
dWZmZXJbaV0pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx1aW50cHRyX3QgbWFzaz4KKyAgICBp
bmxpbmUgYm9vbCBpc0FsaWduZWRUbyhjb25zdCB2b2lkKiBwb2ludGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgbWFzayk7
CisgICAgfQogfQogCiAjZW5kaWYgLy8gV1RGX0FsaWdubWVudF9oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0FTQ0lJRmFzdFBhdGguaAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dURi93dGYv
dGV4dC9BU0NJSUZhc3RQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDExIEBACiAj
aWZuZGVmIEFTQ0lJRmFzdFBhdGhfaAogI2RlZmluZSBBU0NJSUZhc3RQYXRoX2gKIAorI2lmIE9T
KERBUldJTikgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpKQorI2luY2x1ZGUgPGVtbWludHJp
bi5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL0FsaWdubWVu
dC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdURiB7
CkBAIC05NSw2ICs5OSw0NSBAQCBpbmxpbmUgYm9vbCBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY29u
c3QgCiAgICAgcmV0dXJuICEoYWxsQ2hhckJpdHMgJiBub25BU0NJSUJpdE1hc2spOwogfQogCitp
bmxpbmUgdm9pZCBjb3B5TENoYXJzRnJvbVVDaGFyU291cmNlKExDaGFyKiBkZXN0aW5hdGlvbiwg
Y29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyNpZiBPUyhEQVJXSU4pICYm
IChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSkKKyAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5QWNj
ZXNzU2l6ZSA9IDE2OyAvLyBNZW1vcnkgYWNjZXNzZXMgb24gMTYgYnl0ZSAoMTI4IGJpdCkgYWxp
Z25tZW50CisgICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vzc01hc2sgPSBtZW1vcnlBY2Nl
c3NTaXplIC0gMTsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICBmb3IgKDtpIDwgbGVuZ3RoICYm
ICFpc0FsaWduZWRUbzxtZW1vcnlBY2Nlc3NNYXNrPigmc291cmNlW2ldKTsgKytpKSB7CisgICAg
ICAgIEFTU0VSVCghKHNvdXJjZVtpXSAmIDB4ZmYwMCkpOworICAgICAgICBkZXN0aW5hdGlvbltp
XSA9IHN0YXRpY19jYXN0PExDaGFyPihzb3VyY2VbaV0pOworICAgIH0KKworICAgIGNvbnN0IHVp
bnRwdHJfdCBzb3VyY2VMb2FkU2l6ZSA9IDMyOyAvLyBQcm9jZXNzIDMyIGJ5dGVzICgxNiBVQ2hh
cnMpIGVhY2ggaXRlcmF0aW9uCisgICAgY29uc3QgdW5zaWduZWQgdWNoYXJzUGVyTG9vcCA9IHNv
dXJjZUxvYWRTaXplIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICBpZiAobGVuZ3RoID4gdWNoYXJzUGVy
TG9vcCkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRMZW5ndGggPSBsZW5ndGggLSB1Y2hh
cnNQZXJMb29wICsgMTsKKyAgICAgICAgZm9yICg7IGkgPCBlbmRMZW5ndGg7IGkgKz0gdWNoYXJz
UGVyTG9vcCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hl
Y2tJbmRleCA9IDA7IGNoZWNrSW5kZXggPCB1Y2hhcnNQZXJMb29wOyBjaGVja0luZGV4KyspCisg
ICAgICAgICAgICAgICAgQVNTRVJUKCEoc291cmNlW2krY2hlY2tJbmRleF0gJiAweGZmMDApKTsK
KyNlbmRpZgorICAgICAgICAgICAgX19tMTI4aSBmaXJzdDhVQ2hhcnMgPSBfbW1fbG9hZF9zaTEy
OChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW2ldKSk7CisgICAgICAg
ICAgICBfX20xMjhpIHNlY29uZDhVQ2hhcnMgPSBfbW1fbG9hZF9zaTEyOChyZWludGVycHJldF9j
YXN0PGNvbnN0IF9fbTEyOGkqPigmc291cmNlW2krOF0pKTsKKyAgICAgICAgICAgIF9fbTEyOGkg
cGFja2VkQ2hhcnMgPSBfbW1fcGFja3VzX2VwaTE2KGZpcnN0OFVDaGFycywgc2Vjb25kOFVDaGFy
cyk7CisgICAgICAgICAgICBfbW1fc3RvcmV1X3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4
aSo+KCZkZXN0aW5hdGlvbltpXSksIHBhY2tlZENoYXJzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKCEoc291cmNlW2ld
ICYgMHhmZjAwKSk7CisgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8TENoYXI+
KHNvdXJjZVtpXSk7CisgICAgfQorI2Vsc2UKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIEFTU0VSVCghKHNvdXJjZVtpXSAmIDB4ZmYwMCkpOworICAg
ICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PExDaGFyPihzb3VyY2VbaV0pOworICAg
IH0KKyNlbmRpZgorfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRleDogU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmNwcAkocmV2aXNpb24gMTI0ODk0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8ZW1taW50cmlu
Lmg+CisjaW5jbHVkZSA8dG1taW50cmluLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtNzcwLDYgKzc3NCwxOSBAQCBDU3RyaW5nIFN0cmluZzo6dXRmOChib29sIHN0cmlj
dCkgY29uc3QKICAgICByZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIg
LSBidWZmZXJWZWN0b3IuZGF0YSgpKTsKIH0KIAorU3RyaW5nIFN0cmluZzo6bWFrZThCaXRGcm9t
MTZCaXRTb3VyY2UoY29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTENoYXIqIGRlc3Rp
bmF0aW9uOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBkZXN0aW5hdGlvbik7CisKKyAgICBjb3B5TENoYXJzRnJvbVVDaGFyU291cmNlKGRl
c3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBT
dHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5nU3RhcnQsIHNpemVfdCBs
ZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsx
MDAsOCBAQCBlbnVtIEZsb2F0Q29udmVyc2lvbkZsYWdzIHsKICAgICBTaG91bGRUcnVuY2F0ZVRy
YWlsaW5nWmVyb3MgPSAxIDw8IDIKIH07CiAKLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFj
dGVyKFVDaGFyKT4gYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgc2l6
ZV90KTsKK3RlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKSwgdHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KK2Jvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiwgc2l6ZV90KTsKIAogY2xhc3MgU3RyaW5nIHsKIHB1YmxpYzoKQEAgLTM5Myw2ICsz
OTQsOCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJp
bmcoKSBjb25zdDsKICNlbmRpZgogCisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBT
dHJpbmcgbWFrZThCaXRGcm9tMTZCaXRTb3VyY2UoY29uc3QgVUNoYXIqLCBzaXplX3QpOworCiAg
ICAgLy8gU3RyaW5nOjpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwgc3RyaW5nIGlmCiAgICAg
Ly8gdGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgTENoYXIq
LCBzaXplX3QpOwpAQCAtNTY2LDcgKzU2OSw4IEBAIGlubGluZSB2b2lkIGFwcGVuZE51bWJlcihW
ZWN0b3I8VUNoYXI+JiAKICAgICB9CiB9CiAKLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFj
dGVyKFVDaGFyKT4gaW5saW5lIGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKK3RlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hh
cmFjdGVyKFVDaGFyKSwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSBib29sIGlzQWxs
U3BlY2lhbENoYXJhY3RlcnMoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGlmICghaXNTcGVjaWFsQ2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0pKQpAQCAtNTc1LDkg
KzU3OSwxNyBAQCB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFy
KT4gaW5saW5lIGJvb2wgU3RyaW5nOjppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKCkgY29uc3QKK3Rl
bXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4KK2lubGluZSBib29sIFN0cmlu
Zzo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aXNB
bGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFyYWN0ZXI+KGNoYXJhY3RlcnMoKSwgbGVu
Z3RoKCkpOworICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKKworICAgIGlmICghbGVuKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFyYWN0ZXIsIExDaGFyPihjaGFy
YWN0ZXJzOCgpLCBsZW4pOworICAgIHJldHVybiBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNTcGVjaWFsQ2hhcmFjdGVyLCBVQ2hhcj4oY2hhcmFjdGVycygpLCBsZW4pOwogfQogCiAvLyBT
dHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIFN0cmluZwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTI1MzMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTItMDgtMTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CisKKyAgICAgICAgSFRNTCBQYXJzZXIgc2hvdWxkIHByb2R1Y2UgOGJpdCBz
dWJzdHJpbmdzIGZvciBpbmxpbmUgc3R5bGUgYW5kIHNjcmlwdCBlbGVtZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM3NDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgYWxsIGRhdGEg
YXNzb2NpYXRlZCB3aXRoIGEgdG9rZW4gaXMgc3RvcmVkIGFuZCBwcm9jZXNzZWQgYXMgVUNoYXJz
LgorICAgICAgICBBZGRlZCBjb2RlIHRvIGRldGVybWluZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0
b2tlbiBkYXRhIGlzIGFsbCA4IGJpdCBieSBrZWVwaW5nCisgICAgICAgIHRoZSBsb2dpY2FsIE9S
IHZhbHVlIG9mIGFsbCBwcmlvciBjaGFyYWN0ZXJzLiBBbHNvIGFkZGVkIGEgZmxhZyB0aGF0IHRo
ZSBwYXJzZXIKKyAgICAgICAgY2FuIHNldCB0byBpbmRpY2F0ZSB3aGVuIHRoZSB0b2tlbiBkYXRh
IGlzIGNvbnZlcnRlZCB0byBhIFN0cmluZyB0aGF0IHdlIHdhbnQKKyAgICAgICAgdG8gbWFrZSBh
biA4IGJpdCBzdHJpbmcgaWYgcG9zc2libGUuIEVuYWJsZWQgdGhpcyBoYW5kbGluZyBmb3Igc2Ny
aXB0LCBzdHlsZSwKKyAgICAgICAgaWZyYW1lLCBub2VtYmVkLCBub2ZyYW1lcywgbm9zY3JpcHQg
YW5kIHhtcCB0YWdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgdGVzdHMgcHJv
dmlkZSBjb3ZlcmFnZS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bmV4dFRva2VuKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpFeHRlcm5hbENoYXJh
Y3RlclRva2VuQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0
ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6aXNBbGw4Qml0RGF0YSk6CisgICAgICAgIChIVE1M
VHJlZUJ1aWxkZXI6OkV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjp0YWtl
UmVtYWluaW5nKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBUb2tlbkJhc2U6OmFwcGVuZFRvQ2hhcmFjdGVyKToKKyAgICAgICAgKE1hcmt1cFRv
a2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OmVyYXNlQ2hhcmFj
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbkJhc2U6OnNldENvbnZlcnRUbzhC
aXQpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwVG9rZW5CYXNlOjppc0FsbDhCaXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9r
ZW5CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6aXNBbGw4
Qml0RGF0YSk6CisgICAgICAgIChBdG9taWNNYXJrdXBUb2tlbkJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjpjbGVhckV4dGVybmFsQ2hhcmFjdGVycyk6CisK
IDIwMTItMDgtMTAgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1MgU2hhZGVyc10gQWRkIGJsZW5kIG1vZGUgYW5kIGNvbXBvc2l0ZSBvcCB0byBjb21waWxl
ZCBwcm9ncmFtIGNhY2hlIGtleQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNiArNDc0
LDcgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBcHByb3By
aWF0ZUVuZFRhZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmFw
cGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4tPnNldENvbnZlcnRUbzhCaXRJ
ZlBvc3NpYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVzaEVtaXRBbmRSZXN1
bWVJbihzb3VyY2UsIEhUTUxUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDMsNiArNTQ0LDcgQEAgYm9vbCBIVE1MVG9rZW5p
emVyOjpuZXh0VG9rZW4oU2VnbWVudGVkUwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAn
PicpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBcHByb3ByaWF0ZUVuZFRhZygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1fdGVtcG9yYXJ5QnVmZmVyLmFwcGVuZChjYyk7CisgICAgICAgICAg
ICAgICAgICAgIG1fdG9rZW4tPnNldENvbnZlcnRUbzhCaXRJZlBvc3NpYmxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmbHVzaEVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIEhUTUxUb2tl
bml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAJKHJldmlzaW9uIDEyNDg5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw2ICsyNDksNyBAQCBwdWJsaWM6
CiAgICAgZXhwbGljaXQgRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICA6IG1fY3VycmVudCh0b2tlbi0+Y2hhcmFjdGVycygpLmRhdGEo
KSkKICAgICAgICAgLCBtX2VuZChtX2N1cnJlbnQgKyB0b2tlbi0+Y2hhcmFjdGVycygpLnNpemUo
KSkKKyAgICAgICAgLCBtX2lzQWxsOEJpdERhdGEodG9rZW4tPmlzQWxsOEJpdERhdGEoKSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CkBAIC0yNTYsNiArMjU3LDcg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIDogbV9jdXJyZW50KHN0cmluZy5jaGFyYWN0ZXJz
KCkpCiAgICAgICAgICwgbV9lbmQobV9jdXJyZW50ICsgc3RyaW5nLmxlbmd0aCgpKQorICAgICAg
ICAsIG1faXNBbGw4Qml0RGF0YShzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nLmlzOEJpdCgpKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogICAgIH0KQEAgLTI2Nyw2ICsyNjks
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnQgPT0gbV9lbmQ7IH0KIAorICAgIGJvb2wgaXNBbGw4Qml0RGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbGw4Qml0RGF0YTsgfQorCiAgICAgdm9pZCBza2lwQXRNb3N0T25lTGVhZGluZ05ld2xp
bmUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwpAQCAtMjk0LDcgKzI5OCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICAgICAgY29uc3Qg
VUNoYXIqIHN0YXJ0ID0gbV9jdXJyZW50OwogICAgICAgICBtX2N1cnJlbnQgPSBtX2VuZDsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdGFydCwgbV9jdXJyZW50IC0gc3RhcnQpOworICAgICAgICBz
aXplX3QgbGVuZ3RoID0gbV9jdXJyZW50IC0gc3RhcnQ7CisKKyAgICAgICAgaWYgKGlzQWxsOEJp
dERhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291
cmNlKHN0YXJ0LCBsZW5ndGgpOworCisgICAgICAgIHJldHVybiBTdHJpbmcoc3RhcnQsIGxlbmd0
aCk7CiAgICAgfQogCiAgICAgdm9pZCBnaXZlUmVtYWluaW5nVG8oU3RyaW5nQnVpbGRlciYgcmVj
aXBpZW50KQpAQCAtMzQ0LDYgKzM1Myw3IEBAIHByaXZhdGU6CiAKICAgICBjb25zdCBVQ2hhciog
bV9jdXJyZW50OwogICAgIGNvbnN0IFVDaGFyKiBtX2VuZDsKKyAgICBib29sIG1faXNBbGw4Qml0
RGF0YTsKIH07CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tl
bkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRv
a2VuQmFzZS5oCShyZXZpc2lvbiAxMjQ4OTQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L01hcmt1cFRva2VuQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9yYW5nZS5tX2VuZCA9IDA7CiAgICAgICAgIG1fYmFzZU9mZnNldCA9IDA7
CiAgICAgICAgIG1fZGF0YS5jbGVhcigpOworICAgICAgICBtX29yQWxsRGF0YSA9IDA7CisgICAg
ICAgIG1fY29udmVydFRvOEJpdElmUG9zc2libGUgPSBmYWxzZTsKICAgICB9CiAKICAgICBib29s
IGlzVW5pbml0aWFsaXplZCgpIHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlU2V0OjpVbmluaXRpYWxp
emVkOyB9CkBAIC0xNzIsNiArMTc0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9kYXRhLmFwcGVu
ZChjaGFyYWN0ZXIpOwogICAgIH0KIAorICAgIHZvaWQgYXBwZW5kVG9DaGFyYWN0ZXIoVUNoYXIg
Y2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlU2V0OjpDaGFy
YWN0ZXIpOworICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAgIG1fb3JB
bGxEYXRhIHw9IGNoYXJhY3RlcjsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIHZvaWQgYXBwZW5kVG9DaGFyYWN0ZXIoVCBjaGFyYWN0ZXJzKQogICAgIHsKQEAgLTI3NCw2
ICsyODMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGVT
ZXQ6OkNoYXJhY3Rlcik7CiAgICAgICAgIG1fZGF0YS5jbGVhcigpOworICAgICAgICBtX29yQWxs
RGF0YSA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBlcmFzZVZhbHVlT2ZBdHRyaWJ1dGUoc2l6ZV90
IGkpCkBAIC0yOTQsNiArMzA0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZGF0YTsK
ICAgICB9CiAKKyAgICB2b2lkIHNldENvbnZlcnRUbzhCaXRJZlBvc3NpYmxlKCkKKyAgICB7Cisg
ICAgICAgIG1fY29udmVydFRvOEJpdElmUG9zc2libGUgPSB0cnVlOworICAgIH0KKworICAgIGJv
b2wgaXNBbGw4Qml0RGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb252ZXJ0
VG84Qml0SWZQb3NzaWJsZSAmJiAobV9vckFsbERhdGEgPD0gMHhmZik7CisgICAgfQorCiAgICAg
Ly8gRklYTUU6IERpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHB1YmxpYyBpZGVudGlmZXIg
YW5kIGFuIGVtcHR5IG9uZS4KICAgICBjb25zdCBXVEY6OlZlY3RvcjxVQ2hhcj4mIHB1YmxpY0lk
ZW50aWZpZXIoKSBjb25zdAogICAgIHsKQEAgLTM3MCw2ICszOTAsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdHlwZW5hbWUgQXR0cmlidXRlOjpSYW5nZSBtX3JhbmdlOyAvLyBBbHdheXMgc3RhcnRzIGF0
IHplcm8uCiAgICAgaW50IG1fYmFzZU9mZnNldDsKICAgICBEYXRhVmVjdG9yIG1fZGF0YTsKKyAg
ICBVQ2hhciBtX29yQWxsRGF0YTsKKyAgICBib29sIG1fY29udmVydFRvOEJpdElmUG9zc2libGU7
CiAKICAgICAvLyBGb3IgRE9DVFlQRQogICAgIE93blB0cjxEb2N0eXBlRGF0YT4gbV9kb2N0eXBl
RGF0YTsKQEAgLTQxMyw2ICs0MzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Q2hhcmFjdGVyOgogICAgICAgICAgICAgbV9leHRlcm5h
bENoYXJhY3RlcnMgPSAmdG9rZW4tPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXNBbGw4
Qml0RGF0YSA9IHRva2VuLT5pc0FsbDhCaXREYXRhKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDIzLDYgKzQ0Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX25hbWUobmFtZSkKICAg
ICAgICAgLCBtX2V4dGVybmFsQ2hhcmFjdGVycygwKQorICAgICAgICAsIG1faXNBbGw4Qml0RGF0
YShmYWxzZSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKICAgICB7CiAgICAg
ICAgIEFTU0VSVCh1c2VzTmFtZSgpKTsKQEAgLTQ3Miw2ICs0OTYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gKm1fZXh0ZXJuYWxDaGFyYWN0ZXJzOwogICAgIH0KIAorICAgIGJvb2wgaXNB
bGw4Qml0RGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pc0FsbDhCaXREYXRh
OworICAgIH0KKwogICAgIGNvbnN0IFN0cmluZyYgY29tbWVudCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV90eXBlID09IFRva2VuOjpUeXBlOjpDb21tZW50KTsKQEAgLTQ5NSw2ICs1
MjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckV4dGVybmFsQ2hhcmFjdGVycygpCiAgICAg
ewogICAgICAgICBtX2V4dGVybmFsQ2hhcmFjdGVycyA9IDA7CisgICAgICAgIG1faXNBbGw4Qml0
RGF0YSA9IGZhbHNlOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtNTIyLDYgKzU1Miw3IEBAIHBy
b3RlY3RlZDoKICAgICAvLyBGSVhNRTogQWRkIGEgbWVjaGFuaXNtIGZvciAiaW50ZXJuYWxpemlu
ZyIgdGhlIGNoYXJhY3RlcnMgd2hlbiB0aGUKICAgICAvLyAgICAgICAgSFRNTFRva2VuIGlzIGRl
c3RydWN0ZWQuCiAgICAgY29uc3QgdHlwZW5hbWUgVG9rZW46OkRhdGFWZWN0b3IqIG1fZXh0ZXJu
YWxDaGFyYWN0ZXJzOworICAgIGJvb2wgbV9pc0FsbDhCaXREYXRhOwogCiAgICAgLy8gRm9yIERP
Q1RZUEUKICAgICBPd25QdHI8dHlwZW5hbWUgVG9rZW46OkRvY3R5cGVEYXRhPiBtX2RvY3R5cGVE
YXRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>