<?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>28133</bug_id>
          
          <creation_ts>2009-08-09 12:32:49 -0700</creation_ts>
          <short_desc>SVG Filter feBlend implementation missing</short_desc>
          <delta_ts>2014-05-12 05:54:35 -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>SVG</component>
          <version>525.x (Safari 3.1)</version>
          <rep_platform>PC</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>
          <dependson>27933</dependson>
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138544</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-09 12:32:49 -0700</bug_when>
    <thetext>SVG Filter feBlend implementation missing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138557</commentid>
    <comment_count>1</comment_count>
      <attachid>34430</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-09 14:38:51 -0700</bug_when>
    <thetext>Created attachment 34430
SVG Filter feBlend Implementation

This is the implementation of feBlend. It needs premuliplied colors of getImageData (see bug 27933)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138592</commentid>
    <comment_count>2</comment_count>
      <attachid>34430</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 21:40:45 -0700</bug_when>
    <thetext>Comment on attachment 34430
SVG Filter feBlend Implementation

You&apos;re going to want to mark your unknown/lighten/darken etc as &quot;static&quot; so that compilers know they shouldn&apos;t have external linkage.

Seems you should name your arguments here:
 33 typedef void (*BlendType)(double, double&amp;, double, double);

Maybe that should return a double instead of taking a double&amp; for colorB?

Should be &quot;static const BlendType const&quot; so compilers know those jump locations aren&apos;t gonna change.
 108     BlendType callEffect[] = {unknown, normal, multiply, screen, darken, lighten};

In general this looks good though!  I think you should get oliver to review this, as his graphics expertise is far better than mine. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138593</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 21:41:45 -0700</bug_when>
    <thetext>CCing oliver on the off chance he hasn&apos;t seen this yet.  Looks good to me (with my above review comments), but he should take a look too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138612</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-09 23:41:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34430 [details])

&gt; Maybe that should return a double instead of taking a double&amp; for colorB?

I wanted to avoid a rewrite of values for more speed. The calculation of the new pixel-values happens during the interpretation of the current pixel value and this makes the effect slower but can not be avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138643</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-10 07:34:59 -0700</bug_when>
    <thetext>I have no strong preference the reference vs. the return.  That said, I think it&apos;s wrong to change how you would write your code for the compiler w/o testing.  Pre-mature optimization, as they say.

IMO, your first client should be other human readers when you&apos;re writing code. :)  I try to write as clear as possible for humans, only tweaking for the second client (the compiler) when the compiler is too dumb to do the right thing.  In this case, I would expect a 64-bit compiler to write smart code in either case.  But never having written a compiler, I tend to be blissfully naive about these things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138690</commentid>
    <comment_count>6</comment_count>
      <attachid>34478</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-10 09:30:45 -0700</bug_when>
    <thetext>Created attachment 34478
SVG Filter feBlend Implementation

Ok, I surrender and take return&apos;s :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138692</commentid>
    <comment_count>7</comment_count>
      <attachid>34478</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-10 09:32:47 -0700</bug_when>
    <thetext>Comment on attachment 34478
SVG Filter feBlend Implementation

Marking as text/plain patch file. (/me points at git-send-bugzilla or bugzilla-tool) :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138700</commentid>
    <comment_count>8</comment_count>
      <attachid>34478</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-10 09:43:09 -0700</bug_when>
    <thetext>Comment on attachment 34478
SVG Filter feBlend Implementation

Sorry, didn&apos;t mean for it to sound like something you&apos;d need to &quot;surrender&quot; to. :)

We tend to avoid using PassRefPtr on the stack, as it&apos;s error prone.  Instead we use a RefPtr and just call .release() when we need the PassRefPtr out of it.

I&apos;m not sure why grabbing the CanvasPixelArray out of in1/in2 wouldn&apos;t be a function:
102     // Get PixelArray of m_in2
 103     filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(), calculateDrawingRect(m_in2-&gt;subRegion()));
 104     imageData = resultImage()-&gt;getImageData(imageRect);
 105     PassRefPtr&lt;CanvasPixelArray&gt; srcPixelArrayB(imageData-&gt;data());

imageDataAsPixelArray(m_in2);

I&apos;m also not sure if you&apos;re intending to re-use the ImageData pointer from m_in2 during your calculations or not.  Is that intended?  I assume you&apos;re trying to avoid allocating a new buffer just to hold the result data?
 125             imageData-&gt;data()-&gt;set(pixelByteOffset + channel, result);
Can you just write directly to resultImage()?

In general this looks great though.

Why don&apos;t you need to clear the filterContext before drawing m_in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138706</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-10 10:15:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 34478 [details])
&gt; Sorry, didn&apos;t mean for it to sound like something you&apos;d need to &quot;surrender&quot; to.
&gt; :)
&gt; 
&gt; We tend to avoid using PassRefPtr on the stack, as it&apos;s error prone.  Instead
&gt; we use a RefPtr and just call .release() when we need the PassRefPtr out of it.
&gt; 
&gt; I&apos;m not sure why grabbing the CanvasPixelArray out of in1/in2 wouldn&apos;t be a
&gt; function:
&gt; 102     // Get PixelArray of m_in2
&gt;  103     filterContext-&gt;drawImage(m_in2-&gt;resultImage()-&gt;image(),
&gt; calculateDrawingRect(m_in2-&gt;subRegion()));
&gt;  104     imageData = resultImage()-&gt;getImageData(imageRect);
&gt;  105     PassRefPtr&lt;CanvasPixelArray&gt; srcPixelArrayB(imageData-&gt;data());
&gt; 
&gt; imageDataAsPixelArray(m_in2);
&gt; 
&gt; I&apos;m also not sure if you&apos;re intending to re-use the ImageData pointer from
&gt; m_in2 during your calculations or not.  Is that intended?  I assume you&apos;re
&gt; trying to avoid allocating a new buffer just to hold the result data?
&gt;  125             imageData-&gt;data()-&gt;set(pixelByteOffset + channel, result);

Yes, I try to avoid creating a new temporary ImageBuffer. Thats why I clear the context before creating the second PixelArray with the same context of resultImage.

&gt; Why don&apos;t you need to clear the filterContext before drawing m_in?
It&apos;s not needed to clear the context a second time, because we just need the context to get the Pixelarrays according to our current filterEffect-ImageBuffer (size, startingpoint etc.) and ovewrite everything with  imageData-&gt;data()-&gt;set(...). A second clear will coast more time, since most graphic librarys make use of composite operators to do it and this is slow, at least for cairo (and, like I explained before, it&apos;s not sensible). 

&gt; Can you just write directly to resultImage()?
As far as I know, pixel manipulation of ImageBuffers is just possible with the indirection of ImageData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139388</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:22:12 -0700</bug_when>
    <thetext>Why don&apos;t you need to call:
 100     filterContext-&gt;clearRect(FloatRect(FloatPoint(), resultImage()-&gt;size()));

before the first drawImage call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139408</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-12 10:38:33 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Why don&apos;t you need to call:
&gt;  100     filterContext-&gt;clearRect(FloatRect(FloatPoint(),
&gt; resultImage()-&gt;size()));
&gt; 
&gt; before the first drawImage call?

a new ImageBuffer should always be transparent black.Or am I wrong? Not sure, but it&apos;s the transparent black for cg, cairo, qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139412</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 10:41:28 -0700</bug_when>
    <thetext>I take it:
GraphicsContext* filterContext = getEffectContext();
is known to create a new image buffer?  That&apos;s not at all clear from the method naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139451</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-12 11:36:29 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I take it:
&gt; GraphicsContext* filterContext = getEffectContext();
&gt; is known to create a new image buffer?  That&apos;s not at all clear from the method
&gt; naming.

hm, right. We can rename it to getEffectContextFromNewImageBuffer() in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139540</commentid>
    <comment_count>14</comment_count>
      <attachid>34689</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-12 14:14:35 -0700</bug_when>
    <thetext>Created attachment 34689
SVG Filter feBlend Implementation

Many more optimizations. No doubles for colors (now unsigned char). No drawing operations on GraphicsContext. Pick up PixelArray directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140035</commentid>
    <comment_count>15</comment_count>
      <attachid>34689</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-13 14:28:00 -0700</bug_when>
    <thetext>Comment on attachment 34689
SVG Filter feBlend Implementation

You may as well add unchecked get functions to ByteArray, eg.
unsigned char ByteArray::get(int index) {
    ASSERT(index&lt;size);
    return data[index];
}

You also don&apos;t need to update CanvasPixelArray -- just the underlying bytearray implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140473</commentid>
    <comment_count>16</comment_count>
      <attachid>34901</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-15 11:39:52 -0700</bug_when>
    <thetext>Created attachment 34901
SVG Filter feBlend Implementation

I talked with olliej. I added a unsigned char setter and a getter that returns an unsigned char to ByteArray.h. It was necessary to add the callers to CanvasPixelArray too, since ImageData doesn&apos;t give a ByteArray, but a CanvasPixelArray back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140679</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-16 23:51:45 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=34901) [details]
&gt; SVG Filter feBlend Implementation

WebKit/gtk/po/pt_BR.po is not part of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141045</commentid>
    <comment_count>18</comment_count>
      <attachid>35025</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-18 00:21:51 -0700</bug_when>
    <thetext>Created attachment 35025
SVG Filter feBlend Implementation

Clean patch. I removed pt_BR.po.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141171</commentid>
    <comment_count>19</comment_count>
      <attachid>35063</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-18 12:45:57 -0700</bug_when>
    <thetext>Created attachment 35063
SVG Filter feBlend Implementation

fixed wrong ref counting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141244</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-18 14:38:29 -0700</bug_when>
    <thetext>landed in r47456.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34430</attachid>
            <date>2009-08-09 14:38:51 -0700</date>
            <delta_ts>2009-08-10 09:30:45 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend2.patch</filename>
            <type>text/plain</type>
            <size>6093</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njk2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDgtMDkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGZlQmxlbmQgaW1wbGVtZW50YXRpb24gbWlzc2luZworICAgICAgICBbaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMzXQorCisgICAgICAgIEltcGxlbWVu
