Title: [126084] trunk
Revision
126084
Author
k...@webkit.org
Date
2012-08-20 16:07:21 -0700 (Mon, 20 Aug 2012)

Log Message

CSS Masking and CSS Filters applied in wrong order
https://bugs.webkit.org/show_bug.cgi?id=94354

Reviewed by Dean Jackson.

Source/WebCore:

According to the Filter Effects spec, the order should be first filters, then masking and clipping.
Changed the order on applying the different effects in RenderLayer.

Test: css3/filters/filter-mask-clip-order.html

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintLayerContents): First filter, then mask and clip the content.

LayoutTests:

The test checks the correct order on applying CSS Masking, Filter Effects and CSS Clipping.
According to the Filter Effects spec, the order should be first filters, then masking and clipping.

* css3/filters/filter-mask-clip-order-expected.html: Added.
* css3/filters/filter-mask-clip-order.html: Added.
* css3/filters/resources/mask.png: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (126083 => 126084)


--- trunk/LayoutTests/ChangeLog	2012-08-20 22:42:35 UTC (rev 126083)
+++ trunk/LayoutTests/ChangeLog	2012-08-20 23:07:21 UTC (rev 126084)
@@ -1,3 +1,17 @@
+2012-08-20  Dirk Schulze  <k...@webkit.org>
+
+        CSS Masking and CSS Filters applied in wrong order
+        https://bugs.webkit.org/show_bug.cgi?id=94354
+
+        Reviewed by Dean Jackson.
+
+        The test checks the correct order on applying CSS Masking, Filter Effects and CSS Clipping.
+        According to the Filter Effects spec, the order should be first filters, then masking and clipping.
+
+        * css3/filters/filter-mask-clip-order-expected.html: Added.
+        * css3/filters/filter-mask-clip-order.html: Added.
+        * css3/filters/resources/mask.png: Added.
+
 2012-08-20  Adam Klein  <ad...@chromium.org>
 
         Remove redundant TOUCH_LISTENER event type

Added: trunk/LayoutTests/css3/filters/filter-mask-clip-order-expected.html (0 => 126084)


--- trunk/LayoutTests/css3/filters/filter-mask-clip-order-expected.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/filter-mask-clip-order-expected.html	2012-08-20 23:07:21 UTC (rev 126084)
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+</head>
+<body>
+</body>
+</html>
\ No newline at end of file

Added: trunk/LayoutTests/css3/filters/filter-mask-clip-order.html (0 => 126084)


--- trunk/LayoutTests/css3/filters/filter-mask-clip-order.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/filter-mask-clip-order.html	2012-08-20 23:07:21 UTC (rev 126084)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <script>
+
+    </script>
+    <style>
+        /*  'mask-image-slice' without 'fill' clips inner content area away.
+            'clip' clips evyerthing outside of rect() away.
+            If filter wouldn't be applyed first in the chain, you either see
+            blured background in the 'fill' area, or outsite the 'clip' area. */
+        div {
+            width: 350px;
+            height: 350px;
+            background-color: red;
+            position: absolute;
+          	-webkit-mask-box-image-slice: 75;
+          	-webkit-mask-box-image-repeat: stretch;
+          	-webkit-mask-box-image-source: url(resources/mask.png);
+            clip: rect(76px, 274px, 274px, 76px);
+          	-webkit-filter: blur(20px);
+        }
+    </style>
+</head>
+<body>
+<div></div>
+</body>
+</html>
\ No newline at end of file

Added: trunk/LayoutTests/css3/filters/resources/mask.png (0 => 126084)


