<?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>36113</bug_id>
          
          <creation_ts>2010-03-15 07:01:04 -0700</creation_ts>
          <short_desc>Optimize painting for HTMLProgressElement</short_desc>
          <delta_ts>2010-03-18 14:38:23 -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>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>36206</blocked>
    
    <blocked>36224</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>199624</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-15 07:01:04 -0700</bug_when>
    <thetext>As suggested in https://bugs.webkit.org/show_bug.cgi?id=35937#c17 , no need to recompute the position each time we draw.
As suggested in https://bugs.webkit.org/show_bug.cgi?id=35937#c24 , no need to recalculate the style in order to repaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199625</commentid>
    <comment_count>1</comment_count>
      <attachid>50699</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-15 07:07:32 -0700</bug_when>
    <thetext>Created attachment 50699
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199693</commentid>
    <comment_count>2</comment_count>
      <attachid>50699</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-15 09:27:21 -0700</bug_when>
    <thetext>Comment on attachment 50699
Patch v1

Thanks for tackling this.

&gt; +    if (attribute-&gt;name() == valueAttr) {
&gt; +        if (renderer())
&gt; +            renderer()-&gt;updateFromElement();
&gt; +    } else if (attribute-&gt;name() == maxAttr) {
&gt; +        if (renderer())
&gt; +            renderer()-&gt;updateFromElement();
&gt; +    } else

Looks good.

&gt; +    int position = (100 * element-&gt;position());

Where does this 100 come from? I don&apos;t think it makes sense to store a value between 0 and 100. The progress indicator could be more than 100 pixels wide or less than 100 pixels wide. I&apos;m not sure exactly how to handle this, but what we want to store is the actual number of pixels used in the theme&apos;s progress bar drawing, which might mean some kind of cooperation with theme theme so you can know how much of the progress indicator is devoted to the progress display. In the mean time, the RenderProgress could instead just store the progress value from the progress element as-is. Multiplying by 100 and converting to an integer is unnecessary if that value, 100, is just an arbitrarily chosen constant.

It seems that the Qt progress bar rendering code does require that the use of integers to render the progress element. So the theme should multiply the position value by something, but I suggest a value greater than 100, perhaps numeric_limits&lt;int&gt;::max() to make best use of the precision available in an integer.

I don&apos;t think the rule &quot;repaint the entire indicator any time the value changes&quot; is optimal for the long run. If the indicator moves a very short distance it would be best to repaint only the affected area. This may not be possible for some platforms, such as Qt, but it would be good to design the mechanism so we can do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200368</commentid>
    <comment_count>3</comment_count>
      <attachid>50826</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-16 12:33:06 -0700</bug_when>
    <thetext>Created attachment 50826
Patch v2

Thank you for your review.
I am not sure I can store the number of pixels to draw in a platform independent way. For example, in the Qt port on different operating systems, we have different border widths and different paddings for the different progress bars.

In order to not lose precision, I replaced the previous 100 with 65536, I hope this is good enough precision for all platforms.

This patch adds a method for getting the size of the dirty rect from the platform, if available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200392</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-16 13:19:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I am not sure I can store the number of pixels to draw in a platform
&gt; independent way. For example, in the Qt port on different operating systems, we
&gt; have different border widths and different paddings for the different progress
&gt; bars.

I think this is actually a Qt-specific problem. Qt only gives you a way to paint the progress indicator, and doesn&apos;t let you find out how much of a progress change is needed to see the difference. So I agree that this is indeed impossible for Qt.

&gt; In order to not lose precision, I replaced the previous 100 with 65536, I hope
&gt; this is good enough precision for all platforms.

I don&apos;t see any reason to convert the floating point number to an integer in the cross platform code. You&apos;ll need to do that in the Qt theme layer because integers is how Qt interfaces to the progress indicator painting code, but that may not be true on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200397</commentid>
    <comment_count>5</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-16 13:31:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I don&apos;t see any reason to convert the floating point number to an integer in
&gt; the cross platform code. You&apos;ll need to do that in the Qt theme layer because
&gt; integers is how Qt interfaces to the progress indicator painting code, but that
&gt; may not be true on other platforms.
I am sorry, I thought this is what you were asking me to do. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200401</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-16 13:37:57 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I am sorry, I thought this is what you were asking me to do. :-)

I was, but it can’t be just any integer. It has to be an integer that actually corresponds to the pixels being painted to provide the benefit we are looking for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200729</commentid>
    <comment_count>7</comment_count>
      <attachid>50900</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-17 06:42:32 -0700</bug_when>
    <thetext>Created attachment 50900
Patch V3

Save the number of pixels to draw, for platforms that can support it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200806</commentid>
    <comment_count>8</comment_count>
      <attachid>50900</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-17 08:39:40 -0700</bug_when>
    <thetext>Comment on attachment 50900
Patch V3

&gt; -    setNeedsLayoutAndPrefWidthsRecalc();
&gt; +    HTMLProgressElement* element = static_cast&lt;HTMLProgressElement*&gt;(node());
&gt; +    double position = element-&gt;position();
&gt; +    int newPosition;
&gt; +    bool canOptimize = theme()-&gt;progressSizeForProgressPosition(position, newPosition);
&gt; +    IntRect deltaRect = IntRect(IntPoint(0, 0), size());

I believe this is the same as borderBoxRect. But you probably want contentBoxRect instead.