dGF0aW9uIG9mIFNWRyBGaWx0ZXIgZmVCbGVuZC4KKworICAgICAgICBUaGVyZSBpcyBhbHJlYWR5
IGEgdGVzdCBjYXNlCisgICAgICAgIFRlc3Q6IHN2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLWJsZW5k
LTAxLWIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5rbm93bik6CisgICAgICAgIChXZWJDb3JlOjpub3Jt
YWwpOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRhcmtlbik6CisgICAgICAgIChXZWJDb3JlOjpsaWdo
dGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKwogMjAwOS0wOC0wOSAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDQ2OTU4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcgKzI1LDEyIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRkVCbGVuZC5oIgog
CisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCit0eXBl
ZGVmIHZvaWQgKCpCbGVuZFR5cGUpKGRvdWJsZSwgZG91YmxlJiwgZG91YmxlLCBkb3VibGUpOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDI4ICs0Nyw5MCBAQCBQYXNzUmVmUHRyPEZF
QmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShGaWx0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJs
ZW5kKGluLCBpbjIsIG1vZGUpKTsKIH0KIAotRmlsdGVyRWZmZWN0KiBGRUJsZW5kOjppbjIoKSBj
b25zdAordm9pZCB1bmtub3duKGRvdWJsZSwgZG91YmxlJiwgZG91YmxlLCBkb3VibGUpCiB7Ci0g
ICAgcmV0dXJuIG1faW4yLmdldCgpOwogfQogCi12b2lkIEZFQmxlbmQ6OnNldEluMihGaWx0ZXJF
ZmZlY3QqIGluMikKK3ZvaWQgbm9ybWFsKGRvdWJsZSBjb2xvckEsIGRvdWJsZSYgY29sb3JCLCBk
b3VibGUgYWxwaGFBLCBkb3VibGUpCiB7Ci0gICAgbV9pbjIgPSBpbjI7CisgICAgY29sb3JCID0g
KDEuIC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQTsKIH0KIAotQmxlbmRNb2RlVHlwZSBGRUJs
ZW5kOjpibGVuZE1vZGUoKSBjb25zdAordm9pZCBtdWx0aXBseShkb3VibGUgY29sb3JBLCBkb3Vi
bGUmIGNvbG9yQiwgZG91YmxlIGFscGhhQSwgZG91YmxlIGFscGhhQikKIHsKLSAgICByZXR1cm4g
bV9tb2RlOworICAgIGNvbG9yQiA9ICgxLiAtIGFscGhhQSkgKiBjb2xvckIgKyAoMS4gLSBhbHBo
YUIpICogY29sb3JBICsgY29sb3JBICogY29sb3JCOwogfQogCi12b2lkIEZFQmxlbmQ6OnNldEJs
ZW5kTW9kZShCbGVuZE1vZGVUeXBlIG1vZGUpCit2b2lkIHNjcmVlbihkb3VibGUgY29sb3JBLCBk
b3VibGUmIGNvbG9yQiwgZG91YmxlLCBkb3VibGUpCiB7Ci0gICAgbV9tb2RlID0gbW9kZTsKKyAg
ICBjb2xvckIgPSBjb2xvckIgKyBjb2xvckEgLSBjb2xvckEgKiBjb2xvckI7CiB9CiAKLXZvaWQg
RkVCbGVuZDo6YXBwbHkoRmlsdGVyKikKK3ZvaWQgZGFya2VuKGRvdWJsZSBjb2xvckEsIGRvdWJs
ZSYgY29sb3JCLCBkb3VibGUgYWxwaGFBLCBkb3VibGUgYWxwaGFCKQogeworICAgIGNvbG9yQiA9
IHN0ZDo6bWluKCgxLiAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEsICgxLiAtIGFscGhhQikg
KiBjb2xvckEgKyBjb2xvckIpOworfQorCit2b2lkIGxpZ2h0ZW4oZG91YmxlIGNvbG9yQSwgZG91
YmxlJiBjb2xvckIsIGRvdWJsZSBhbHBoYUEsIGRvdWJsZSBhbHBoYUIpCit7CisgICAgY29sb3JC
ID0gc3RkOjptYXgoKDEuIC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSwgKDEuIC0gYWxwaGFC
KSAqIGNvbG9yQSArIGNvbG9yQik7Cit9CisKK3ZvaWQgRkVCbGVuZDo6YXBwbHkoRmlsdGVyKiBm
aWx0ZXIpCit7CisgICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBtX2luMi0+YXBwbHkoZmls
dGVyKTsKKyAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkgfHwgIW1faW4yLT5yZXN1bHRJbWFn
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tb2RlID09IEZFQkxFTkRfTU9ERV9V
TktOT1dOKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNv
bnRleHQgPSBnZXRFZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZSgpLT5zaXplKCkpOworCisgICAgLy8gR2V0IFBpeGVsQXJyYXkgb2YgbV9pbgorICAgIGZp
bHRlckNvbnRleHQtPmRyYXdJbWFnZShtX2luLT5yZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChtX2luLT5zdWJSZWdpb24oKSkpOworICAgIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEocmVzdWx0SW1hZ2UoKS0+Z2V0SW1hZ2VEYXRhKGltYWdlUmVjdCkp
OworICAgIFBhc3NSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEoaW1hZ2VE
YXRhLT5kYXRhKCkpOworCisgICAgZmlsdGVyQ29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHJlc3VsdEltYWdlKCktPnNpemUoKSkpOworCisgICAgLy8gR2V0IFBpeGVs
QXJyYXkgb2YgbV9pbjIKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbjItPnJlc3Vs
dEltYWdlKCktPmltYWdlKCksIGNhbGN1bGF0ZURyYXdpbmdSZWN0KG1faW4yLT5zdWJSZWdpb24o
KSkpOworICAgIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlKCktPmdldEltYWdlRGF0YShpbWFnZVJl
Y3QpOworICAgIFBhc3NSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUIoaW1h
Z2VEYXRhLT5kYXRhKCkpOworCisgICAgLy8gS2VlcCBzeW5jaHJvbml6ZWQgd2l0aCBCbGVuZE1v
ZGVUeXBlCisgICAgQmxlbmRUeXBlIGNhbGxFZmZlY3RbXSA9IHt1bmtub3duLCBub3JtYWwsIG11
bHRpcGx5LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07CisKKyAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7ICsr
cGl4ZWxPZmZzZXQpIHsKKyAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gcGl4ZWxP
ZmZzZXQgKiA0OworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworICAgICAgICBzcmNQaXhl
bEFycmF5QS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGMpOworICAgICAgICBkb3VibGUgYWxw
aGFBID0gYyAvIDI1NS47CisgICAgICAgIHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMywgYyk7CisgICAgICAgIGRvdWJsZSBhbHBoYUIgPSBjIC8gMjU1LjsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFubmVsKSB7Cisg
ICAgICAgICAgICBzcmNQaXhlbEFycmF5QS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIGNoYW5uZWws
IGMpOworICAgICAgICAgICAgZG91YmxlIGNvbG9yQSA9IGM7CisgICAgICAgICAgICBzcmNQaXhl
bEFycmF5Qi0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIGNoYW5uZWwsIGMpOworICAgICAgICAgICAg
ZG91YmxlIGNvbG9yQiA9IGM7CisKKyAgICAgICAgICAgICgqY2FsbEVmZmVjdFttX21vZGVdKShj
b2xvckEsIGNvbG9yQiwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICAgICAgY29sb3JCID0gc3Rk
OjptYXgoMC4sc3RkOjptaW4oMjU1Lixjb2xvckIpKTsKKyAgICAgICAgICAgIGltYWdlRGF0YS0+
ZGF0YSgpLT5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgY2hhbm5lbCwgY29sb3JCKTsKKyAgICAgICAg
fQorICAgICAgICBhbHBoYUIgPSAoMS4gLSAoMS4gLSBhbHBoYUEpICogKDEuIC0gYWxwaGFCKSkg
KiAyNTUuOworICAgICAgICBhbHBoYUIgPSBzdGQ6Om1heCgwLixzdGQ6Om1pbigyNTUuLGFscGhh
QikpOworICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhQik7CisgICAgfQorCisgICAgcmVzdWx0SW1hZ2UoKS0+cHV0SW1hZ2VEYXRhKGltYWdl
RGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpk
dW1wKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aAkocmV2aXNpb24gNDY5NTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVCbGVuZD4gY3JlYXRlKEZpbHRlckVm
ZmVjdCosIEZpbHRlckVmZmVjdCosIEJsZW5kTW9kZVR5cGUpOwotICAgICAgICAKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbjIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJbjIoRmlsdGVyRWZm
ZWN0Kik7Ci0KLSAgICAgICAgQmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlVHlwZSk7CiAKICAgICAgICAgdmlydHVhbCBG
bG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0
dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdl
dCgpLCBtX2luMi5nZXQoKSk7IH0KICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34478</attachid>
            <date>2009-08-10 09:30:45 -0700</date>
            <delta_ts>2009-08-12 14:14:35 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend3.patch</filename>
            <type>text/plain</type>
            <size>6298</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njk2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDgtMDkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcg
RmlsdGVyIGZlQmxlbmQgaW1wbGVtZW50YXRpb24gbWlzc2luZworICAgICAgICBbaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMzXQorCisgICAgICAgIEltcGxlbWVu
dGF0aW9uIG9mIFNWRyBGaWx0ZXIgZmVCbGVuZC4KKworICAgICAgICBUaGVyZSBpcyBhbHJlYWR5
IGEgdGVzdCBjYXNlCisgICAgICAgIFRlc3Q6IHN2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLWJsZW5k
LTAxLWIuc3ZnCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5rbm93bik6CisgICAgICAgIChXZWJDb3JlOjpub3Jt
YWwpOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRhcmtlbik6CisgICAgICAgIChXZWJDb3JlOjpsaWdo
dGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKwogMjAwOS0wOC0wOSAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDQ2OTU4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcgKzI1LDEyIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5jbHVkZSAiRkVCbGVuZC5oIgog
CisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCit0eXBl
ZGVmIGRvdWJsZSAoKkJsZW5kVHlwZSkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNo
YXIgY29sb3JCLCBkb3VibGUgYWxwaGFBLCBkb3VibGUgYWxwaGFCKTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MSwyOCArNDcsODkgQEAgUGFzc1JlZlB0cjxGRUJsZW5kPiBGRUJsZW5k
OjpjcmVhdGUoRmlsdAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVCbGVuZChpbiwgaW4yLCBt
b2RlKSk7CiB9CiAKLUZpbHRlckVmZmVjdCogRkVCbGVuZDo6aW4yKCkgY29uc3QKK3N0YXRpYyBk
b3VibGUgdW5rbm93bih1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLCBkb3VibGUsIGRvdWJs
ZSkKIHsKLSAgICByZXR1cm4gbV9pbjIuZ2V0KCk7CiB9CiAKLXZvaWQgRkVCbGVuZDo6c2V0SW4y
KEZpbHRlckVmZmVjdCogaW4yKQorc3RhdGljIGRvdWJsZSBub3JtYWwodW5zaWduZWQgY2hhciBj
b2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCBkb3VibGUgYWxwaGFBLCBkb3VibGUpCiB7Ci0g
ICAgbV9pbjIgPSBpbjI7CisgICAgcmV0dXJuICgoMS4gLSBhbHBoYUEpICogY29sb3JCICsgY29s
b3JBKTsKIH0KIAotQmxlbmRNb2RlVHlwZSBGRUJsZW5kOjpibGVuZE1vZGUoKSBjb25zdAorc3Rh
dGljIGRvdWJsZSBtdWx0aXBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBj
b2xvckIsIGRvdWJsZSBhbHBoYUEsIGRvdWJsZSBhbHBoYUIpCiB7Ci0gICAgcmV0dXJuIG1fbW9k
ZTsKKyAgICByZXR1cm4gKCgxLiAtIGFscGhhQSkgKiBjb2xvckIgKyAoMS4gLSBhbHBoYUIpICog
Y29sb3JBICsgY29sb3JBICogY29sb3JCKTsKIH0KIAotdm9pZCBGRUJsZW5kOjpzZXRCbGVuZE1v
ZGUoQmxlbmRNb2RlVHlwZSBtb2RlKQorc3RhdGljIGRvdWJsZSBzY3JlZW4odW5zaWduZWQgY2hh
ciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCBkb3VibGUsIGRvdWJsZSkKIHsKLSAgICBt
X21vZGUgPSBtb2RlOworICAgIHJldHVybiAoY29sb3JCICsgY29sb3JBIC0gY29sb3JBICogY29s
b3JCKTsKIH0KIAotdm9pZCBGRUJsZW5kOjphcHBseShGaWx0ZXIqKQorc3RhdGljIGRvdWJsZSBk
YXJrZW4odW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCBkb3VibGUg
YWxwaGFBLCBkb3VibGUgYWxwaGFCKQogeworICAgIHJldHVybiAoc3RkOjptaW4oKDEuIC0gYWxw
aGFBKSAqIGNvbG9yQiArIGNvbG9yQSwgKDEuIC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQikp
OworfQorCitzdGF0aWMgZG91YmxlIGxpZ2h0ZW4odW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2ln
bmVkIGNoYXIgY29sb3JCLCBkb3VibGUgYWxwaGFBLCBkb3VibGUgYWxwaGFCKQoreworICAgIHJl
dHVybiAoc3RkOjptYXgoKDEuIC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSwgKDEuIC0gYWxw
aGFCKSAqIGNvbG9yQSArIGNvbG9yQikpOworfQorCit2b2lkIEZFQmxlbmQ6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQoreworICAgIG1faW4tPmFwcGx5KGZpbHRlcik7CisgICAgbV9pbjItPmFwcGx5
KGZpbHRlcik7CisgICAgaWYgKCFtX2luLT5yZXN1bHRJbWFnZSgpIHx8ICFtX2luMi0+cmVzdWx0
SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbW9kZSA9PSBGRUJMRU5EX01P
REVfVU5LTk9XTikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0
ZXJDb250ZXh0ID0gZ2V0RWZmZWN0Q29udGV4dCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKworICAgIC8vIEdldCBQaXhlbEFycmF5IG9mIG1faW4KKyAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2UobV9pbi0+cmVzdWx0SW1hZ2UoKS0+aW1hZ2UoKSwg
Y2FsY3VsYXRlRHJhd2luZ1JlY3QobV9pbi0+c3ViUmVnaW9uKCkpKTsKKyAgICBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gaW1hZ2VEYXRhKHJlc3VsdEltYWdlKCktPmdldEltYWdlRGF0YShpbWFnZVJl
Y3QpKTsKKyAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlBKGlt
YWdlRGF0YS0+ZGF0YSgpKTsKKworICAgIGZpbHRlckNvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpKTsKKworICAgIC8vIEdldCBQ
aXhlbEFycmF5IG9mIG1faW4yCisgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlKG1faW4yLT5y
ZXN1bHRJbWFnZSgpLT5pbWFnZSgpLCBjYWxjdWxhdGVEcmF3aW5nUmVjdChtX2luMi0+c3ViUmVn
aW9uKCkpKTsKKyAgICBpbWFnZURhdGEgPSByZXN1bHRJbWFnZSgpLT5nZXRJbWFnZURhdGEoaW1h
Z2VSZWN0KTsKKyAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlC
KGltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgIC8vIEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxl
bmRNb2RlVHlwZQorICAgIHN0YXRpYyBjb25zdCBCbGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vu
a25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNjcmVlbiwgZGFya2VuLCBsaWdodGVufTsKKworICAg
IGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHNyY1BpeGVsQXJy
YXlBLT5sZW5ndGgoKTsgKytwaXhlbE9mZnNldCkgeworICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5
dGVPZmZzZXQgPSBwaXhlbE9mZnNldCAqIDQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IDA7
CisgICAgICAgIHNyY1BpeGVsQXJyYXlBLT5nZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYyk7Cisg
ICAgICAgIGRvdWJsZSBhbHBoYUEgPSBjIC8gMjU1LjsKKyAgICAgICAgc3JjUGl4ZWxBcnJheUIt
PmdldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBjKTsKKyAgICAgICAgZG91YmxlIGFscGhhQiA9IGMg
LyAyNTUuOworCisgICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAz
OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sb3JBID0gMCwgY29s
b3JCID0gMDsKKyAgICAgICAgICAgIHNyY1BpeGVsQXJyYXlBLT5nZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgY2hhbm5lbCwgY29sb3JBKTsKKyAgICAgICAgICAgIHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgY2hhbm5lbCwgY29sb3JCKTsKKworICAgICAgICAgICAgZG91YmxlIHJl
c3VsdCA9ICgqY2FsbEVmZmVjdFttX21vZGVdKShjb2xvckEsIGNvbG9yQiwgYWxwaGFBLCBhbHBo
YUIpOworICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgoMC4sIHN0ZDo6bWluKDI1NS4sIHJl
c3VsdCkpOworICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyBjaGFubmVsLCByZXN1bHQpOworICAgICAgICB9CisgICAgICAgIGFscGhhQiA9ICgxLiAt
ICgxLiAtIGFscGhhQSkgKiAoMS4gLSBhbHBoYUIpKSAqIDI1NS47CisgICAgICAgIGFscGhhQiA9
IHN0ZDo6bWF4KDAuLCBzdGQ6Om1pbigyNTUuLCBhbHBoYUIpKTsKKyAgICAgICAgaW1hZ2VEYXRh
LT5kYXRhKCktPnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYUIpOworICAgIH0KKworICAg
IHJlc3VsdEltYWdlKCktPnB1dEltYWdlRGF0YShpbWFnZURhdGEuZ2V0KCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6ZHVtcCgpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgJKHJldmlzaW9uIDQ2OTU4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTIgKzQxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZFQmxl
bmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBC
bGVuZE1vZGVUeXBlKTsKLSAgICAgICAgCi0gICAgICAgIEZpbHRlckVmZmVjdCogaW4yKCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2V0SW4yKEZpbHRlckVmZmVjdCopOwotCi0gICAgICAgIEJsZW5k
TW9kZVR5cGUgYmxlbmRNb2RlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0QmxlbmRNb2RlKEJs
ZW5kTW9kZVR5cGUpOwogCiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHVuaXRlQ2hpbGRFZmZl
Y3RTdWJyZWdpb25zKEZpbHRlciogZmlsdGVyKSB7IHJldHVybiBjYWxjdWxhdGVVbmlvbk9mQ2hp
bGRFZmZlY3RTdWJyZWdpb25zKGZpbHRlciwgbV9pbi5nZXQoKSwgbV9pbjIuZ2V0KCkpOyB9CiAg
ICAgICAgIHZvaWQgYXBwbHkoRmlsdGVyKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34689</attachid>
            <date>2009-08-12 14:14:35 -0700</date>
            <delta_ts>2009-08-15 11:39:52 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend4.patch</filename>
            <type>text/plain</type>
            <size>10142</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTQ2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMTIgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBCeXRlQXJyYXkgY2FuIHRha2UgdW5zaWduZWQgY2hhciBkaXJlY3Rs
