[PATCH] Implemented operator optimization (espescially used to =

Antoine Azar cairo at antoineazar.com
Fri Feb 22 02:34:10 PST 2008


replace OVER by SOURCE), moved some functions to their proper place, and =
optimized a bit checks in pixman-pict.c=0A=
=0A=
---=0A=
 pixman/pixman-combine.c |    3 +-=0A=
 pixman/pixman-image.c   |   84 ++++++++++++++++++++++++++++++++=0A=
 pixman/pixman-pict.c    |  121 =
+++++++++++++++++++++++++++++++++-------------=0A=
 pixman/pixman-private.h |    6 ++=0A=
 4 files changed, 179 insertions(+), 35 deletions(-)=0A=
=0A=
diff --git a/pixman/pixman-combine.c b/pixman/pixman-combine.c=0A=
index be08af4..d201736 100644=0A=
--- a/pixman/pixman-combine.c=0A=
+++ b/pixman/pixman-combine.c=0A=
@@ -13,7 +13,6 @@=0A=
  * this difference will have two versions using the same convention.=0A=
  */=0A=
 =0A=
-=0A=
 /*=0A=
  * Combine src and mask=0A=
  */=0A=
@@ -1210,6 +1209,7 @@ static CombineFuncU pixman_fbCombineFuncU[] =3D {=0A=
     fbCombineConjointAtopU,=0A=
     fbCombineConjointAtopReverseU,=0A=
     fbCombineConjointXorU,=0A=
+    NULL /* Noop */=0A=
 };=0A=
 =0A=
 static CombineFuncC pixman_fbCombineFuncC[] =3D {=0A=
@@ -1257,6 +1257,7 @@ static CombineFuncC pixman_fbCombineFuncC[] =3D {=0A=
     fbCombineConjointAtopC,=0A=
     fbCombineConjointAtopReverseC,=0A=
     fbCombineConjointXorC,=0A=
+    NULL /* Noop */=0A=
 };=0A=
 =0A=
 FbComposeFunctions pixman_composeFunctions =3D {=0A=
diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c=0A=
index 9b6846e..30c294b 100644=0A=
--- a/pixman/pixman-image.c=0A=
+++ b/pixman/pixman-image.c=0A=
@@ -717,3 +717,87 @@ pixman_image_fill_rectangles (pixman_op_t		    op,=0A=
 =0A=
     return TRUE;=0A=
 }=0A=
+=0A=
+pixman_bool_t=0A=
+pixman_image_can_get_solid (pixman_image_t *image)=0A=
+{=0A=
+    if (image->type =3D=3D SOLID)=0A=
+	return TRUE;=0A=
+=0A=
+    if (image->type !=3D BITS	||=0A=
+	image->bits.width !=3D 1	||=0A=
+	image->bits.height !=3D 1)=0A=
+    {=0A=
+	return FALSE;=0A=
+    }=0A=
+=0A=
+    if (image->common.repeat !=3D PIXMAN_REPEAT_NORMAL)=0A=
+	return FALSE;=0A=
+=0A=
+    switch (image->bits.format)=0A=
+    {=0A=
+    case PIXMAN_a8r8g8b8:=0A=
+    case PIXMAN_x8r8g8b8:=0A=
+    case PIXMAN_a8b8g8r8:=0A=
+    case PIXMAN_x8b8g8r8:=0A=
+    case PIXMAN_r8g8b8:=0A=
+    case PIXMAN_b8g8r8:=0A=
+    case PIXMAN_r5g6b5:=0A=
+    case PIXMAN_b5g6r5:=0A=
+	return TRUE;=0A=
+    default:=0A=
+	return FALSE;=0A=
+    }=0A=
+}=0A=
+=0A=
+pixman_bool_t=0A=
+pixman_image_is_opaque(pixman_image_t *image)=0A=
+{=0A=
+    int i =3D 0;=0A=
+    int gradientNumberOfColors =3D 0;=0A=
+=0A=
+    if(image->common.alpha_map)=0A=
+        return FALSE;=0A=
+=0A=
+    switch(image->type)=0A=
+    {=0A=
+    case BITS:=0A=
+        if(PIXMAN_FORMAT_A(image->bits.format))=0A=
+            return FALSE;=0A=
+        break;=0A=
+=0A=
+    case LINEAR:=0A=
+    case CONICAL:=0A=
+    case RADIAL:=0A=
+        gradientNumberOfColors =3D image->gradient.n_stops;=0A=
+        i=3D0;=0A=
+        while(i<gradientNumberOfColors)=0A=
+        {=0A=
+            if(image->gradient.stops[i].color.alpha !=3D 0xffff)=0A=
+                return FALSE;=0A=
+            i++;=0A=
+        }=0A=
+        break;=0A=
+=0A=
+    case SOLID:=0A=
+         if(Alpha(image->solid.color) !=3D 0xff)=0A=
+            return FALSE;=0A=
+        break;=0A=
+    }=0A=
+=0A=
+    /* Convolution filters can introduce translucency if the sum of the =
weights=0A=
+       is lower than 1. */=0A=
+    if (image->common.filter =3D=3D PIXMAN_FILTER_CONVOLUTION)=0A=
+         return FALSE;=0A=
+=0A=
+    if (image->common.repeat =3D=3D PIXMAN_REPEAT_NONE)=0A=
+    {=0A=
+        if (image->common.filter !=3D PIXMAN_FILTER_NEAREST)=0A=
+            return FALSE;=0A=
+=0A=
+        if (image->common.transform)=0A=
+            return FALSE;=0A=
+    }=0A=
+=0A=
+     return TRUE;=0A=
+}=0A=
\ No newline at end of file=0A=
diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c=0A=
index 8976ff2..55adc29 100644=0A=
--- a/pixman/pixman-pict.c=0A=
+++ b/pixman/pixman-pict.c=0A=
@@ -1261,38 +1261,6 @@ pixman_walk_composite_region (pixman_op_t op,=0A=
     pixman_region_fini (&reg);=0A=
 }=0A=
 =0A=
-static pixman_bool_t=0A=
-can_get_solid (pixman_image_t *image)=0A=
-{=0A=
-    if (image->type =3D=3D SOLID)=0A=
-	return TRUE;=0A=
-=0A=
-    if (image->type !=3D BITS	||=0A=
-	image->bits.width !=3D 1	||=0A=
-	image->bits.height !=3D 1)=0A=
-    {=0A=
-	return FALSE;=0A=
-    }=0A=
-=0A=
-    if (image->common.repeat !=3D PIXMAN_REPEAT_NORMAL)=0A=
-	return FALSE;=0A=
-=0A=
-    switch (image->bits.format)=0A=
-    {=0A=
-    case PIXMAN_a8r8g8b8:=0A=
-    case PIXMAN_x8r8g8b8:=0A=
-    case PIXMAN_a8b8g8r8:=0A=
-    case PIXMAN_x8b8g8r8:=0A=
-    case PIXMAN_r8g8b8:=0A=
-    case PIXMAN_b8g8r8:=0A=
-    case PIXMAN_r5g6b5:=0A=
-    case PIXMAN_b5g6r5:=0A=
-	return TRUE;=0A=
-    default:=0A=
-	return FALSE;=0A=
-    }=0A=
-}=0A=
-=0A=
 #define SCANLINE_BUFFER_LENGTH 2048=0A=
 =0A=
 static void=0A=
@@ -1552,7 +1520,7 @@ get_fast_path (const FastPathInfo *fast_paths,=0A=
 	if (info->op !=3D op)=0A=
 	    continue;=0A=
 =0A=
-	if ((info->src_format =3D=3D PIXMAN_solid && can_get_solid (pSrc))		||=0A=
+	if ((info->src_format =3D=3D PIXMAN_solid && =
pixman_image_can_get_solid (pSrc))		||=0A=
 	    (pSrc->type =3D=3D BITS && info->src_format =3D=3D =
pSrc->bits.format))=0A=
 	{=0A=
 	    valid_src =3D TRUE;=0A=
@@ -1594,6 +1562,82 @@ get_fast_path (const FastPathInfo *fast_paths,=0A=
     return NULL;=0A=
 }=0A=
 =0A=
+/*=0A=
+ * Operator optimizations based on source or destination opacity=0A=
+ */=0A=
+typedef struct=0A=
+{=0A=
+    pixman_op_t			op;=0A=
+    pixman_op_t			opSrcDstOpaque;=0A=
+    pixman_op_t			opSrcOpaque;=0A=
+    pixman_op_t			opDstOpaque;=0A=
+} OptimizedOperatorInfo;=0A=
+=0A=
+static const OptimizedOperatorInfo optimized_operators[] =3D=0A=
+{=0A=
+    /* Input Operator           SRC&DST Opaque          SRC Opaque      =
        DST Opaque      */=0A=
+    { PIXMAN_OP_OVER,           PIXMAN_OP_SRC,          PIXMAN_OP_SRC,  =
        PIXMAN_OP_OVER },=0A=
+    { PIXMAN_OP_OVER_REVERSE,   PIXMAN_OP_DST,          =
PIXMAN_OP_OVER_REVERSE, PIXMAN_OP_DST },=0A=
+    { PIXMAN_OP_IN,             PIXMAN_OP_SRC,          PIXMAN_OP_IN,   =
        PIXMAN_OP_SRC },=0A=
+    { PIXMAN_OP_IN_REVERSE,     PIXMAN_OP_DST,          PIXMAN_OP_DST,  =
        PIXMAN_OP_IN_REVERSE },=0A=
+    { PIXMAN_OP_OUT,            PIXMAN_OP_CLEAR,        PIXMAN_OP_OUT,  =
        PIXMAN_OP_CLEAR },=0A=
+    { PIXMAN_OP_OUT_REVERSE,    PIXMAN_OP_CLEAR,        =
PIXMAN_OP_CLEAR,        PIXMAN_OP_OUT_REVERSE },=0A=
+    { PIXMAN_OP_ATOP,           PIXMAN_OP_SRC,          PIXMAN_OP_IN,   =
        PIXMAN_OP_OVER },=0A=
+    { PIXMAN_OP_ATOP_REVERSE,   PIXMAN_OP_DST,          =
PIXMAN_OP_OVER_REVERSE, PIXMAN_OP_IN_REVERSE },=0A=
+    { PIXMAN_OP_XOR,            PIXMAN_OP_CLEAR,        PIXMAN_OP_OUT,  =
        PIXMAN_OP_OUT_REVERSE },=0A=
+    { PIXMAN_OP_SATURATE,       PIXMAN_OP_DST,          =
PIXMAN_OP_OVER_REVERSE, PIXMAN_OP_DST },=0A=
+    { PIXMAN_OP_NONE }=0A=
+};=0A=
+=0A=
+=0A=
+/*=0A=
+ * Check if the current operator could be optimized=0A=
+ */=0A=
+static const OptimizedOperatorInfo*=0A=
+pixman_operator_can_be_optimized(pixman_op_t op)=0A=
+{=0A=
+    const OptimizedOperatorInfo *info;=0A=
+=0A=
+    for (info =3D optimized_operators; info->op !=3D PIXMAN_OP_NONE; =
info++)=0A=
+    {=0A=
+        if(info->op =3D=3D op)=0A=
+            return info;=0A=
+    }=0A=
+    return NULL;=0A=
+}=0A=
+=0A=
+/*=0A=
+ * Optimize the current operator based on opacity of source or =
destination=0A=
+ * The output operator should be mathematically equivalent to the =
source.=0A=
+ */=0A=
+static pixman_op_t=0A=
+pixman_optimize_operator(pixman_op_t op, pixman_image_t *pSrc, =
pixman_image_t *pMask, pixman_image_t *pDst )=0A=
+{=0A=
+    pixman_bool_t is_source_opaque;=0A=
+    pixman_bool_t is_dest_opaque;=0A=
+    const OptimizedOperatorInfo *info =3D =
pixman_operator_can_be_optimized(op);=0A=
+=0A=
+    if(!info || pMask)=0A=
+        return op;=0A=
+=0A=
+    is_source_opaque =3D pixman_image_is_opaque(pSrc);=0A=
+    is_dest_opaque =3D pixman_image_is_opaque(pDst);=0A=
+=0A=
+    if(is_source_opaque =3D=3D FALSE && is_dest_opaque =3D=3D FALSE)=0A=
+        return op;=0A=
+=0A=
+    if(is_source_opaque && is_dest_opaque)=0A=
+        return info->opSrcDstOpaque;=0A=
+    else if(is_source_opaque)=0A=
+        return info->opSrcOpaque;=0A=
+    else if(is_dest_opaque)=0A=
+        return info->opDstOpaque;=0A=
+=0A=
+    return op;=0A=
+=0A=
+}=0A=
+=0A=
+=0A=
 void=0A=
 pixman_image_composite (pixman_op_t      op,=0A=
 			pixman_image_t * pSrc,=0A=
@@ -1650,7 +1694,15 @@ pixman_image_composite (pixman_op_t      op,=0A=
 	}=0A=
     }=0A=
 =0A=
-    if ((pSrc->type =3D=3D BITS || can_get_solid (pSrc)) && (!pMask || =
pMask->type =3D=3D BITS)=0A=
+    /*=0A=
+    * Check if we can replace our operator by a simpler one if the src =
or dest are opaque=0A=
+    * The output operator should be mathematically equivalent to the =
source.=0A=
+    */=0A=
+    op =3D pixman_optimize_operator(op, pSrc, pMask, pDst);=0A=
+    if(op =3D=3D PIXMAN_OP_DST)=0A=
+        return;=0A=
+=0A=
+    if ((pSrc->type =3D=3D BITS || pixman_image_can_get_solid (pSrc)) =
&& (!pMask || pMask->type =3D=3D BITS)=0A=
         && !srcTransform && !maskTransform=0A=
         && !maskAlphaMap && !srcAlphaMap && !dstAlphaMap=0A=
         && (pSrc->common.filter !=3D PIXMAN_FILTER_CONVOLUTION)=0A=
@@ -1751,6 +1803,7 @@ pixman_image_composite (pixman_op_t      op,=0A=
 }=0A=
 =0A=
 =0A=
+=0A=
 #ifdef USE_MMX=0A=
 /* The CPU detection code needs to be in a file not compiled with=0A=
  * "-mmmx -msse", as gcc would generate CMOV instructions otherwise=0A=
diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h=0A=
index 2da0b41..e236767 100644=0A=
--- a/pixman/pixman-private.h=0A=
+++ b/pixman/pixman-private.h=0A=
@@ -837,6 +837,12 @@ pixman_rasterize_edges_accessors (pixman_image_t =
*image,=0A=
 				  pixman_fixed_t	t,=0A=
 				  pixman_fixed_t	b);=0A=
 =0A=
+pixman_bool_t=0A=
+pixman_image_is_opaque(pixman_image_t *image);=0A=
+=0A=
+pixman_bool_t=0A=
+pixman_image_can_get_solid (pixman_image_t *image);=0A=
+=0A=
 =0A=
 #ifdef PIXMAN_TIMING=0A=
 =0A=
-- =0A=
1.5.4.rc3.941.gebb79=0A=
=0A=

--Boundary_(ID_Bl9oG+c0xDQmOa+5fKdTeQ)
Content-type: text/html; CHARSET=US-ASCII; name=optimization_final_with_MMX.htm
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=optimization_final_with_MMX.htm

<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 11">
<link rel=File-List href="optimization_final_with_MMX_files/filelist.xml">
<link rel=Edit-Time-Data href="optimization_final_with_MMX_files/editdata.mso">
<link rel=OLE-Object-Data href="optimization_final_with_MMX_files/oledata.mso">
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:LastAuthor>Antoine Azar</o:LastAuthor>
  <o:Created>2008-03-28T23:56:59Z</o:Created>
  <o:LastSaved>2008-03-28T23:56:59Z</o:LastSaved>
  <o:Version>11.8036</o:Version>
 </o:DocumentProperties>
</xml><![endif]-->
<style>
<!--table
	{mso-displayed-decimal-separator:"\.";
	mso-displayed-thousand-separator:"\,";}
@page
	{margin:1.0in .75in 1.0in .75in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;}
tr
	{mso-height-source:auto;}
col
	{mso-width-source:auto;}
br
	{mso-data-placement:same-cell;}
.style0
	{mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	white-space:nowrap;
	mso-rotate:0;
	mso-background-source:auto;
	mso-pattern:auto;
	color:windowtext;
	font-size:10.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:Arial;
	mso-generic-font-family:auto;
	mso-font-charset:0;
	border:none;
	mso-protection:locked visible;
	mso-style-name:Normal;
	mso-style-id:0;}
td
	{mso-style-parent:style0;
	padding-top:1px;
	padding-right:1px;
	padding-left:1px;
	mso-ignore:padding;
	color:windowtext;
	font-size:10.0pt;
	font-weight:400;
	font-style:normal;
	text-decoration:none;
	font-family:Arial;
	mso-generic-font-family:auto;
	mso-font-charset:0;
	mso-number-format:General;
	text-align:general;
	vertical-align:bottom;
	border:none;
	mso-background-source:auto;
	mso-pattern:auto;
	mso-protection:locked visible;
	white-space:nowrap;
	mso-rotate:0;}
.xl24
	{mso-style-parent:style0;
	mso-number-format:Percent;}
.xl25
	{mso-style-parent:style0;
	mso-number-format:Fixed;}
.xl26
	{mso-style-parent:style0;
	font-weight:700;
	font-family:Arial, sans-serif;
	mso-font-charset:0;
	text-align:center;
	background:silver;
	mso-pattern:auto none;}
.xl27
	{mso-style-parent:style0;
	mso-number-format:"0\.000";
	text-align:center;}
.xl28
	{mso-style-parent:style0;
	font-weight:700;
	font-family:Arial, sans-serif;
	mso-font-charset:0;
	text-align:center;}
-->
</style>
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>ccccccPrePatchAgain</x:Name>
    <x:WorksheetOptions>
     <x:Selected/>
     <x:Panes>
      <x:Pane>
       <x:Number>3</x:Number>
       <x:ActiveRow>7</x:ActiveRow>
       <x:ActiveCol>21</x:ActiveCol>
      </x:Pane>
     </x:Panes>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
    <x:ConditionalFormatting>
     <x:Range>$U$3:$U$22</x:Range>
     <x:Condition>
      <x:Qualifier>Greater</x:Qualifier>
      <x:Value1>1.05</x:Value1>
      <x:Format Style='color:green;font-weight:700'/>
     </x:Condition>
     <x:Condition>
      <x:Qualifier>Less</x:Qualifier>
      <x:Value1>0.95</x:Value1>
      <x:Format Style='color:red;font-weight:700'/>
     </x:Condition>
    </x:ConditionalFormatting>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:WindowHeight>15270</x:WindowHeight>
  <x:WindowWidth>28380</x:WindowWidth>
  <x:WindowTopX>360</x:WindowTopX>
  <x:WindowTopY>240</x:WindowTopY>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>

<body link=blue vlink=purple>

<table x:str border=0 cellpadding=0 cellspacing=0 width=1512 style='border-collapse:
 collapse;table-layout:fixed;width:1134pt'>
 <col width=11 style='mso-width-source:userset;mso-width-alt:402;width:8pt'>
 <col width=25 style='mso-width-source:userset;mso-width-alt:914;width:19pt'>
 <col width=104 style='mso-width-source:userset;mso-width-alt:3803;width:78pt'>
 <col width=180 style='mso-width-source:userset;mso-width-alt:6582;width:135pt'>
 <col width=64 style='width:48pt'>
 <col width=54 style='mso-width-source:userset;mso-width-alt:1974;width:41pt'>
 <col width=75 style='mso-width-source:userset;mso-width-alt:2742;width:56pt'>
 <col width=51 style='mso-width-source:userset;mso-width-alt:1865;width:38pt'>
 <col width=60 style='mso-width-source:userset;mso-width-alt:2194;width:45pt'>
 <col width=64 style='width:48pt'>
 <col width=11 style='mso-width-source:userset;mso-width-alt:402;width:8pt'>
 <col width=25 style='mso-width-source:userset;mso-width-alt:914;width:19pt'>
 <col width=71 style='mso-width-source:userset;mso-width-alt:2596;width:53pt'>
 <col width=180 style='mso-width-source:userset;mso-width-alt:6582;width:135pt'>
 <col width=64 span=6 style='width:48pt'>
 <col width=153 style='mso-width-source:userset;mso-width-alt:5595;width:115pt'>
 <tr height=17 style='height:12.75pt'>
  <td colspan=9 height=17 class=xl26 width=624 style='height:12.75pt;
  width:468pt'>BEFORE OPTIMIZATION</td>
  <td width=64 style='width:48pt'></td>
  <td colspan=9 class=xl26 width=607 style='width:455pt'>AFTER OPTIMIZATION</td>
  <td width=64 style='width:48pt'></td>
  <td width=153 style='width:115pt'></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>#</td>
  <td>backend-content</td>
  <td>test-size</td>
  <td>min(ticks)</td>
  <td>min(ms)</td>
  <td>median(ms)</td>
  <td>stddev.</td>
  <td>iterations</td>
  <td></td>
  <td>[</td>
  <td>#</td>
  <td>backend-co<span style='display:none'>ntent</span></td>
  <td>test-size</td>
  <td>min(ticks)</td>
  <td>min(ms)</td>
  <td>median(m<span style='display:none'>s)</span></td>
  <td>stddev.</td>
  <td>iterations</td>
  <td></td>
  <td class=xl28>Speedup (before/after)</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>0]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_over-256</td>
  <td align=right x:num>161</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td class=xl24 align=right x:num="8.7099999999999997E-2">8.71%</td>
  <td align=right x:num>94</td>
  <td></td>
  <td>[</td>
  <td>0]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_over-256</td>
  <td align=right x:num>161</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td class=xl24 align=right x:num="2E-3">0.20%</td>
  <td align=right x:num>83</td>
  <td></td>
  <td class=xl27 x:num x:fmla="=G3/Q3">1.000</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>1]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_source-256</td>
  <td align=right x:num>161</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td align=right x:num="5.2999999999999999E-2">0.053</td>
  <td class=xl24 align=right x:num="0.1167">11.67%</td>
  <td align=right x:num>86</td>
  <td></td>
  <td>[</td>
  <td>1]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_source-256</td>
  <td align=right x:num>161</td>
  <td align=right x:num="4.4999999999999998E-2">0.045</td>
  <td align=right x:num="5.0999999999999997E-2">0.051</td>
  <td class=xl24 align=right x:num="6.2300000000000001E-2">6.23%</td>
  <td align=right x:num>82</td>
  <td></td>
  <td class=xl27 x:num="1.0392156862745099" x:fmla="=G4/Q4">1.039</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>2]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_over-256</td>
  <td align=right x:num>1559</td>
  <td align=right x:num="0.436">0.436</td>
  <td align=right x:num>0.46</td>
  <td class=xl24 align=right x:num="6.0400000000000002E-2">6.04%</td>
  <td align=right x:num>87</td>
  <td></td>
  <td>[</td>
  <td>2]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_over-256</td>
  <td align=right x:num>247</td>
  <td align=right x:num="6.9000000000000006E-2">0.069</td>
  <td align=right x:num="0.121">0.121</td>
  <td class=xl24 align=right x:num="0.1958">19.58%</td>
  <td align=right x:num>90</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="3.8016528925619837" x:fmla="=G5/Q5">3.802</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>3]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_source-256</td>
  <td align=right x:num>1051</td>
  <td align=right x:num="0.29399999999999998">0.294</td>
  <td align=right x:num="0.33700000000000002">0.337</td>
  <td class=xl24 align=right x:num="7.8299999999999995E-2">7.83%</td>
  <td align=right x:num>85</td>
  <td></td>
  <td>[</td>
  <td>3]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_source-256</td>
  <td align=right x:num>249</td>
  <td align=right x:num>0.07</td>
  <td align=right x:num="0.123">0.123</td>
  <td class=xl24 align=right x:num="0.1847">18.47%</td>
  <td align=right x:num>83</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="2.7398373983739841" x:fmla="=G6/Q6">2.740</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>4]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_over-256</td>
  <td align=right x:num>1492</td>
  <td align=right x:num="0.41699999999999998">0.417</td>
  <td align=right x:num="0.41699999999999998">0.417</td>
  <td class=xl24 align=right x:num="5.9999999999999995E-4">0.06%</td>
  <td align=right x:num>80</td>
  <td></td>
  <td>[</td>
  <td>4]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_over-256</td>
  <td align=right x:num>244</td>
  <td align=right x:num="6.8000000000000005E-2">0.068</td>
  <td align=right x:num="6.8000000000000005E-2">0.068</td>
  <td class=xl24 align=right x:num="2.0999999999999999E-3">0.21%</td>
  <td align=right x:num>84</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="6.1323529411764701" x:fmla="=G7/Q7">6.132</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>5]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_source-256</td>
  <td align=right x:num>1051</td>
  <td align=right x:num="0.29399999999999998">0.294</td>
  <td align=right x:num="0.29399999999999998">0.294</td>
  <td class=xl24 align=right x:num="4.0000000000000002E-4">0.04%</td>
  <td align=right x:num>80</td>
  <td></td>
  <td>[</td>
  <td>5]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_source-256</td>
  <td align=right x:num>242</td>
  <td align=right x:num="6.8000000000000005E-2">0.068</td>
  <td align=right x:num="6.8000000000000005E-2">0.068</td>
  <td class=xl24 align=right x:num="2.0999999999999999E-3">0.21%</td>
  <td align=right x:num>95</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="4.3235294117647056" x:fmla="=G8/Q8">4.324</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>6]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_over-256</td>
  <td align=right x:num>9448</td>
  <td align=right x:num="2.6389999999999998">2.639</td>
  <td align=right x:num="2.6739999999999999">2.674</td>
  <td class=xl24 align=right x:num="6.5500000000000003E-2">6.55%</td>
  <td align=right x:num>84</td>
  <td></td>
  <td>[</td>
  <td>6]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_over-256</td>
  <td align=right x:num>8819</td>
  <td align=right x:num="2.464">2.464</td>
  <td align=right x:num="2.5030000000000001">2.503</td>
  <td class=xl24 align=right x:num="0.13339999999999999">13.34%</td>
  <td align=right x:num>92</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.0683180183779464" x:fmla="=G9/Q9">1.068</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>7]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_source-256</td>
  <td align=right x:num>8959</td>
  <td align=right x:num="2.5030000000000001">2.503</td>
  <td align=right x:num="2.5750000000000002">2.575</td>
  <td class=xl24 align=right x:num="0.10390000000000001">10.39%</td>
  <td align=right x:num>87</td>
  <td></td>
  <td>[</td>
  <td>7]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_source-256</td>
  <td align=right x:num>8821</td>
  <td align=right x:num="2.464">2.464</td>
  <td align=right x:num>2.49</td>
  <td class=xl24 align=right x:num="0.127">12.70%</td>
  <td align=right x:num>92</td>
  <td></td>
  <td class=xl27 x:num="1.0341365461847389" x:fmla="=G10/Q10">1.034</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>8]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_over-256</td>
  <td align=right x:num>33117</td>
  <td align=right x:num="9.2520000000000007">9.252</td>
  <td align=right x:num="9.8559999999999999">9.856</td>
  <td class=xl24 align=right x:num="4.6399999999999997E-2">4.64%</td>
  <td align=right x:num>82</td>
  <td></td>
  <td>[</td>
  <td>8]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_over-256</td>
  <td align=right x:num>31936</td>
  <td align=right x:num="8.9220000000000006">8.922</td>
  <td align=right x:num="9.8450000000000006">9.845</td>
  <td class=xl24 align=right x:num="7.7700000000000005E-2">7.77%</td>
  <td align=right x:num>92</td>
  <td></td>
  <td class=xl27 x:num="1.001117318435754" x:fmla="=G11/Q11">1.001</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>9]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_source-256</td>
  <td align=right x:num>32120</td>
  <td align=right x:num="8.9730000000000008">8.973</td>
  <td align=right x:num="9.9030000000000005">9.903</td>
  <td class=xl24 align=right x:num="8.4699999999999998E-2">8.47%</td>
  <td align=right x:num>93</td>
  <td></td>
  <td>[</td>
  <td>9]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_source-256</td>
  <td align=right x:num>32673</td>
  <td align=right x:num="9.1280000000000001">9.128</td>
  <td align=right x:num="9.8130000000000006">9.813</td>
  <td class=xl24 align=right x:num="5.1700000000000003E-2">5.17%</td>
  <td align=right x:num>87</td>
  <td></td>
  <td class=xl27 x:num="1.0091715071843472" x:fmla="=G12/Q12">1.009</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>10]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_over-512</td>
  <td align=right x:num>752</td>
  <td align=right x:num>0.21</td>
  <td align=right x:num="0.21299999999999999">0.213</td>
  <td class=xl24 align=right x:num="0.1762">17.62%</td>
  <td align=right x:num>84</td>
  <td></td>
  <td>[</td>
  <td>10]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_over-512</td>
  <td align=right x:num>741</td>
  <td align=right x:num="0.20699999999999999">0.207</td>
  <td align=right x:num="0.21099999999999999">0.211</td>
  <td class=xl24 align=right x:num="1.5800000000000002E-2">1.58%</td>
  <td align=right x:num>80</td>
  <td></td>
  <td class=xl27 x:num="1.0094786729857821" x:fmla="=G13/Q13">1.009</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>11]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_source-512</td>
  <td align=right x:num>746</td>
  <td align=right x:num="0.20799999999999999">0.208</td>
  <td align=right x:num="0.21099999999999999">0.211</td>
  <td class=xl24 align=right x:num="5.5999999999999999E-3">0.56%</td>
  <td align=right x:num>84</td>
  <td></td>
  <td>[</td>
  <td>11]</td>
  <td>image-rgba</td>
  <td>paint_solid_rgb_source-512</td>
  <td align=right x:num>743</td>
  <td align=right x:num="0.20799999999999999">0.208</td>
  <td align=right x:num="0.21099999999999999">0.211</td>
  <td class=xl24 align=right x:num="9.7000000000000003E-3">0.97%</td>
  <td align=right x:num>79</td>
  <td></td>
  <td class=xl27 x:num x:fmla="=G14/Q14">1.000</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>12]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_over-512</td>
  <td align=right x:num>8038</td>
  <td align=right x:num="2.246">2.246</td>
  <td align=right x:num="2.2970000000000002">2.297</td>
  <td class=xl24 align=right x:num="0.1608">16.08%</td>
  <td align=right x:num>93</td>
  <td></td>
  <td>[</td>
  <td>12]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_over-512</td>
  <td align=right x:num>5150</td>
  <td align=right x:num="1.4390000000000001">1.439</td>
  <td align=right x:num="1.5580000000000001">1.558</td>
  <td class=xl24 align=right x:num="7.9899999999999999E-2">7.99%</td>
  <td align=right x:num>82</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.4743260590500642" x:fmla="=G15/Q15">1.474</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>13]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_source-512</td>
  <td align=right x:num>7435</td>
  <td align=right x:num="2.077">2.077</td>
  <td align=right x:num="2.1150000000000002">2.115</td>
  <td class=xl24 align=right x:num="0.17610000000000001">17.61%</td>
  <td align=right x:num>91</td>
  <td></td>
  <td>[</td>
  <td>13]</td>
  <td>image-rgba</td>
  <td>paint_image_rgb_source-512</td>
  <td align=right x:num>5133</td>
  <td align=right x:num="1.4339999999999999">1.434</td>
  <td align=right x:num>1.53</td>
  <td class=xl24 align=right x:num="8.4199999999999997E-2">8.42%</td>
  <td align=right x:num>84</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.3823529411764708" x:fmla="=G16/Q16">1.382</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>14]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_over-512</td>
  <td align=right x:num>7999</td>
  <td align=right x:num="2.2349999999999999">2.235</td>
  <td align=right x:num="2.4609999999999999">2.461</td>
  <td class=xl24 align=right x:num="0.15090000000000001">15.09%</td>
  <td align=right x:num>94</td>
  <td></td>
  <td>[</td>
  <td>14]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_over-512</td>
  <td align=right x:num>4924</td>
  <td align=right x:num="1.3759999999999999">1.376</td>
  <td align=right x:num="1.4159999999999999">1.416</td>
  <td class=xl24 align=right x:num="5.7799999999999997E-2">5.78%</td>
  <td align=right x:num>83</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.7379943502824859" x:fmla="=G17/Q17">1.738</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>15]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_source-512</td>
  <td align=right x:num>7386</td>
  <td align=right x:num="2.0630000000000002">2.063</td>
  <td align=right x:num="2.1819999999999999">2.182</td>
  <td class=xl24 align=right x:num="0.14899999999999999">14.90%</td>
  <td align=right x:num>90</td>
  <td></td>
  <td>[</td>
  <td>15]</td>
  <td>image-rgba</td>
  <td>paint_similar_rgb_source-512</td>
  <td align=right x:num>4907</td>
  <td align=right x:num="1.371">1.371</td>
  <td align=right x:num="1.4419999999999999">1.442</td>
  <td class=xl24 align=right x:num="6.3799999999999996E-2">6.38%</td>
  <td align=right x:num>82</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.5131761442441054" x:fmla="=G18/Q18">1.513</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>16]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_over-512</td>
  <td align=right x:num>38887</td>
  <td align=right x:num="10.864000000000001">10.864</td>
  <td align=right x:num="11.769">11.769</td>
  <td class=xl24 align=right x:num="0.12670000000000001">12.67%</td>
  <td align=right x:num>96</td>
  <td></td>
  <td>[</td>
  <td>16]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_over-512</td>
  <td align=right x:num>37161</td>
  <td align=right x:num="10.381">10.381</td>
  <td align=right x:num="11.077">11.077</td>
  <td class=xl24 align=right x:num="9.2600000000000002E-2">9.26%</td>
  <td align=right x:num>95</td>
  <td></td>
  <td class=xl27 style='mso-ignore:style;color:green;font-weight:700'
  x:num="1.0624717883903585" x:fmla="=G19/Q19">1.062</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>17]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_source-512</td>
  <td align=right x:num>38392</td>
  <td align=right x:num="10.725">10.725</td>
  <td align=right x:num="11.335000000000001">11.335</td>
  <td class=xl24 align=right x:num="0.09">9.00%</td>
  <td align=right x:num>94</td>
  <td></td>
  <td>[</td>
  <td>17]</td>
  <td>image-rgba</td>
  <td>paint_linear_rgb_source-512</td>
  <td align=right x:num>36023</td>
  <td align=right x:num="10.064">10.064</td>
  <td align=right x:num="10.913">10.913</td>
  <td class=xl24 align=right x:num="9.9099999999999994E-2">9.91%</td>
  <td align=right x:num>95</td>
  <td></td>
  <td class=xl27 x:num="1.0386694767708238" x:fmla="=G20/Q20">1.039</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>18]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_over-512</td>
  <td align=right x:num>133389</td>
  <td align=right x:num="37.264000000000003">37.264</td>
  <td align=right x:num="39.637">39.637</td>
  <td class=xl24 align=right x:num="4.07E-2">4.07%</td>
  <td align=right x:num>95</td>
  <td></td>
  <td>[</td>
  <td>18]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_over-512</td>
  <td align=right x:num>134373</td>
  <td align=right x:num="37.539000000000001">37.539</td>
  <td align=right x:num="39.128999999999998">39.129</td>
  <td class=xl24 align=right x:num="3.9300000000000002E-2">3.93%</td>
  <td align=right x:num>97</td>
  <td></td>
  <td class=xl27 x:num="1.0129826982544916" x:fmla="=G21/Q21">1.013</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='height:12.75pt'>[</td>
  <td>19]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_source-512</td>
  <td align=right x:num>138218</td>
  <td align=right x:num="38.613">38.613</td>
  <td align=right x:num="39.676000000000002">39.676</td>
  <td class=xl24 align=right x:num="5.8900000000000001E-2">5.89%</td>
  <td align=right x:num>100</td>
  <td></td>
  <td>[</td>
  <td>19]</td>
  <td>image-rgba</td>
  <td>paint_radial_rgb_source-512</td>
  <td align=right x:num>135091</td>
  <td align=right x:num>37.74</td>
  <td align=right x:num="39.277999999999999">39.278</td>
  <td class=xl24 align=right x:num="4.24E-2">4.24%</td>
  <td align=right x:num>95</td>
  <td></td>
  <td class=xl27 x:num="1.0101328988237692" x:fmla="=G22/Q22">1.010</td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <tr height=17 style='height:12.75pt'>
  <td height=17 colspan=7 style='height:12.75pt;mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=9 style='mso-ignore:colspan'></td>
  <td class=xl24></td>
  <td colspan=2 style='mso-ignore:colspan'></td>
  <td class=xl25></td>
 </tr>
 <![if supportMisalignedColumns]>
 <tr height=0 style='display:none'>
  <td width=11 style='width:8pt'></td>
  <td width=25 style='width:19pt'></td>
  <td width=104 style='width:78pt'></td>
  <td width=180 style='width:135pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=54 style='width:41pt'></td>
  <td width=75 style='width:56pt'></td>
  <td width=51 style='width:38pt'></td>
  <td width=60 style='width:45pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=11 style='width:8pt'></td>
  <td width=25 style='width:19pt'></td>
  <td width=71 style='width:53pt'></td>
  <td width=180 style='width:135pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=64 style='width:48pt'></td>
  <td width=153 style='width:115pt'></td>
 </tr>
 <![endif]>
</table>

</body>

</html>

--Boundary_(ID_Bl9oG+c0xDQmOa+5fKdTeQ)--


More information about the cairo mailing list