<?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>27398</bug_id>
          
          <creation_ts>2009-07-17 17:05:56 -0700</creation_ts>
          <short_desc>Handle opacity and opacity animations on transform layers in Leopard</short_desc>
          <delta_ts>2009-07-20 15:45:59 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132781</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-17 17:05:56 -0700</bug_when>
    <thetext>QuartzCore in Leopard does not support opacity on TransformLayers. So we must propagate opacity down the tree to the nearest non-transform layer and also into the transform layer&apos;s content layer. Because of this we will need to do opacity animartion in software because (not surprisingly) TransformLayers in Leopard also don&apos;t support animation of opacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132785</commentid>
    <comment_count>1</comment_count>
      <attachid>32990</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-17 17:11:04 -0700</bug_when>
    <thetext>Created attachment 32990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132791</commentid>
    <comment_count>2</comment_count>
      <attachid>32990</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-07-17 17:41:53 -0700</bug_when>
    <thetext>Comment on attachment 32990
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        Second, I turn off all opacity animation.

Not always, I hope!

&gt; Index: WebCore/platform/graphics/GraphicsLayer.h
&gt; ===================================================================

&gt;  private:
&gt; +    void setOpacityOnLayer();

I think it should be called &quot;update&quot; if it takes no argument, or &quot;set&quot; if it takes one.

&gt; Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; ===================================================================

&gt; +float GraphicsLayerCA::accumulatedOpacity() const
&gt; +{
&gt; +    if (!preserves3D())
&gt; +        return 1;
&gt; +        
&gt; +    return m_opacity * (parent() ? parent()-&gt;accumulatedOpacity() : 1);
&gt; +}
&gt; +
&gt; +void GraphicsLayerCA::distributeOpacity(float opacity)

Argument could be &quot;accumulatedOpacity&quot; for clarity.

&gt; +{
&gt; +    // If this is a transform layer we need to distribute our opacity to all our children
&gt; +    // and set the opacity on our m_layer. Otherwise we just set our own opacity.
&gt; +    
&gt; +    // Incoming opacity is the contribution from our parent(s). We mutiply this by our own
&gt; +    // opacity to get the value that is either passed down to the children or set on our
&gt; +    // own layer.
&gt; +    opacity *= m_opacity;
&gt; +    
&gt; +    if (preserves3D()) {
&gt; +        if (m_layer.get())
&gt; +            [m_layer.get() setOpacity: opacity];
&gt; +
&gt; +        size_t numChildren = children().size();
&gt; +        for (size_t i = 0; i &lt; numChildren; ++i)
&gt; +            children()[i]-&gt;distributeOpacity(opacity);
&gt; +    } else
&gt; +        [primaryLayer() setOpacity: opacity];
&gt; +}

I think put the platform-neutral logic into base class methods, and then add a small virtual function 
to wrap the [layer setOpacity:] call. BTW, webcore style is no space after colons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133151</commentid>
    <comment_count>3</comment_count>
      <attachid>33089</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-20 09:29:37 -0700</bug_when>
    <thetext>Created attachment 33089
Replacement patch

Patch with suggested changes from Simon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133193</commentid>
    <comment_count>4</comment_count>
      <attachid>33089</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-07-20 12:15:26 -0700</bug_when>
    <thetext>Comment on attachment 33089
Replacement patch


&gt; +float GraphicsLayer::accumulatedOpacity() const
&gt; +{
&gt; +    if (!preserves3D())
&gt; +        return 1;
&gt; +        
&gt; +    return m_opacity * (parent() ? parent()-&gt;accumulatedOpacity() : 1);
&gt; +}
&gt; +
&gt; +void GraphicsLayer::distributeOpacity(float accumulatedOpacity)
&gt; +{
&gt; +    // If this is a transform layer we need to distribute our opacity to all our children
&gt; +    
&gt; +    // Incoming accumulatedOpacity is the contribution from our parent(s). We mutiply this by our own
&gt; +    // opacity to get the total contribution
&gt; +    accumulatedOpacity *= m_opacity;
&gt; +    
&gt; +    if (preserves3D()) {
&gt; +        size_t numChildren = children().size();
&gt; +        for (size_t i = 0; i &lt; numChildren; ++i)
&gt; +            children()[i]-&gt;distributeOpacity(accumulatedOpacity);
&gt; +    }
&gt; +}



&gt; +void GraphicsLayerCA::distributeOpacity(float accumulatedOpacity)
&gt; +{
&gt; +    GraphicsLayer::distributeOpacity(accumulatedOpacity);
&gt; +    
&gt; +    // If this is a transform layer we need set the opacity on our m_layer. Otherwise 
&gt; +    // we just set our own opacity.
&gt; +    accumulatedOpacity *= m_opacity;
&gt; +    
&gt; +    if (preserves3D()) {
&gt; +        if (m_layer.get())
&gt; +            [m_layer.get() setOpacity: accumulatedOpacity];
&gt; +    } else
&gt; +        [primaryLayer() setOpacity: accumulatedOpacity];
&gt; +}

I don&apos;t like this duplication of logic between the base class and the derived class. Logic should live in just one place.

You still have spaces after colons.

I&apos;m also a little concerned about the fact that you&apos;re walking the GraphicsLayer tree, rather than the RenderLayer tree to distribute opacity. This only happens to work because we have other logic that makes compositing layers on ancestors of layers with opacity &lt; 1 (in computeCompositingRequirements()). That logic may changes, so this code needs to work when a composited layer has a software-rendered parent with opacity &lt; 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133254</commentid>
    <comment_count>5</comment_count>
      <attachid>33112</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-20 15:14:23 -0700</bug_when>
    <thetext>Created attachment 33112
Replacement patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133256</commentid>
    <comment_count>6</comment_count>
      <attachid>33113</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-20 15:16:11 -0700</bug_when>
    <thetext>Created attachment 33113
Fixes a typo in the previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133272</commentid>
    <comment_count>7</comment_count>
      <attachid>33113</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-07-20 15:33:47 -0700</bug_when>
    <thetext>Comment on attachment 33113
Fixes a typo in the previous patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        * platform/graphics/GraphicsLayer.h:
&gt; +        (WebCore::GraphicsLayer::distributeOpacity):
&gt; +        (WebCore::GraphicsLayer::accumulatedOpacity):
&gt; +        * platform/graphics/mac/GraphicsLayerCA.h:
&gt; +        * platform/graphics/mac/GraphicsLayerCA.mm:
&gt; +        (WebCore::GraphicsLayerCA::setPreserves3D):
&gt; +        (WebCore::GraphicsLayerCA::setOpacity):
&gt; +        (WebCore::GraphicsLayerCA::animateFloat):
&gt; +        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
&gt; +        (WebCore::GraphicsLayerCA::accumulatedOpacity):
&gt; +        (WebCore::GraphicsLayerCA::distributeOpacity):
&gt; +        (WebCore::GraphicsLayerCA::setOpacityOnLayer):

This changelist seems stale.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.h
&gt; ===================================================================

&gt;  protected:
&gt; +    virtual void distributeOpacityHelper(float) { }

Please rename this to internalSetOpacity(), or even setOpacityOnLayer(); the name should say what it does.

&gt; Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; ===================================================================

&gt; +void GraphicsLayerCA::distributeOpacityHelper(float accumulatedOpacity)
&gt; +{
&gt; +    [ (preserves3D() ? m_layer.get() : primaryLayer()) setOpacity:accumulatedOpacity];
&gt; +}

