<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>RE: The update of the &quot;Xorg-geode-screensaver&quot; issue and Repair the chaos phenomena transition process about desktop to screensaver</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">Hunk</FONT><FONT COLOR="#000080" SIZE=2 FACE="Arial">,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR="#000080" SIZE=2 FACE="Arial">Please check your client application if it has a bug.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR="#000080" SIZE=2 FACE="Arial">If that is not so, modifying the client application is not a good choice</FONT><FONT COLOR="#000080" SIZE=2 FACE="Arial">.</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial"></FONT> <FONT COLOR="#000080" SIZE=2 FACE="Arial">For my opinion, the</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"> <FONT COLOR="#000080" SIZE=2 FACE="Arial">gamma parameter which is given to Server is not wrong.</FONT> <FONT COLOR="#000080" SIZE=2 FACE="Arial">It</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">’</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">s a normal value for doing fading</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">…</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR="#000080" SIZE=2 FACE="Arial">I</FONT> <FONT COLOR="#000080" SIZE=2 FACE="Arial">suggest you still need more research on server side code,</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"> <FONT COLOR="#000080" SIZE=2 FACE="Arial">especially</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial"></FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"> <FONT COLOR="#000080" SIZE=2 FACE="Arial">the geode driver part.</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">Thanks,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#000080" SIZE=2 FACE="Arial">Frank</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma">_____________________________________________<BR>
</FONT></SPAN><SPAN LANG="en-us"><B></B></SPAN><SPAN LANG="en-us"><B><FONT SIZE=2 FACE="Tahoma">From:</FONT></B></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> Cui, Hunk<BR>
</FONT></SPAN><SPAN LANG="en-us"><B></B></SPAN><SPAN LANG="en-us"><B><FONT SIZE=2 FACE="Tahoma">Sent:</FONT></B></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> 2010</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="宋体">年</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma">5</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="宋体">月</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma">24</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="宋体">日</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> 15:47<BR>
</FONT></SPAN><SPAN LANG="en-us"><B></B></SPAN><SPAN LANG="en-us"><B><FONT SIZE=2 FACE="Tahoma">To:</FONT></B></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> xorg-driver-geode@lists.x.org<BR>
</FONT></SPAN><SPAN LANG="en-us"><B></B></SPAN><SPAN LANG="en-us"><B><FONT SIZE=2 FACE="Tahoma">Cc:</FONT></B></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> Huang, FrankR; Torres, Rigo; Mart Raudsepp; Ni, John; Xie, Michael; Writer, Tim<BR>
</FONT></SPAN><SPAN LANG="en-us"><B></B></SPAN><SPAN LANG="en-us"><B><FONT SIZE=2 FACE="Tahoma">Subject:</FONT></B></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Tahoma"> The update of the &quot;Xorg-ge</FONT><FONT SIZE=2 FACE="Tahoma">ode-screensaver&quot; issue and Repair the chaos phenomena transition process about desktop to screensaver</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">Hi, all,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">1).</FONT> <FONT SIZE=2 FACE="Arial">The update of the &quot;Xorg-geode-screensaver&quot; issue</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">Through communication with</FONT> <FONT SIZE=2 FACE="Arial">TSDB and xorg-devel</FONT><FONT SIZE=2 FACE="Arial">, I have a certain understanding of this Gam</FONT><FONT SIZE=2 FACE="Arial">ma correction RAM (PAR &amp; PDR registers) principle. All the gamma-related calls, as they are currently implemented, eventually results in writes to the hardware CLUT (Color Lookup Tables) which translates pixel values to actual electrical output values. &quot;G</FONT><FONT SIZE=2 FACE="Arial">a</FONT><FONT SIZE=2 FACE="Arial">mma correction&quot; is just one of the things can do by modifying the values in the table. Different hardware has different sized CLUTs.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">Some have 8 bits CLUTs (In our Geode-driver, PAD register, 256 bytes space), other may have 10 bits (1024 bytes) and other</FONT><FONT SIZE=2 FACE="Arial"> may have 16 bits. So we store it as a CARD16 and let the driver decide how may bits thy support.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">A client App make a &quot;gamma correction&quot; call, server generates a new CLUTs with 16 bits of precision per channel, then the driver takes this and truncates to</FONT> <FONT SIZE=2 FACE="Arial">whatever precision the hardware can actually take. Because the gamma ramp is less precise than 16 bits in our geode-driver. the R,G,B originality values are 16 bits per channel. When the values are transfered to the driver layer, they will be dealed with</FONT> <FONT SIZE=2 FACE="Arial">t</FONT><FONT SIZE=2 FACE="Arial">hrough &quot;val = (*red &lt;&lt; 8) | *green | (*blue&gt;&gt;8);&quot; because the &quot;val&quot; will be writen into Gamma correction RAM register (the type of hardware register: Each of the entries are made up of corrections for R/G/B. Within the DWORD, the red correction is in b[23</FONT><FONT SIZE=2 FACE="Arial">:</FONT><FONT SIZE=2 FACE="Arial">16], green in b[15:8] and blue in b[7:0]). Finally, our driver is allowed to truncate.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">As a typical use case the CLUTs should be able to pass through each value unaltered.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">About different between Graphic data and Video data, in 33234_LX_databook -&gt;P209 I</FONT><FONT SIZE=2 FACE="Arial">ntegrated Functions Block Diagram, there are two seperate frame buffers, graphics and video. Assuming both are active, these two streams are mixed before being sent to the monitor. Before the mixing, one or the other but not both can be color adjusted usi</FONT><FONT SIZE=2 FACE="Arial">n</FONT><FONT SIZE=2 FACE="Arial">g the Gamma Correction RAM.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">Now the screensaver belong to the Graphic data, the data will come into the Gamma Correction RAM, because the luminance generated by a physical device is generally not a linear function of the applied signal, when the Gamma Co</FONT><FONT SIZE=2 FACE="Arial">rrection RAM is enabled for graphics use, the data byte of original color is used as an address into the Gamma Correction RAM which produces a new byte of data, a new color intensity.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">As the screensaver source code (Client App) are more complex, It is har</FONT><FONT SIZE=2 FACE="Arial">d to trace the major data transfer from Client to Xserver, I have found a simple Client App about Gamma and modified it (In attachment file). And use DDD-tools, go on to debugging the Gamma client program and Xserver. Finally found the Gamma values be cal</FONT><FONT SIZE=2 FACE="Arial">c</FONT><FONT SIZE=2 FACE="Arial">ulated in &quot;gamma_to_ramp&quot; function and produced the 256 bytes data (16-bit). It will be writen to the &quot;Geode driver -&gt; lx_crtc_gamma_set function&quot;, The amend method see below:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Times New Roman">&nbsp;&lt;&lt; File: test-gamma_client-App.rar &gt;&gt;</FONT></SPAN><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"> </SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">static void</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">lx_crtc_gamma_set(xf86CrtcPt</FONT><FONT SIZE=2 FACE="Arial">r crtc, CARD16 * red, CARD16 * green,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; CARD16 * blue, int size)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">{</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; unsigned int dcfg;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; int i;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">DebugP(&quot;lx_crtc_gamma_set /by Hunk\n&quot;);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; assert(size == 256);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 256; i++) {</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT> <FONT SIZE=2 FACE="Arial">unsigned int val = (*red &lt;&lt; 8) | *green | (*blue &gt;&gt; 8);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int val = (*(red++) &lt;&lt; 8) | *(green++) | (*(blue++) &gt;&gt; 8);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">df_set_video_palette_entry(i, val); //Screensaver bug keypoint by Hunk</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; /* df_set_video_palette_entry automatically tu</FONT><FONT SIZE=2 FACE="Arial">rns on</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp; * gamma for video - if this gets called, we assume that</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp; * RandR wants it set for graphics, so reverse cimarron</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp; */</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; dcfg = READ_VID32(DF_DISPLAY_CONFIG);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; dcfg &amp;= ~DF_DCFG_GV_PAL_BYP;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; WRITE_VID32(DF_DISPLAY_CONFIG, dcfg);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">}</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">Now the update methods have been test in Ubuntu desktop and Fedora desktop. (properly display)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">2).</FONT> <FONT SIZE=2 FACE="Arial">Repair the chaos phenomena transition process about desktop to screensaver</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">When the system desktop have been triggered the screensaver, it have a</FONT> <FONT SIZE=2 FACE="Arial">tra</FONT><FONT SIZE=2 FACE="Arial">nsition process</FONT><FONT SIZE=2 FACE="Arial">, the display turn chaos and fading to Gamma correction values (1.0 -&gt; 0.01). Debugging the xscreensaver App, I found the client will call “</FONT><FONT SIZE=2 FACE="Arial">xf86GetGammaRamp -&gt; RRCrtcGammaGet -&gt;xf86RandR12CrtcGetGamma”</FONT><FONT SIZE=2 FACE="Arial"> to get the Xserver default Gamma Correc</FONT><FONT SIZE=2 FACE="Arial">tion RAM tables, it will be read into client. In client app, the dates of tables will be multiply a</FONT> <FONT SIZE=2 FACE="Arial">coefficient</FONT><FONT SIZE=2 FACE="Arial"> (the</FONT> <FONT SIZE=2 FACE="Arial">coefficient</FONT><FONT SIZE=2 FACE="Arial"> is from 1.0 to 0.01). </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">The</FONT> <FONT SIZE=2 FACE="Arial">implement</FONT><FONT SIZE=2 FACE="Arial"> process is “</FONT><FONT SIZE=2 FACE="Arial">main -&gt; main_loop -&gt;blank_screen -&gt; raise_windows -&gt; fade_screens -&gt; xf86_gamm</FONT><FONT SIZE=2 FACE="Arial">a_fade -&gt; xf86_gamma_fade -&gt; tables values multiply a</FONT> <FONT SIZE=2 FACE="Arial">coefficient</FONT><FONT SIZE=2 FACE="Arial"> -&gt; XF86VidModeSetGammaRamp”</FONT><FONT SIZE=2 FACE="Arial">.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">Repair methods: (fade.c -&gt; xf86_gamma_fade function)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp; /* Iterate by steps of the animation... */</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp; for (i = (out_p ? steps : 0);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (out_p ? i &gt; 0 : i &lt; steps);</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (out_p ? i-- : i++))</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; {</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (screen = 0; screen &lt; nscreens; screen++)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">{</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT> <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; xf86_whack_gamma(dpy, screen, &amp;info[screen],</FONT><FONT SIZE=2 FACE="Arial"></FONT> <FONT SIZE=2 FACE="Arial">(((float)i) / ((float)steps)));</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT> <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; xf86_whack_gamma(dpy, screen, &amp;info[screen</FONT><FONT SIZE=2 FACE="Arial">], 1.0); /* changed by Hunk */</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">Now, through the two steps, the</FONT> <FONT SIZE=2 FACE="Arial">phenomena</FONT><FONT SIZE=2 FACE="Arial"> exhibit right from desktop to screensaver.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">3). Welcome everyone test the code. </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Arial">Find some more other Gamma test App (client program) to reproduce every possible instance based on</FONT> <FONT SIZE=2 FACE="Arial">Graphic data.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"></SPAN></P>

</BODY>
</HTML>