eSBub3cuIAorCisgICAgICAgICogd3RmL0J5dGVBcnJheS5oOgorICAgICAgICAoV1RGOjpCeXRl
QXJyYXk6OnNldCk6CisKIDIwMDktMDgtMTIgIEJhbGF6cyBLZWxlbWVuICA8a2VsZW1lbi5iYWxh
enMuM0BzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5
YXQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oCShyZXZpc2lvbiA0NzEwOSkKKysrIEphdmFT
Y3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTMg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBtX2RhdGFbaW5kZXhdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4odmFsdWUgKyAwLjUpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9p
ZCBzZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgbV9kYXRhW2luZGV4XSA9IHZhbHVlOworICAgICAgICB9CisKICAgICAgICAg
Ym9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXImIHJlc3VsdCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NzE0
NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMDktMDgtMTIgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcgRmlsdGVyIGZlQmxlbmQg
aW1wbGVtZW50YXRpb24gbWlzc2luZworICAgICAgICBbaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4MTMzXQorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIFNWRyBG
aWx0ZXIgZmVCbGVuZC4KKworICAgICAgICBGaWx0ZXJFZmZlY3QuY3AgbmVlZGVkIGNoYW5nZXMg
dG8gb3B0aW1pemUgdGhlIHJlbmRlcmluZy4gV2l0aCB0aGUgb2xkIGNvZGUKKyAgICAgICAgd2Ug
ZHJldyBhIHN1YkVmZmVjdCBvbiB0aGUgY3VycmVudCBGaWx0ZXJFZmZlY3QgYnkgZHJhd0ltYWdl
LCBnb3QgdGhlIFBpeGVsQXJyYXksCisgICAgICAgIGNsZWFyZWQgdGhlIGRyYXdpbmcgYXJlYSwg
ZHJldyB0aGUgbmV4dCBGaWx0ZXJFZmZlY3Qgd2l0aCBkcmF3SW1hZ2UgYW5kIHBpY2tlZCB0aGlz
CisgICAgICAgIFBpeGVsQXJyYXkgYWdhaW4uIFRoaXMgd2FzIHVuZWZmaWNpZW50IGFuZCBzbG93
LiBOb3cgd2UgY2FsY3VsYXRlIHRoZSByZXF1ZXN0ZWQgYXJlYQorICAgICAgICBvZiB0aGUgc3Vi
RWZmZWN0IGFuZCBhc2sgdGhlIEZpbHRlckVmZmVjdCdzIEltYWdlQnVmZmVyIGZvciB0aGUgUGl4
ZWxBcnJheSBkaXJlY3RseSwKKyAgICAgICAgd2l0aG91dCBhbnkgZHJhd2luZyBvcGVyYXRpb25z
IG9uIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICBUaGVyZSBpcyBhbHJlYWR5IGEgdGVzdCBj
YXNlCisgICAgICAgIFRlc3Q6IHN2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLWJsZW5kLTAxLWIuc3Zn
CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNQaXhlbEFycmF5OjpzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmtub3duKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vcm1hbCk6CisgICAgICAgIChXZWJDb3JlOjptdWx0aXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6ZGFya2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OmxpZ2h0ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisKIDIwMDkt
MDgtMTIgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Bp
eGVsQXJyYXkuaAkocmV2aXNpb24gNDcxMDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFs
dWUpOwogICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGNoYXIgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4
LCB2YWx1ZSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9u
IDQ3MTA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
ICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAg
ICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDEzIEBACiAjaWYgRU5BQkxFKEZJTFRFUlMpCiAjaW5j
bHVkZSAiRkVCbGVuZC5oIgogCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyICgqQmxlbmRUeXBlKSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xv
ckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyIGFscGhhQik7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMjggKzQ4LDgwIEBAIFBhc3NSZWZQdHI8RkVCbGVuZD4g
RkVCbGVuZDo6Y3JlYXRlKEZpbHQKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQmxlbmQoaW4s
IGluMiwgbW9kZSkpOwogfQogCi1GaWx0ZXJFZmZlY3QqIEZFQmxlbmQ6OmluMigpIGNvbnN0Citz
dGF0aWMgdW5zaWduZWQgY2hhciB1bmtub3duKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIs
IHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpCiB7Ci0gICAgcmV0dXJuIG1faW4yLmdldCgp
OworICAgIHJldHVybiAwOwogfQogCi12b2lkIEZFQmxlbmQ6OnNldEluMihGaWx0ZXJFZmZlY3Qq
IGluMikKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5vcm1hbCh1bnNpZ25lZCBjaGFyIGNvbG9yQSwg
dW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFy
KQogewotICAgIG1faW4yID0gaW4yOworICAgIHJldHVybiAoKCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1KSAvIDI1NSk7CiB9CiAKLUJsZW5kTW9kZVR5cGUgRkVCbGVuZDo6
YmxlbmRNb2RlKCkgY29uc3QKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG11bHRpcGx5KHVuc2lnbmVk
IGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEs
IHVuc2lnbmVkIGNoYXIgYWxwaGFCKQogewotICAgIHJldHVybiBtX21vZGU7CisgICAgcmV0dXJu
ICgoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyAoMjU1IC0gYWxwaGFCICsgY29sb3JCKSAqIGNv
bG9yQSkgLyAyNTUpOwogfQogCi12b2lkIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGVU
eXBlIG1vZGUpCitzdGF0aWMgdW5zaWduZWQgY2hhciBzY3JlZW4odW5zaWduZWQgY2hhciBjb2xv
ckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKQog
ewotICAgIG1fbW9kZSA9IG1vZGU7CisgICAgcmV0dXJuICgoKGNvbG9yQiArIGNvbG9yQSkgKiAy
NTUgLSBjb2xvckEgKiBjb2xvckIpIC8gMjU1KTsKIH0KIAotdm9pZCBGRUJsZW5kOjphcHBseShG
aWx0ZXIqKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgZGFya2VuKHVuc2lnbmVkIGNoYXIgY29sb3JB
LCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNo
YXIgYWxwaGFCKQogeworICAgIHJldHVybiAoKHN0ZDo6bWluKCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1
NSkpIC8gMjU1KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGlnaHRlbih1bnNpZ25lZCBj
aGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1
bnNpZ25lZCBjaGFyIGFscGhhQikKK3sKKyAgICByZXR1cm4gKChzdGQ6Om1heCgoMjU1IC0gYWxw
aGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBj
b2xvckIgKiAyNTUpKSAvIDI1NSk7Cit9CisKK3ZvaWQgRkVCbGVuZDo6YXBwbHkoRmlsdGVyKiBm
aWx0ZXIpCit7CisgICAgbV9pbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBtX2luMi0+YXBwbHkoZmls
dGVyKTsKKyAgICBpZiAoIW1faW4tPnJlc3VsdEltYWdlKCkgfHwgIW1faW4yLT5yZXN1bHRJbWFn
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tb2RlID09IEZFQkxFTkRfTU9ERV9V
TktOT1dOKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWdldEVmZmVjdENvbnRleHQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBtMURyYXdpbmdSZWN0ID0gY2FsY3VsYXRl
RHJhd2luZ0ludFJlY3QobV9pbi0+c3ViUmVnaW9uKCkpOworICAgIFBhc3NSZWZQdHI8Q2FudmFz
UGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEobV9pbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShtMURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKworICAgIEludFJlY3Qg
bTJEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4yLT5zdWJSZWdpb24o
KSk7CisgICAgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QihtX2lu
Mi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShtMkRyYXdpbmdSZWN0
KS0+ZGF0YSgpKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlKCktPnNpemUoKSk7CisgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKGltYWdlUmVjdC53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwor
CisgICAgLy8gS2VlcCBzeW5jaHJvbml6ZWQgd2l0aCBCbGVuZE1vZGVUeXBlCisgICAgc3RhdGlj
IGNvbnN0IEJsZW5kVHlwZSBjYWxsRWZmZWN0W10gPSB7dW5rbm93biwgbm9ybWFsLCBtdWx0aXBs
eSwgc2NyZWVuLCBkYXJrZW4sIGxpZ2h0ZW59OworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpOyArK3BpeGVs
T2Zmc2V0KSB7CisgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IHBpeGVsT2Zmc2V0
ICogNDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUEgPSAwLCBhbHBoYUIgPSAwOworICAg
ICAgICBzcmNQaXhlbEFycmF5QS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhQSk7Cisg
ICAgICAgIHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGFCKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFu
bmVsKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbG9yQSA9IDAsIGNvbG9yQiA9IDA7
CisgICAgICAgICAgICBzcmNQaXhlbEFycmF5QS0+Z2V0KHBpeGVsQnl0ZU9mZnNldCArIGNoYW5u
ZWwsIGNvbG9yQSk7CisgICAgICAgICAgICBzcmNQaXhlbEFycmF5Qi0+Z2V0KHBpeGVsQnl0ZU9m
ZnNldCArIGNoYW5uZWwsIGNvbG9yQik7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVz
dWx0ID0gKCpjYWxsRWZmZWN0W21fbW9kZV0pKGNvbG9yQSwgY29sb3JCLCBhbHBoYUEsIGFscGhh
Qik7CisgICAgICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+c2V0KHBpeGVsQnl0ZU9mZnNldCAr
IGNoYW5uZWwsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBo
YVIgPSAyNTUgLSAoKDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAyNTU7CisgICAg
ICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGFSKTsK
KyAgICB9CisKKyAgICByZXN1bHRJbWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUJsZW5k
OjpkdW1wKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaAkocmV2aXNpb24gNDcxMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAg
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVCbGVuZD4gY3JlYXRlKEZpbHRl
ckVmZmVjdCosIEZpbHRlckVmZmVjdCosIEJsZW5kTW9kZVR5cGUpOwotICAgICAgICAKLSAgICAg
ICAgRmlsdGVyRWZmZWN0KiBpbjIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJbjIoRmlsdGVy
RWZmZWN0Kik7Ci0KLSAgICAgICAgQmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlVHlwZSk7CiAKICAgICAgICAgdmlydHVh
bCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsg
cmV0dXJuIGNhbGN1bGF0ZVVuaW9uT2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2lu
LmdldCgpLCBtX2luMi5nZXQoKSk7IH0KICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCShyZXZpc2lvbiA0NzEwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBG
bG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVFZmZlY3RSCiAgICAgcmV0dXJuIHN1YlJl
Z2lvbigpOwogfQogCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQoreworICAgIEludFBvaW50IGxvY2F0aW9u
ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc3ViUmVnaW9uKCkueCgpIC0gZWZmZWN0UmVj
dC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1YlJlZ2lvbigpLnkoKSAtIGVmZmVjdFJlY3QueSgpKSk7CisgICAgcmV0dXJuIEludFJl
Y3QobG9jYXRpb24sIHJlc3VsdEltYWdlKCktPnNpemUoKSk7Cit9CisKIEZsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmNhbGN1bGF0ZURyYXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkK
IHsKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHNyY1JlY3QueCgpIC0g
c3ViUmVnaW9uKCkueCgpLCBzcmNSZWN0LnkoKSAtIHN1YlJlZ2lvbigpLnkoKSk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShy
ZXZpc2lvbiA0NzEwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBnZXRFZmZlY3RDb250ZXh0KCk7CiAg
ICAgICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICAgICAgSW50UmVjdCBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9u
cyhGaWx0ZXIqIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsgfQogICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciopOwo=
</data>
<flag name="review"
          id="18872"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34901</attachid>
            <date>2009-08-15 11:39:52 -0700</date>
            <delta_ts>2009-08-18 00:21:51 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend5.patch</filename>
            <type>text/plain</type>
            <size>19674</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MzIwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDgtMTUgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhZGRpdGlvbmFsIGdldHRlciB0byBCeXRlQXJyYXkgd2l0