&gt; +    if (!canOptimize) {
&gt; +        // The platform does not provide interface to query the number of pixels a progress bar would require.
&gt; +        if (m_position == newPosition)
&gt; +            return;
&gt; +        m_position = newPosition;
&gt; +        repaintRectangle(deltaRect);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    if (newPosition == m_position)
&gt; +        return;
&gt; +
&gt; +    deltaRect.setX(std::min(m_position, newPosition));
&gt; +    deltaRect.setWidth(std::max(m_position, newPosition) - deltaRect.x());
&gt; +    m_position = newPosition;
&gt; +    repaintRectangle(deltaRect);

You will be able to refactor this function better if you put the result of progressSizeForProgressPosition directly into m_position and put the old value into an oldPosition variable instead of the other way around.

If you do it that way, then you can do the early return before checking canOptimize at all, and you can put the optimization inside an if statement and won&apos;t need an early return at all.

The deltaRect code doesn&apos;t seem to handle the special m_position value of -1, which I imagine means you need to repaint the entire rectangle.

I think deltaRect is not a good name for the rectangle when it&apos;s the entire rectangle of the element.

&gt; +    int position() { return m_position; }

I think it might be better to pass this as an argument to paintProgressBar rather than exposing it with a getter function. For example, the getter could be called when m_position is -1, but we can guarantee never to pass -1 to paintProgressBar. We definitely don&apos;t want anyone to use -1 to compute anything.

&gt; +    virtual bool progressSizeForProgressPosition(double position, int &amp;progressSize) const;

For functions like this that return values as out parameters we normally &quot;get&quot; in the name. The &quot;&amp;&quot; should be next to the int &quot;int&amp; progressSize&quot;. I don&apos;t think you need to repeat the word &quot;progress&quot; twice in teh function name. I don&apos;t think the term &quot;size&quot; vs. &quot;position&quot; is very clear. This turns an abstract position into actual rendered coordinates. Both could be called either &quot;size&quot; or &quot;position&quot; so I don&apos;t think that&apos;s the naming you can use to distinguish them.

review- because at least the -1 problem needs to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200819</commentid>
    <comment_count>9</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-17 09:05:11 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; review- because at least the -1 problem needs to be fixed.
I was planning to add handling for -1 when I implement the indeterminate progress bar. I will add a FIXME in the next patch.
Also RTL is not handled in this patch, I am planning to add RTL support in 
https://bugs.webkit.org/show_bug.cgi?id=36206 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200848</commentid>
    <comment_count>10</comment_count>
      <attachid>50921</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-17 10:27:51 -0700</bug_when>
    <thetext>Created attachment 50921
Patch v4

Updates based on comment #8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200892</commentid>
    <comment_count>11</comment_count>
      <attachid>50931</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-17 12:01:38 -0700</bug_when>
    <thetext>Created attachment 50931
Patch v5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200948</commentid>
    <comment_count>12</comment_count>
      <attachid>50931</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-17 13:44:14 -0700</bug_when>
    <thetext>Comment on attachment 50931
Patch v5.

&gt; +    IntRect paintRect = contentBoxRect();
&gt; +    if (canOptimize) {
&gt; +        // FIXME: Need to handle indeterminate progress bar and RTL
&gt; +        int adjustedPosition = (m_position &gt;= 0) ? m_position : 0;
&gt; +        int adjustedOldPosition = (oldPosition &gt;= 0) ? oldPosition : 0;
&gt; +        paintRect.setX(std::min(adjustedPosition, adjustedOldPosition));
&gt; +        paintRect.setWidth(std::max(adjustedPosition, adjustedOldPosition) - paintRect.x());
&gt; +    }
&gt; +    repaintRectangle(paintRect);

Since m_position can never be negative at this point, I don&apos;t think you need code to adjust for that case.

The handling of oldPosition of -1 here seems wrong. If the old position was -1 I presume we need to repaint the entire rectangle, not act as if the old position was 0.

WebKit style is to use a using directive for std at the top of the file and call functions as min and max rather than using std::min and std::max in a cpp file.

&gt;  public:
&gt;      RenderProgress(HTMLProgressElement*);
&gt; +    int position() { return m_position; }

Given the use of &quot;-1&quot; to mean &quot;no position&quot;, I do not think it&apos;s a good idea to have a public function to return the position. Nothing here makes it clear that there&apos;s a special -1 value, nor what the range of values for position are. I think the position value should be explicitly passed in the theme API instead as I suggested before.

&gt; +bool RenderTheme::getNumberOfPixelsForProgressPosition(double , int&amp; progressSize) const

Extra space here before the comma.

I really don&apos;t think this theme API is going in the right direction. Progress indicators in general don&apos;t have a certain number of pixels from the left. I think the theme should be involved in the decision of what needs to be dirtied, not just return a number that&apos;s used.

I&apos;m going to say r=me because I think the mistakes here can be fixed in the future, but I think there&apos;s a lot of room for improvement here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200958</commentid>
    <comment_count>13</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-17 14:08:03 -0700</bug_when>
    <thetext>Landed in 56126.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201566</commentid>
    <comment_count>14</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-18 14:38:23 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think the mistakes here can be fixed in the
&gt; future, but I think there&apos;s a lot of room for improvement here.

Darin, thank you for your time and effort of reviewing my patches. As I am learning the rendering code, I hope it will be easier:-)
I think, that since on the mac, we would want to animate the progress bar, just like NSProgressIndicator does, perhaps we should always paint the whole progress bar each time after all.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50699</attachid>
            <date>2010-03-15 07:07:32 -0700</date>
            <delta_ts>2010-03-16 12:33:06 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>36117.patch</filename>
            <type>text/plain</type>
            <size>4600</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTk5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDMtMTUgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9wdGltaXplIHBhaW50aW5nIGZvciBIVE1MUHJvZ3Jlc3NFbGVtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExMworICAgICAgICBDYWNoZSB0
aGUgcHJvZ3Jlc3MgYmFyJ3MgcG9zaXRpb24sIHNvIGl0IGlzIG5vdCByZXF1aXJlZCB0byByZWNh
bGN1bGF0ZQorICAgICAgICBpdCBmb3IgZWFjaCByZXBhaW50LiAKKyAgICAgICAgQ2FsbCByZXBh
aW50KCkgd2hlbiB0aGUgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGludHJvZHVjZWQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dyZXNzRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9n
cmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpSZW5kZXJQcm9ncmVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jl
c3M6OnBvc2l0aW9uKToKKwogMjAxMC0wMy0xMyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gNTU5OTApCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDExICs1OCwxMyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxQcm9ncmVzc0VsZW1lbnQ6CiAK
IHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyaWJ1dGUpCiB7Ci0gICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IHZhbHVl
QXR0cikKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGVsc2UgaWYgKGF0dHJp
YnV0ZS0+bmFtZSgpID09IG1heEF0dHIpCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
LSAgICBlbHNlCisgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IHZhbHVlQXR0cikgeworICAg
ICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBtYXhBdHRyKSB7
CisgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKKyAgICB9IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCShyZXZpc2lvbiA1NTk5MCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDYg
QEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCi0jaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgotI2VuZGlmCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCkBAIC02NTksMTEgKzY1NiwxMCBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UHJv
Z3Jlc3NCYXIoUmVuCiAgICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBv
KTsKIAogICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jl
c3Mobyk7Ci0gICAgSFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihyZW5kZXJQcm9ncmVzcy0+bm9kZSgpKTsKICAgICBvcHRpb24u
cmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0gPSBlbGVtZW50LT5tYXgoKTsKKyAgICBvcHRp
b24ubWF4aW11bSA9IDEwMDsKICAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnBy
b2dyZXNzID0gZWxlbWVudC0+dmFsdWUoKTsKKyAgICBvcHRpb24ucHJvZ3Jlc3MgPSByZW5kZXJQ
cm9ncmVzcy0+cG9zaXRpb24oKTsKIAogICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci50b3BM
ZWZ0KCk7CiAgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiA1NTk5MCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRQcm9ncmVzc0hlaWdodCA9CiAKIFJlbmRlclByb2dy
ZXNzOjpSZW5kZXJQcm9ncmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50KQogICAgIDog
UmVuZGVyQmxvY2soZWxlbWVudCkKKyAgICAsIG1fcG9zaXRpb24oLTEpCiB7CiAgICAgc2V0U2l6
ZShJbnRTaXplKGRlZmF1bHRQcm9ncmVzc1dpZHRoLCBkZWZhdWx0UHJvZ3Jlc3NIZWlnaHQpKTsK
ICAgICBzZXRSZXBsYWNlZCh0cnVlKTsKQEAgLTk1LDcgKzk2LDEyIEBAIHZvaWQgUmVuZGVyUHJv
Z3Jlc3M6OmxheW91dCgpCiAKIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUZyb21FbGVtZW50
KCkKIHsKLSAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBIVE1M
UHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVu
dCo+KG5vZGUoKSk7CisgICAgaW50IHBvc2l0aW9uID0gKDEwMCAqIGVsZW1lbnQtPnBvc2l0aW9u
KCkpOworICAgIGlmIChwb3NpdGlvbiAhPSBtX3Bvc2l0aW9uKSB7CisgICAgICAgIG1fcG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCShyZXZpc2lv
biA1NTk5MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAgY2xhc3MgSFRNTFByb2dyZXNzRWxlbWVudDsKIGNsYXNz
IFJlbmRlclByb2dyZXNzIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5k
ZXJQcm9ncmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50Kik7CisgICAgaW50IHBvc2l0aW9uKCkgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQcm9ncmVzcyI7IH0KQEAgLTM5LDYg
KzQwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVt
ZW50KCk7CisgICAgaW50IG1fcG9zaXRpb247CiB9OwogCiBpbmxpbmUgUmVuZGVyUHJvZ3Jlc3Mq
IHRvUmVuZGVyUHJvZ3Jlc3MoUmVuZGVyT2JqZWN0KiBvYmplY3QpCg==
</data>
<flag name="review"
          id="33866"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50826</attachid>
            <date>2010-03-16 12:33:06 -0700</date>
            <delta_ts>2010-03-17 06:42:32 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>36113.patch</filename>
            <type>text/plain</type>
            <size>6017</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjA3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMtMTYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9wdGltaXplIHBhaW50aW5nIGZvciBIVE1MUHJvZ3Jlc3NFbGVtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExMworICAgICAgICBDYWNoZSB0
aGUgcHJvZ3Jlc3MgYmFyJ3MgcG9zaXRpb24sIHNvIGl0IGlzIG5vdCByZXF1aXJlZCB0byByZWNh
bGN1bGF0ZQorICAgICAgICBpdCBmb3IgZWFjaCByZXBhaW50LiAKKyAgICAgICAgQ2FsbCByZXBh
aW50UmVjdGFuZ2xlKCkgd2hlbiB0aGUgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGludHJvZHVjZWQuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBy
b2dyZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpSZW5kZXJQcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUHJvZ3Jlc3M6OnBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwcm9ncmVzc1JlY3RGb3JQcm9ncmVz
c1Bvc2l0aW9uKToKKwogMjAxMC0wMy0xNiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBy
b2dyZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2MDc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxQ
cm9ncmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTMgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MUHJvZ3Jlc3NFbGVtZW50OgogCiB2b2lkIEhUTUxQcm9ncmVz
c0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cmlidXRl
KQogewotICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpCi0gICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBt
YXhBdHRyKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZQorICAgIGlm
IChhdHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgIH0g
ZWxzZSBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gbWF4QXR0cikgeworICAgICAgICBpZiAocmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Cisg
ICAgfSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcAkocmV2aXNpb24gNTYwNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotI2luY2x1ZGUg
IkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNjU5LDEx
ICs2NTYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFByb2dyZXNzQmFyKFJlbgogICAg
IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CiAKICAgICBSZW5kZXJQ
cm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOwotICAgIEhUTUxQ
cm9ncmVzc0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50
Kj4ocmVuZGVyUHJvZ3Jlc3MtPm5vZGUoKSk7CiAgICAgb3B0aW9uLnJlY3QgPSByOwotICAgIG9w
dGlvbi5tYXhpbXVtID0gZWxlbWVudC0+bWF4KCk7CisgICAgb3B0aW9uLm1heGltdW0gPSA2NTUz
NjsKICAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dyZXNzID0gZWxlbWVu
dC0+dmFsdWUoKTsKKyAgICBvcHRpb24ucHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRp
b24oKTsKIAogICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci50b3BMZWZ0KCk7CiAgICAgcC5w
YWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJv
Z3Jlc3MuY3BwCShyZXZpc2lvbiA1NjA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBy
b2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRQcm9ncmVzc0hlaWdodCA9CiAKIFJlbmRlclByb2dyZXNzOjpSZW5kZXJQcm9n
cmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyQmxvY2soZWxl
bWVudCkKKyAgICAsIG1fcG9zaXRpb24oLTEpCiB7CiAgICAgc2V0U2l6ZShJbnRTaXplKGRlZmF1
bHRQcm9ncmVzc1dpZHRoLCBkZWZhdWx0UHJvZ3Jlc3NIZWlnaHQpKTsKICAgICBzZXRSZXBsYWNl
ZCh0cnVlKTsKQEAgLTk1LDcgKzk2LDIwIEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmxheW91dCgp
CiAKIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBzZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KG5vZGUoKSk7Cisg
ICAgaW50IHBvc2l0aW9uID0gKDY1NTM2ICogZWxlbWVudC0+cG9zaXRpb24oKSk7CisgICAgaWYg
KHBvc2l0aW9uICE9IG1fcG9zaXRpb24pIHsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0OworICAg
ICAgICBJbnRSZWN0IG5ld1JlY3Q7CisgICAgICAgIEludFJlY3QgZGVsdGFSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgc2l6ZSgpKTsKKyAgICAgICAgaWYgKHRoZW1lKCktPnByb2dyZXNz
UmVjdEZvclByb2dyZXNzUG9zaXRpb24obV9wb3NpdGlvbiwgb2xkUmVjdCkpIHsKKyAgICAgICAg
ICAgIHRoZW1lKCktPnByb2dyZXNzUmVjdEZvclByb2dyZXNzUG9zaXRpb24ocG9zaXRpb24sIG5l
d1JlY3QpOworICAgICAgICAgICAgZGVsdGFSZWN0LnNldFgoc3RkOjptaW4ob2xkUmVjdC5yaWdo
dCgpLCBuZXdSZWN0LnJpZ2h0KCkpKTsKKyAgICAgICAgICAgIGRlbHRhUmVjdC5zZXRXaWR0aChz
dGQ6Om1heChvbGRSZWN0LnJpZ2h0KCksIG5ld1JlY3QucmlnaHQoKSkgLSBkZWx0YVJlY3QueCgp
KTsKKyAgICAgICAgfQorICAgICAgICBtX3Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIHJl
cGFpbnRSZWN0YW5nbGUoZGVsdGFSZWN0KTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAkocmV2aXNpb24gNTYwNzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBAIGNsYXNzIEhUTUxQcm9ncmVzc0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJQ
cm9ncmVzcyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyUHJvZ3Jl
c3MoSFRNTFByb2dyZXNzRWxlbWVudCopOworICAgIGludCBwb3NpdGlvbigpIHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUHJvZ3Jlc3MiOyB9CkBAIC0zOSw2ICs0MCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwor
ICAgIGludCBtX3Bvc2l0aW9uOwogfTsKIAogaW5saW5lIFJlbmRlclByb2dyZXNzKiB0b1JlbmRl
clByb2dyZXNzKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oCShyZXZpc2lvbiA1NjA3NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksMTIgQEAgcHVibGljOgogICAgIC8vIE1ldGhv
ZCBmb3IgcGFpbnRpbmcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCisjaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKKyAgICAvLyBIZWxwZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBw
YWludCBhcmVhIG9mIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgLy8gSWYgc3VwcG9ydGVkLCBpdCBy
ZXR1cm5zIHRoZSByZWN0YW5nbGUgY292ZXJlZCBieSB0aGUgcHJvZ3Jlc3MgYmFyIHVwIHRvIHRo
ZSBwcm9ncmVzcyBwb3NpdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgcHJvZ3Jlc3NSZWN0Rm9yUHJv
Z3Jlc3NQb3NpdGlvbihpbnQgcG9zaXRpb24sIEludFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWSURFTykKICAgICAvLyBNZWRpYSBjb250
cm9scwogICAgIHZpcnR1YWwgYm9vbCBoaXRUZXN0TWVkaWFDb250cm9sUGFydChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRQb2ludCYgYWJzUG9pbnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50900</attachid>
            <date>2010-03-17 06:42:32 -0700</date>
            <delta_ts>2010-03-17 10:27:51 -0700</delta_ts>
            <desc>Patch V3</desc>
            <filename>36113.patch</filename>
            <type>text/plain</type>
            <size>8421</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDMtMTcgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9wdGltaXplIHBhaW50aW5nIGZvciBIVE1MUHJvZ3Jlc3NFbGVtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExMworICAgICAgICBDYWNoZSB0
aGUgcHJvZ3Jlc3MgYmFyJ3MgcG9zaXRpb24sIHNvIGl0IGlzIG5vdCByZXF1aXJlZCB0byByZWNh
bGN1bGF0ZQorICAgICAgICBpdCBmb3IgZWFjaCByZXBhaW50LiAKKyAgICAgICAgQ2FsbCByZXBh
aW50UmVjdGFuZ2xlKCkgd2hlbiB0aGUgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGludHJvZHVjZWQuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBy
b2dyZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
cm9ncmVzc1NpemVGb3JQcm9ncmVzc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQcm9n
cmVzczo6cG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorCiAy
MDEwLTAzLTE3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBy
b2dyZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1NjEwNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jl
c3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDEzIEBAIGNvbnN0IEF0
b21pY1N0cmluZyYgSFRNTFByb2dyZXNzRWxlbWVudDoKIAogdm9pZCBIVE1MUHJvZ3Jlc3NFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKIHsK
LSAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gdmFsdWVBdHRyKQotICAgICAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZSBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gbWF4QXR0
cikKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGVsc2UKKyAgICBpZiAoYXR0
cmlidXRlLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpKQor
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICB9IGVsc2Ug
aWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IG1heEF0dHIpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgIH0g
ZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyaWJ1dGUpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TWVkaWFFbGVtZW50LmgiCi0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSNpbmNsdWRlICJIVE1M
UHJvZ3Jlc3NFbGVtZW50LmgiCi0jZW5kaWYKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTY0MCw4ICs2Mzcs
MTMgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lbnVMaXN0QnV0dG9uKAogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQotCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2Jvb2wgUmVuZGVyVGhl
bWVRdDo6cHJvZ3Jlc3NTaXplRm9yUHJvZ3Jlc3NQb3NpdGlvbihkb3VibGUgcG9zaXRpb24sIGlu
dCAmcHJvZ3Jlc3NTaXplKSBjb25zdAoreworICAgIHByb2dyZXNzU2l6ZSA9IDY1NTM2ICogcG9z
aXRpb247CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVz
dFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKQEAgLTY1OSwx
MSArNjYxLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0JhcihSZW4KICAg
ICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwogCiAgICAgUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKLSAgICBIVE1M
UHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVu
dCo+KHJlbmRlclByb2dyZXNzLT5ub2RlKCkpOwogICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBv
cHRpb24ubWF4aW11bSA9IGVsZW1lbnQtPm1heCgpOworICAgIG9wdGlvbi5tYXhpbXVtID0gNjU1
MzY7CiAgICAgb3B0aW9uLm1pbmltdW0gPSAwOwotICAgIG9wdGlvbi5wcm9ncmVzcyA9IGVsZW1l
bnQtPnZhbHVlKCk7CisgICAgb3B0aW9uLnByb2dyZXNzID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0
aW9uKCk7CiAKICAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIudG9wTGVmdCgpOwogICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmgJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMTMgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKKyNp
ZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9wdGltaXpp
bmcgdGhlIHBhaW50IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KKyAgICAvLyBJZiBzdXBwb3J0
ZWQsIGl0IHJldHVybnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUgcHJvZ3Jl
c3MgYmFyIHVwIHRvIHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KKyAgICAvLyBwcm9ncmVzc1NpemUg
aXMgdGhlIHZhbHVlIHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVyaW5nIGRy
YXdpbmcuCisgICAgdmlydHVhbCBib29sIHByb2dyZXNzU2l6ZUZvclByb2dyZXNzUG9zaXRpb24o
ZG91YmxlIHBvc2l0aW9uLCBpbnQgJnByb2dyZXNzU2l6ZSkgY29uc3Q7CisjZW5kaWYKKwogI2lm
IEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gNTYxMDQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0UHJvZ3Jlc3NIZWlnaHQgPQog
CiBSZW5kZXJQcm9ncmVzczo6UmVuZGVyUHJvZ3Jlc3MoSFRNTFByb2dyZXNzRWxlbWVudCogZWxl
bWVudCkKICAgICA6IFJlbmRlckJsb2NrKGVsZW1lbnQpCisgICAgLCBtX3Bvc2l0aW9uKC0xKQog
ewogICAgIHNldFNpemUoSW50U2l6ZShkZWZhdWx0UHJvZ3Jlc3NXaWR0aCwgZGVmYXVsdFByb2dy
ZXNzSGVpZ2h0KSk7CiAgICAgc2V0UmVwbGFjZWQodHJ1ZSk7CkBAIC05NSw3ICs5NiwyNyBAQCB2
b2lkIFJlbmRlclByb2dyZXNzOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlclByb2dyZXNzOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxj
KCk7CisgICAgSFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQ
cm9ncmVzc0VsZW1lbnQqPihub2RlKCkpOworICAgIGRvdWJsZSBwb3NpdGlvbiA9IGVsZW1lbnQt
PnBvc2l0aW9uKCk7CisgICAgaW50IG5ld1Bvc2l0aW9uOworICAgIGJvb2wgY2FuT3B0aW1pemUg
PSB0aGVtZSgpLT5wcm9ncmVzc1NpemVGb3JQcm9ncmVzc1Bvc2l0aW9uKHBvc2l0aW9uLCBuZXdQ
b3NpdGlvbik7CisgICAgSW50UmVjdCBkZWx0YVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBzaXplKCkpOworICAgIGlmICghY2FuT3B0aW1pemUpIHsKKyAgICAgICAgLy8gVGhlIHBsYXRm
b3JtIGRvZXMgbm90IHByb3ZpZGUgaW50ZXJmYWNlIHRvIHF1ZXJ5IHRoZSBudW1iZXIgb2YgcGl4
ZWxzIGEgcHJvZ3Jlc3MgYmFyIHdvdWxkIHJlcXVpcmUuCisgICAgICAgIGlmIChtX3Bvc2l0aW9u
ID09IG5ld1Bvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3Bvc2l0aW9u
ID0gbmV3UG9zaXRpb247CisgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoZGVsdGFSZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChuZXdQb3NpdGlvbiA9PSBtX3Bvc2l0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBkZWx0YVJlY3Quc2V0WChzdGQ6Om1pbihtX3Bvc2l0
aW9uLCBuZXdQb3NpdGlvbikpOworICAgIGRlbHRhUmVjdC5zZXRXaWR0aChzdGQ6Om1heChtX3Bv
c2l0aW9uLCBuZXdQb3NpdGlvbikgLSBkZWx0YVJlY3QueCgpKTsKKyAgICBtX3Bvc2l0aW9uID0g
bmV3UG9zaXRpb247CisgICAgcmVwYWludFJlY3RhbmdsZShkZWx0YVJlY3QpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgJKHJl
dmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBIVE1MUHJvZ3Jlc3NFbGVtZW50Owog
Y2xhc3MgUmVuZGVyUHJvZ3Jlc3MgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAg
IFJlbmRlclByb2dyZXNzKEhUTUxQcm9ncmVzc0VsZW1lbnQqKTsKKyAgICBpbnQgcG9zaXRpb24o
KSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclByb2dyZXNzIjsgfQpAQCAt
MzksNiArNDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygp
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKKyAgICBpbnQgbV9wb3NpdGlvbjsKIH07CiAKIGlubGluZSBSZW5kZXJQcm9n
cmVzcyogdG9SZW5kZXJQcm9ncmVzcyhSZW5kZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNiArODQwLDEyIEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1MKIH0KIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19UQUcpCitib29sIFJlbmRlclRoZW1lOjpwcm9ncmVzc1NpemVGb3JQcm9ncmVzc1Bv
c2l0aW9uKGRvdWJsZSAsIGludCAmcHJvZ3Jlc3NTaXplKSBjb25zdAoreworICAgIHByb2dyZXNz
U2l6ZSA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAogewogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiA1
NjEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2OSw2ICsxNjksMTMgQEAgcHVibGljOgogICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcg
dGhlIGNhcHMgbG9jayBpbmRpY2F0b3IKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0lu
ZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykK
KyAgICAvLyBIZWxwZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBwYWludCBhcmVhIG9mIHRo
ZSBwcm9ncmVzcyBiYXIuCisgICAgLy8gSWYgc3VwcG9ydGVkLCBpdCByZXR1cm5zIG51bWJlciBv
ZiBwaXhlbHMgbmVlZGVkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciB1cCB0byB0aGUgcHJvZ3Jl
c3MgcG9zaXRpb24uCisgICAgLy8gcHJvZ3Jlc3NTaXplIGlzIHRoZSB2YWx1ZSB0aGF0IGlzIHBh
c3NlZCBiYWNrIHRvIFJlbmRlclRoZW1lIGR1cmluZyBkcmF3aW5nLgorICAgIHZpcnR1YWwgYm9v
bCBwcm9ncmVzc1NpemVGb3JQcm9ncmVzc1Bvc2l0aW9uKGRvdWJsZSBwb3NpdGlvbiwgaW50ICZw
cm9ncmVzc1NpemUpIGNvbnN0OworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8pCiAgICAgLy8g
TWVkaWEgY29udHJvbHMKICAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdE1lZGlhQ29udHJvbFBhcnQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsK
</data>
<flag name="review"
          id="34070"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50921</attachid>
            <date>2010-03-17 10:27:51 -0700</date>
            <delta_ts>2010-03-17 12:01:38 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>36113.patch</filename>
            <type>text/plain</type>
            <size>8341</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjExNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMTcgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9wdGltaXplIHBhaW50aW5nIGZvciBIVE1MUHJvZ3Jlc3NFbGVtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExMworICAgICAgICBDYWNoZSB0
aGUgcHJvZ3Jlc3MgYmFyJ3MgcG9zaXRpb24sIHNvIGl0IGlzIG5vdCByZXF1aXJlZCB0byByZWNh
bGN1bGF0ZQorICAgICAgICBpdCBmb3IgZWFjaCByZXBhaW50LiAKKyAgICAgICAgQ2FsbCByZXBh
aW50UmVjdGFuZ2xlKCkgd2hlbiB0aGUgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGludHJvZHVjZWQuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBy
b2dyZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJQcm9ncmVzczo6cG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQ
cm9ncmVzc1Bvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwog
MjAxMC0wMy0xNyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIENocm9taXVtIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFByb2dy
ZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQcm9n
cmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTMgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MUHJvZ3Jlc3NFbGVtZW50OgogCiB2b2lkIEhUTUxQcm9ncmVzc0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cmlidXRlKQog
ewotICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpCi0gICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBtYXhB
dHRyKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZQorICAgIGlmIChh
dHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkp
CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgIH0gZWxz
ZSBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gbWF4QXR0cikgeworICAgICAgICBpZiAocmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAg
fSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHJpYnV0ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcAkocmV2aXNpb24gNTYxMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnQuaCIKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotI2luY2x1ZGUgIkhU
TUxQcm9ncmVzc0VsZW1lbnQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNjQyLDYgKzYz
OSwxMiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RCdXR0b24oCiB9CiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorYm9vbCBSZW5kZXJUaGVtZVF0OjpnZXROdW1iZXJPZlBp
eGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBvc2l0aW9uLCBpbnQmIHByb2dyZXNzU2l6
ZSkgY29uc3QKK3sKKyAgICBwcm9ncmVzc1NpemUgPSA2NTUzNiAqIHBvc2l0aW9uOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CkBAIC02NTksMTEgKzY2MiwxMCBAQCBi
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuCiAgICAgaW5pdGlhbGl6ZUNv
bW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKIAogICAgIFJlbmRlclByb2dyZXNzKiByZW5k
ZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgSFRNTFByb2dyZXNzRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihyZW5kZXJQcm9n
cmVzcy0+bm9kZSgpKTsKICAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0g
PSBlbGVtZW50LT5tYXgoKTsKKyAgICBvcHRpb24ubWF4aW11bSA9IDY1NTM2OwogICAgIG9wdGlv
bi5taW5pbXVtID0gMDsKLSAgICBvcHRpb24ucHJvZ3Jlc3MgPSBlbGVtZW50LT52YWx1ZSgpOwor
ICAgIG9wdGlvbi5wcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpOwogCiAgICAg
Y29uc3QgUVBvaW50IHRvcExlZnQgPSByLnRvcExlZnQoKTsKICAgICBwLnBhaW50ZXItPnRyYW5z
bGF0ZSh0b3BMZWZ0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZp
c2lvbiA1NjEwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDEzIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCisjaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKKyAgICAvLyBIZWxwZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBwYWludCBh
cmVhIG9mIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgLy8gSWYgc3VwcG9ydGVkLCBpdCByZXR1cm5z
IG51bWJlciBvZiBwaXhlbHMgbmVlZGVkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciB1cCB0byB0
aGUgcHJvZ3Jlc3MgcG9zaXRpb24uCisgICAgLy8gcHJvZ3Jlc3NTaXplIGlzIHRoZSB2YWx1ZSB0
aGF0IGlzIHBhc3NlZCBiYWNrIHRvIFJlbmRlclRoZW1lIGR1cmluZyBkcmF3aW5nLgorICAgIHZp
cnR1YWwgYm9vbCBnZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBv
c2l0aW9uLCBpbnQmIHByb2dyZXNzU2l6ZSkgY29uc3Q7CisjZW5kaWYKKwogI2lmIEVOQUJMRShW
SURFTykKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gNTYxMDQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0UHJvZ3Jlc3NIZWlnaHQgPQogCiBSZW5kZXJQ
cm9ncmVzczo6UmVuZGVyUHJvZ3Jlc3MoSFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCkKICAg
ICA6IFJlbmRlckJsb2NrKGVsZW1lbnQpCisgICAgLCBtX3Bvc2l0aW9uKC0xKQogewogICAgIHNl
dFNpemUoSW50U2l6ZShkZWZhdWx0UHJvZ3Jlc3NXaWR0aCwgZGVmYXVsdFByb2dyZXNzSGVpZ2h0
KSk7CiAgICAgc2V0UmVwbGFjZWQodHJ1ZSk7CkBAIC05NSw3ICs5NiwyMSBAQCB2b2lkIFJlbmRl
clByb2dyZXNzOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxl
bWVudCgpCiB7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAg
SFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0Vs
ZW1lbnQqPihub2RlKCkpOworICAgIGRvdWJsZSBwb3NpdGlvbiA9IGVsZW1lbnQtPnBvc2l0aW9u
KCk7CisgICAgaW50IG9sZFBvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBib29sIGNhbk9wdGlt
aXplID0gdGhlbWUoKS0+Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKHBvc2l0
aW9uLCBtX3Bvc2l0aW9uKTsKKyAgICBpZiAob2xkUG9zaXRpb24gPT0gbV9wb3NpdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBwYWludFJlY3QgPSBjb250ZW50Qm94UmVjdCgp
OworICAgIGlmIChjYW5PcHRpbWl6ZSkgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5k
bGUgaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBiYXIgYW5kIFJUTAorICAgICAgICBpbnQgYWRqdXN0
ZWRQb3NpdGlvbiA9IChtX3Bvc2l0aW9uID49IDApID8gbV9wb3NpdGlvbiA6IDA7CisgICAgICAg
IHBhaW50UmVjdC5zZXRYKHN0ZDo6bWluKGFkanVzdGVkUG9zaXRpb24sIG9sZFBvc2l0aW9uKSk7
CisgICAgICAgIHBhaW50UmVjdC5zZXRXaWR0aChzdGQ6Om1heChhZGp1c3RlZFBvc2l0aW9uLCBv
bGRQb3NpdGlvbikgLSBwYWludFJlY3QueCgpKTsKKyAgICB9CisgICAgcmVwYWludFJlY3Rhbmds
ZShwYWludFJlY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmgJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUHJvZ3Jlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBjbGFz
cyBIVE1MUHJvZ3Jlc3NFbGVtZW50OwogY2xhc3MgUmVuZGVyUHJvZ3Jlc3MgOiBwdWJsaWMgUmVu
ZGVyQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlclByb2dyZXNzKEhUTUxQcm9ncmVzc0VsZW1l
bnQqKTsKKyAgICBpbnQgcG9zaXRpb24oKSB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclByb2dyZXNzIjsgfQpAQCAtMzksNiArNDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICBpbnQgbV9wb3NpdGlvbjsK
IH07CiAKIGlubGluZSBSZW5kZXJQcm9ncmVzcyogdG9SZW5kZXJQcm9ncmVzcyhSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDU2
MTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDAsNiArODQwLDEyIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5
bGUoQ1MKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCitib29sIFJlbmRlclRoZW1lOjpn
ZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlICwgaW50JiBwcm9ncmVz
c1NpemUpIGNvbnN0Cit7CisgICAgcHJvZ3Jlc3NTaXplID0gMDsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSwxMyBAQCBwdWJsaWM6
CiAgICAgLy8gTWV0aG9kIGZvciBwYWludGluZyB0aGUgY2FwcyBsb2NrIGluZGljYXRvcgogICAg
IHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07
CiAKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9w
dGltaXppbmcgdGhlIHBhaW50IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KKyAgICAvLyBJZiBz
dXBwb3J0ZWQsIGl0IHJldHVybnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUg
cHJvZ3Jlc3MgYmFyIHVwIHRvIHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KKyAgICAvLyBwcm9ncmVz
c1NpemUgaXMgdGhlIHZhbHVlIHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVy
aW5nIGRyYXdpbmcuCisgICAgdmlydHVhbCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jl
c3NQb3NpdGlvbihkb3VibGUgcG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIC8vIE1lZGlhIGNvbnRyb2xzCiAgICAgdmly
dHVhbCBib29sIGhpdFRlc3RNZWRpYUNvbnRyb2xQYXJ0KFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFBvaW50JiBhYnNQb2ludCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50931</attachid>
            <date>2010-03-17 12:01:38 -0700</date>
            <delta_ts>2010-03-17 14:08:37 -0700</delta_ts>
            <desc>Patch v5.</desc>
            <filename>36113.patch</filename>
            <type>text/plain</type>
            <size>8430</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjExNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDMtMTcgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE9wdGltaXplIHBhaW50aW5nIGZvciBIVE1MUHJvZ3Jlc3NFbGVtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjExMworICAgICAgICBDYWNoZSB0