You&apos;ve got an extra space after the first [

r=me with those adjustments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133274</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-07-20 15:45:59 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/platform/graphics/GraphicsLayer.cpp
Sending        WebCore/platform/graphics/GraphicsLayer.h
Sending        WebCore/platform/graphics/mac/GraphicsLayerCA.h
Sending        WebCore/platform/graphics/mac/GraphicsLayerCA.mm
Transmitting file data .....
Committed revision 46135.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32990</attachid>
            <date>2009-07-17 17:11:04 -0700</date>
            <delta_ts>2009-07-20 09:29:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>27398.patch</filename>
            <type>text/plain</type>
            <size>8231</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDctMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhh
bmRsZSBvcGFjaXR5IGFuZCBvcGFjaXR5IGFuaW1hdGlvbnMgb24gdHJhbnNmb3JtIGxheWVycyBp
biBMZW9wYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzM5OAorCisgICAgICAgIFRoaXMgZG9lcyB0d28gdGhpbmdzLiBGaXJzdCwgd2hlbmV2ZXIg
b3BhY2l0eSBpcyBjaGFuZ2VkIG9uIGEgbGF5ZXIgSQorICAgICAgICBwcm9wYWdhdGUgdGhlIGNo
YW5nZSBpbnRvIHRoZSBjb250ZW50IGxheWVyIGFuZCBhbGwgdGhlIGNoaWxkcmVuIGlmCisgICAg
ICAgIHRoZSBsYXllciBvbiB3aGljaCBvcGFjaXR5IGlzIHNldCBpcyBhIHRyYW5zZm9ybSBsYXll
ciAocHJlc2VydmUzRAorICAgICAgICBpcyB0cnVlKS4gVGhlIG9wYWNpdHkgc2V0IGlzIHRoZSBh
Y2N1bXVsYXRlZCBvcGFjaXR5IGZyb20gdGhpcyBsYXllcgorICAgICAgICBhbmQgYWxsIGl0cyBk
aXJlY3QgYW5jZXN0b3IgdHJhbnNmb3JtIGxheWVycy4KKworICAgICAgICBTZWNvbmQsIEkgdHVy
biBvZmYgYWxsIG9wYWNpdHkgYW5pbWF0aW9uLgorCisgICAgICAgIFRoaXMgaXMgZG9uZSBvbmx5
IG9uIHRoZSBMZW9wYXJkIGJ1aWxkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6ZGlzdHJpYnV0
ZU9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWNjdW11bGF0ZWRP
cGFjaXR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNB
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0UHJlc2VydmVzM0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6YW5pbWF0ZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OmFjY3VtdWxhdGVkT3BhY2l0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OmRpc3RyaWJ1dGVPcGFjaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eU9uTGF5ZXIpOgorCiAyMDA5LTA3LTE3ICBN
YXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSAzMi1iaXQgYnVp
bGQgYnkgcmVtb3ZpbmcgaW1wbGljaXQgZmxvYXQgPC0+IGRvdWJsZSBjb252ZXJzaW9ucy4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA0
NjAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTYsNiArMzE2LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cmlu
ZyBwcm9wZXJ0eUlkVG9TdHJpbmcoQW5pbWF0ZWRQcm9wZXJ0eUlEKTsKICAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxvYXQpIHsgfQorICAgIHZpcnR1YWwgZmxvYXQg
YWNjdW11bGF0ZWRPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA0
NjAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0R2VvbWV0cnlPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50
YXRpb24pOwogICAgIHZpcnR1YWwgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGdl
b21ldHJ5T3JpZW50YXRpb24oKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaXN0cmlidXRl
T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkoKSBj
b25zdDsKKyAgICAKIHByaXZhdGU6CisgICAgdm9pZCBzZXRPcGFjaXR5T25MYXllcigpOworCiAg
ICAgV2ViTGF5ZXIqIHByaW1hcnlMYXllcigpIGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxh
eWVyLmdldCgpID8gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAg
ICBXZWJMYXllciogaG9zdExheWVyRm9yU3VibGF5ZXJzKCkgY29uc3Q7CiAgICAgV2ViTGF5ZXIq
IGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkocmV2aXNpb24gNDYwMzgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTY5NSw4ICs2OTUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0UHJlc2Vy
dmVzM0QoYm9vCiAgICAgICAgIFttX3RyYW5zZm9ybUxheWVyLmdldCgpIHNldFRyYW5zZm9ybTpb
bV9sYXllci5nZXQoKSB0cmFuc2Zvcm1dXTsKICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0VHJh
bnNmb3JtOkNBVHJhbnNmb3JtM0RJZGVudGl0eV07CiAgICAgICAgIAotICAgICAgICAvLyBUcmFu
c2ZlciB0aGUgb3BhY2l0eSBmcm9tIHRoZSBvbGQgbGF5ZXIgdG8gdGhlIHRyYW5zZm9ybSBsYXll
ci4KLSAgICAgICAgW21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTptX29wYWNpdHld
OworICAgICAgICAvLyBTZXQgdGhlIG9sZCBsYXllciB0byBvcGFjaXR5IG9mIDEuIEZ1cnRoZXIg
ZG93biB3ZSB3aWxsIHNldCB0aGUgb3BhY2l0eSBvbiB0aGUgdHJhbnNmb3JtIGxheWVyLgogICAg
ICAgICBbbV9sYXllci5nZXQoKSBzZXRPcGFjaXR5OjFdOwogCiAgICAgICAgIC8vIE1vdmUgdGhp
cyBsYXllciB0byBiZSBhIGNoaWxkIG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCkBAIC03MjIsNyAr
NzIxLDYgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFByZXNlcnZlczNEKGJvbwogI2VuZGlm
CiAgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzUmVjdDpbbV90cmFuc2Zvcm1MYXll
ci5nZXQoKSBjb250ZW50c1JlY3RdXTsKICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0VHJhbnNm
b3JtOlttX3RyYW5zZm9ybUxheWVyLmdldCgpIHRyYW5zZm9ybV1dOwotICAgICAgICBbbV9sYXll
ci5nZXQoKSBzZXRPcGFjaXR5OlttX3RyYW5zZm9ybUxheWVyLmdldCgpIG9wYWNpdHldXTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIFttX2xheWVyLmdldCgpIHNldFpQb3NpdGlvbjpbbV90cmFu
c2Zvcm1MYXllci5nZXQoKSB6UG9zaXRpb25dXTsKICNlbmRpZgpAQCAtNzMxLDYgKzcyOSw4IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRChib28KICAgICAgICAgbV90cmFu
c2Zvcm1MYXllciA9IDA7CiAgICAgfQogCisgICAgc2V0T3BhY2l0eU9uTGF5ZXIoKTsKKwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXRCYWNrZmFjZVZpc2liaWwKIAogYm9vbCBHcmFwaGljc0xheWVy
Q0E6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSwgY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9u
LCBkb3VibGUgYmVnaW5UaW1lKQogewotICAgIGlmIChmb3JjZVNvZnR3YXJlQW5pbWF0aW9uKCkp
CisgICAgaWYgKGZvcmNlU29mdHdhcmVBbmltYXRpb24oKSAmJiB0cmFuc2l0aW9uKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIGZsb2F0IGNsYW1wZWRPcGFjaXR5ID0gbWF4
KDAuMGYsIG1pbihvcGFjaXR5LCAxLjBmKSk7CkBAIC04NTcsNyArODU3LDcgQEAgYm9vbCBHcmFw
aGljc0xheWVyQ0E6OnNldE9wYWNpdHkoZmxvYXQgbwogICAgICAgICAvLwogICAgICAgICBpZiAo
YW5pbUluZGV4IDwgMCB8fCBtX2FuaW1hdGlvbnNbYW5pbUluZGV4XS5pc1RyYW5zaXRpb24oKSkg
ewogICAgICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgICAgICBb
cHJpbWFyeUxheWVyKCkgc2V0T3BhY2l0eTpvcGFjaXR5XTsKKyAgICAgICAgICAgIHNldE9wYWNp
dHlPbkxheWVyKCk7CiAgICAgICAgICAgICBpZiAoYW5pbUluZGV4ID49IDApIHsKICAgICAgICAg
ICAgICAgICByZW1vdmVBbGxBbmltYXRpb25zRm9yUHJvcGVydHkoQW5pbWF0ZWRQcm9wZXJ0eU9w
YWNpdHkpOwogICAgICAgICAgICAgICAgIGFuaW1JbmRleCA9IC0xOwpAQCAtODgzLDYgKzg4Mywx
MiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eShmbG9hdCBvCiAgICAgICAgIH0K
ICAgICB9CiAgICAgCisjaWYgIUhBVkVfTU9ERVJOX1FVQVJUWkNPUkUKKyAgICAvLyBPbGRlciB2
ZXJzaW9ucyBvZiBRdWFydHpDb3JlIGRvIG5vdCBoYW5kbGUgb3BhY2l0eSBpbiB0cmFuc2Zvcm0g
bGF5ZXJzIHByb3Blcmx5LiBTbyB3ZSB3aWxsCisgICAgLy8gYWx3YXlzIGRvIHNvZnR3YXJlIGFu
aW1hdGlvbiBpbiB0aGF0IGNhc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICAKICAg
ICAvLyBJZiBhbiBhbmltYXRpb24gaXMgcnVubmluZywgaWdub3JlIHRoaXMgdHJhbnNpdGlvbiwg
YnV0IHN0aWxsIHNhdmUgdGhlIHZhbHVlLgogICAgIGlmIChhbmltSW5kZXggPj0gMCAmJiAhbV9h
bmltYXRpb25zW2FuaW1JbmRleF0uaXNUcmFuc2l0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwNTIsNyArMTA1OCwxMyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6YW5pbWF0ZVRy
YW5zZm9ybShjCiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjphbmltYXRlRmxvYXQoQW5pbWF0ZWRQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBGbG9hdFZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIGJlZ2luVGltZSkKIHsKLSAgICBpZiAoZm9y
Y2VTb2Z0d2FyZUFuaW1hdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyKQorICAgIGlmIChm
b3JjZVNvZnR3YXJlQW5pbWF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIKKyNpZiAhSEFW
RV9NT0RFUk5fUVVBUlRaQ09SRQorICAgICAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBRdWFydHpD
b3JlIGRvIG5vdCBoYW5kbGUgb3BhY2l0eSBpbiB0cmFuc2Zvcm0gbGF5ZXJzIHByb3Blcmx5LiBT
byB3ZSB3aWxsCisgICAgICAgIC8vIGFsd2F5cyBkbyBzb2Z0d2FyZSBhbmltYXRpb24gaW4gdGhh
dCBjYXNlCisgICAgICAgIHx8IHByb3BlcnR5ID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5Cisj
ZW5kaWYKKyAgICApCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgLy8gaWYg
dGhlcmUgaXMgYWxyZWFkeSBpcyBhbiBhbmltYXRpb24gZm9yIHRoaXMgcHJvcGVydHkgYW5kIGl0
IGhhc24ndCBjaGFuZ2VkLCBpZ25vcmUgaXQuCkBAIC0xNTE4LDcgKzE1MzAsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c3dhcEZyb21PclRvVGlsZWRMCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0
UG9zaXRpb246W29sZExheWVyLmdldCgpIHBvc2l0aW9uXV07CiAgICAgW21fbGF5ZXIuZ2V0KCkg
c2V0QW5jaG9yUG9pbnQ6W29sZExheWVyLmdldCgpIGFuY2hvclBvaW50XV07CiAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0T3BhcXVlOltvbGRMYXllci5nZXQoKSBpc09wYXF1ZV1dOwotICAgIFttX2xh
eWVyLmdldCgpIHNldE9wYWNpdHk6W29sZExheWVyLmdldCgpIG9wYWNpdHldXTsKKyAgICBzZXRP
cGFjaXR5T25MYXllcigpOwogICAgIFttX2xheWVyLmdldCgpIHNldFRyYW5zZm9ybTpbb2xkTGF5
ZXIuZ2V0KCkgdHJhbnNmb3JtXV07CiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0U3VibGF5ZXJUcmFu
c2Zvcm06W29sZExheWVyLmdldCgpIHN1YmxheWVyVHJhbnNmb3JtXV07CiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0RG91YmxlU2lkZWQ6W29sZExheWVyLmdldCgpIGlzRG91YmxlU2lkZWRdXTsKQEAg
LTE2MjIsNiArMTYzNCw0NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNMYXll
cihXCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCitmbG9hdCBHcmFwaGljc0xh
eWVyQ0E6OmFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFwcmVzZXJ2ZXMz
RCgpKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fb3BhY2l0eSAq
IChwYXJlbnQoKSA/IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6ZGlzdHJpYnV0ZU9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sK
KyAgICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtIGxheWVyIHdlIG5lZWQgdG8gZGlzdHJpYnV0
ZSBvdXIgb3BhY2l0eSB0byBhbGwgb3VyIGNoaWxkcmVuCisgICAgLy8gYW5kIHNldCB0aGUgb3Bh
Y2l0eSBvbiBvdXIgbV9sYXllci4gT3RoZXJ3aXNlIHdlIGp1c3Qgc2V0IG91ciBvd24gb3BhY2l0
eS4KKyAgICAKKyAgICAvLyBJbmNvbWluZyBvcGFjaXR5IGlzIHRoZSBjb250cmlidXRpb24gZnJv
bSBvdXIgcGFyZW50KHMpLiBXZSBtdXRpcGx5IHRoaXMgYnkgb3VyIG93bgorICAgIC8vIG9wYWNp
dHkgdG8gZ2V0IHRoZSB2YWx1ZSB0aGF0IGlzIGVpdGhlciBwYXNzZWQgZG93biB0byB0aGUgY2hp
bGRyZW4gb3Igc2V0IG9uIG91cgorICAgIC8vIG93biBsYXllci4KKyAgICBvcGFjaXR5ICo9IG1f
b3BhY2l0eTsKKyAgICAKKyAgICBpZiAocHJlc2VydmVzM0QoKSkgeworICAgICAgICBpZiAobV9s
YXllci5nZXQoKSkKKyAgICAgICAgICAgIFttX2xheWVyLmdldCgpIHNldE9wYWNpdHk6IG9wYWNp
dHldOworCisgICAgICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkcmVuKCkuc2l6ZSgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpCisgICAgICAg
ICAgICBjaGlsZHJlbigpW2ldLT5kaXN0cmlidXRlT3BhY2l0eShvcGFjaXR5KTsKKyAgICB9IGVs
c2UKKyAgICAgICAgW3ByaW1hcnlMYXllcigpIHNldE9wYWNpdHk6IG9wYWNpdHldOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0T3BhY2l0eU9uTGF5ZXIoKQoreworI2lmICFIQVZFX01P
REVSTl9RVUFSVFpDT1JFCisgICAgLy8gRGlzdHJpYnV0ZSBvcGFjaXR5IGVpdGhlciB0byBvdXIg
b3duIGxheWVyIG9yIHRvIG91ciBjaGlsZHJlbi4gV2UgcGFzcyBpbiB0aGUgCisgICAgLy8gY29u
dHJpYnV0aW9uIGZyb20gb3VyIHBhcmVudChzKS4KKyAgICBkaXN0cmlidXRlT3BhY2l0eShwYXJl
bnQoKSA/IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworI2Vsc2UKKyAgICBb
cHJpbWFyeUxheWVyKCkgc2V0T3BhY2l0eTogbV9vcGFjaXR5XTsKKyNlbmRpZgorfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIAo=
</data>
<flag name="review"
          id="17332"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33089</attachid>
            <date>2009-07-20 09:29:37 -0700</date>
            <delta_ts>2009-07-20 15:14:23 -0700</delta_ts>
            <desc>Replacement patch</desc>
            <filename>27398.patch</filename>
            <type>text/plain</type>
            <size>8852</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjA3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDctMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhh
bmRsZSBvcGFjaXR5IGFuZCBvcGFjaXR5IGFuaW1hdGlvbnMgb24gdHJhbnNmb3JtIGxheWVycyBp
biBMZW9wYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzM5OAorCisgICAgICAgIFRoaXMgbWFrZXMgdHdvIGNoYW5nZXMsIGFuZCBvbmx5IGZvciBM
ZW9wYXJkLiAKKworICAgICAgICBGaXJzdCwgd2hlbmV2ZXIgb3BhY2l0eSBpcyBjaGFuZ2VkIG9u
IGEgbGF5ZXIgSSBwcm9wYWdhdGUgdGhlIAorICAgICAgICBjaGFuZ2UgaW50byB0aGUgY29udGVu
dCBsYXllciBhbmQgYWxsIHRoZSBjaGlsZHJlbiBpZiB0aGUgbGF5ZXIgCisgICAgICAgIG9uIHdo
aWNoIG9wYWNpdHkgaXMgc2V0IGlzIGEgdHJhbnNmb3JtIGxheWVyIChwcmVzZXJ2ZTNEIGlzIHRy
dWUpLiAKKyAgICAgICAgVGhlIG9wYWNpdHkgc2V0IGlzIHRoZSBhY2N1bXVsYXRlZCBvcGFjaXR5
IGZyb20gdGhpcyBsYXllcgorICAgICAgICBhbmQgYWxsIGl0cyBkaXJlY3QgYW5jZXN0b3IgdHJh
bnNmb3JtIGxheWVycy4gU2Vjb25kLCBJIHR1cm4gb2ZmIGFsbCAKKyAgICAgICAgaGFyZHdhcmUg
b3BhY2l0eSBhbmltYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkaXN0cmlidXRlT3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjphY2N1bXVsYXRlZE9wYWNp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjphbmltYXRlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6YWNjdW11bGF0ZWRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6ZGlzdHJpYnV0ZU9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5T25MYXllcik6CisKIDIwMDktMDctMTcgIE1hcmsg
Um93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIDMyLWJpdCBidWlsZCBi
eSByZW1vdmluZyBpbXBsaWNpdCBmbG9hdCA8LT4gZG91YmxlIGNvbnZlcnNpb25zLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiA0
NjAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0OSw2ICs0NDksMjkgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpzZXRa
UG9zaXRpb24oZmxvYXQgcAogfQogI2VuZGlmCiAKK2Zsb2F0IEdyYXBoaWNzTGF5ZXI6OmFjY3Vt
dWxhdGVkT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFwcmVzZXJ2ZXMzRCgpKQorICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fb3BhY2l0eSAqIChwYXJlbnQoKSA/
IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXI6OmRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSkKK3sKKyAg
ICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtIGxheWVyIHdlIG5lZWQgdG8gZGlzdHJpYnV0ZSBv
dXIgb3BhY2l0eSB0byBhbGwgb3VyIGNoaWxkcmVuCisgICAgCisgICAgLy8gSW5jb21pbmcgYWNj
dW11bGF0ZWRPcGFjaXR5IGlzIHRoZSBjb250cmlidXRpb24gZnJvbSBvdXIgcGFyZW50KHMpLiBX
ZSBtdXRpcGx5IHRoaXMgYnkgb3VyIG93bgorICAgIC8vIG9wYWNpdHkgdG8gZ2V0IHRoZSB0b3Rh
bCBjb250cmlidXRpb24KKyAgICBhY2N1bXVsYXRlZE9wYWNpdHkgKj0gbV9vcGFjaXR5OworICAg
IAorICAgIGlmIChwcmVzZXJ2ZXMzRCgpKSB7CisgICAgICAgIHNpemVfdCBudW1DaGlsZHJlbiA9
IGNoaWxkcmVuKCkuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNo
aWxkcmVuOyArK2kpCisgICAgICAgICAgICBjaGlsZHJlbigpW2ldLT5kaXN0cmlidXRlT3BhY2l0
eShhY2N1bXVsYXRlZE9wYWNpdHkpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQgd3JpdGVJbmRl
bnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
IT0gaW5kZW50OyArK2kpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAkocmV2aXNpb24gNDYwMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw5IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFuaW1hdGVkUHJvcGVydHlJ
RCk7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0KTsKKyAg
ICB2aXJ0dWFsIGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6
CiAgICAgR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lv
biA0NjAzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJD
QS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0R2VvbWV0cnlPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3Jp
ZW50YXRpb24pOwogICAgIHZpcnR1YWwgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9u
IGdlb21ldHJ5T3JpZW50YXRpb24oKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaXN0cmli
dXRlT3BhY2l0eShmbG9hdCk7CisgICAgCiBwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlT3BhY2l0
eU9uTGF5ZXIoKTsKKwogICAgIFdlYkxheWVyKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCAgeyByZXR1
cm4gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xh
eWVyLmdldCgpOyB9CiAgICAgV2ViTGF5ZXIqIGhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0
OwogICAgIFdlYkxheWVyKiBsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJldmlz
aW9uIDQ2MDM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXll
ckNBLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTUsOCArNjk1LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldFByZXNlcnZlczNEKGJvbwogICAgICAgICBbbV90cmFuc2Zvcm1MYXllci5nZXQo
KSBzZXRUcmFuc2Zvcm06W21fbGF5ZXIuZ2V0KCkgdHJhbnNmb3JtXV07CiAgICAgICAgIFttX2xh
eWVyLmdldCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNESWRlbnRpdHldOwogICAgICAgICAK
LSAgICAgICAgLy8gVHJhbnNmZXIgdGhlIG9wYWNpdHkgZnJvbSB0aGUgb2xkIGxheWVyIHRvIHRo
ZSB0cmFuc2Zvcm0gbGF5ZXIuCi0gICAgICAgIFttX3RyYW5zZm9ybUxheWVyLmdldCgpIHNldE9w
YWNpdHk6bV9vcGFjaXR5XTsKKyAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0
eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5z
Zm9ybSBsYXllci4KICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eToxXTsKIAogICAg
ICAgICAvLyBNb3ZlIHRoaXMgbGF5ZXIgdG8gYmUgYSBjaGlsZCBvZiB0aGUgdHJhbnNmb3JtIGxh
eWVyLgpAQCAtNzIyLDcgKzcyMSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2
ZXMzRChib28KICNlbmRpZgogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50c1JlY3Q6
W21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgY29udGVudHNSZWN0XV07CiAgICAgICAgIFttX2xheWVy
LmdldCgpIHNldFRyYW5zZm9ybTpbbV90cmFuc2Zvcm1MYXllci5nZXQoKSB0cmFuc2Zvcm1dXTsK
LSAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTpbbV90cmFuc2Zvcm1MYXllci5nZXQo
KSBvcGFjaXR5XV07CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRa
UG9zaXRpb246W21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgelBvc2l0aW9uXV07CiAjZW5kaWYKQEAg
LTczMSw2ICs3MjksOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0UHJlc2VydmVzM0QoYm9v
CiAgICAgICAgIG1fdHJhbnNmb3JtTGF5ZXIgPSAwOwogICAgIH0KIAorICAgIHVwZGF0ZU9wYWNp
dHlPbkxheWVyKCk7CisKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKQEAgLTgz
Nyw3ICs4MzcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QmFja2ZhY2VWaXNpYmlsCiAK
IGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHksIGNvbnN0IEFu
aW1hdGlvbiogdHJhbnNpdGlvbiwgZG91YmxlIGJlZ2luVGltZSkKIHsKLSAgICBpZiAoZm9yY2VT
b2Z0d2FyZUFuaW1hdGlvbigpKQorICAgIGlmIChmb3JjZVNvZnR3YXJlQW5pbWF0aW9uKCkgJiYg
dHJhbnNpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBmbG9hdCBj
bGFtcGVkT3BhY2l0eSA9IG1heCgwLjBmLCBtaW4ob3BhY2l0eSwgMS4wZikpOwpAQCAtODU3LDcg
Kzg1Nyw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KGZsb2F0IG8KICAgICAg
ICAgLy8KICAgICAgICAgaWYgKGFuaW1JbmRleCA8IDAgfHwgbV9hbmltYXRpb25zW2FuaW1JbmRl
eF0uaXNUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgICAgICAgICAgW3ByaW1hcnlMYXllcigpIHNldE9wYWNpdHk6b3BhY2l0eV07Cisg
ICAgICAgICAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogICAgICAgICAgICAgaWYgKGFuaW1J
bmRleCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgcmVtb3ZlQWxsQW5pbWF0aW9uc0ZvclByb3Bl
cnR5KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKICAgICAgICAgICAgICAgICBhbmltSW5kZXgg
PSAtMTsKQEAgLTg4Myw2ICs4ODMsMTIgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNp
dHkoZmxvYXQgbwogICAgICAgICB9CiAgICAgfQogICAgIAorI2lmICFIQVZFX01PREVSTl9RVUFS
VFpDT1JFCisgICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgUXVhcnR6Q29yZSBkbyBub3QgaGFuZGxl
IG9wYWNpdHkgaW4gdHJhbnNmb3JtIGxheWVycyBwcm9wZXJseS4gU28gd2Ugd2lsbAorICAgIC8v
IGFsd2F5cyBkbyBzb2Z0d2FyZSBhbmltYXRpb24gaW4gdGhhdCBjYXNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCisgICAgCiAgICAgLy8gSWYgYW4gYW5pbWF0aW9uIGlzIHJ1bm5pbmcsIGln
bm9yZSB0aGlzIHRyYW5zaXRpb24sIGJ1dCBzdGlsbCBzYXZlIHRoZSB2YWx1ZS4KICAgICBpZiAo
YW5pbUluZGV4ID49IDAgJiYgIW1fYW5pbWF0aW9uc1thbmltSW5kZXhdLmlzVHJhbnNpdGlvbigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDcgKzEwNTgsMTMgQEAgYm9vbCBHcmFw
aGljc0xheWVyQ0E6OmFuaW1hdGVUcmFuc2Zvcm0oYwogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6
YW5pbWF0ZUZsb2F0KEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgRmxvYXRWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGRvdWJsZSBiZWdp
blRpbWUpCiB7Ci0gICAgaWYgKGZvcmNlU29mdHdhcmVBbmltYXRpb24oKSB8fCB2YWx1ZUxpc3Qu
c2l6ZSgpIDwgMikKKyAgICBpZiAoZm9yY2VTb2Z0d2FyZUFuaW1hdGlvbigpIHx8IHZhbHVlTGlz
dC5zaXplKCkgPCAyCisjaWYgIUhBVkVfTU9ERVJOX1FVQVJUWkNPUkUKKyAgICAgICAgLy8gT2xk
ZXIgdmVyc2lvbnMgb2YgUXVhcnR6Q29yZSBkbyBub3QgaGFuZGxlIG9wYWNpdHkgaW4gdHJhbnNm
b3JtIGxheWVycyBwcm9wZXJseS4gU28gd2Ugd2lsbAorICAgICAgICAvLyBhbHdheXMgZG8gc29m
dHdhcmUgYW5pbWF0aW9uIGluIHRoYXQgY2FzZQorICAgICAgICB8fCBwcm9wZXJ0eSA9PSBBbmlt
YXRlZFByb3BlcnR5T3BhY2l0eQorI2VuZGlmCisgICAgKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgaXMgYW4gYW5pbWF0aW9uIGZv
ciB0aGlzIHByb3BlcnR5IGFuZCBpdCBoYXNuJ3QgY2hhbmdlZCwgaWdub3JlIGl0LgpAQCAtMTUx
OCw3ICsxNTMwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnN3YXBGcm9tT3JUb1RpbGVkTAog
ICAgIFttX2xheWVyLmdldCgpIHNldFBvc2l0aW9uOltvbGRMYXllci5nZXQoKSBwb3NpdGlvbl1d
OwogICAgIFttX2xheWVyLmdldCgpIHNldEFuY2hvclBvaW50OltvbGRMYXllci5nZXQoKSBhbmNo
b3JQb2ludF1dOwogICAgIFttX2xheWVyLmdldCgpIHNldE9wYXF1ZTpbb2xkTGF5ZXIuZ2V0KCkg
aXNPcGFxdWVdXTsKLSAgICBbbV9sYXllci5nZXQoKSBzZXRPcGFjaXR5OltvbGRMYXllci5nZXQo
KSBvcGFjaXR5XV07CisgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKICAgICBbbV9sYXllci5n
ZXQoKSBzZXRUcmFuc2Zvcm06W29sZExheWVyLmdldCgpIHRyYW5zZm9ybV1dOwogICAgIFttX2xh
eWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOltvbGRMYXllci5nZXQoKSBzdWJsYXllclRy
YW5zZm9ybV1dOwogICAgIFttX2xheWVyLmdldCgpIHNldERvdWJsZVNpZGVkOltvbGRMYXllci5n
ZXQoKSBpc0RvdWJsZVNpZGVkXV07CkBAIC0xNjIyLDYgKzE2MzQsMzIgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldENvbnRlbnRzTGF5ZXIoVwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ0E6OmRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0IGFj
Y3VtdWxhdGVkT3BhY2l0eSkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpkaXN0cmlidXRlT3BhY2l0
eShhY2N1bXVsYXRlZE9wYWNpdHkpOworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSB0cmFuc2Zv
cm0gbGF5ZXIgd2UgbmVlZCBzZXQgdGhlIG9wYWNpdHkgb24gb3VyIG1fbGF5ZXIuIE90aGVyd2lz
ZSAKKyAgICAvLyB3ZSBqdXN0IHNldCBvdXIgb3duIG9wYWNpdHkuCisgICAgYWNjdW11bGF0ZWRP
cGFjaXR5ICo9IG1fb3BhY2l0eTsKKyAgICAKKyAgICBpZiAocHJlc2VydmVzM0QoKSkgeworICAg
ICAgICBpZiAobV9sYXllci5nZXQoKSkKKyAgICAgICAgICAgIFttX2xheWVyLmdldCgpIHNldE9w
YWNpdHk6IGFjY3VtdWxhdGVkT3BhY2l0eV07CisgICAgfSBlbHNlCisgICAgICAgIFtwcmltYXJ5
TGF5ZXIoKSBzZXRPcGFjaXR5OiBhY2N1bXVsYXRlZE9wYWNpdHldOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQoreworI2lmICFIQVZFX01PREVSTl9R
VUFSVFpDT1JFCisgICAgLy8gRGlzdHJpYnV0ZSBvcGFjaXR5IGVpdGhlciB0byBvdXIgb3duIGxh
eWVyIG9yIHRvIG91ciBjaGlsZHJlbi4gV2UgcGFzcyBpbiB0aGUgCisgICAgLy8gY29udHJpYnV0
aW9uIGZyb20gb3VyIHBhcmVudChzKS4KKyAgICBkaXN0cmlidXRlT3BhY2l0eShwYXJlbnQoKSA/
IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworI2Vsc2UKKyAgICBbcHJpbWFy
eUxheWVyKCkgc2V0T3BhY2l0eTogbV9vcGFjaXR5XTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKIAo=
</data>
<flag name="review"
          id="17417"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33112</attachid>
            <date>2009-07-20 15:14:23 -0700</date>
            <delta_ts>2009-07-20 15:16:11 -0700</delta_ts>
            <desc>Replacement patch</desc>
            <filename>27398.patch</filename>
            <type>text/plain</type>
            <size>8670</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDctMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhh
bmRsZSBvcGFjaXR5IGFuZCBvcGFjaXR5IGFuaW1hdGlvbnMgb24gdHJhbnNmb3JtIGxheWVycyBp
biBMZW9wYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzM5OAorCisgICAgICAgIFRoaXMgbWFrZXMgdHdvIGNoYW5nZXMsIGFuZCBvbmx5IGZvciBM
ZW9wYXJkLiAKKworICAgICAgICBGaXJzdCwgd2hlbmV2ZXIgb3BhY2l0eSBpcyBjaGFuZ2VkIG9u
IGEgbGF5ZXIgSSBwcm9wYWdhdGUgdGhlIAorICAgICAgICBjaGFuZ2UgaW50byB0aGUgY29udGVu
dCBsYXllciBhbmQgYWxsIHRoZSBjaGlsZHJlbiBpZiB0aGUgbGF5ZXIgCisgICAgICAgIG9uIHdo
aWNoIG9wYWNpdHkgaXMgc2V0IGlzIGEgdHJhbnNmb3JtIGxheWVyIChwcmVzZXJ2ZTNEIGlzIHRy
dWUpLiAKKyAgICAgICAgVGhlIG9wYWNpdHkgc2V0IGlzIHRoZSBhY2N1bXVsYXRlZCBvcGFjaXR5
IGZyb20gdGhpcyBsYXllcgorICAgICAgICBhbmQgYWxsIGl0cyBkaXJlY3QgYW5jZXN0b3IgdHJh
bnNmb3JtIGxheWVycy4gU2Vjb25kLCBJIHR1cm4gb2ZmIGFsbCAKKyAgICAgICAgaGFyZHdhcmUg
b3BhY2l0eSBhbmltYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkaXN0cmlidXRlT3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjphY2N1bXVsYXRlZE9wYWNp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjphbmltYXRlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6YWNjdW11bGF0ZWRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6ZGlzdHJpYnV0ZU9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5T25MYXllcik6CisKIDIwMDktMDctMjAgIFlvbmcg
TGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IFJvYmVuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw2ICs0NDksMzEgQEAgdm9pZCBHcmFw
aGljc0xheWVyOjpzZXRaUG9zaXRpb24oZmxvYXQgcAogfQogI2VuZGlmCiAKK2Zsb2F0IEdyYXBo
aWNzTGF5ZXI6OmFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFwcmVzZXJ2
ZXMzRCgpKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fb3BhY2l0
eSAqIChwYXJlbnQoKSA/IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXI6OmRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0IGFjY3VtdWxhdGVk
T3BhY2l0eSkKK3sKKyAgICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtIGxheWVyIHdlIG5lZWQg
dG8gZGlzdHJpYnV0ZSBvdXIgb3BhY2l0eSB0byBhbGwgb3VyIGNoaWxkcmVuCisgICAgCisgICAg
Ly8gSW5jb21pbmcgYWNjdW11bGF0ZWRPcGFjaXR5IGlzIHRoZSBjb250cmlidXRpb24gZnJvbSBv
dXIgcGFyZW50KHMpLiBXZSBtdXRpcGx5IHRoaXMgYnkgb3VyIG93bgorICAgIC8vIG9wYWNpdHkg
dG8gZ2V0IHRoZSB0b3RhbCBjb250cmlidXRpb24KKyAgICBhY2N1bXVsYXRlZE9wYWNpdHkgKj0g
bV9vcGFjaXR5OworICAgIAorICAgIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVyKGFjY3VtdWxhdGVk
T3BhY2l0eSk7CisgICAgCisgICAgaWYgKHByZXNlcnZlczNEKCkpIHsKKyAgICAgICAgc2l6ZV90
IG51bUNoaWxkcmVuID0gY2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkKKyAgICAgICAgICAgIGNoaWxkcmVuKClbaV0tPmRp
c3RyaWJ1dGVPcGFjaXR5KGFjY3VtdWxhdGVkT3BhY2l0eSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2
LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFu
aW1hdGVkUHJvcGVydHlJRCk7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFj
aXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0
OworCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVy
KGZsb2F0KSB7IH0KKyAgICAKICAgICBHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
KTsKIAogICAgIHZvaWQgZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNB
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NM
YXllckNBLmgJKHJldmlzaW9uIDQ2MTMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0
aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbik7CiAgICAgdmlydHVhbCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzT3JpZW50YXRpb24gZ2VvbWV0cnlPcmllbnRhdGlvbigpIGNvbnN0OwogCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVyKGZsb2F0KTsKKwog
cHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7CisKICAgICBXZWJMYXll
ciogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
PyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQogICAgIFdlYkxheWVy
KiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKICAgICBXZWJMYXllciogbGF5ZXJGb3JT
dXBlcmxheWVyKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0xheWVyQ0EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkod29ya2luZyBjb3B5KQpAQCAt
Njk1LDggKzY5NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRChib28K
ICAgICAgICAgW21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgc2V0VHJhbnNmb3JtOlttX2xheWVyLmdl
dCgpIHRyYW5zZm9ybV1dOwogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06Q0FU
cmFuc2Zvcm0zRElkZW50aXR5XTsKICAgICAgICAgCi0gICAgICAgIC8vIFRyYW5zZmVyIHRoZSBv
cGFjaXR5IGZyb20gdGhlIG9sZCBsYXllciB0byB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAg
ICBbbV90cmFuc2Zvcm1MYXllci5nZXQoKSBzZXRPcGFjaXR5Om1fb3BhY2l0eV07CisgICAgICAg
IC8vIFNldCB0aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdp
bGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIFttX2xh
eWVyLmdldCgpIHNldE9wYWNpdHk6MV07CiAKICAgICAgICAgLy8gTW92ZSB0aGlzIGxheWVyIHRv
IGJlIGEgY2hpbGQgb2YgdGhlIHRyYW5zZm9ybSBsYXllci4KQEAgLTcyMiw3ICs3MjEsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0UHJlc2VydmVzM0QoYm9vCiAjZW5kaWYKICAgICAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNSZWN0OlttX3RyYW5zZm9ybUxheWVyLmdldCgpIGNv
bnRlbnRzUmVjdF1dOwogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06W21fdHJh
bnNmb3JtTGF5ZXIuZ2V0KCkgdHJhbnNmb3JtXV07Ci0gICAgICAgIFttX2xheWVyLmdldCgpIHNl
dE9wYWNpdHk6W21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgb3BhY2l0eV1dOwogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0WlBvc2l0aW9uOlttX3RyYW5zZm9ybUxheWVy
LmdldCgpIHpQb3NpdGlvbl1dOwogI2VuZGlmCkBAIC03MzEsNiArNzI5LDggQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnNldFByZXNlcnZlczNEKGJvbwogICAgICAgICBtX3RyYW5zZm9ybUxheWVy
ID0gMDsKICAgICB9CiAKKyAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOworCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldEJhY2tmYWNlVmlzaWJpbAogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5LCBjb25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24sIGRvdWJs
ZSBiZWdpblRpbWUpCiB7Ci0gICAgaWYgKGZvcmNlU29mdHdhcmVBbmltYXRpb24oKSkKKyAgICBp
ZiAoZm9yY2VTb2Z0d2FyZUFuaW1hdGlvbigpICYmIHRyYW5zaXRpb24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCiAgICAgZmxvYXQgY2xhbXBlZE9wYWNpdHkgPSBtYXgoMC4wZiwg
bWluKG9wYWNpdHksIDEuMGYpKTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBib29sIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0T3BhY2l0eShmbG9hdCBvCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhbmltSW5k
ZXggPCAwIHx8IG1fYW5pbWF0aW9uc1thbmltSW5kZXhdLmlzVHJhbnNpdGlvbigpKSB7CiAgICAg
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIFtwcmltYXJ5
TGF5ZXIoKSBzZXRPcGFjaXR5Om9wYWNpdHldOworICAgICAgICAgICAgdXBkYXRlT3BhY2l0eU9u
TGF5ZXIoKTsKICAgICAgICAgICAgIGlmIChhbmltSW5kZXggPj0gMCkgewogICAgICAgICAgICAg
ICAgIHJlbW92ZUFsbEFuaW1hdGlvbnNGb3JQcm9wZXJ0eShBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSk7CiAgICAgICAgICAgICAgICAgYW5pbUluZGV4ID0gLTE7CkBAIC04ODMsNiArODgzLDEyIEBA
IGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KGZsb2F0IG8KICAgICAgICAgfQogICAg
IH0KICAgICAKKyNpZiAhSEFWRV9NT0RFUk5fUVVBUlRaQ09SRQorICAgIC8vIE9sZGVyIHZlcnNp
b25zIG9mIFF1YXJ0ekNvcmUgZG8gbm90IGhhbmRsZSBvcGFjaXR5IGluIHRyYW5zZm9ybSBsYXll
cnMgcHJvcGVybHkuIFNvIHdlIHdpbGwKKyAgICAvLyBhbHdheXMgZG8gc29mdHdhcmUgYW5pbWF0
aW9uIGluIHRoYXQgY2FzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIAogICAgIC8v
IElmIGFuIGFuaW1hdGlvbiBpcyBydW5uaW5nLCBpZ25vcmUgdGhpcyB0cmFuc2l0aW9uLCBidXQg
c3RpbGwgc2F2ZSB0aGUgdmFsdWUuCiAgICAgaWYgKGFuaW1JbmRleCA+PSAwICYmICFtX2FuaW1h
dGlvbnNbYW5pbUluZGV4XS5pc1RyYW5zaXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA1Miw3ICsxMDU4LDEzIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjphbmltYXRlVHJhbnNm
b3JtKGMKIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFuaW1hdGVGbG9hdChBbmltYXRlZFByb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IEZsb2F0VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgYmVnaW5UaW1lKQogewotICAgIGlmIChmb3JjZVNv
ZnR3YXJlQW5pbWF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgaWYgKGZvcmNl
U29mdHdhcmVBbmltYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMgorI2lmICFIQVZFX01P
REVSTl9RVUFSVFpDT1JFCisgICAgICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIFF1YXJ0ekNvcmUg
ZG8gbm90IGhhbmRsZSBvcGFjaXR5IGluIHRyYW5zZm9ybSBsYXllcnMgcHJvcGVybHkuIFNvIHdl
IHdpbGwKKyAgICAgICAgLy8gYWx3YXlzIGRvIHNvZnR3YXJlIGFuaW1hdGlvbiBpbiB0aGF0IGNh
c2UKKyAgICAgICAgfHwgcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkKKyNlbmRp
ZgorICAgICkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBpZiB0aGVy
ZSBpcyBhbHJlYWR5IGlzIGFuIGFuaW1hdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSBhbmQgaXQgaGFz
bid0IGNoYW5nZWQsIGlnbm9yZSBpdC4KQEAgLTE1MTgsNyArMTUzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZEwKICAgICBbbV9sYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpbb2xkTGF5ZXIuZ2V0KCkgcG9zaXRpb25dXTsKICAgICBbbV9sYXllci5nZXQoKSBzZXRB
bmNob3JQb2ludDpbb2xkTGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdXTsKICAgICBbbV9sYXllci5n
ZXQoKSBzZXRPcGFxdWU6W29sZExheWVyLmdldCgpIGlzT3BhcXVlXV07Ci0gICAgW21fbGF5ZXIu
Z2V0KCkgc2V0T3BhY2l0eTpbb2xkTGF5ZXIuZ2V0KCkgb3BhY2l0eV1dOworICAgIHVwZGF0ZU9w
YWNpdHlPbkxheWVyKCk7CiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0VHJhbnNmb3JtOltvbGRMYXll
ci5nZXQoKSB0cmFuc2Zvcm1dXTsKICAgICBbbV9sYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5z
Zm9ybTpbb2xkTGF5ZXIuZ2V0KCkgc3VibGF5ZXJUcmFuc2Zvcm1dXTsKICAgICBbbV9sYXllci5n
ZXQoKSBzZXREb3VibGVTaWRlZDpbb2xkTGF5ZXIuZ2V0KCkgaXNEb3VibGVTaWRlZF1dOwpAQCAt
MTYyMiw2ICsxNjM0LDIyIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c0xheWVy
KFcKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXll
ckNBOjpkaXN0cmlidXRlT3BhY2l0eUhlbHBlcihmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCit7
CisgICAgWyAocHJlc2VydmUzRCgpID8gbV9sYXllci5nZXQoKSA6IHByaW1hcnlMYXllcigpKSBz
ZXRPcGFjaXR5OmFjY3VtdWxhdGVkT3BhY2l0eV07Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNB
Ojp1cGRhdGVPcGFjaXR5T25MYXllcigpCit7CisjaWYgIUhBVkVfTU9ERVJOX1FVQVJUWkNPUkUK
KyAgICAvLyBEaXN0cmlidXRlIG9wYWNpdHkgZWl0aGVyIHRvIG91ciBvd24gbGF5ZXIgb3IgdG8g
b3VyIGNoaWxkcmVuLiBXZSBwYXNzIGluIHRoZSAKKyAgICAvLyBjb250cmlidXRpb24gZnJvbSBv
dXIgcGFyZW50KHMpLgorICAgIGRpc3RyaWJ1dGVPcGFjaXR5KHBhcmVudCgpID8gcGFyZW50KCkt
PmFjY3VtdWxhdGVkT3BhY2l0eSgpIDogMSk7CisjZWxzZQorICAgIFtwcmltYXJ5TGF5ZXIoKSBz
ZXRPcGFjaXR5Om1fb3BhY2l0eV07CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33113</attachid>
            <date>2009-07-20 15:16:11 -0700</date>
            <delta_ts>2009-07-20 15:33:47 -0700</delta_ts>
            <desc>Fixes a typo in the previous patch</desc>
            <filename>27398.patch</filename>
            <type>text/plain</type>
            <size>8671</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMDktMDctMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhh
bmRsZSBvcGFjaXR5IGFuZCBvcGFjaXR5IGFuaW1hdGlvbnMgb24gdHJhbnNmb3JtIGxheWVycyBp
biBMZW9wYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzM5OAorCisgICAgICAgIFRoaXMgbWFrZXMgdHdvIGNoYW5nZXMsIGFuZCBvbmx5IGZvciBM
ZW9wYXJkLiAKKworICAgICAgICBGaXJzdCwgd2hlbmV2ZXIgb3BhY2l0eSBpcyBjaGFuZ2VkIG9u
IGEgbGF5ZXIgSSBwcm9wYWdhdGUgdGhlIAorICAgICAgICBjaGFuZ2UgaW50byB0aGUgY29udGVu
dCBsYXllciBhbmQgYWxsIHRoZSBjaGlsZHJlbiBpZiB0aGUgbGF5ZXIgCisgICAgICAgIG9uIHdo
aWNoIG9wYWNpdHkgaXMgc2V0IGlzIGEgdHJhbnNmb3JtIGxheWVyIChwcmVzZXJ2ZTNEIGlzIHRy
dWUpLiAKKyAgICAgICAgVGhlIG9wYWNpdHkgc2V0IGlzIHRoZSBhY2N1bXVsYXRlZCBvcGFjaXR5
IGZyb20gdGhpcyBsYXllcgorICAgICAgICBhbmQgYWxsIGl0cyBkaXJlY3QgYW5jZXN0b3IgdHJh
bnNmb3JtIGxheWVycy4gU2Vjb25kLCBJIHR1cm4gb2ZmIGFsbCAKKyAgICAgICAgaGFyZHdhcmUg
b3BhY2l0eSBhbmltYXRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkaXN0cmlidXRlT3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjphY2N1bXVsYXRlZE9wYWNp
dHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjphbmltYXRlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6YWNjdW11bGF0ZWRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDQTo6ZGlzdHJpYnV0ZU9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5T25MYXllcik6CisKIDIwMDktMDctMjAgIFlvbmcg
TGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IFJvYmVuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw2ICs0NDksMzEgQEAgdm9pZCBHcmFw
aGljc0xheWVyOjpzZXRaUG9zaXRpb24oZmxvYXQgcAogfQogI2VuZGlmCiAKK2Zsb2F0IEdyYXBo
aWNzTGF5ZXI6OmFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFwcmVzZXJ2
ZXMzRCgpKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fb3BhY2l0
eSAqIChwYXJlbnQoKSA/IHBhcmVudCgpLT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXI6OmRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0IGFjY3VtdWxhdGVk
T3BhY2l0eSkKK3sKKyAgICAvLyBJZiB0aGlzIGlzIGEgdHJhbnNmb3JtIGxheWVyIHdlIG5lZWQg
dG8gZGlzdHJpYnV0ZSBvdXIgb3BhY2l0eSB0byBhbGwgb3VyIGNoaWxkcmVuCisgICAgCisgICAg
Ly8gSW5jb21pbmcgYWNjdW11bGF0ZWRPcGFjaXR5IGlzIHRoZSBjb250cmlidXRpb24gZnJvbSBv
dXIgcGFyZW50KHMpLiBXZSBtdXRpcGx5IHRoaXMgYnkgb3VyIG93bgorICAgIC8vIG9wYWNpdHkg
dG8gZ2V0IHRoZSB0b3RhbCBjb250cmlidXRpb24KKyAgICBhY2N1bXVsYXRlZE9wYWNpdHkgKj0g
bV9vcGFjaXR5OworICAgIAorICAgIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVyKGFjY3VtdWxhdGVk
T3BhY2l0eSk7CisgICAgCisgICAgaWYgKHByZXNlcnZlczNEKCkpIHsKKyAgICAgICAgc2l6ZV90
IG51bUNoaWxkcmVuID0gY2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkKKyAgICAgICAgICAgIGNoaWxkcmVuKClbaV0tPmRp
c3RyaWJ1dGVPcGFjaXR5KGFjY3VtdWxhdGVkT3BhY2l0eSk7CisgICAgfQorfQorCiBzdGF0aWMg
dm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNyArMzE2
LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmcgcHJvcGVydHlJZFRvU3RyaW5nKEFu
aW1hdGVkUHJvcGVydHlJRCk7CiAgICAgCisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFj
aXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0
OworCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVy
KGZsb2F0KSB7IH0KKyAgICAKICAgICBHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
KTsKIAogICAgIHZvaWQgZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNB
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NM
YXllckNBLmgJKHJldmlzaW9uIDQ2MTMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeU9yaWVudGF0aW9uKENvbXBvc2l0
aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbik7CiAgICAgdmlydHVhbCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzT3JpZW50YXRpb24gZ2VvbWV0cnlPcmllbnRhdGlvbigpIGNvbnN0OwogCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5SGVscGVyKGZsb2F0KTsKKwog
cHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZU9wYWNpdHlPbkxheWVyKCk7CisKICAgICBXZWJMYXll
ciogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
PyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQogICAgIFdlYkxheWVy
KiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKICAgICBXZWJMYXllciogbGF5ZXJGb3JT
dXBlcmxheWVyKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0xheWVyQ0EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCShyZXZpc2lvbiA0NjEzMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkod29ya2luZyBjb3B5KQpAQCAt
Njk1LDggKzY5NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRQcmVzZXJ2ZXMzRChib28K
ICAgICAgICAgW21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgc2V0VHJhbnNmb3JtOlttX2xheWVyLmdl
dCgpIHRyYW5zZm9ybV1dOwogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06Q0FU
cmFuc2Zvcm0zRElkZW50aXR5XTsKICAgICAgICAgCi0gICAgICAgIC8vIFRyYW5zZmVyIHRoZSBv
cGFjaXR5IGZyb20gdGhlIG9sZCBsYXllciB0byB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAg
ICBbbV90cmFuc2Zvcm1MYXllci5nZXQoKSBzZXRPcGFjaXR5Om1fb3BhY2l0eV07CisgICAgICAg
IC8vIFNldCB0aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdp
bGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIFttX2xh
eWVyLmdldCgpIHNldE9wYWNpdHk6MV07CiAKICAgICAgICAgLy8gTW92ZSB0aGlzIGxheWVyIHRv
IGJlIGEgY2hpbGQgb2YgdGhlIHRyYW5zZm9ybSBsYXllci4KQEAgLTcyMiw3ICs3MjEsNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0UHJlc2VydmVzM0QoYm9vCiAjZW5kaWYKICAgICAgICAg
W21fbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNSZWN0OlttX3RyYW5zZm9ybUxheWVyLmdldCgpIGNv
bnRlbnRzUmVjdF1dOwogICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06W21fdHJh
bnNmb3JtTGF5ZXIuZ2V0KCkgdHJhbnNmb3JtXV07Ci0gICAgICAgIFttX2xheWVyLmdldCgpIHNl
dE9wYWNpdHk6W21fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgb3BhY2l0eV1dOwogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0WlBvc2l0aW9uOlttX3RyYW5zZm9ybUxheWVy
LmdldCgpIHpQb3NpdGlvbl1dOwogI2VuZGlmCkBAIC03MzEsNiArNzI5LDggQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnNldFByZXNlcnZlczNEKGJvbwogICAgICAgICBtX3RyYW5zZm9ybUxheWVy
ID0gMDsKICAgICB9CiAKKyAgICB1cGRhdGVPcGFjaXR5T25MYXllcigpOworCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldEJhY2tmYWNlVmlzaWJpbAogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5LCBjb25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24sIGRvdWJs
ZSBiZWdpblRpbWUpCiB7Ci0gICAgaWYgKGZvcmNlU29mdHdhcmVBbmltYXRpb24oKSkKKyAgICBp
ZiAoZm9yY2VTb2Z0d2FyZUFuaW1hdGlvbigpICYmIHRyYW5zaXRpb24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCiAgICAgZmxvYXQgY2xhbXBlZE9wYWNpdHkgPSBtYXgoMC4wZiwg
bWluKG9wYWNpdHksIDEuMGYpKTsKQEAgLTg1Nyw3ICs4NTcsNyBAQCBib29sIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0T3BhY2l0eShmbG9hdCBvCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChhbmltSW5k
ZXggPCAwIHx8IG1fYW5pbWF0aW9uc1thbmltSW5kZXhdLmlzVHJhbnNpdGlvbigpKSB7CiAgICAg
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgICAgIFtwcmltYXJ5
TGF5ZXIoKSBzZXRPcGFjaXR5Om9wYWNpdHldOworICAgICAgICAgICAgdXBkYXRlT3BhY2l0eU9u
TGF5ZXIoKTsKICAgICAgICAgICAgIGlmIChhbmltSW5kZXggPj0gMCkgewogICAgICAgICAgICAg
ICAgIHJlbW92ZUFsbEFuaW1hdGlvbnNGb3JQcm9wZXJ0eShBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSk7CiAgICAgICAgICAgICAgICAgYW5pbUluZGV4ID0gLTE7CkBAIC04ODMsNiArODgzLDEyIEBA
IGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KGZsb2F0IG8KICAgICAgICAgfQogICAg
IH0KICAgICAKKyNpZiAhSEFWRV9NT0RFUk5fUVVBUlRaQ09SRQorICAgIC8vIE9sZGVyIHZlcnNp
b25zIG9mIFF1YXJ0ekNvcmUgZG8gbm90IGhhbmRsZSBvcGFjaXR5IGluIHRyYW5zZm9ybSBsYXll
cnMgcHJvcGVybHkuIFNvIHdlIHdpbGwKKyAgICAvLyBhbHdheXMgZG8gc29mdHdhcmUgYW5pbWF0
aW9uIGluIHRoYXQgY2FzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIAogICAgIC8v
IElmIGFuIGFuaW1hdGlvbiBpcyBydW5uaW5nLCBpZ25vcmUgdGhpcyB0cmFuc2l0aW9uLCBidXQg
c3RpbGwgc2F2ZSB0aGUgdmFsdWUuCiAgICAgaWYgKGFuaW1JbmRleCA+PSAwICYmICFtX2FuaW1h
dGlvbnNbYW5pbUluZGV4XS5pc1RyYW5zaXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTA1Miw3ICsxMDU4LDEzIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjphbmltYXRlVHJhbnNm
b3JtKGMKIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OmFuaW1hdGVGbG9hdChBbmltYXRlZFByb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IEZsb2F0VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgYmVnaW5UaW1lKQogewotICAgIGlmIChmb3JjZVNv
ZnR3YXJlQW5pbWF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIpCisgICAgaWYgKGZvcmNl
U29mdHdhcmVBbmltYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMgorI2lmICFIQVZFX01P
REVSTl9RVUFSVFpDT1JFCisgICAgICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIFF1YXJ0ekNvcmUg
ZG8gbm90IGhhbmRsZSBvcGFjaXR5IGluIHRyYW5zZm9ybSBsYXllcnMgcHJvcGVybHkuIFNvIHdl
IHdpbGwKKyAgICAgICAgLy8gYWx3YXlzIGRvIHNvZnR3YXJlIGFuaW1hdGlvbiBpbiB0aGF0IGNh
c2UKKyAgICAgICAgfHwgcHJvcGVydHkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkKKyNlbmRp
ZgorICAgICkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBpZiB0aGVy
ZSBpcyBhbHJlYWR5IGlzIGFuIGFuaW1hdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSBhbmQgaXQgaGFz
bid0IGNoYW5nZWQsIGlnbm9yZSBpdC4KQEAgLTE1MTgsNyArMTUzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZEwKICAgICBbbV9sYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpbb2xkTGF5ZXIuZ2V0KCkgcG9zaXRpb25dXTsKICAgICBbbV9sYXllci5nZXQoKSBzZXRB
bmNob3JQb2ludDpbb2xkTGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdXTsKICAgICBbbV9sYXllci5n
ZXQoKSBzZXRPcGFxdWU6W29sZExheWVyLmdldCgpIGlzT3BhcXVlXV07Ci0gICAgW21fbGF5ZXIu
Z2V0KCkgc2V0T3BhY2l0eTpbb2xkTGF5ZXIuZ2V0KCkgb3BhY2l0eV1dOworICAgIHVwZGF0ZU9w
YWNpdHlPbkxheWVyKCk7CiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0VHJhbnNmb3JtOltvbGRMYXll
ci5nZXQoKSB0cmFuc2Zvcm1dXTsKICAgICBbbV9sYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5z
Zm9ybTpbb2xkTGF5ZXIuZ2V0KCkgc3VibGF5ZXJUcmFuc2Zvcm1dXTsKICAgICBbbV9sYXllci5n
ZXQoKSBzZXREb3VibGVTaWRlZDpbb2xkTGF5ZXIuZ2V0KCkgaXNEb3VibGVTaWRlZF1dOwpAQCAt
MTYyMiw2ICsxNjM0LDIyIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c0xheWVy
KFcKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXll
ckNBOjpkaXN0cmlidXRlT3BhY2l0eUhlbHBlcihmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkpCit7
CisgICAgWyAocHJlc2VydmVzM0QoKSA/IG1fbGF5ZXIuZ2V0KCkgOiBwcmltYXJ5TGF5ZXIoKSkg
c2V0T3BhY2l0eTphY2N1bXVsYXRlZE9wYWNpdHldOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQoreworI2lmICFIQVZFX01PREVSTl9RVUFSVFpDT1JF
CisgICAgLy8gRGlzdHJpYnV0ZSBvcGFjaXR5IGVpdGhlciB0byBvdXIgb3duIGxheWVyIG9yIHRv
IG91ciBjaGlsZHJlbi4gV2UgcGFzcyBpbiB0aGUgCisgICAgLy8gY29udHJpYnV0aW9uIGZyb20g
b3VyIHBhcmVudChzKS4KKyAgICBkaXN0cmlidXRlT3BhY2l0eShwYXJlbnQoKSA/IHBhcmVudCgp
LT5hY2N1bXVsYXRlZE9wYWNpdHkoKSA6IDEpOworI2Vsc2UKKyAgICBbcHJpbWFyeUxheWVyKCkg
c2V0T3BhY2l0eTptX29wYWNpdHldOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogCg==
</data>
<flag name="review"
          id="17440"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>