aCBhbiB1bnNpZ25lZCBjaGFyIGFzIHJldHVybi4KKyAgICAgICAgQnl0ZUFycmF5IGNhbiB0YWtl
IHVuc2lnbmVkIGNoYXIgZGlyZWN0bHkgbm93LgorCisgICAgICAgICogd3RmL0J5dGVBcnJheS5o
OgorICAgICAgICAoV1RGOjpCeXRlQXJyYXk6OnNldCk6CisKIDIwMDktMDgtMTQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoYnVpbGQgZml4KS4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmgJKHJldmlzaW9u
IDQ3MzIwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIG1fZGF0YVtp
bmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWx1ZSArIDAuNSk7CiAgICAgICAg
IH0KIAorICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2RhdGFbaW5kZXhdID0gdmFsdWU7CisgICAg
ICAgIH0KKwogICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciYg
cmVzdWx0KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXpl
KQpAQCAtNTMsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIHVuc2lnbmVkIGNoYXIgZ2V0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUp
OworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF07CisgICAgICAgIH0KKwogICAgICAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAKICAgICAgICAgdm9p
ZCBkZXJlZigpCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gNDczMjApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDA5LTA4LTE1ICBEaXJrIFNjaHVsemUgIDxrcml0
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIEZpbHRlciBmZUJsZW5kIGltcGxlbWVudGF0aW9uIG1pc3NpbmcKKyAgICAgICAg
W2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzM10KKworICAgICAg
ICBJbXBsZW1lbnRhdGlvbiBvZiBTVkcgRmlsdGVyIGZlQmxlbmQuCisKKyAgICAgICAgRmlsdGVy
RWZmZWN0LmNwIG5lZWRlZCBjaGFuZ2VzIHRvIG9wdGltaXplIHRoZSByZW5kZXJpbmcuIFdpdGgg
dGhlIG9sZCBjb2RlCisgICAgICAgIHdlIGRyZXcgYSBzdWJFZmZlY3Qgb24gdGhlIGN1cnJlbnQg
RmlsdGVyRWZmZWN0IGJ5IGRyYXdJbWFnZSwgZ290IHRoZSBQaXhlbEFycmF5LAorICAgICAgICBj
bGVhcmVkIHRoZSBkcmF3aW5nIGFyZWEsIGRyZXcgdGhlIG5leHQgRmlsdGVyRWZmZWN0IHdpdGgg
ZHJhd0ltYWdlIGFuZCBwaWNrZWQgdGhpcworICAgICAgICBQaXhlbEFycmF5IGFnYWluLiBUaGlz
IHdhcyB1bmVmZmljaWVudCBhbmQgc2xvdy4gTm93IHdlIGNhbGN1bGF0ZSB0aGUgcmVxdWVzdGVk
IGFyZWEKKyAgICAgICAgb2YgdGhlIHN1YkVmZmVjdCBhbmQgYXNrIHRoZSBGaWx0ZXJFZmZlY3Qn
cyBJbWFnZUJ1ZmZlciBmb3IgdGhlIFBpeGVsQXJyYXkgZGlyZWN0bHksCisgICAgICAgIHdpdGhv
dXQgYW55IGRyYXdpbmcgb3BlcmF0aW9ucyBvbiBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAg
VGhlcmUgaXMgYWxyZWFkeSBhIHRlc3QgY2FzZQorICAgICAgICBUZXN0OiBzdmcvVzNDLVNWRy0x
LjEvZmlsdGVycy1ibGVuZC0wMS1iLnN2ZworCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGl4ZWxBcnJheTo6c2V0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dW5rbm93bik6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhcmtlbik6CisgICAgICAgIChXZWJDb3JlOjpsaWdodGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1
bGF0ZURyYXdpbmdJbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oOgorCiAyMDA5LTA4LTE1ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCShyZXZpc2lvbiA0NzMyMCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMiArNDgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAg
ICAgICAgICBtX2RhdGEtPnNldChpbmRleCwgdmFsdWUpOwogICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1
bHQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmdldChpbmRl
eCwgcmVzdWx0KTsKICAgICAgICAgfQogCisgICAgICAgIHVuc2lnbmVkIGNoYXIgZ2V0KHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5n
ZXQoaW5kZXgpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBDYW52YXNQaXhl
bEFycmF5KHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIFJlZlB0cjxXVEY6OkJ5dGVBcnJheT4g
bV9kYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAkocmV2aXNpb24gNDczMjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjUsMTMgQEAKICNpZiBFTkFC
TEUoRklMVEVSUykKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAKKyNpbmNsdWRlICJDYW52YXNQaXhl
bEFycmF5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCit0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgKCpCbGVuZFR5cGUpKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1
bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIg
YWxwaGFCKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSwyOCArNDgsNzggQEAgUGFz
c1JlZlB0cjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVCbGVuZChpbiwgaW4yLCBtb2RlKSk7CiB9CiAKLUZpbHRlckVmZmVjdCogRkVCbGVu
ZDo6aW4yKCkgY29uc3QKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHVua25vd24odW5zaWduZWQgY2hh
ciwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKIHsKLSAgICBy
ZXR1cm4gbV9pbjIuZ2V0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRkVCbGVuZDo6c2V0
SW4yKEZpbHRlckVmZmVjdCogaW4yKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgbm9ybWFsKHVuc2ln
bmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBo
YUEsIHVuc2lnbmVkIGNoYXIpCiB7Ci0gICAgbV9pbjIgPSBpbjI7CisgICAgcmV0dXJuICgoKDI1
NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUpIC8gMjU1KTsKIH0KIAotQmxlbmRN
b2RlVHlwZSBGRUJsZW5kOjpibGVuZE1vZGUoKSBjb25zdAorc3RhdGljIHVuc2lnbmVkIGNoYXIg
bXVsdGlwbHkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNp
Z25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCiB7Ci0gICAgcmV0dXJuIG1f
bW9kZTsKKyAgICByZXR1cm4gKCgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArICgyNTUgLSBhbHBo
YUIgKyBjb2xvckIpICogY29sb3JBKSAvIDI1NSk7CiB9CiAKLXZvaWQgRkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZVR5cGUgbW9kZSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNjcmVlbih1
bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIs
IHVuc2lnbmVkIGNoYXIpCiB7Ci0gICAgbV9tb2RlID0gbW9kZTsKKyAgICByZXR1cm4gKCgoY29s
b3JCICsgY29sb3JBKSAqIDI1NSAtIGNvbG9yQSAqIGNvbG9yQikgLyAyNTUpOwogfQogCi12b2lk
IEZFQmxlbmQ6OmFwcGx5KEZpbHRlciopCitzdGF0aWMgdW5zaWduZWQgY2hhciBkYXJrZW4odW5z
aWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFs
cGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCiB7CisgICAgcmV0dXJuICgoc3RkOjptaW4oKDI1
NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIpICogY29s
b3JBICsgY29sb3JCICogMjU1KSkgLyAyNTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBs
aWdodGVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWdu
ZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQoreworICAgIHJldHVybiAoKHN0
ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxw
aGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkpIC8gMjU1KTsKK30KKwordm9pZCBGRUJsZW5k
OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBtX2luLT5hcHBseShmaWx0ZXIpOworICAg
IG1faW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2UoKSB8fCAh
bV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX21vZGUg
PT0gRkVCTEVORF9NT0RFX1VOS05PV04pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ2V0
RWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IG0xRHJhd2lu
Z1JlY3QgPSBjYWxjdWxhdGVEcmF3aW5nSW50UmVjdChtX2luLT5zdWJSZWdpb24oKSk7CisgICAg
UGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QShtX2luLT5yZXN1bHRJ
bWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKG0xRHJhd2luZ1JlY3QpLT5kYXRhKCkp
OworCisgICAgSW50UmVjdCBtMkRyYXdpbmdSZWN0ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3Qo
bV9pbjItPnN1YlJlZ2lvbigpKTsKKyAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNy
Y1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFnZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKG0yRHJhd2luZ1JlY3QpLT5kYXRhKCkpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdl
UmVjdC5oZWlnaHQoKSk7CisKKyAgICAvLyBLZWVwIHN5bmNocm9uaXplZCB3aXRoIEJsZW5kTW9k
ZVR5cGUKKyAgICBzdGF0aWMgY29uc3QgQmxlbmRUeXBlIGNhbGxFZmZlY3RbXSA9IHt1bmtub3du
LCBub3JtYWwsIG11bHRpcGx5LCBzY3JlZW4sIGRhcmtlbiwgbGlnaHRlbn07CisKKyAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBzcmNQaXhlbEFycmF5QS0+
bGVuZ3RoKCk7ICsrcGl4ZWxPZmZzZXQpIHsKKyAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zm
c2V0ID0gcGl4ZWxPZmZzZXQgKiA0OworICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhQSA9IHNy
Y1BpeGVsQXJyYXlBLT5nZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWxwaGFCID0gc3JjUGl4ZWxBcnJheUItPmdldChwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFu
bmVsKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbG9yQSA9IHNyY1BpeGVsQXJyYXlB
LT5nZXQocGl4ZWxCeXRlT2Zmc2V0ICsgY2hhbm5lbCk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGNvbG9yQiA9IHNyY1BpeGVsQXJyYXlCLT5nZXQocGl4ZWxCeXRlT2Zmc2V0ICsgY2hhbm5l
bCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0ID0gKCpjYWxsRWZmZWN0W21f
bW9kZV0pKGNvbG9yQSwgY29sb3JCLCBhbHBoYUEsIGFscGhhQik7CisgICAgICAgICAgICBpbWFn
ZURhdGEtPmRhdGEoKS0+c2V0KHBpeGVsQnl0ZU9mZnNldCArIGNoYW5uZWwsIHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYVIgPSAyNTUgLSAoKDI1NSAtIGFs
cGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAyNTU7CisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgp
LT5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGFSKTsKKyAgICB9CisKKyAgICByZXN1bHRJ
bWFnZSgpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VS
ZWN0LCBJbnRQb2ludCgpKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpkdW1wKCkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkocmV2aXNpb24gNDczMjAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSwxMiArNDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogICAgIHB1YmxpYzoKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RkVCbGVuZD4gY3JlYXRlKEZpbHRlckVmZmVjdCosIEZpbHRlckVmZmVj
dCosIEJsZW5kTW9kZVR5cGUpOwotICAgICAgICAKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbjIo
KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRJbjIoRmlsdGVyRWZmZWN0Kik7Ci0KLSAgICAgICAg
QmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRCbGVuZE1v
ZGUoQmxlbmRNb2RlVHlwZSk7CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGls
ZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGNhbGN1bGF0ZVVuaW9u
T2ZDaGlsZEVmZmVjdFN1YnJlZ2lvbnMoZmlsdGVyLCBtX2luLmdldCgpLCBtX2luMi5nZXQoKSk7
IH0KICAgICAgICAgdm9pZCBhcHBseShGaWx0ZXIqKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA0NzMy
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0
OjpjYWxjdWxhdGVFZmZlY3RSCiAgICAgcmV0dXJuIHN1YlJlZ2lvbigpOwogfQogCitJbnRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBl
ZmZlY3RSZWN0KQoreworICAgIEludFBvaW50IGxvY2F0aW9uID0gcm91bmRlZEludFBvaW50KEZs
b2F0UG9pbnQoc3ViUmVnaW9uKCkueCgpIC0gZWZmZWN0UmVjdC54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlJlZ2lvbigpLnkoKSAt
IGVmZmVjdFJlY3QueSgpKSk7CisgICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIHJlc3VsdElt
YWdlKCktPnNpemUoKSk7Cit9CisKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZURy
YXdpbmdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKIHsKICAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHNyY1JlY3QueCgpIC0gc3ViUmVnaW9uKCkueCgpLCBzcmNS
ZWN0LnkoKSAtIHN1YlJlZ2lvbigpLnkoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiA0NzMyMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzcsNiArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBnZXRFZmZlY3RDb250ZXh0KCk7CiAgICAgICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgSW50UmVjdCBjYWxj
dWxhdGVEcmF3aW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCB1bml0ZUNoaWxkRWZmZWN0U3VicmVnaW9ucyhGaWx0ZXIqIGZpbHRlcikgeyBy
ZXR1cm4gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsgfQogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBjYWxjdWxhdGVFZmZlY3RSZWN0KEZpbHRlciopOwpJbmRleDogV2ViS2l0L2d0ay9wby9wdF9C
Ui5wbwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3BvL3B0X0JSLnBvCShyZXZpc2lvbiA0NzMy
MCkKKysrIFdlYktpdC9ndGsvcG8vcHRfQlIucG8JKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3
IEBAIG1zZ2lkICIiCiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IHdlYmtpdCAxLjEu
NFxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVncy53ZWJraXQub3JnL1xuIgot
IlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA0LTIzIDE1OjU3LTAzMDBcbiIKKyJQT1QtQ3JlYXRp
b24tRGF0ZTogMjAwOS0wNC0wOSAxOTowOS0wMzAwXG4iCiAiUE8tUmV2aXNpb24tRGF0ZTogMjAw
OS0wNC0xNSAyMTozOS0wMzAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+XG4iCiAiTGFuZ3VhZ2UtVGVh
bTogQnJhemlsaWFuIFBvcnR1Z3Vlc2VcbiIKQEAgLTE0LDcgKzE0LDcgQEAgbXNnc3RyICIiCiAi
Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJh
bHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCiAKLSM6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50R3RrLmNwcDo0NTQKKyM6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcDo0MjUKIG1zZ2lkICJVcGxvYWQgRmlsZSIKIG1zZ3N0ciAiRW52aWFy
IEFycXVpdm8iCiAKQEAgLTY4LDYzICs2OCw2MyBAQCBtc2dzdHIgIlpXTkogX07Do28tdW5pw6Nv
IGRlIGxhcmd1cmEgemVyCiBtc2dpZCAiX0luc2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVy
IgogbXNnc3RyICJfSW5zZXJpciBjYXJhY3RlcmUgZGUgY29udHJvbGUgVW5pY29kZSIKIAotIzog
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjI1NAorIzogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjI1MAogbXNnaWQgIk5ldHdvcmsgUmVxdWVzdCIKIG1z
Z3N0ciAiUmVxdWlzacOnw6NvIGRlIFJlZGUiCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRvd25sb2FkLmNwcDoyNTUKKyM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNw
cDoyNTEKIG1zZ2lkICJUaGUgbmV0d29yayByZXF1ZXN0IGZvciB0aGUgVVJJIHRoYXQgc2hvdWxk
IGJlIGRvd25sb2FkZWQiCiBtc2dzdHIgIkEgcmVxdWlzacOnw6NvIGRlIHJlZGUgcGFyYSBhIFVS
SSBxdWUgZGV2ZSBzZXIgYmFpeGFkYSIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93
bmxvYWQuY3BwOjI2OQorIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjI2
NQogbXNnaWQgIkRlc3RpbmF0aW9uIFVSSSIKIG1zZ3N0ciAiVVJJIGRlIERlc3Rpbm8iCiAKLSM6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoyNzAKKyM6IFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoyNjYKIG1zZ2lkICJUaGUgZGVzdGluYXRpb24gVVJJ
IHdoZXJlIHRvIHNhdmUgdGhlIGZpbGUiCiBtc2dzdHIgIkEgVVJJIGRlIGRlc3Rpbm8sIG9uZGUg
ZGV2ZSBzZXIgc2Fsdm8gbyBhcnF1aXZvIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5jcHA6Mjg0CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6
MjgwCiBtc2dpZCAiU3VnZ2VzdGVkIEZpbGVuYW1lIgogbXNnc3RyICJOb21lIGRlIEFycXVpdm8g
U3VnZXJpZG8iCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoyODUK
KyM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoyODEKIG1zZ2lkICJUaGUg
ZmlsZW5hbWUgc3VnZ2VzdGVkIGFzIGRlZmF1bHQgd2hlbiBzYXZpbmciCiBtc2dzdHIgIk8gbm9t
ZSBkZSBhcnF1aXZvIHF1ZSBkZXZlIHNlciB1c2FkbyBjb21vIHBhZHLDo28gYW8gc2FsdmFyIgog
Ci0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6Mjk4CisjOiBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6Mjk0CiBtc2dpZCAiUHJvZ3Jlc3MiCiBtc2dz
dHIgIlByb2dyZXNzbyIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3Bw
OjI5OQorIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjI5NQogbXNnaWQg
IkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkIgogbXNnc3Ry
ICJEZXRlcm1pbmEgbyBwcm9ncmVzc28gYXR1YWwgZG8gZG93bmxvYWQiCiAKLSM6IFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDozMTIKKyM6IFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmNwcDozMDgKIG1zZ2lkICJTdGF0dXMiCiBtc2dzdHIgIkVzdGFkbyIKIAot
IzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjMxMworIzogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwOjMwOQogbXNnaWQgIkRldGVybWluZXMgdGhlIGN1
cnJlbnQgc3RhdHVzIG9mIHRoZSBkb3dubG9hZCIKIG1zZ3N0ciAiRGV0ZXJtaW5hIG8gZXN0YWRv
IGF0dWFsIGRvIGRvd25sb2FkIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9h
ZC5jcHA6MzI4CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6MzI0CiBt
c2dpZCAiQ3VycmVudCBTaXplIgogbXNnc3RyICJUYW1hbmhvIEF0dWFsIgogCi0jOiBXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6MzI5CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkb3dubG9hZC5jcHA6MzI1CiBtc2dpZCAiVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBhbHJl
YWR5IGRvd25sb2FkZWQiCiBtc2dzdHIgIkEgcXVhbnRpZGFkZSBkZSBkYWRvcyBqw6EgYmFpeGFk
b3MiCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDozNDMKKyM6IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDozMzkKIG1zZ2lkICJUb3RhbCBTaXpl
IgogbXNnc3RyICJUYW1hbmhvIHRvdGFsIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRk
b3dubG9hZC5jcHA6MzQ0CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6
MzQwCiBtc2dpZCAiVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUiCiBtc2dzdHIgIk8gdGFtYW5o
byB0b3RhbCBkbyBhcnF1aXZvIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9h
ZC5jcHA6NDczCisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHA6NDY5CiBt
c2dpZCAiVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2FkIgogbXNnc3RyICJVc3XDoXJpbyBjYW5j
ZWxvdSBvIGRvd25sb2FkIgogCkBAIC0xNDUsMzEgKzE0NSwzMSBAQCBtc2dzdHIgIlNlbmhhOiIK
IG1zZ2lkICJSZW1lbWJlciBwYXNzd29yZCIKIG1zZ3N0ciAiTGVtYnJhciBzZW5oYSIKIAotIzog
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOjIxMgorIzogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOjIxMQogbXNnaWQgIk5hbWUiCiBtc2dzdHIgIk5vbWUi
CiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoyMTMKKyM6IFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoyMTIKIG1zZ2lkICJUaGUgbmFtZSBvZiB0
aGUgZnJhbWUiCiBtc2dzdHIgIk8gbm9tZSBkbyBxdWFkcm8iCiAKLSM6IFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoyMTkKKyM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmZyYW1lLmNwcDoyMTgKICM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVt
LmNwcDoxNTQKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3NDUKKyM6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3MTUKIG1zZ2lkICJUaXRsZSIK
IG1zZ3N0ciAiVMOtdHVsbyIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUu
Y3BwOjIyMAorIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOjIxOQogbXNn
aWQgIlRoZSBkb2N1bWVudCB0aXRsZSBvZiB0aGUgZnJhbWUiCiBtc2dzdHIgIk8gdMOtdHVsbyBk
byBkb2N1bWVudG8gZG8gcXVhZHJvIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHA6MjI2CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6MjI1
CiAjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHA6MTg2Ci0jOiBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxNzU5CisjOiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxNzI5CiBtc2dpZCAiVVJJIgogbXNnc3RyICJVUkkiCiAK
LSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoyMjcKKyM6IFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoyMjYKIG1zZ2lkICJUaGUgY3VycmVudCBVUkkg
b2YgdGhlIGNvbnRlbnRzIGRpc3BsYXllZCBieSB0aGUgZnJhbWUiCiBtc2dzdHIgIkEgVVJJIGF0
dWFsIGRvIGNvbnRlw7pkbyBxdWUgZXN0w6Egc2VuZG8gZXhpYmlkbyBwZWxvIHF1YWRybyIKIApA
QCAtNDM0LDk1ICs0MzQsOTUgQEAgbXNnc3RyICJIYWJpbGl0YXIgTmF2ZWdhw6fDo28gUHJpdmF0
aXZhIgogbXNnaWQgIkVuYWJsZXMgcHJpdmF0ZSBicm93c2luZyBtb2RlIgogbXNnc3RyICJIYWJp
bGl0YSBvIG1vZG8gZGUgbmF2ZWdhw6fDo28gcHJpdmF0aXZhIgogCi0jOiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxNzQ2CisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoxNzE2CiBtc2dpZCAiUmV0dXJucyB0aGUgQHdlYl92aWV3J3MgZG9jdW1lbnQg
dGl0bGUiCiBtc2dzdHIgIlJldG9ybmEgbyB0w610dWxvIGRhIHZpc8OjbyB3ZWIiCiAKLSM6IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3NjAKKyM6IFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3MzAKIG1zZ2lkICJSZXR1cm5zIHRoZSBjdXJyZW50IFVS
SSBvZiB0aGUgY29udGVudHMgZGlzcGxheWVkIGJ5IHRoZSBAd2ViX3ZpZXciCiBtc2dzdHIgIlJl
dG9ybmEgYSBVUkkgZG8gY29udGXDumRvIGF0dWFsbWVudGUgZXhpYmlkbyBwZWxhIHZpc8OjbyB3
ZWIiCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3NzMKKyM6IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3NDMKIG1zZ2lkICJDb3B5IHRhcmdl
dCBsaXN0IgogbXNnc3RyICJMaXN0YSBkZSBhbHZvcyBkZSBjw7NwaWEiCiAKLSM6IFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3NzQKKyM6IFdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwOjE3NDQKIG1zZ2lkICJUaGUgbGlzdCBvZiB0YXJnZXRzIHRoaXMgd2Vi
IHZpZXcgc3VwcG9ydHMgZm9yIGNsaXBib2FyZCBjb3B5aW5nIgogbXNnc3RyICIiCiAiQSBsaXN0
YSBkZSBhbHZvcyBxdWUgZXNzYSB2aXPDo28gd2ViIHN1cG9ydGEgcGFyYSBjw7NwaWEgcGFyYSDD
oXJlYSBkZSAiCiAidHJhbnNmZXLDqm5jaWEiCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwOjE3ODcKKyM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OjE3NTcKIG1zZ2lkICJQYXN0ZSB0YXJnZXQgbGlzdCIKIG1zZ3N0ciAiTGlzdGEgZGUgYWx2b3Mg
ZGUgY29sYSIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTc4OAor
IzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTc1OAogbXNnaWQgIlRoZSBs
aXN0IG9mIHRhcmdldHMgdGhpcyB3ZWIgdmlldyBzdXBwb3J0cyBmb3IgY2xpcGJvYXJkIHBhc3Rp
bmciCiBtc2dzdHIgIiIKICJBIGxpc3RhIGRlIGFsdm9zIHF1ZSBlc3NhIHZpc8OjbyB3ZWIgc3Vw
b3J0YSBwYXJhIGNvbGEgZGEgw6FyZWEgZGUgIgogInRyYW5zZmVyw6puY2lhIgogCi0jOiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxNzk0CisjOiBXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcDoxNzY0CiBtc2dpZCAiU2V0dGluZ3MiCiBtc2dzdHIgIkNvbmZp
Z3VyYcOnw7VlcyIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTc5
NQorIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTc2NQogbXNnaWQgIkFu
IGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIlVtYSBpbnN0
w6JuY2lhIGRlIFdlYktpdFdlYlNldHRpbmdzIGFzc29jaWFkYSIKIAotIzogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTgwOAorIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHA6MTc3OAogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIkluc3BldG9y
IFdlYiIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTgwOQorIzog
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTc3OQogbXNnaWQgIlRoZSBhc3Nv
Y2lhdGVkIFdlYktpdFdlYkluc3BlY3RvciBpbnN0YW5jZSIKIG1zZ3N0ciAiQSBpbnN0w6JuY2lh
IGRlIFdlYktpdFdlYkluc3BlY3RvciBxdWUgZXN0w6EgYXNzb2NpYWRhIGEgZXNzYSB2aXPDo28i
CiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4MjkKKyM6IFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE3OTkKIG1zZ2lkICJFZGl0YWJsZSIKIG1z
Z3N0ciAiRWRpdMOhdmVsIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cDoxODMwCisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxODAwCiBtc2dp
ZCAiV2hldGhlciBjb250ZW50IGNhbiBiZSBtb2RpZmllZCBieSB0aGUgdXNlciIKIG1zZ3N0ciAi
U2UgbyBjb250ZcO6ZG8gcG9kZSBzZXIgbW9kaWZpY2FkbyBwZWxvIHVzdcOhcmlvIgogCi0jOiBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxODM2CisjOiBXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxODA2CiBtc2dpZCAiVHJhbnNwYXJlbnQiCiBtc2dzdHIg
IlRyYW5zcGFyZW50ZSIKIAotIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6
MTgzNworIzogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MTgwNwogbXNnaWQg
IldoZXRoZXIgY29udGVudCBoYXMgYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIgogbXNnc3RyICJT
ZSBvIGNvbnRlw7pkbyB0ZW0gdW0gZnVuZG8gdHJhbnNwYXJlbnRlIgogCi0jOiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoxODUwCisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoxODIwCiBtc2dpZCAiWm9vbSBsZXZlbCIKIG1zZ3N0ciAiTsOtdmVsIGRl
IFpvb20iCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4NTEKKyM6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4MjEKIG1zZ2lkICJUaGUgbGV2
ZWwgb2Ygem9vbSBvZiB0aGUgY29udGVudCIKIG1zZ3N0ciAiTyBuw612ZWwgZGUgem9vbSBkbyBj
b250ZcO6ZG8iCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4NjYK
KyM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4MzYKIG1zZ2lkICJGdWxs
IGNvbnRlbnQgem9vbSIKIG1zZ3N0ciAiWm9vbSBDb21wbGV0byBkbyBDb250ZcO6ZG8iCiAKLSM6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4NjcKKyM6IFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4MzcKIG1zZ2lkICJXaGV0aGVyIHRoZSBmdWxsIGNv
bnRlbnQgaXMgc2NhbGVkIHdoZW4gem9vbWluZyIKIG1zZ3N0ciAiU2UgdG9kbyBvIGNvbnRlw7pk
byDDqSByZWRpbWVuc2lvbmFkbyBubyB6b29tIgogCi0jOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoxODgwCisjOiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cDoxODUwCiBtc2dpZCAiRW5jb2RpbmciCiBtc2dzdHIgIkNvZGlmaWNhw6fDo28iCiAKLSM6IFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4ODEKKyM6IFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4NTEKIG1zZ2lkICJUaGUgZGVmYXVsdCBlbmNvZGluZyBv
ZiB0aGUgd2ViIHZpZXciCiBtc2dzdHIgIkEgY29kaWZpY2HDp8OjbyBwYWRyw6NvIGRhIHZpc8Oj
byB3ZWIiCiAKLSM6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4OTQKKyM6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4NjQKIG1zZ2lkICJDdXN0b20g
RW5jb2RpbmciCiBtc2dzdHIgIkNvZGlmaWNhw6fDo28gQ3VzdG9taXphZGEiCiAKLSM6IFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjE4OTUKKyM6IFdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwOjE4NjUKIG1zZ2lkICJUaGUgY3VzdG9tIGVuY29kaW5nIG9mIHRo
ZSB3ZWIgdmlldyIKIG1zZ3N0ciAiQSBjb2RpZmljYcOnw6NvIGN1c3RvbWl6YWRhIGRhIHZpc8Oj
byB3ZWIiCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35025</attachid>
            <date>2009-08-18 00:21:51 -0700</date>
            <delta_ts>2009-08-18 12:45:57 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend6.patch</filename>
            <type>text/plain</type>
            <size>10272</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NDE5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDgtMTggIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhZGRpdGlvbmFsIGdldHRlciB0byBCeXRlQXJyYXkgd2l0