aGUgcHJvZ3Jlc3MgYmFyJ3MgcG9zaXRpb24sIHNvIGl0IGlzIG5vdCByZXF1aXJlZCB0byByZWNh
bGN1bGF0ZQorICAgICAgICBpdCBmb3IgZWFjaCByZXBhaW50LiAKKyAgICAgICAgQ2FsbCByZXBh
aW50UmVjdGFuZ2xlKCkgd2hlbiB0aGUgcG9zaXRpb24gY2hhbmdlcy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGludHJvZHVjZWQuCisKKyAgICAgICAg
KiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBy
b2dyZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJQcm9ncmVzczo6cG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQ
cm9ncmVzc1Bvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwog
MjAxMC0wMy0xNyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIENocm9taXVtIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFByb2dy
ZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2MTA0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQcm9n
cmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTMgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MUHJvZ3Jlc3NFbGVtZW50OgogCiB2b2lkIEhUTUxQcm9ncmVzc0Vs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cmlidXRlKQog
ewotICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpCi0gICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBlbHNlIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBtYXhB
dHRyKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZQorICAgIGlmIChh
dHRyaWJ1dGUtPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkp
CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgIH0gZWxz
ZSBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gbWF4QXR0cikgeworICAgICAgICBpZiAocmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAg
fSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHJpYnV0ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcAkocmV2aXNpb24gNTYxMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnQuaCIKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotI2luY2x1ZGUgIkhU
TUxQcm9ncmVzc0VsZW1lbnQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNjQyLDYgKzYz
OSwxMiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RCdXR0b24oCiB9CiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorYm9vbCBSZW5kZXJUaGVtZVF0OjpnZXROdW1iZXJPZlBp
eGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBvc2l0aW9uLCBpbnQmIHByb2dyZXNzU2l6
ZSkgY29uc3QKK3sKKyAgICBwcm9ncmVzc1NpemUgPSA2NTUzNiAqIHBvc2l0aW9uOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CkBAIC02NTksMTEgKzY2MiwxMCBAQCBi
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuCiAgICAgaW5pdGlhbGl6ZUNv
bW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKIAogICAgIFJlbmRlclByb2dyZXNzKiByZW5k
ZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgSFRNTFByb2dyZXNzRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihyZW5kZXJQcm9n
cmVzcy0+bm9kZSgpKTsKICAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0g
PSBlbGVtZW50LT5tYXgoKTsKKyAgICBvcHRpb24ubWF4aW11bSA9IDY1NTM2OwogICAgIG9wdGlv
bi5taW5pbXVtID0gMDsKLSAgICBvcHRpb24ucHJvZ3Jlc3MgPSBlbGVtZW50LT52YWx1ZSgpOwor
ICAgIG9wdGlvbi5wcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpOwogCiAgICAg
Y29uc3QgUVBvaW50IHRvcExlZnQgPSByLnRvcExlZnQoKTsKICAgICBwLnBhaW50ZXItPnRyYW5z
bGF0ZSh0b3BMZWZ0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZp
c2lvbiA1NjEwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDEzIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCisjaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKKyAgICAvLyBIZWxwZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBwYWludCBh
cmVhIG9mIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgLy8gSWYgc3VwcG9ydGVkLCBpdCByZXR1cm5z
IG51bWJlciBvZiBwaXhlbHMgbmVlZGVkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciB1cCB0byB0
aGUgcHJvZ3Jlc3MgcG9zaXRpb24uCisgICAgLy8gcHJvZ3Jlc3NTaXplIGlzIHRoZSB2YWx1ZSB0
aGF0IGlzIHBhc3NlZCBiYWNrIHRvIFJlbmRlclRoZW1lIGR1cmluZyBkcmF3aW5nLgorICAgIHZp
cnR1YWwgYm9vbCBnZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBv
c2l0aW9uLCBpbnQmIHByb2dyZXNzU2l6ZSkgY29uc3Q7CisjZW5kaWYKKwogI2lmIEVOQUJMRShW
SURFTykKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gNTYxMDQpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0UHJvZ3Jlc3NIZWlnaHQgPQogCiBSZW5kZXJQ
cm9ncmVzczo6UmVuZGVyUHJvZ3Jlc3MoSFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCkKICAg
ICA6IFJlbmRlckJsb2NrKGVsZW1lbnQpCisgICAgLCBtX3Bvc2l0aW9uKC0xKQogewogICAgIHNl
dFNpemUoSW50U2l6ZShkZWZhdWx0UHJvZ3Jlc3NXaWR0aCwgZGVmYXVsdFByb2dyZXNzSGVpZ2h0
KSk7CiAgICAgc2V0UmVwbGFjZWQodHJ1ZSk7CkBAIC05NSw3ICs5NiwyMiBAQCB2b2lkIFJlbmRl
clByb2dyZXNzOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxl
bWVudCgpCiB7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAg
SFRNTFByb2dyZXNzRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0Vs
ZW1lbnQqPihub2RlKCkpOworICAgIGRvdWJsZSBwb3NpdGlvbiA9IGVsZW1lbnQtPnBvc2l0aW9u
KCk7CisgICAgaW50IG9sZFBvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBib29sIGNhbk9wdGlt
aXplID0gdGhlbWUoKS0+Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKHBvc2l0
aW9uLCBtX3Bvc2l0aW9uKTsKKyAgICBpZiAob2xkUG9zaXRpb24gPT0gbV9wb3NpdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBwYWludFJlY3QgPSBjb250ZW50Qm94UmVjdCgp
OworICAgIGlmIChjYW5PcHRpbWl6ZSkgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5k
bGUgaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBiYXIgYW5kIFJUTAorICAgICAgICBpbnQgYWRqdXN0
ZWRQb3NpdGlvbiA9IChtX3Bvc2l0aW9uID49IDApID8gbV9wb3NpdGlvbiA6IDA7CisgICAgICAg
IGludCBhZGp1c3RlZE9sZFBvc2l0aW9uID0gKG9sZFBvc2l0aW9uID49IDApID8gb2xkUG9zaXRp
b24gOiAwOworICAgICAgICBwYWludFJlY3Quc2V0WChzdGQ6Om1pbihhZGp1c3RlZFBvc2l0aW9u
LCBhZGp1c3RlZE9sZFBvc2l0aW9uKSk7CisgICAgICAgIHBhaW50UmVjdC5zZXRXaWR0aChzdGQ6
Om1heChhZGp1c3RlZFBvc2l0aW9uLCBhZGp1c3RlZE9sZFBvc2l0aW9uKSAtIHBhaW50UmVjdC54
KCkpOworICAgIH0KKyAgICByZXBhaW50UmVjdGFuZ2xlKHBhaW50UmVjdCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAkocmV2
aXNpb24gNTYxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIGNsYXNzIEhUTUxQcm9ncmVzc0VsZW1lbnQ7CiBj
bGFzcyBSZW5kZXJQcm9ncmVzcyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyUHJvZ3Jlc3MoSFRNTFByb2dyZXNzRWxlbWVudCopOworICAgIGludCBwb3NpdGlvbigp
IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUHJvZ3Jlc3MiOyB9CkBAIC0z
OSw2ICs0MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9t
RWxlbWVudCgpOworICAgIGludCBtX3Bvc2l0aW9uOwogfTsKIAogaW5saW5lIFJlbmRlclByb2dy
ZXNzKiB0b1JlbmRlclByb2dyZXNzKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gNTYxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw2ICs4NDAsMTIgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShDUwogfQogCiAjaWYgRU5BQkxFKFBS
T0dSRVNTX1RBRykKK2Jvb2wgUmVuZGVyVGhlbWU6OmdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jl
c3NQb3NpdGlvbihkb3VibGUgLCBpbnQmIHByb2dyZXNzU2l6ZSkgY29uc3QKK3sKKyAgICBwcm9n
cmVzc1NpemUgPSAwOworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3QKIHsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNp
b24gNTYxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjksNiArMTY5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2QgZm9yIHBhaW50
aW5nIHRoZSBjYXBzIGxvY2sgaW5kaWNhdG9yCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gMDsgfTsKIAorI2lmIEVOQUJMRShQUk9HUkVTU19U
QUcpCisgICAgLy8gSGVscGVyIG1ldGhvZCBmb3Igb3B0aW1pemluZyB0aGUgcGFpbnQgYXJlYSBv
ZiB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIC8vIElmIHN1cHBvcnRlZCwgaXQgcmV0dXJucyBudW1i
ZXIgb2YgcGl4ZWxzIG5lZWRlZCB0byBkcmF3IHRoZSBwcm9ncmVzcyBiYXIgdXAgdG8gdGhlIHBy
b2dyZXNzIHBvc2l0aW9uLgorICAgIC8vIHByb2dyZXNzU2l6ZSBpcyB0aGUgdmFsdWUgdGhhdCBp
cyBwYXNzZWQgYmFjayB0byBSZW5kZXJUaGVtZSBkdXJpbmcgZHJhd2luZy4KKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKGRvdWJsZSBwb3NpdGlv
biwgaW50JiBwcm9ncmVzc1NpemUpIGNvbnN0OworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgLy8gTWVkaWEgY29udHJvbHMKICAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdE1lZGlhQ29u
dHJvbFBhcnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmIGFic1BvaW50KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>