--- trunk/LayoutTests/css3/filters/resources/mask.png	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/resources/mask.png	2012-08-20 23:07:21 UTC (rev 126084)
@@ -0,0 +1,80 @@
+\x89PNG
+
+
+IHDR\xA5\xA3\xEBr\xDE\xC7KiCCPICC Profilex\x9C\x95Wy4\xD5\xDD\xD7\xDF\xDF{\xAF{\x8D\xD7<O\xD7%\x99\xC7W2\xCF"\xE1\xBA\xE6\xB9{\xCD!\xF1\xA4\xCCC4Ȑ\xA9\x90")\x89
+IR\xC64H\xA2\x92T\xC8\x99\xC2}\xFF\xA0\x9Ew\xBD\xCF\xFA\xAD\xDFz\xF7g}\xCE\xE7\xEC}\xF6\xE7\xECs\xD6:k\xB0\x91BCQF\xB19\xA0O8\xE4\xE4L\xC0\xBD40'\x80\x89D\xA6\x86\xEAYY\x99\xC1\xB4\xA5\x97\x80<\x97'\x85\x86\x9Bt	\xC0\xE5,\xB9p̟6\xF8\xCFq\x80\xA7rr@\xE4\x80\xCBg\xEF.\x8F-l\\x91a\xA1a\x88/p\x91}I\x9EH,\xC8Q\xECl\x90*\xC0\xFBl\xE1;\x80\xF7\xD8\xC2\xDD\x80\x8F \xFB\x84 \xAF\xB0\xC1\x9E~\xC1\xB8\xAC\x8E\xA7\x95\x80\x97OO*9\x9F
+\x80\xD2	
+
+\xF1`\x80\x9D\xE4PJ\xDB
+Hrr&lIv\x8FPg\xA0k\xFD\x87\xA1Ի\xA5\xFC\xC3IM\xF0\xD4ԏ\xFF\xC3-\xD8O?\xD5{\x9F" \xCC\xFAt\xEFh\xB4)\.\xC0F\x8D\xF6\xAB\x8CF\xDB(@\xBFh$\x87S"\xB6\xEB\x85 \xBD\xFFm\xBEu\xE6mC#(?x\x83\xB8!\xEB\xA8\xF4(\xFB\x9C\xFE9\x93\xC3V\xC2)\xCA\xCC[\xCA_"'\xAC+2A\xA0\x8A\xD1$b%I\x85KO\xC9\xD8\xCBv\xC8\xC9\xC8g\xEF^U\xF0\xD8\xFB|\x9F\xB1R\xBB\x8A\xAAj\xB1چ\x86\x83\xE6e\xADye݈\xFDMzkچI\xC4N\xA3c\xF1\x83\xA6&\xFE\xA6'\xCD
+\xCD\xEB-:-G\xAC\xE6m\x98le\xECl\xECcjG\x9D\x9D\x95;\xB9P\x8F$\xB8\x9EtKp\xA7\x92r=Z\xC9߼\x84\xBD\xED|N\xFBv\xF8\xAD\xEC	\xF4\xCA
+\xAE	9\xEAsԐ\xB2\x8B*\xC6\xCE\xC1)\xB53zO\x8C\xD21\xADX\x83\xB8\xF1F\xC7\xF5\xD4N\xC8&
+&1'\xAD\xFF5w\xF2C\xF2\xCBSON7\xA7\N\xCDN\x8BN'e\x98f\xAAe\xED\xCC\xCCa˥\xCB]<3\x9Eם_{6\xEB\\xD0y\xD3\xBB
+\x98\xE6/\xBE*\xBC_T\QbzI\xE4\xD2\iKYr\xB9M\x85h\xC5\e\xDB\xE5\xDC+aU\x87\xAB\x895{\xAF
+\xD7\xE2j\xE7\xAE
+^\xBFZ[O\xBC\xC1y\xE3{\xC3ۛ}\x8D\xED\xB7\xEEޮk\xAA\xBCSМv\xF7X\x8Bg\xAB\xEE=\xBA{\xCD\xF7\xA9\x94\xAC\xB7=m/\xEFHx\xE8ީ\xF7H\xBC\xDD\xF5\xF1qWw\xF9\x93\xD8\xEB\xA7O<k\xEDM\xEE\xB3\xE8\xE7\xE97P9\xE83$=\xF4\xF9y\xF9\xB0\xEB\x81/^潲{\xCD\xFBzl\xA4\xFC
+yTl\xF4\xDD\xDB\xFC1\xF3w\x98w-\xE3a
+\xDF\xDF7|\xA0~T\xFC\xF8}\xF2\xF2'\xE7)橻\x9F}\xA7y\xA6;\xBF\x84\x95\xFE:\xF6\xADp\xC6n=[0\xB7c\xAE\xF4;\xDF\xF7\xE4\xEF\xAB\xF3\x85{\xFC .0/d-\xB2/\xA6\xFFd\xFC\x99\xBF$\xBB\xF4r\xB9z\xE5\xFA\xEA\xE6\xBA;\x8D\xBC`W~\xA4\xE5\x87v\xC2\xC4Ӎ\xE2R\xE2\x98\xEE\xE0ي9\xB9\x83xS\xF9\x8F\x8D\x88h\x8A\xE6>\x8AkI\\x90\\x97r\x92n\x95\x91\x92\xCDص []a\xC7޿'\x94t\x94sT>\xAA)\xA9Gi\xB4h.j\xCB\xE9\xD6M\xDBߤ\xF7\xCEcH \xEE7r8\xE0os0\xD9$\xCB\xF4\xBCY\x89y\x85E\x95e\xB5\xD5U\xEB\x9BG\xB6cv?\xB0\x8E|\x87v:\xEDs\xD69|\xC0\xC5򈃫\xAB\xD9=\x98\xE1q\x82\x9C\xEDY\xE2U\xE7\xFDЧ\xCF\xF7\xB1_\xA3I@J`X\x90G\xB0U\x88N\xA8\xFCQ
+M]\x9B\x9F\x8A\x8F|\xF5:\xFAU\xCC\xF0\xB1\xDEؖ\xB8\xA2\xF8\x98\xE3\xCE	\xDA'$\x99\x93\xC6\xFFzv\xB29\xB9\xF2T\xD6\xE9\x98\x9FT\xCB4\xD5t\xA1tZ\xC6Df[VqvjNp\xAE\xC3\xCD<\xD1|\xC8?{\xEF\xDC\xF9\xF3G/\x88,\|T\x98_\xE4]\xAC\\x82*\xE9\xBFTRz\xB4̾\\xBBbG%\xBEr\xE9\xF2ؕ\x87UU\xD5\xE95\xA1W\xEDjծ	^[\xBF\xFE\xAE\xEEA}ٍ\xC4ϛ\xC4F\x89Ƶ[Oo_h
+\xBC\xA3\xDB\xCC\xD9\xFC\xE5n{KQk\xCC=\xA7\xFBD\xDA\xD0m_\xDA{;\xEE<,\xEE<\xFD\x88\xDA\xE5\xFCX\xBD\x9B\xB5\xFB㓦\x9E3OC\x9E\x99\xF7\xCA\xF5\xB1\xF4\xCD\xF5\xD4
+f\xF9<\xD7\xE6\x9E|Q\xF72\xF2\x95\xE6\xAB\xF5\xD7#\xD7\xDE\x8C\x9Ez{t\xCC\xF1\x9D\xE6\xB8\xC0\xF8\xE2D\xFF\xFB\xF2ԏ\xBA\x93\x93C\x9F\xCEN9}\xFA<6]\xF4\xC5\xE5\xAB\xD8\xD7\xC5oOfrg\xE7\xE6^}ϛ\xB7\xFC\xF7w\xE7\x8Fz\x8B\x98š\x9F5KY\xCB\xC9+\xF9\xABO~Yl\xD1h\x80 \xC3XE\xC8\xC8[\xD4I\xB4+&\x8An\x97\xC1Ȥ\xC1<\x87Oeca\xE4h\xE1\xDC\xE0\x96\xE11\xE3
+\xE0;Ɵ(\x90,\x98!tV\xB8L\xE4\x9Ah3\xE1\xA1\xD8S\xF1~\x89Aɞ\xADR5\xD2\xF9;ceH\xB2\xC4]\xB2r\xECr\xBF\xE4?\xEF\xDEs_\xA1do\xB4\xA2\xF5>\xF1}sJM\xCA\xC7U\x8CT\x99T\x87\xD5Jԃ5\x88\x9AbZ(\xADO\xDA\xDD:5\xBA\xA7\xF6\xBB\xEB)\xE8-\xEB\xDF18fhCT59@`\xC1x\xFC\xE03\x93;\xA6\x97̒\xCD},-\xBEXfX\xED\xB3zo}\xD6\xC6ʖ\xCBvԮ\xC2>\xD8A\xD5\x9F*p\xF2vVp^:|\xD7\xE5\xD8\xED#\x9B\xAE\xEDn'\xDD\xCDH\x9C\xA4\x8F"\xB2\xAB\xA7\x90\xE7\x88\xD7Yo\x9Fa\xDFs~G\xFC	\xFE\xE3\x85\x81\x8EA\xACA]\xC1\xF1!\xAA!?B\xEB\x8F\xA5\xA8PV\xA8\xB7\xC3B\xC3%\xC3_E$G*F\x8EE\x9D\x8EV\x8A\xFE\x93{\x8C\x8B\x8D폻\xEF\3\x81)a\xE4Dy\xA2w\x92Xҫ\xBFRN:%+\x9Cb95s\xBA/\xE5Fj^ZT\xBAc\x86r&k\xE6묌l\xC9\xEC{9\xAE\xB9\xB8\xDC\xC63\xFEy\x92y\xEF\xF3/\x9Du;'zn\xF2|\xEDj\x81j\xC1\xEA\xC5\xE6\xC2\xC8"\xE5\xA2\xC5\xE2ƒ\xF0K\xEA\x976K\x95\xA5\x95[W\xF0T\x8CV\x96^\xF6\xBB\xA2R\x85\xADzS\xDDP\x93yտ\xD6\xF0\x9Aȵ\xE5\xEB\xCF\xEB\xEA\xEB\xB3oD5x\xDEtl\xB4\xBCe|[\xA7i\xEFB3c\xF3\xFC\xDD\xE1\x96ۭ\x85\xF7\xEE\xFB<\xB0i\xD3kW\xEBPz\xA8ԩ\xF2H\xBDK\xE3\xB1Z\xB7\xE2\xA9\xAE\x9E\xB5\xA7\xBD\xF2}\xD5\xC6C\xF8a\x96\x97\xE4\x9E\xB7\xBE\xA7?u\xCD|^\x8E\xA3\xD1\xB6\xFE>\xAC
+\xC0\xB9/\x87\xAD\xEC.d:HWp\xBBX\xB1ة\xCAe'\xA0\xC4B\xF9\xF3\x80؀\x87(\x87F\xE8\x84\xE7\xF0\xE6aaF9D\xB1@ܑ0\xE44R\x8C4"ϐ)
+%\x8A\xD2A\xB9\xA1QU\xA8~\xD4
+Zm\x89\x8EE_E\x8FbX0z\x98L-f\x92N\x84Ή.\x8Fnˊ5Ǧa{p8\:n\x90\x9E\x9F\x9EL_G\xBF\xC9`\xC9Pΰ\xCAh\xCDx\x95\x89\x8E\x89\xC4t\x9FY\x909\x86y\x8Cň\xA5O\xC0\x9Fae`Md\xA5\xB1űm\xB0\xC7s\xC7	N4\xE7	.\x84+\x81\xB8y\xE8x\xD2y\xF9x\xAB\xF9\xF4\xF9>\xF0\xA7
+h\xBC\xF4\\xCA\xBE)b,2*J\xC0JŴ\xC5\xC6\xC4$,$\xD5v\xECX\x94z,\x9D\xBF\xD3UFJfN\xB6i\xD7I9{yI\xF9\xA5ݽ{\xAA\xD2\xF6\x86)z\xEC\xB3U2R\xD6T٭*\xA9&\xA8Χ!\xA0)\xAE%\xAF\xAD\xA9sP\xD7n\xBF\xAB\x9E\x8F~\xB0A\x9Ca>\xF1\x86\xD1Kc8\xB8\xD7\xC4\xCB\xF4\xBCY\x8F\x{16A5315}\x97u\x9D-\xD89۷:J\xCAvZ;\xEC\xEE\xD2\xE5\xCA\xED\xE6\xEA^I\x9A!\xABx\x9E\xF2\xF71\xF5\xED\xF6w	\x92\x8E8*D	\xA6\xB6\x85\xF3D\x84E\xBE\x8C&ƌ\xC66ǧ%O\xCC%%\x9F\xE4I.;\xAD\x90Җf\x97\xFE)3){W\xCE\xF8\x99\x92\xFC\xC0s:\xB8\xE6\xFB\x8B\xDB/5\x95\xB5T<\xBC\xDC_5T\xF3\xBC\xB6\xE7zg\xFDp\xC3\xEC-\xDE&\x83或K\xF7\xDA\x8C\xB4\xAFtJw\xF9v\xB7>\x95\xE8M\xEF_r\xBE\xFBri\xC4\xED\xAD\xC6x\xDB\xC7\xDBS\xFE\xD3V_=f\x9F\xFCMY\xBC\xB5\xEC\xB2J\xFDžNڐ\xDFX\xD9L\xA5aiI4\x88\x83>\x81Ȁrh\x82\x839vDQB\x88\x88#\xE2\x87\xC4"YHҌ _Ph\x94(J\xE5\x8AJDU\xA3^\xA1\xB1h5t\xBA=\x84\xC1a\xB40a\x98Z̧\xED\x9B²a-\xB1\xD9\xD8!\xCEW\x8E\xFBF\xAFB\x9FD?\xC8 \xC6\xCE\xD0\xC3(\xCE\xCF8ʤ\xC5Ťb\xF6gf\xD9\xCFҀ\x97\xC0\xB0r\xB2f\xB3\xB1\xB1\xE5\xB1\xB0\x97q\xEC\xE6h\xE14\xE7\x9C\xE0
+\xE7\xC6pg\xF3\x88\xF2\xDC\xE0%\xF2\x8E\xF2\x85\xF3s\xF27\xD8\xAC	\x96
+\xFA)\"b.\xB2&z\x85`/F'vS\x9C,!.\xF1C\xB2kG\xB1T\xA4\xB4\xE5N\xAC\xCCGٶ]%r\xF1򮻵\xF7\x88\xEC\xA1)\x8C\xEF}\xA0X\xB6\xEF\xB4R\xB4r\xBCJ\xBA\xEA9\xB52\xF5j\x8D\x9B\x9A\xADZ\xB5{u\xDE\xE8~ۿ\xA1\x8F7\x905$}\x8D\xB2\xB47a3\xD56\xF31?o\xD1k\xC5h}\xD0&\xC7v\xCC^\xC1!\xD9q\xD2\xC9\xD8\xF9\xBA\x8B\xC0\x91\xD7
+w?\xD2-2\x9D\xA7\x9D\xD7\xEFu_\xBF\xC6\xEE\xC0Ƞ\xB1\xC3\xD0QjN8:"&r>: f!6+^\xF1x߉\xC0$\x86\xBFʓ\xD5O=KqM\x9DM\x8F\xC9\xC4e]\xC8\xCBm\xCC\xD3\xCF\xEF;\xE7{A\xB8`\xAC\xB0\xA4\xD8\xFA]iS\xB9\xA5\xC0\xE5ު\xE4b-۵ɺ\x8E
+7\xAF\xDDz\xD0\xD4\xD5Li\x91j\xBD_\xD4F\xEEP\xED\xE4\xB4\xF9x\xF1\xC9\xEA3\xA6>\xC9\x8B\xA1c\xC3\xF5/gG\xE4F5ƈ\xE3\xEF&\xE9\xA6\\xA6}\x93\x9C\x8D\xFF>\xF4\xB3Ȼĸ<\xB8\xB26\xBEγ\x81\xDD\xDB,\xA2Y\xD0h\xA0A\x90\x8D0_@x9\xC4qA"\x913\xC8
+d\xF9\x89B\xA1\xA8\xA8r\xD4k4\xDA\x9D\x82\xEE\xC5pc\1՘\x9Fttg\xE8>a5\xB0\xB9\xD8Y\x9C)\xAE\x9E\x9E\x9F\xFE\xFD*C\xC3F/\xC6L\xEEL\xE3\xCC\xEE̟Y\xA2\xF0x|-\xAB5\xEB\xDB5v7Gg4\x97\xD7 w<\x8F<\xCF\xDEb>/~u!\x81ςW\x84|\x84\xA5\x85\xA7E\xAE\x8A\x86\xD4\xC5pbo\xC5\xEFH|\xDE\xC1-\xA5$m\xBC\xD3Z搬\xEB.\xB9(\xF9\xC4\xDD9{\xAE(t\xED\x9D\xDDǧDT\xA6\xAA\xAB\x{1AA0C6}\x8Ef\x92V\x9F\x8E\xB0\xAE\xEF\xFE\xBD5c\xC3\xCBF\x8C"\x8D\xA7M\x9CM\x9B+X\xE4Y!։\xB6\xACv5\xB6\x87PN
+\x87]\x8F\xA0]\xDD\xD6H\xC1\xEF={\xBD\xF5\xA1\xFA\x89\xFA
+\x9A\xB1\xBDO\x91\xA3\x843F$E!\xD1\xE9Ǽ\xE3*\x8F\xB7\x9D\xB8\x9FTq2\xEE\x94u\x8At\xEAZ\xFA\x83̴lR\xAE^\x9E\xECY\x9E\xF3p\xE1\xEB\xC5\xFE\xA2\xFA\x92\xFCҸ\xF2\xC0J\xA7+\xFAՄ\x9A\xE5\xDA\xCE\xEB\xE9\xF5v
+\x927\x97ou7\x9Dk&\xB5\xB7܏nj\xEFx\xFAH\xAAk\xBA\xBB\xB1'\xF5\x99g\x9F\xC6\xD7\xE0\xE7\xE7\xB7_D\xBF\xDA\xF3z\xE2M\xD6[ͱ/\xE3%\xEF\x94\x9C\\x9D\xFA0=\xFE\xD5\xE0[\xECL\xE9l\xF3\\xC7\xF7\xF3U\xA7\xFD\xB0_\xE0[\xE8[\x8C\xF8)\xFA\xB3nI}\xA9sy\xFFr݊\xE8J\xE6\xCAª\xC9j\xD9\xEA\xEA\x9A\xD5Z\xC5\xDA\xE4/\xC9_^\xBF*M\xADK\xAD{\xAF\xE7\xAC\xDF[\x9F\xDE\xE0\xDC\xD0\xDD\xF0\xDF\xC8\xDFhߘ\xD9\xE4\xDB4\xDE<\xBEy{s\x86&As\xA6\xE5кi4\x80\xAD~	
+BC(3\xC3\xFF\xD2\xDC\xFD-(0\xFCw`\xF6\xB0\xB0\xDC\xC6ӡaVv\xC0k\xD4["\xB0 l\xDE~F\xB71\xC1\x93dh
+B\x88B\x8C\xAF\x810 f\xDE#\x9B\xAD}\x90C\xFE$+\xC0 \xFE^\xC1\xF6\xB6\xDB|Th\xA0\x95\xD96N
+
+ӷ>\xA4ЋJ\xFC\xED\xD3\xE3k\xE7\xB8\xDBE	\xB7\xB1Id8 \xC4\xD4f;׊\xA7\x97\xE1\xB66&8\xD0\xC2lK3\x8A\xCB/\xEC\xA0p\xA0d\xC1H@\xF0y00\xDC	@@P\xC0\xA8`\x93@\x9F?^0	\xF0\xFB?Q\xF2\xE0
+$\xA0@x`
+(\xE4\xE6\x97H¶\xC7 H\xFC\x9BQ\xB8\xAA\xF0Ea\xFDϺ\x84@ \x84\xC0?\xA6\xFFb~+\xFC\xC7\xD7<!\xE4O\xFEͻ\xF9%R\x82\xBC#·Dk8\xF8b\xA40\x8Ae\x8C>F\xA3\x83Q\x86#\xF2%\x8CF\xA3\x8B\xD1\xC4(c\xD4\xFBf\x9Af\xFE\xE4٪\x8Dǟ3\x9AB xA8P\xC0\x82\xFFU/\xF2\xFFR[\xBD;\x96
+\xA00	\xA0\x83\xFF\xAFw\xE6`M\xF1\xF3\xF1
+#腆z\xC9\x93w\xCB\xD4\xE0\xF3\xA6sHq\xA3\xE8-IDATx\x9C\xED\x9Da\x97\x9B\xBC\x84\x95\xEC\xF6\xFD\xFF\xBF\xB7w7\xB9ZwE#\x8DC<\xE7pp\xC01\xC6~\xD9&\xED^d\]\xF6\xAE\xC0\xE8\xBEw<\x8D\xD0\xF1#\xD4a\xEAQ\xBBº\xC2\xE3饐\xBE
+\x905\xAE3a^\xAE5\xE0\xDAЭ;\xBAZ\xFEo?Ua\xDBέ `\xCB];\xDFT.\xA6\xB5\xF3\xD1Z\xBB\xB3\x99\xF2\xA2<K\xBF?\xE5\x8B'ʳ\xF4\xFB%\xAD\xD5\xC1Y9\xE8|\xF58s\xAD\xA9g\xF5W=ΞO\xB5\xF5\xC4;g\x8F1y\x98kMŪ@f\x8F1y\xD8s\xA9\x96t\xF230p\x99s\xEF\xAA
+0\x95\xCF/\x81\xB3\xB7C+\x90 \xAB\xE9\xEAu\xDFQ\xBD0.IW\xAF\x9B\xAA\xA7#\xD9\xD0\xEA\xC1\xB5\xE4Xt\xFD	䏪\xE1\xF8\xBE±\xE8\xDA\xD1qWk\xAD#fN׻\x8F\xD2Q}\xAAy\x8E\xA6\x9E\xD9p\xE6z\xBD\xFB(\xD5\xAA\xD2ak\xD9{\xCC+/\xABW\xA6#\xC0\xDA;a@@"=\xE0\xD8c\xDE5\x81\xF9\xC9d
+ĺb\x94f\xF2\xA1k\xD94\xAA\xDBY\xC5t~\xE6\x8AQ\xFA.ڱ\xD7i{=&\xA5%oT*\xAE\x88>G\xE7\xBCr\xBC}T\xC7\xCA\xF9#\xA8\xBAF\x85^@\xFB9:\xE7\x95c\xEBP\x9D\xAD\x8BH\xFF\x98\xACȞ
+\x95\x87\xEA\xC0\xD4\xFD,\xAA\xB8$\xE3\x88=\x9BW\xAASw\xE9\xDF\x90\x9E\xABs\xEEB\x9C\xAB8\xA7M\xB3\xF70\xBA\xD80X
+\xD3\xD1vKΉ<\x87h\xC2\x85\xF2ʨ\xF32 3\x99tN\xB6\xBEG\xD7R\x87\xCC \xBC\xC9H\xF6\xB8ȟ\xFE\xD1\xE5\xDA:x`Z\x85\xA0FPFa\xBB\xA4\x9C\xDE{\xC7"''m\xEB\xBB5\x80\xD5\xF2\xBB\xFDŲY\x87\xB4NxS\xFB\xEB\xDF}\x83\xF3\xE6\x94\xD1E\xF5\xB1`zB0+\xE1;\xB7e@Z\xB3ό{\x8A\x93\xCE\xEA\xCA\xDC\xCFHb`\xAE:\xA4u\xBF\xB6\xD7@\xB6vm@\xDDTY:_\xA5\xDEtGP\xB2a\x9B\x92\xDD\xA8\x9C⤽\xBA\xBE\xAAl\xE72\xC1\xE8}\xD6n\xD96
+\xA7Hf\xCBW\xE3\xACS2]\xF2#\xF9\x8C\xC0D\xE3Mq\xF6Q]\x8F.J\xA2\x807\xF9\xBF}\xB5\x9A[\xB64\xAA\x97\x85\x8Er\xCB\xEA\xECۆȊC~\x90{\x9B?
+\xEB\x94\xD1p\xE3h\xCA&7\x94Ė\xFE\x96g \xAF\xEAxT\xE4\xB9ݚ\x8B\xEAPn\xF3t\xCD\xC0=(\x91Ӱa;\xF2\x83\xF8\xEC9h\xE6\x98b\xD2޽D\xF79\xA2\xA2\x8E\xB4cIH
+\xE6\xB7\xFCiߖ\xD6@^\xCC>R\x83S\xB7i4\xE9yv\xE9k\xC6Vh\xA6\xA0\xDD>\x9D|QXgƘ"~#F+\xB4\xFC\x82\xF6\xDE\xD2\xD3\xDA?\xE49tg@\xDE\xE5\xB9\xFDQ}iU\xD7)\xA3\xF1\6\x86\xB4\xEA\xF4\xA7\xF8\xB0V\xC0\xD4\xF5\xB0u?"\x88H\xECl;;j \xF5\x86"\xAA\x83\xAE\x8B^ߌ\xBE#*\x9F+euƸ\xA4\xE4g\x90FnM\x80\xDEa\xD2S\x9D\xDCxP"\xBFE\xE4Kp{Fu\xD2n\xA9\xBFSYz8޻N\xE9\xB9d\xE4\x96L\xB4YH#\xD7DP2\x9E#\xC1Ɇ\xEEJ\xE4\x97\xFC\xF9%\xC8\xE8ZL\xED\x96\xE5\xC9N\xCF\x9Dh\xC2\xE3\xAD7ڱ\xA2\x86\xF0\x97\xE4\x90\xF6\x80)\xCE>\xBB\xB7Q\xD5e\xC8֖\x90m\xFBp\xAE\xE7\x81)\xE2\xC3\xD9!e\x9C2\xEA\xD4,|[\xA7\xD4n\xF8\xEC[\xDAszc\xCCll\x99\xDD\xC3Ȋ\x80li=\x9ED\x93
+\xE5\x97ڣ\xB6\xB4׳\xDBU]1\xE0ʹ{8\xFEi"\xA1\x89D5l{NٶO\x93\xCE\xD3k\xCC3\xBAeu,\xE9Mn\xB4;~\xCA\x90\xDA)=\x97D\x8Eh\xE1d\xC38—\x8C)u\xBA\xE2\x94v\xFB\xE5l\xD69\xB7\x8C\x96\x87\x98n4\xB1.\xA9\xD3\xD9䦹\xA4}\xB8\xBD\xB0\xC1\xAE\xDB\xDEs\xCB&
+\xE1\xE21%\xE30\xC85#\xB7\xB4pZ\x87\xFC\xCF9\x86f\xE6k\xB8\xE5\x91-\xB1.\xF9\xA1\xF6\xB6\xED\x94\x89^Gf`2!\xDC\xB5\xF75c4\x96\xAC\xBA\xA5\xB2\xA5\xD1D(`z\xF72\xB2P\xE8n\xE9J\xEB\x926d_\xC15#\xD7E\xE3y\xFBf'\xAA2\xD1A\x8BB\xB7N{ouP\xE8\xFEOb0\xA3\x998\xE5`\xB4b]2\x9Aq{Q&\x9AԴr\xDAw\xB4\xD3\xDA\xFE\x8DBx\x93uc\xA8e\xD6Qhi?{p" =\xC7\xFCO\x9E]\xD3N~zB\xB8w\x8FG\x80\xB3:\xC9A\xA1\xBB\xB9d\xA48\xDF\xD5\xEF\xC8\x98\x91h\xB7dt\x91\xFB\xFFĶ2\xD1A\xB3q=\x8ED`\xA2Iϻ\x8C+\x97̺u\xD8\xF6\x9C\xCCӟf\xAF\xC1d\x87MM\xAB\x87o[8JWƕ\xD9B\xBA7\xCEDKD{AɖEwY\xA5}\xA7\x8D\xD6"\xA3\xEF1\xBF?@\xCBI=N)"\xB57:֖Qڃ1Z\xBBd\x96\x88\xD8n\xC9\xD6\xDD\xDB\xC8B\xE3ɶ\x8F&%Jc\xF4/\xE43@Fc\xCA{\xF0\xF9\x9F\x98\xDFS"ecJ)\xFA\xA1Z*\x8A\xA0D\xB3p\xE5Q\x81l\xF2`l{J=\xF6ӯm\x99wy?j\xBD-
+\xD7(:ez\x82\x93
+ߑk\xB6}6\xAE\xB4\xC72\xC7Do}\xBCYx%\x84G\xF75\x9A\xA2\x89N\xBA\xD1dD\x97\x93\xBD\xEDAQ\xA8g\xB8\xD4\xC0\xA3By%'\xD8<\xF6|\xA9]ֱpF\xA1}\xE9dǦGWd\xB2-\x8C\xEC\x98=\x8BD^ض\xF7\xF5\xA0%\xB3o4\x9E\x8C`\xAC\xC0\x89ޗG\xEB\x95\xD18G\xEF\xED}\x8C\xA8\xCAr\x90\xBE\x90:d{\xE1\x99qI&tw\xB7\xEB\xD2%!-\xC61\xB3ɏN{@z\xC0Vg\xE0^}GV\x8FSz\xE1Z\xE7k\xEDgg\xD8hR\xC3,\xFD\xAC֞\xBDP\xA2\x90\x9E9f\xA8u\xBEhm\x93]Dg\x8F\xEEe$U\x9D\xD2EL^\xFD\x86\xC6k\xEF\xC6\x87\xECj\xDB\xDE_	y\xC7\xD0؍
+\xE5\x98\xCC\xEC\x85\xEFwS\xB6\xFB֡[L^/dG@\xDA>\xCB\x95>F\xADW\xF68%\xE3:\xD1\xE5=yQXG
+\xC7:\xE5\x91\xC37;\xFB\xBE\xC8\xE8\xB4>\xFE\x9E\xB3mf\xD3\x90\x993Fm\xABUn\xE7%ot\xF4\xB1\xAAczpf\x8AƟZ]\xA6\xADߪ\x8D\xB7\x81"'\xB1@\xB64
+\xDDw\xF9\xD3\xFE\xD4E,\xC2hH\x84\x86\xB4K\x8A\xAC;ѱ\x95h{o\xCC\xE1\x89\x8EeOu\xF6\x94\xDB\xFA\xA0\xBA\x8E&vLi\xF3\xB6\xF4U\x9E\x9D\xD2k\xA3\xA8\xED37i\xBB\xB5gߑc\xB2\xA0F
+\x86\x8D\x85l\xBDP#\x8Ef\xC9\xF6X\xDBۅhe\x83\xB1\xB9h\xD4v\xBD\xCE\xC88d\x97>\x969OD&ģ0\x8F\xF2" G\x83\xD0ʆ\xE1vLèQ\x87\xF0\xAB<\x82\xC9LZP{E\xFDg\xF3\xA0\xFAWuYcI\x88\xF9l\xCFe7\x9EA\xE6\xCF\x9B\xA9\xD7\xB2a\xFB\xA2\x8E_\x9C\xF3-\xCFU\xE5\xE9\xDD$H3\xAAp\xB5՘R9\xEB\x9C\xD9y
+d\xA6\xBD>\xAA\xE3\xDEB\xE0y\xF9n*-)\x85\xF3\xFAZ6\xBDY[\xAEe:\x9BǞ\xF1\xCE~\x8E\x80;\x83S2u\xD1\xF94\xC8 %H\x8B:\xE6\xE5\xF3\xF2d\xC7(-}\xF7\xBD\xE4\xBB\x9C\xDC^*@\x8E\x92W?\xBA\x95ջVfk\x88\x8A\xBD?][+Ot\xE3\xBD\x8A\xF2\xA0\xEB\x8F,4ɹ\x98<p\xC4\xDE\xF9\xC8-#\xAD֖\xD7<\xCBK\x84`Yހ\x91k\x8C\xAE\x9E\x8B
+\xC1^\x99U\xF86ií\xCFm\xDA\xFB\-A\x95\xB9.\xBA\xF6\xA8pz\xFFt@\x87?
+Q{\xB0\xC0\xF5\xB4SnY[8%S\xF9\xB5\xE1\xC8:$\xCA3\xAA\x98\xF1_\xEFx\x99\xBD\xF7]\x86;\xAF
+\xDF=7\xD3
+Ӑ#Ø\xE9Uu߭\x8D^\xB1N\x89T	k6\xD0eUˠ\x8C\xAE}\xDF;\xBF\xA4mw\x8F {B\xC9j\x8B\xF1)s\xAD=\xCA]\xAFw-/\xAC%F\x99}7-	\xD7\xD1w+y\xF6T\xEFdc\xE9\xF5F\xB8\xF7\xDA\xCAJcl\xF9\xB4\x8F\xD4)#\xD5e\xED
+\xA5Ⱦ\xE3\xC5\xDD\xC7O@\xCC\xF2MϽ\xAE\x91gs\x8D\xE5\xD4ԃ\x8E\xE5O\xF34\xE4x\x91\xD1\xA1\x9C:\xB9&\x94S\xC3iT(r\xA6\xD6ӨP\xAE\xA1w\xFB4\xF7{f(\xA7\xAA	\xE5\xD4p\x9APN
+\xA7	\xE5\xB8y\x8C\xB8i\xDD\xCE
+\xE5\xC8:\x95\xE8\xACP2\x9A\xE0\xAAw\x86rjPM(\xA7\x86ӄrj8M(\xA7\x86ӄrj8M(\xA7\x86ӄrj8\xBD3\x94k\xFCs֩
+\xF4\xCEPN
+\xAA\xB3By<\xC3=t\xE9\xACPNm\xABM\x98	\xE5\xD4p\x9APN
+\xA73C\xF9nc\xB2\xD3\xDC\xEF\xA8P\x9E\xA6\x81\xA7\xEAʩ7քrj8M(\xA7\x86\xD3\xA1\x9C\xE3MN\xDE_\xB8=\x84\x8Ee\xA4j\xAE\xC3\xFE\xEA\xA8\xF5\xA64\x94lo\xD5#v0S\xA7\xD3>\x80{C\xB9fC\xA6\xD1\xD6m\xB87\x94V[\xB9f6\xBE\xBA\xE7^)T\x8F\xADƇC\x8E;\x8F\xF0'K\xEE \xDD>\xEFᶯ\xFC;:Uy\xED\xB5\xE1p\xDA\xCAȵؼ{i\xA4\xFATڋɻ{\xD4-|k\xF56\x8E\xD7\xC8k\x94\xBB\x97\xB2\xFBY\xA3\xCC\xDE<\x9Bh\xA7DOcB\x964B\xD4qu\xEC\xE2\xE4\xF5\xBFoa`\xB4\xE1\xB9҆=`\xBEԭ\xC2w6\R\xE6]|\xB7k\xC7<\xC8\xD0p\xEF\xADϫǔ|lD`\x81\xED=\xBF:\xA8\xA3Lt"ࢆE\x9Dc\xFD\xBD\xEC\xA5\xF5\xDDZ٤}FyPĊ\xC0\x8D\xAE\xB7I;\xB0P"\xB2y\x98r\xEC\xE7\xEA2M\xAEO\xE4HΏ"\xE4\x94\xD9\xC3,\xB7\xA1w\x9Eqᨎ\x8B\xB5\xC4)\x97\x8C\xB3G\xC01!ʫ\x83甞\xF6_Fu\xF3\x8C\xB6\xE8;\xDE\xF5*\x86\xD1+\xAA\xBC5\xC27\xE3t\xEC\x93=\xFDLd\xD0y\xF2&?#\x88	\xC1Y\xD4@\xED\xC4\xF6\x8D\xBDnV\xB7\xEC\xA5W\x8C)3\xD4i\xA6!\xA3\xED&\xF5e.]\xA7\xA3;\xE5-9\x9F\x95aϡkGu]\xFC`\xF7B\x99=)Y\xE3fO}u\xBB\xFD-\xE3
+\xAE\xAD]4o$\xA7Բ \xF4Y\xD9Ĥ+\xF5D\x9F)}J\xDEQ\x95J\xD8cl\xC8Ȁ\xBB9\x9Fo\xF2\xF3'\x86/\xE6\xFCE~\xD5\xE7Qx\xDF\xDB!\xAD\xA2v\xB5mga\xBC9jKH\xEF\x9C͓՟\xD5}\xCD\xF0Y\xBE\xDD3 \xDA\xF7\xF8*?6]\xCCq\xFD\xD0y\xF0\xF5\x8CC_!\xE4:\xB6u[݄o\xBB\x8A\xBB\xA2\xEB뺭ֆ[/\x9E\xA3\xA7/\x835\xB6u\xC9\xB6-\x94v\xCF\xFC\x99\xE1\xDC2\xEA\xD8\xCC)Q;!\xE7\xF4\x80\x8C \xB5u\xC8\xEAۭ*\x94Ȫ#\x87\xD4y2Wd\xF8[~@\xFBv\xAEa\xC36r\xA1\xB6\x8DB\xF6\xB7\xD9W`e\xD4\xD6E\xD7oq8\xEFq\xCA\xE8)\xE9	\xD1\x84\xBAq?\x9Cs\xDE\xF5-\x90\x94GR\x84\x87\xB2\xED-\x90L\xD6\xDEО՟R\xCA\xD6\xD9肌CF\x93\xD4p
+\xC8o\xF9\xE3\x824}\x9D\xAB\xE4.y$\xB7\xB4\x9D\xE99T\xE4\x94ޖA[\x99\xA1z\x89\x93ǻ\xA85\x96\x84\xEC\xB3\x963\xDA\xC6E@\xDA\xEB\xDE$wJ\xEF\xF3\xA8b\x9CR\xB7\xA9n\xBB/\xB3\xCF]#\xA4{\xF5-i\xEDٷNG
+\x87\x9El\x9D\xFE\x92\x87\xFC\x92g\xC8\xF4u\x9AK^\xE4\xDE\xCC)ѱTuJ\xA6nǶ\xFFr\x8EWB:\x82ѫo\xB7\x96\xBE\xFBfMb<5\x90_\xE2Cf˿\xCA#\x98\xEF6\xA6D!\xDC\xA97\xE2u\x9F\xA0~\xAB:fI\x94\xAD`\x83\x97G\x9F\xCF-\x83Qi\xC3v$\xA5\xF7yDEn\xC9@\x89\x80\xCC \xB5}\xC4\xC2\xD5Y\x81\xED\xFD\xE9ZJP#!0-\x8CmӐ\xD9\xBA\xAB2l^\xB1
+\xF9G\x80\xD1\xCA{\xF0u\xDA\xDF\xDA-\xDB\xF6\xBF\xBF[N\xD4R!\xF6\xA1<(-\x80HL\xE8\xB6e[\x833\x9Ae\xB7\xF2\xBCmA\xA9\xF76=\xBAP\xF8n{J\xEF\xA1\xD7P\xEA\x8D
+\xE7ߒ\xBB\xA5f\xE5\xFED$vJ\xCF\xF5;fi\xEF\x89b\xD2\xC3\xFA\xFA\xAD\x8C\xEC;\x95\x89\xCEQT\x8DN\x94\xCC/\xC1Ή\xD3:';\x9E\xCC\xC2\xFA?\xF5\xBC\xD1\xF1~\xB9m&\xE7x3l.[\xB6.\xE3\xD3\xF9΄\x92\x9B\xECh(\x9B\xE3\x94\xD1\xCC\x81i\xEBW\xD2\xD2%\xA1(\g\xEE\xE8Ͱ\xBD\xDFB\xDA2[Ȯ@)\xF2\xE4\x8Dܥ\xA7\xDD5|\xBF\xBBf\xB4\xC6Y]*\xF2\xEE#T\x832GZ\x87Da\xDBk \xFDFF7\xD0Ub\x87\xA7\x9CVև\xF3}\xC8#ϼ\x9BP3\xED\x8Ef\xE1\xCC\xDF‡q
+f6\xA6\xAC:\xE5]\x84sJ=\x96D\xAFQX0=W\xF3}%\x9A\x85M\xD1،\x89Rh\xAEᴎ\xA9\x9D32\x9B\x85\xDBzS\x90\xF6\x8E)\xA3\xB9\xCAs\xE3\xB4\xBA\xCAs\xB8\x8E\x80\xBC\xAB\xEF~
+\x83\x9Eq\xD1\xDCʆ\x86\xF0\xB6\xB7a\xFB\xB7\xE0%\xA3,t봭\x97\xAD{*e\xE6\x8Eh\xC1\xA87\xFB\xDAЛek \xED8\xD2s\xC9\xE8\xF5\xA2Mq|O\xA1N\xCC\xC0DKCѤ'\x9B\x91go{\x980\x8E\xEEý\xCF\xDE_	\xA11ffbѸ\xA8\xC1\xCDԽ\xB2\xC5\xD9[\x8D\xA4ӡ^ۣ\xA1z\xCBSY"b\x80\xF4\xEAO\xBB\xA5\x86\xD2sE{\xAE\xEC\x85\xF0\x9B<B\xD1\x81\x98\xBD\xA9\xD1
+\xA8\x97\x80\xD0X\xB2\xCDܙ\x997:6\xA2lgڎ\xD6 \xA0\xE58\xE4\x96\xDF\xF2!\x93qKPqҩ*\xEFX6؎\xE0\xB4\xE5!\x87\xD5.\xE9͸\xCF\xEA\x92"yg\xDD\xD2\xCEđcz3t\x9Do\xCD\xD0
+\x8FW\xDE\xE8\xE8/j\xD7Dn\xD9\xD2\xDFf\xCD\xE0= \xA3%\xA0\xDE\xF3#\xD9\xD4\xC2{\xC0\x8C ]2\xB7!=\xBA/Y6\xA6\xE1\xC2xR$\xF2S8 \x97\xB8䑀lZsl\xE9\x81\xE9M\x82lzI\xD8F\xF7\xE0\xCAB\x89ƕ\xD1q]f$d#\xFB\x8B\xA0\xB3,Yyma@c\xCBh\xF2\xE3\xC1i\x8FypF\xE1;\xAA;<\xCE\xFC\x9E\xD2NH\xAC\xB4[\xDE\xCCq\xBD\xB7\xE5z\x8DVRC)\xC2;et|DUǕ-\x9D\x81\xB9f\xB4!\xC8=\x97D\x90\x86\xAE\xB9\xE6pe+t\xF3\xB3?|/OFc\xC8(lWrd8\xB3pg\x93	\xE3\xDES\x83i!E\x9F{\\x92\xF3{\xCA\xF6Y\xEF=٧4\xD2]\xFE\xA7\xAE\xFDZo\xB19d\x8FKf\xE7FS\xD4ə[F\x8Ey\x97g\xE7\xB3\xE0\xA1=3\xFB\xF6Ƙ\xDE\xFD<\xDD\xDFZ?]ӟo\xF2\xF3ߦx\xDF\xD7@\xB6|\xEA{\xD1رg\xB6}$Y\xA1\xB6\xEFqL\xD6\xD1g$\xE3\x98%\xF7\\xF2\xCF!\xD0r\x91H\xA6ί\xB7]4\x99\xE9q\xC8w\x83\xB2\xED3\xC7\xF4\xC0\x8C`e\x80d\xEB*{\xF7\x9D\xCB.`\xC1\xF4\x9E\\xC0Ff\xB6\xED}FZ\xA6\x978\xA6\xA7\xE2\x88L\xE8\xCE\xEE\xC3=\xB7\xF4\xC8\xC8.\xAA\xC1\xD4a_\x83}7\xF9,\x80\xC8#\x87\xB4-\xE4\x85IH\xFD\xD9\x85B;\x8202\xABg\xA8\x9E\xD9)\x82\xC1\xEB\xD9
+\xB9_投Y\xF6\x96\x81\x90\x98\xB7i䘙{VA\xF4\xDC1rK)\xD3QQX\xCC\xC0l\xC7"\xD02\xB7C\x8E*\xEB.=cLRt\xCE+˻vT?W=P\xDAcL\x9D\xEE\xDDPyQ=\xB2\xBA\x9FE\x99\xFBd\x8E\xA9ӽ\x9BW^T\x8F\xE8\xD8?-\x99T\xC1\xD4\xE9>\xD6\xABy@3\xE7d\xB3\xED3\xB7c!\H\x91\xE5\xA1.\xB3\xED3@\xB3|\xE8Z\xA8^\xD1\xF13\xA9g\x8Ci\xF7\xA8Y>o\x8F\xEAF
+G\xD6e\xB0d\xA01Ǽ򘺱`vY-#\x82A\xC6\xF3\xAE\xCB<,P\xD5\xCEX
+fK3!9sȨ>Q\xFD\x8E\xAE\xA5\x93\x9D\xCE\\xB4\xED\xD9\xEFF\xF5\xA3\xB8\x9E\xCEb\xC3%\xD8Z \x9E	\xBC^\xB1@T͎U\xAF\xAA\xB7#\xA3\xEF1p\xF6\xA4\xB3\xEB2\xE7Ϭ\xDEI\xD0\xD2tv\xED\xF2\x90dI'V\xC0\xB4\xC72\xD8*0\xBE3\x88HH*\x9F\xAB\x93\x97\xAE1\xF2\xBAN6s\xAD\xA9X\x95\xD0\xCA8\xE1\xEA06},\xF9\xB2RoX\xADB\xB6\xC6\xEC\xF4\xD5P\xEF\xF8pq\xADe\xD9ů\xCAR\xE7[\xCD0\xB6\x82`\x{D95A}	\xEBz\xEA]RZ\x9A\x8F\xD6֝\xBD\xD6:\xE8\xD4\xF6\xAAµ\xD9P\xEAUl=\xA1\x9A\xE2\xB4\xD5\xA3U\xB5GGO\xB8\x8E\xA7\x97N0Gd\x84:L=j\xD7U\x8E\x91\x81\xB9ngѐKl\xFF.S\xAE\xDD`x\xAE\xEEIEND\xAEB`\x82
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (126083 => 126084)


--- trunk/Source/WebCore/ChangeLog	2012-08-20 22:42:35 UTC (rev 126083)
+++ trunk/Source/WebCore/ChangeLog	2012-08-20 23:07:21 UTC (rev 126084)
@@ -1,3 +1,18 @@
+2012-08-20  Dirk Schulze  <k...@webkit.org>
+
+        CSS Masking and CSS Filters applied in wrong order
+        https://bugs.webkit.org/show_bug.cgi?id=94354
+
+        Reviewed by Dean Jackson.
+
+        According to the Filter Effects spec, the order should be first filters, then masking and clipping.
+        Changed the order on applying the different effects in RenderLayer.
+
+        Test: css3/filters/filter-mask-clip-order.html
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::paintLayerContents): First filter, then mask and clip the content.
+
 2012-08-20  Kentaro Hara  <hara...@chromium.org>
 
         [V8] Move mainWorldContext() from V8Proxy to ScriptController

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (126083 => 126084)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-08-20 22:42:35 UTC (rev 126083)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-08-20 23:07:21 UTC (rev 126084)
@@ -3218,21 +3218,7 @@
         // Now walk the sorted list of children with positive z-indices.
         paintList(posZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
     }
-    
-    if ((localPaintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && renderer()->hasMask() && !selectionOnly) {
-        if (useClipRect)
-            clipToRect(rootLayer, context, paintDirtyRect, damageRect, DoNotIncludeSelfForBorderRadius); // Mask painting will handle clipping to self.
 
-        // Paint the mask.
-        PaintInfo paintInfo(context, pixelSnappedIntRect(damageRect.rect()), PaintPhaseMask, false, paintingRootForRenderer, region, 0);
-        renderer()->paint(paintInfo, paintOffset);
-        
-        if (useClipRect) {
-            // Restore the clip.
-            restoreClip(context, paintDirtyRect, damageRect);
-        }
-    }
-
     if (isPaintingOverlayScrollbars) {
         clipToRect(rootLayer, context, paintDirtyRect, damageRect);
         paintOverflowControls(context, roundedIntPoint(paintOffset), pixelSnappedIntRect(damageRect.rect()), true);
@@ -3250,7 +3236,21 @@
 
     // Make sure that we now use the original transparency context.
     ASSERT(transparencyLayerContext == context);
-    
+
+    if ((localPaintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && renderer()->hasMask() && !selectionOnly) {
+        if (useClipRect)
+            clipToRect(rootLayer, context, paintDirtyRect, damageRect, DoNotIncludeSelfForBorderRadius); // Mask painting will handle clipping to self.
+        
+        // Paint the mask.
+        PaintInfo paintInfo(context, pixelSnappedIntRect(damageRect.rect()), PaintPhaseMask, false, paintingRootForRenderer, region, 0);
+        renderer()->paint(paintInfo, paintOffset);
+        
+        if (useClipRect) {
+            // Restore the clip.
+            restoreClip(context, paintDirtyRect, damageRect);
+        }
+    }
+
     // End our transparency layer
     if (haveTransparency && m_usedTransparency && !m_paintingInsideReflection) {
         context->endTransparencyLayer();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to