aCBhbiB1bnNpZ25lZCBjaGFyIGFzIHJldHVybi4KKyAgICAgICAgQnl0ZUFycmF5IGNhbiB0YWtl
IHVuc2lnbmVkIGNoYXIgZGlyZWN0bHkgbm93LgorCisgICAgICAgICogd3RmL0J5dGVBcnJheS5o
OgorICAgICAgICAoV1RGOjpCeXRlQXJyYXk6OnNldCk6CisgICAgICAgIChXVEY6OkJ5dGVBcnJh
eTo6Z2V0KToKKwogMjAwOS0wOC0xNyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93
dGYvQnl0ZUFycmF5LmgJKHJldmlzaW9uIDQ3MzIwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0J5
dGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgICAgIG1fZGF0YVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Pih2YWx1ZSArIDAuNSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2Rh
dGFbaW5kZXhdID0gdmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGdldCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgY2hhciYgcmVzdWx0KSBjb25zdAogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQpAQCAtNTMsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIHVuc2ln
bmVkIGNoYXIgZ2V0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRl
eF07CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgeyByZXR1cm4g
bV9kYXRhOyB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDc0MTkpCisrKyBX
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDA5LTA4
LTE4ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU1ZHIEZpbHRlciBmZUJsZW5kIGltcGxlbWVu
dGF0aW9uIG1pc3NpbmcKKyAgICAgICAgW2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yODEzM10KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiBTVkcgRmlsdGVyIGZl
QmxlbmQuCisKKyAgICAgICAgRmlsdGVyRWZmZWN0LmNwIG5lZWRlZCBjaGFuZ2VzIHRvIG9wdGlt
aXplIHRoZSByZW5kZXJpbmcuIFdpdGggdGhlIG9sZCBjb2RlCisgICAgICAgIHdlIGRyZXcgYSBz
dWJFZmZlY3Qgb24gdGhlIGN1cnJlbnQgRmlsdGVyRWZmZWN0IGJ5IGRyYXdJbWFnZSwgZ290IHRo
ZSBQaXhlbEFycmF5LAorICAgICAgICBjbGVhcmVkIHRoZSBkcmF3aW5nIGFyZWEsIGRyZXcgdGhl
IG5leHQgRmlsdGVyRWZmZWN0IHdpdGggZHJhd0ltYWdlIGFuZCBwaWNrZWQgdGhpcworICAgICAg
ICBQaXhlbEFycmF5IGFnYWluLiBUaGlzIHdhcyB1bmVmZmljaWVudCBhbmQgc2xvdy4gTm93IHdl
IGNhbGN1bGF0ZSB0aGUgcmVxdWVzdGVkIGFyZWEKKyAgICAgICAgb2YgdGhlIHN1YkVmZmVjdCBh
bmQgYXNrIHRoZSBGaWx0ZXJFZmZlY3QncyBJbWFnZUJ1ZmZlciBmb3IgdGhlIFBpeGVsQXJyYXkg
ZGlyZWN0bHksCisgICAgICAgIHdpdGhvdXQgYW55IGRyYXdpbmcgb3BlcmF0aW9ucyBvbiBHcmFw
aGljc0NvbnRleHQuCisKKyAgICAgICAgVGhlcmUgaXMgYWxyZWFkeSBhIHRlc3QgY2FzZQorICAg
ICAgICBUZXN0OiBzdmcvVzNDLVNWRy0xLjEvZmlsdGVycy1ibGVuZC0wMS1iLnN2ZworCisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUGl4ZWxBcnJheTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJy
YXk6OmdldCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnVua25vd24pOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFs
KToKKyAgICAgICAgKFdlYkNvcmU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVl
bik6CisgICAgICAgIChXZWJDb3JlOjpkYXJrZW4pOgorICAgICAgICAoV2ViQ29yZTo6bGlnaHRl
bik6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpjYWxjdWxhdGVEcmF3aW5nSW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKwogMjAwOS0wOC0xNyAgU2hpbmljaGlybyBIYW1h
amkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9u
IDQ3MzIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEyICs0OCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CiAgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNo
YXImIHJlc3VsdCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+
Z2V0KGluZGV4LCByZXN1bHQpOwogICAgICAgICB9CiAKKyAgICAgICAgdW5zaWduZWQgY2hhciBn
ZXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2RhdGEtPmdldChpbmRleCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIENh
bnZhc1BpeGVsQXJyYXkodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgUmVmUHRyPFdURjo6Qnl0
ZUFycmF5PiBtX2RhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lvbiA0NzMyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNSwxMyBAQAog
I2lmIEVOQUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAorI2luY2x1ZGUgIkNh
bnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKkJsZW5kVHlwZSkodW5zaWduZWQgY2hhciBj
b2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWdu
ZWQgY2hhciBhbHBoYUIpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDggKzY4LDc3
IEBAIHZvaWQgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZVR5cGUKICAgICBtX21vZGUg
PSBtb2RlOwogfQogCi12b2lkIEZFQmxlbmQ6OmFwcGx5KEZpbHRlciopCitzdGF0aWMgdW5zaWdu
ZWQgY2hhciB1bmtub3duKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNo
YXIsIHVuc2lnbmVkIGNoYXIpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBjaGFyIG5vcm1hbCh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIs
IHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyKQoreworICAgIHJldHVybiAoKCgy
NTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1KSAvIDI1NSk7Cit9CisKK3N0YXRp
YyB1bnNpZ25lZCBjaGFyIG11bHRpcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBj
aGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQor
eworICAgIHJldHVybiAoKCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1NSAtIGFscGhhQiAr
IGNvbG9yQikgKiBjb2xvckEpIC8gMjU1KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Ny
ZWVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQg
Y2hhciwgdW5zaWduZWQgY2hhcikKK3sKKyAgICByZXR1cm4gKCgoY29sb3JCICsgY29sb3JBKSAq
IDI1NSAtIGNvbG9yQSAqIGNvbG9yQikgLyAyNTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hh
ciBkYXJrZW4odW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNp
Z25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCit7CisgICAgcmV0dXJuICgo
c3RkOjptaW4oKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBh
bHBoYUIpICogY29sb3JBICsgY29sb3JCICogMjU1KSkgLyAyNTUpOworfQorCitzdGF0aWMgdW5z
aWduZWQgY2hhciBsaWdodGVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNv
bG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQogeworICAg
IHJldHVybiAoKHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1
LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkpIC8gMjU1KTsKK30KKwor
dm9pZCBGRUJsZW5kOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBtX2luLT5hcHBseShm
aWx0ZXIpOworICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghbV9pbi0+cmVzdWx0
SW1hZ2UoKSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX21vZGUgPT0gRkVCTEVORF9NT0RFX1VOS05PV04pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghZ2V0RWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnN1
YlJlZ2lvbigpKTsKKyAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJy
YXlBKG1faW4tPnJlc3VsdEltYWdlKCktPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
QURyYXdpbmdSZWN0KS0+ZGF0YSgpKTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0
ID0gY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QobV9pbjItPnN1YlJlZ2lvbigpKTsKKyAgICBQYXNz
UmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IHNyY1BpeGVsQXJyYXlCKG1faW4yLT5yZXN1bHRJbWFn
ZSgpLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdEJEcmF3aW5nUmVjdCktPmRhdGEo
KSk7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZSgpLT5z
aXplKCkpOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbWFnZVJlY3Qud2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIC8v
IEtlZXAgc3luY2hyb25pemVkIHdpdGggQmxlbmRNb2RlVHlwZQorICAgIHN0YXRpYyBjb25zdCBC
bGVuZFR5cGUgY2FsbEVmZmVjdFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNjcmVl
biwgZGFya2VuLCBsaWdodGVufTsKKworICAgIEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3Ro
KCkgPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7IHBpeGVs
T2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUEgPSBzcmNQaXhlbEFy
cmF5QS0+Z2V0KHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFC
ID0gc3JjUGl4ZWxBcnJheUItPmdldChwaXhlbE9mZnNldCArIDMpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFubmVsKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGNvbG9yQSA9IHNyY1BpeGVsQXJyYXlBLT5nZXQocGl4ZWxPZmZzZXQg
KyBjaGFubmVsKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sb3JCID0gc3JjUGl4ZWxB
cnJheUItPmdldChwaXhlbE9mZnNldCArIGNoYW5uZWwpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIHJlc3VsdCA9ICgqY2FsbEVmZmVjdFttX21vZGVdKShjb2xvckEsIGNvbG9yQiwgYWxw
aGFBLCBhbHBoYUIpOworICAgICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChwaXhlbE9m
ZnNldCArIGNoYW5uZWwsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgY2hh
ciBhbHBoYVIgPSAyNTUgLSAoKDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAyNTU7
CisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBoYVIp
OworICAgIH0KKworICAgIHJlc3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEo
aW1hZ2VEYXRhLmdldCgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQmxl
bmQ6OmR1bXAoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5oCShyZXZpc2lvbiA0NzMyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQmxlbmQ+IGNyZWF0ZShGaWx0
ZXJFZmZlY3QqLCBGaWx0ZXJFZmZlY3QqLCBCbGVuZE1vZGVUeXBlKTsKLSAgICAgICAgCisKICAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbjIoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRJbjIoRmls
dGVyRWZmZWN0Kik7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA0NzMyMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSwxMyBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVFZmZlY3RS
CiAgICAgcmV0dXJuIHN1YlJlZ2lvbigpOwogfQogCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2Fs
Y3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQoreworICAg
IEludFBvaW50IGxvY2F0aW9uID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc3ViUmVnaW9u
KCkueCgpIC0gZWZmZWN0UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdWJSZWdpb24oKS55KCkgLSBlZmZlY3RSZWN0LnkoKSkpOwor
ICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOworfQor
CiBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QpCiB7CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2lu
dChzcmNSZWN0LngoKSAtIHN1YlJlZ2lvbigpLngoKSwgc3JjUmVjdC55KCkgLSBzdWJSZWdpb24o
KS55KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gNDczMjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ2V0RWZm
ZWN0Q29udGV4dCgpOwogICAgICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlRHJhd2luZ1JlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgICAgIEludFJlY3QgY2FsY3VsYXRlRHJhd2luZ0ludFJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGls
ZEVmZmVjdFN1YnJlZ2lvbnMoRmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci0+ZmlsdGVy
UmVnaW9uKCk7IH0KICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVj
dChGaWx0ZXIqKTsK
</data>
<flag name="review"
          id="19211"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35063</attachid>
            <date>2009-08-18 12:45:57 -0700</date>
            <delta_ts>2009-08-18 14:01:53 -0700</delta_ts>
            <desc>SVG Filter feBlend Implementation</desc>
            <filename>feBlend7.patch</filename>
            <type>text/plain</type>
            <size>10254</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NDE5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDgtMTggIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVu
dC4KKworICAgICAgICBBZGRlZCBhZGRpdGlvbmFsIGdldHRlciB0byBCeXRlQXJyYXkgd2l0aCBh
biB1bnNpZ25lZCBjaGFyIGFzIHJldHVybi4KKyAgICAgICAgQnl0ZUFycmF5IGNhbiB0YWtlIHVu
c2lnbmVkIGNoYXIgZGlyZWN0bHkgbm93LgorCisgICAgICAgICogd3RmL0J5dGVBcnJheS5oOgor
ICAgICAgICAoV1RGOjpCeXRlQXJyYXk6OnNldCk6CisgICAgICAgIChXVEY6OkJ5dGVBcnJheTo6
Z2V0KToKKwogMjAwOS0wOC0xNyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9CeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYv
Qnl0ZUFycmF5LmgJKHJldmlzaW9uIDQ3MzIwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgICAgIG1fZGF0YVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2
YWx1ZSArIDAuNSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRl
eCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4
ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2RhdGFb
aW5kZXhdID0gdmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGdldCh1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgY2hhciYgcmVzdWx0KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zaXplKQpAQCAtNTMsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIHVuc2lnbmVk
IGNoYXIgZ2V0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YVtpbmRleF07
CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbV9k
YXRhOyB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDc0MTkpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDA5LTA4LTE4
ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCisKKyAgICAgICAgU1ZHIEZpbHRlciBmZUJsZW5kIGltcGxlbWVudGF0aW9u
IG1pc3NpbmcKKyAgICAgICAgW2h0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yODEzM10KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiBTVkcgRmlsdGVyIGZlQmxlbmQu
CisKKyAgICAgICAgRmlsdGVyRWZmZWN0LmNwIG5lZWRlZCBjaGFuZ2VzIHRvIG9wdGltaXplIHRo
ZSByZW5kZXJpbmcuIFdpdGggdGhlIG9sZCBjb2RlCisgICAgICAgIHdlIGRyZXcgYSBzdWJFZmZl
Y3Qgb24gdGhlIGN1cnJlbnQgRmlsdGVyRWZmZWN0IGJ5IGRyYXdJbWFnZSwgZ290IHRoZSBQaXhl
bEFycmF5LAorICAgICAgICBjbGVhcmVkIHRoZSBkcmF3aW5nIGFyZWEsIGRyZXcgdGhlIG5leHQg
RmlsdGVyRWZmZWN0IHdpdGggZHJhd0ltYWdlIGFuZCBwaWNrZWQgdGhpcworICAgICAgICBQaXhl
bEFycmF5IGFnYWluLiBUaGlzIHdhcyB1bmVmZmljaWVudCBhbmQgc2xvdy4gTm93IHdlIGNhbGN1
bGF0ZSB0aGUgcmVxdWVzdGVkIGFyZWEKKyAgICAgICAgb2YgdGhlIHN1YkVmZmVjdCBhbmQgYXNr
IHRoZSBGaWx0ZXJFZmZlY3QncyBJbWFnZUJ1ZmZlciBmb3IgdGhlIFBpeGVsQXJyYXkgZGlyZWN0
bHksCisgICAgICAgIHdpdGhvdXQgYW55IGRyYXdpbmcgb3BlcmF0aW9ucyBvbiBHcmFwaGljc0Nv
bnRleHQuCisKKyAgICAgICAgVGhlcmUgaXMgYWxyZWFkeSBhIHRlc3QgY2FzZQorICAgICAgICBU
ZXN0OiBzdmcvVzNDLVNWRy0xLjEvZmlsdGVycy1ibGVuZC0wMS1iLnN2ZworCisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UGl4ZWxBcnJheTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1BpeGVsQXJyYXk6Omdl
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnVua25vd24pOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXJrZW4pOgorICAgICAgICAoV2ViQ29yZTo6bGlnaHRlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVEcmF3aW5nSW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaDoKKwogMjAwOS0wOC0xNyAgU2hpbmljaGlybyBIYW1hamkgIDxo
YW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHJldmlzaW9uIDQ3MzIw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDEyICs0OCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7CiAgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9kYXRhLT5zZXQoaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXImIHJl
c3VsdCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Z2V0KGlu
ZGV4LCByZXN1bHQpOwogICAgICAgICB9CiAKKyAgICAgICAgdW5zaWduZWQgY2hhciBnZXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEt
PmdldChpbmRleCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIENhbnZhc1Bp
eGVsQXJyYXkodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgUmVmUHRyPFdURjo6Qnl0ZUFycmF5
PiBtX2RhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCShyZXZpc2lvbiA0NzMyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNSwxMyBAQAogI2lmIEVO
QUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAorI2luY2x1ZGUgIkNhbnZhc1Bp
eGVsQXJyYXkuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisK
K3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKkJsZW5kVHlwZSkodW5zaWduZWQgY2hhciBjb2xvckEs
IHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hh
ciBhbHBoYUIpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDggKzY4LDc3IEBAIHZv
aWQgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZVR5cGUKICAgICBtX21vZGUgPSBtb2Rl
OwogfQogCi12b2lkIEZFQmxlbmQ6OmFwcGx5KEZpbHRlciopCitzdGF0aWMgdW5zaWduZWQgY2hh
ciB1bmtub3duKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVu
c2lnbmVkIGNoYXIpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFy
IG5vcm1hbCh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2ln
bmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyKQoreworICAgIHJldHVybiAoKCgyNTUgLSBh
bHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1KSAvIDI1NSk7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBjaGFyIG11bHRpcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNv
bG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQoreworICAg
IHJldHVybiAoKCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1NSAtIGFscGhhQiArIGNvbG9y
QikgKiBjb2xvckEpIC8gMjU1KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2NyZWVuKHVu
c2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciwg
dW5zaWduZWQgY2hhcikKK3sKKyAgICByZXR1cm4gKCgoY29sb3JCICsgY29sb3JBKSAqIDI1NSAt
IGNvbG9yQSAqIGNvbG9yQikgLyAyNTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBkYXJr
ZW4odW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBj
aGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCit7CisgICAgcmV0dXJuICgoc3RkOjpt
aW4oKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIp
ICogY29sb3JBICsgY29sb3JCICogMjU1KSkgLyAyNTUpOworfQorCitzdGF0aWMgdW5zaWduZWQg
Y2hhciBsaWdodGVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwg
dW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQogeworICAgIHJldHVy
biAoKHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1LCAoMjU1
IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkpIC8gMjU1KTsKK30KKwordm9pZCBG
RUJsZW5kOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBtX2luLT5hcHBseShmaWx0ZXIp
OworICAgIG1faW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlmICghbV9pbi0+cmVzdWx0SW1hZ2Uo
KSB8fCAhbV9pbjItPnJlc3VsdEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X21vZGUgPT0gRkVCTEVORF9NT0RFX1VOS05PV04pCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghZ2V0RWZmZWN0Q29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IGNhbGN1bGF0ZURyYXdpbmdJbnRSZWN0KG1faW4tPnN1YlJlZ2lv
bigpKTsKKyAgICBSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gc3JjUGl4ZWxBcnJheUEobV9pbi0+
cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RBRHJhd2luZ1Jl
Y3QpLT5kYXRhKCkpOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBjYWxjdWxh
dGVEcmF3aW5nSW50UmVjdChtX2luMi0+c3ViUmVnaW9uKCkpOworICAgIFJlZlB0cjxDYW52YXNQ
aXhlbEFycmF5PiBzcmNQaXhlbEFycmF5QihtX2luMi0+cmVzdWx0SW1hZ2UoKS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShlZmZlY3RCRHJhd2luZ1JlY3QpLT5kYXRhKCkpOworCisgICAgSW50
UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UoKS0+c2l6ZSgpKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZVJlY3Qu
d2lkdGgoKSwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIC8vIEtlZXAgc3luY2hyb25pemVk
IHdpdGggQmxlbmRNb2RlVHlwZQorICAgIHN0YXRpYyBjb25zdCBCbGVuZFR5cGUgY2FsbEVmZmVj
dFtdID0ge3Vua25vd24sIG5vcm1hbCwgbXVsdGlwbHksIHNjcmVlbiwgZGFya2VuLCBsaWdodGVu
fTsKKworICAgIEFTU0VSVChzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCkgPT0gc3JjUGl4ZWxBcnJh
eUItPmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxP
ZmZzZXQgPCBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUEgPSBzcmNQaXhlbEFycmF5QS0+Z2V0KHBpeGVsT2Zm
c2V0ICsgMyk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFCID0gc3JjUGl4ZWxBcnJheUIt
PmdldChwaXhlbE9mZnNldCArIDMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAw
OyBjaGFubmVsIDwgMzsgKytjaGFubmVsKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNv
bG9yQSA9IHNyY1BpeGVsQXJyYXlBLT5nZXQocGl4ZWxPZmZzZXQgKyBjaGFubmVsKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgY29sb3JCID0gc3JjUGl4ZWxBcnJheUItPmdldChwaXhlbE9m
ZnNldCArIGNoYW5uZWwpOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlc3VsdCA9ICgq
Y2FsbEVmZmVjdFttX21vZGVdKShjb2xvckEsIGNvbG9yQiwgYWxwaGFBLCBhbHBoYUIpOworICAg
ICAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCktPnNldChwaXhlbE9mZnNldCArIGNoYW5uZWwsIHJl
c3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYVIgPSAyNTUgLSAo
KDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSkgLyAyNTU7CisgICAgICAgIGltYWdlRGF0
YS0+ZGF0YSgpLT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBoYVIpOworICAgIH0KKworICAgIHJl
c3VsdEltYWdlKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhLmdldCgpLCBp
bWFnZVJlY3QsIEludFBvaW50KCkpOwogfQogCiB2b2lkIEZFQmxlbmQ6OmR1bXAoKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCShyZXZpc2lvbiA0
NzMyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXJFZmZlY3QqLCBGaWx0ZXJF
ZmZlY3QqLCBCbGVuZE1vZGVUeXBlKTsKLSAgICAgICAgCisKICAgICAgICAgRmlsdGVyRWZmZWN0
KiBpbjIoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRJbjIoRmlsdGVyRWZmZWN0Kik7CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCShyZXZpc2lvbiA0NzMyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBG
bG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVFZmZlY3RSCiAgICAgcmV0dXJuIHN1YlJl
Z2lvbigpOwogfQogCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlRHJhd2luZ0ludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQoreworICAgIEludFBvaW50IGxvY2F0aW9u
ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoc3ViUmVnaW9uKCkueCgpIC0gZWZmZWN0UmVj
dC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJSZWdpb24oKS55KCkgLSBlZmZlY3RSZWN0LnkoKSkpOworICAgIHJldHVybiBJbnRSZWN0
KGxvY2F0aW9uLCByZXN1bHRJbWFnZSgpLT5zaXplKCkpOworfQorCiBGbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpjYWxjdWxhdGVEcmF3aW5nUmVjdChjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCiB7
CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gRmxvYXRQb2ludChzcmNSZWN0LngoKSAtIHN1
YlJlZ2lvbigpLngoKSwgc3JjUmVjdC55KCkgLSBzdWJSZWdpb24oKS55KCkpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2
aXNpb24gNDczMjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ2V0RWZmZWN0Q29udGV4dCgpOwogICAg
ICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlRHJhd2luZ1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Cisg
ICAgICAgIEludFJlY3QgY2FsY3VsYXRlRHJhd2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CiAKICAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgdW5pdGVDaGlsZEVmZmVjdFN1YnJlZ2lvbnMo
RmlsdGVyKiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7IH0KICAgICAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlRWZmZWN0UmVjdChGaWx0ZXIqKTsK
</data>
<flag name="review"
          id="19253"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>