Back to index

radiance  4R0+20100331
nff2rad.c
Go to the documentation of this file.
00001 #ifndef lint
00002 static const char    RCSid[] = "$Id: nff2rad.c,v 2.7 2003/11/15 17:54:06 schorsch Exp $";
00003 #endif
00004 /*
00005  * Convert Neutral File Format input to Radiance scene description.
00006  *
00007  *     12/9/90              Greg Ward
00008  *     02/7/92         Peter Averkamp added X11(MTV)color names & 
00009  *                      fixed some lf's for direct import of MTV 
00010  *                      source files
00011  */
00012 
00013 /******************************************************************
00014 
00015 Since Eric Haines wrote such excellent documentation of his
00016 Neutral File Format, I am just going to reprint it here with
00017 my added comments in braces {}.
00018 
00019 Neutral File Format (NFF), by Eric Haines
00020 
00021 Draft document #1, 10/3/88
00022 
00023 The NFF (Neutral File Format) is designed as a minimal scene description
00024 language.  The language was designed in order to test various rendering
00025 algorithms and efficiency schemes.  It is meant to describe the geometry and
00026 basic surface characteristics of objects, the placement of lights, and the
00027 viewing frustum for the eye.  Some additional information is provided for
00028 esthetic reasons (such as the color of the objects, which is not strictly
00029 necessary for testing rendering algorithms).
00030 
00031 Future enhancements include:  circle and torus objects, spline surfaces
00032 with trimming curves, directional lights, characteristics for positional
00033 lights, CSG descriptions, and probably more by the time you read this.
00034 Comments, suggestions, and criticisms are all welcome.
00035 
00036 At present the NFF file format is used in conjunction with the SPD (Standard
00037 Procedural Database) software, a package designed to create a variety of
00038 databases for testing rendering schemes.  The SPD package is available
00039 from Netlib and via ftp from drizzle.cs.uoregon.edu.  For more information
00040 about SPD see "A Proposal for Standard Graphics Environments," IEEE Computer
00041 Graphics and Applications, vol. 7, no. 11, November 1987, pp. 3-5.
00042 
00043 By providing a minimal interface, NFF is meant to act as a simple format to
00044 allow the programmer to quickly write filters to move from NFF to the
00045 local file format.  Presently the following entities are supported:
00046      A simple perspective frustum
00047      A positional (vs. directional) light source description
00048      A background color description
00049      A surface properties description
00050      Polygon, polygonal patch, cylinder/cone, and sphere descriptions
00051 
00052 Files are output as lines of text.  For each entity, the first line
00053 defines its type.  The rest of the first line and possibly other lines
00054 contain further information about the entity.  Entities include:
00055 
00056 "v"  - viewing vectors and angles  { optionally creates view file }
00057 "l"  - positional light location   { it's there, but bad to use }
00058 "b"  - background color                   { ditto }
00059 "f"  - object material properties  { this is flakey }
00060 "c"  - cone or cylinder primitive
00061 "s"  - sphere primitive
00062 "p"  - polygon primitive
00063 "pp" - polygonal patch primitive   { interpreted same as p for now }
00064 
00065 These are explained in depth below:       { see conversion routines }
00066 
00067 ***********************************************************************/
00068 
00069 #include <stdlib.h>
00070 #include <stdio.h>
00071 #include <string.h>
00072 
00073 #include "rtmath.h"
00074 
00075 typedef double Flt ;
00076 typedef Flt Vec[3] ;
00077 typedef Vec Point ;
00078 typedef Vec Color ;
00079 
00080 #define VecCopy(a,b)     (b)[0]=(a)[0];(b)[1]=(a)[1];(b)[2]=(a)[2];
00081 #define              NCOLORS              (738)
00082 
00083 typedef struct t_color_entry {
00084        char * ce_name ;
00085        Vec    ce_color ;
00086 } ColorEntry ;
00087 
00088 #define LESS_THAN -1
00089 #define GREATER_THAN 1
00090 #define EQUAL_TO 0
00091 
00092 char   *viewfile = NULL;    /* view parameters file */
00093 
00094 char   *progname;
00095 
00096 void init(void);
00097 void nff2rad(void);
00098 void comment(void);
00099 void view(void);
00100 void light(void);
00101 void background(void);
00102 void fill(void);
00103 void cone(void);
00104 void sphere(void);
00105 void poly(void);
00106 int LookupColorByName(char * name, Vec color);
00107 int BinarySearch(char * name, int l, int h, ColorEntry array[]);
00108 
00109 
00110 int
00111 main(         /* convert NFF file to Radiance */
00112        int    argc,
00113        char   *argv[]
00114 )
00115 {
00116        int    i;
00117        
00118        progname = argv[0];
00119        for (i = 1; i < argc; i++)
00120               if (argc-i > 1 && !strcmp(argv[i], "-vf"))
00121                      viewfile = argv[++i];
00122               else if (!strncmp(argv[i], "-h",2))
00123                      goto userr;
00124               else
00125                      break;
00126        if (argc-i > 1)
00127               goto userr;
00128        if (argc-i == 1 && freopen(argv[i], "r", stdin) == NULL) {
00129               perror(argv[i]);
00130               exit(1);
00131        }
00132        init();
00133        nff2rad();
00134        exit(0);
00135 userr:
00136        fprintf(stderr, "Usage: %s [-vf viewfile] [input]\n", progname);
00137        exit(1);
00138 }
00139 
00140 
00141 void
00142 init(void)                  /* spit out initial definitions */
00143 {
00144        printf("# File created by %s\n", progname);
00145        printf("\nvoid light light\n");
00146        printf("0\n0\n3 1e6 1e6 1e6\n");
00147        printf("\nvoid plastic fill\n");
00148        printf("0\n0\n5 .5 .5 .5 0 0\n");
00149 }
00150 
00151 
00152 void
00153 nff2rad(void)        /* convert NFF on stdin to Radiance on stdout */
00154 {
00155        register int  c;
00156        
00157        while ((c = getchar()) != EOF)
00158               switch (c) {
00159               case ' ':                   /* white space */
00160               case '\t':
00161               case '\n':
00162               case '\f':
00163               case '\r':
00164                      continue;
00165               case '#':                   /* comment */
00166                      comment();
00167                      break;
00168               case 'v':                   /* view point */
00169                      view();
00170                      break;
00171               case 'l':                   /* light source */
00172                      light();
00173                      break;
00174               case 'b':                   /* background color */
00175                      background();
00176                      break;
00177               case 'f':                   /* fill material */
00178                      fill();
00179                      break;
00180               case 'c':                   /* cylinder or cone */
00181                      cone();
00182                      break;
00183               case 's':                   /* sphere */
00184                      sphere();
00185                      break;
00186               case 'p':                   /* polygon or patch */
00187                      poly();
00188                      break;
00189               default:                    /* unknown */
00190                      fprintf(stderr, "%c: unknown NFF primitive\n", c);
00191                      exit(1);
00192               }
00193 }
00194 
00195 
00196 /*******************************************
00197 
00198 Comment.  Description:
00199     "#" [ string ]
00200 
00201 Format:
00202     # [ string ]
00203 
00204     As soon as a "#" character is detected, the rest of the line is considered
00205     a comment.
00206     
00207 ******************/
00208 
00209 void
00210 comment(void)
00211 {
00212        register int  c;
00213        
00214        putchar('#');
00215        while ((c = getchar()) != EOF) {
00216               putchar(c);
00217               if (c == '\n')
00218                      break;
00219        }
00220 }
00221 
00222 
00223 /***************************************************
00224 
00225 Viewpoint location.  Description:
00226     "v"
00227     "from" Fx Fy Fz
00228     "at" Ax Ay Az
00229     "up" Ux Uy Uz
00230     "angle" angle
00231     "hither" hither
00232     "resolution" xres yres
00233 
00234 Format:
00235 
00236     v
00237     from %g %g %g
00238     at %g %g %g
00239     up %g %g %g
00240     angle %g
00241     hither %g
00242     resolution %d %d
00243 
00244 The parameters are:
00245 
00246     From:  the eye location in XYZ.
00247     At:    a position to be at the center of the image, in XYZ world
00248           coordinates.  A.k.a. "lookat".
00249     Up:    a vector defining which direction is up, as an XYZ vector.
00250     Angle: in degrees, defined as from the center of top pixel row to
00251           bottom pixel row and left column to right column.
00252     Resolution: in pixels, in x and in y.
00253 
00254   Note that no assumptions are made about normalizing the data (e.g. the
00255   from-at distance does not have to be 1).  Also, vectors are not
00256   required to be perpendicular to each other.
00257 
00258   For all databases some viewing parameters are always the same:
00259     Yon is "at infinity."
00260     Aspect ratio is 1.0.
00261 
00262   A view entity must be defined before any objects are defined (this
00263   requirement is so that NFF files can be used by hidden surface machines).
00264 
00265 ***************/
00266 
00267 void
00268 view(void)
00269 {
00270        static FILE   *fp = NULL;
00271        float  from[3], at[3], up[3], angle;
00272        
00273        if (scanf(" from %f %f %f", &from[0], &from[1], &from[2]) != 3)
00274               goto fmterr;
00275        if (scanf(" at %f %f %f", &at[0], &at[1], &at[2]) != 3)
00276               goto fmterr;
00277        if (scanf(" up %f %f %f", &up[0], &up[1], &up[2]) != 3)
00278               goto fmterr;
00279        if (scanf(" angle %f", &angle) != 1)
00280               goto fmterr;
00281        scanf(" hither %*f");
00282        scanf(" resolution %*d %*d");
00283        if (viewfile != NULL) {
00284               if (fp == NULL && (fp = fopen(viewfile, "a")) == NULL) {
00285                      perror(viewfile);
00286                      exit(1);
00287               }
00288               fprintf(fp,
00289        "VIEW= -vp %g %g %g -vd %g %g %g -vu %g %g %g -vh %g -vv %g\n",
00290                             from[0], from[1], from[2],
00291                             at[0]-from[0], at[1]-from[1], at[2]-from[2],
00292                             up[0], up[1], up[2],
00293                             angle, angle);
00294        }
00295        return;
00296 fmterr:
00297        fprintf(stderr, "%s: view syntax error\n", progname);
00298        exit(1);
00299 }
00300 
00301 
00302 /********************************
00303 
00304 Positional light.  A light is defined by XYZ position.  Description:
00305     "l" X Y Z
00306 
00307 Format:
00308     l %g %g %g
00309 
00310     All light entities must be defined before any objects are defined (this
00311     requirement is so that NFF files can be used by hidden surface machines).
00312     Lights have a non-zero intensity of no particular value [this definition
00313     may change soon, with the addition of an intensity and/or color].
00314 
00315 **************************/
00316 
00317 void
00318 light(void)
00319 {
00320        static int    nlights = 0;
00321        register int  c;
00322        float  x, y, z;
00323 
00324        if (scanf("%f %f %f",&x, &y, &z) != 3) {
00325            fprintf(stderr, "%s: light source syntax error\n", progname);
00326            exit(1);
00327        }
00328        while ((c = getchar()) != EOF && c != '\n')
00329               ;
00330        printf("\nlight sphere l%d \n", ++nlights);
00331        printf("0\n0\n4 %g %g %g .01\n", x, y, z);
00332 }
00333 
00334 
00335 /**************************************************
00336 
00337 Background color.  A color is simply RGB with values between 0 and 1:
00338     "b" R G B
00339 
00340 Format:
00341     b %g %g %g
00342 
00343     If no background color is set, assume RGB = {0,0,0}.
00344 
00345 ********************/
00346 
00347 void
00348 background(void)
00349 {
00350        float  r, g, b;
00351        char colname[50];
00352        double cvec[3];
00353 
00354        if (scanf("%s", colname) != 1) {
00355            fprintf(stderr,"%s: background syntax error\n",progname);exit(1);
00356        }
00357         if(LookupColorByName(colname,cvec)==1){
00358            r=cvec[0];g=cvec[1];b=cvec[2];
00359        }else{
00360            if(sscanf(colname,"%f",&r)!=1 ||
00361               scanf("%f %f", &g, &b) !=2) {
00362               fprintf(stderr, "%s: background syntax error\n", progname);
00363               exit(1);
00364            }
00365        }
00366        printf("\nvoid glow backg_color\n");
00367        printf("0\n0\n4 %g %g %g 0\n", r, g, b);
00368        printf("\nbackg_color source background\n");
00369        printf("0\n0\n4 0 0 1 360\n");
00370 }
00371 
00372 
00373 /****************************************************
00374 
00375 Fill color and shading parameters.  Description:
00376      "f" red green blue Kd Ks Shine T index_of_refraction
00377 
00378 Format:
00379     f %g %g %g %g %g %g %g %g
00380 
00381     RGB is in terms of 0.0 to 1.0.
00382 
00383     Kd is the diffuse component, Ks the specular, Shine is the Phong cosine
00384     power for highlights, T is transmittance (fraction of light passed per
00385     unit).  Usually, 0 <= Kd <= 1 and 0 <= Ks <= 1, though it is not required
00386     that Kd + Ks == 1.  Note that transmitting objects ( T > 0 ) are considered
00387     to have two sides for algorithms that need these (normally objects have
00388     one side).
00389   
00390     The fill color is used to color the objects following it until a new color
00391     is assigned.
00392 
00393 *********************/
00394 
00395 void
00396 fill(void)
00397 {
00398        float  r, g, b, d, s, p, t, n;
00399        char colname[50];
00400        double cvec[3];
00401 
00402        if (scanf("%s", colname) != 1) {
00403            fprintf(stderr,"%s: fill syntax error\n",progname);exit(1);
00404        }
00405         if(LookupColorByName(colname,cvec)==1){
00406            r=cvec[0];g=cvec[1];b=cvec[2];
00407        }else{
00408            if(sscanf(colname,"%f",&r)!=1 ||
00409               scanf("%f %f", &g, &b) !=2) {
00410               fprintf(stderr, "%s: fill syntax error\n", progname);
00411               exit(1);
00412            }
00413        }
00414        if (scanf("%f %f %f %f %f", &d, &s, &p, &t, &n) != 5) {
00415               fprintf(stderr, "%s: fill material syntax error\n", progname);
00416               exit(1);
00417        }
00418        if (p > 1.)
00419               p = 1./p;
00420        if (t > .001) {             /* has transmission */
00421               if (n > 1.1) {              /* has index of refraction */
00422                      printf("\nvoid dielectric fill\n");
00423                      printf("0\n0\n5 %g %g %g %g 0\n", r, g, b, n);
00424               } else {             /* transmits w/o refraction */
00425                      printf("\nvoid trans fill\n");
00426                      printf("0\n0\n7 %g %g %g %g 0 %g 1\n",
00427                                    r*d, g*d, b*d, s, t);
00428               }
00429        } else {             /* no transmission */
00430               printf("\nvoid plastic fill\n");
00431               printf("0\n0\n5 %g %g %g %g %g\n", r*d, g*d, b*d, s, p);
00432        }
00433 }
00434 
00435 
00436 /*****************************************************
00437 
00438 Cylinder or cone.  A cylinder is defined as having a radius and an axis
00439     defined by two points, which also define the top and bottom edge of the
00440     cylinder.  A cone is defined similarly, the difference being that the apex
00441     and base radii are different.  The apex radius is defined as being smaller
00442     than the base radius.  Note that the surface exists without endcaps.  The
00443     cone or cylinder description:
00444 
00445     "c"
00446     base.x base.y base.z base_radius
00447     apex.x apex.y apex.z apex_radius
00448 
00449 Format:
00450     c
00451     %g %g %g %g
00452     %g %g %g %g
00453 
00454     A negative value for both radii means that only the inside of the object is
00455     visible (objects are normally considered one sided, with the outside
00456     visible).  Note that the base and apex cannot be coincident for a cylinder
00457     or cone.
00458 
00459 ************************/
00460 
00461 void
00462 cone(void)
00463 {
00464        static int    ncs = 0;
00465        int    invert;
00466        float  x0, y0, z0, x1, y1, z1, r0, r1;
00467        
00468        if (scanf("%f %f %f %f %f %f %f %f", &x0, &y0, &z0, &r0,
00469                      &x1, &y1, &z1, &r1) != 8) {
00470               fprintf(stderr, "%s: cylinder or cone syntax error\n",
00471                             progname);
00472               exit(1);
00473        }
00474        if ( (invert = r0 < 0.) ) {
00475               r0 = -r0;
00476               r1 = -r1;
00477        }
00478        if (r0-r1 < .001 && r1-r0 < .001) {       /* cylinder */
00479               printf("\nfill %s c%d \n", invert?"tube":"cylinder", ++ncs);
00480               printf("0\n0\n7\n");
00481               printf("\t%g\t%g\t%g\n", x0, y0, z0);
00482               printf("\t%g\t%g\t%g\n", x1, y1, z1);
00483               printf("\t%g\n", r0);
00484        } else {                           /* cone */
00485               printf("\nfill %s c%d \n", invert?"cup":"cone", ++ncs);
00486               printf("0\n0\n8\n");
00487               printf("\t%g\t%g\t%g\n", x0, y0, z0);
00488               printf("\t%g\t%g\t%g\n", x1, y1, z1);
00489               printf("\t%g\t%g\n", r0, r1);
00490        }
00491 }
00492 
00493 
00494 /*****************************************
00495 
00496 Sphere.  A sphere is defined by a radius and center position:
00497     "s" center.x center.y center.z radius
00498 
00499 Format:
00500     s %g %g %g %g
00501 
00502     If the radius is negative, then only the sphere's inside is visible
00503     (objects are normally considered one sided, with the outside visible).
00504 
00505 ******************/
00506 
00507 void
00508 sphere(void)
00509 {
00510        static int    nspheres = 0;
00511        float  x, y, z, r;
00512        
00513        if (scanf("%f %f %f %f", &x, &y, &z, &r) != 4) {
00514               fprintf(stderr, "%s: sphere syntax error\n", progname);
00515               exit(1);
00516        }
00517        if (r < 0.) {
00518               printf("\nfill bubble s%d \n", ++nspheres);
00519               printf("0\n0\n4 %g %g %g %g\n", x, y, z, -r);
00520        } else {
00521               printf("\nfill sphere s%d \n", ++nspheres);
00522               printf("0\n0\n4 %g %g %g %g\n", x, y, z, r);
00523        }
00524 }
00525 
00526 
00527 /*********************************************
00528 
00529 Polygon.  A polygon is defined by a set of vertices.  With these databases,
00530     a polygon is defined to have all points coplanar.  A polygon has only
00531     one side, with the order of the vertices being counterclockwise as you
00532     face the polygon (right-handed coordinate system).  The first two edges
00533     must form a non-zero convex angle, so that the normal and side visibility
00534     can be determined.  Description:
00535 
00536     "p" total_vertices
00537     vert1.x vert1.y vert1.z
00538     [etc. for total_vertices vertices]
00539 
00540 Format:
00541     p %d
00542     [ %g %g %g ] <-- for total_vertices vertices
00543 
00544 --------
00545 
00546 Polygonal patch.  A patch is defined by a set of vertices and their normals.
00547     With these databases, a patch is defined to have all points coplanar.
00548     A patch has only one side, with the order of the vertices being
00549     counterclockwise as you face the patch (right-handed coordinate system).
00550     The first two edges must form a non-zero convex angle, so that the normal
00551     and side visibility can be determined.  Description:
00552 
00553     "pp" total_vertices
00554     vert1.x vert1.y vert1.z norm1.x norm1.y norm1.z
00555     [etc. for total_vertices vertices]
00556 
00557 Format:
00558     pp %d
00559     [ %g %g %g %g %g %g ] <-- for total_vertices vertices
00560 
00561 *******************/
00562 
00563 void
00564 poly(void)
00565 {
00566        static int    npolys = 0;
00567        int    ispatch;
00568        int    nverts;
00569        float  x, y, z;
00570        
00571        ispatch = getchar();
00572        if (ispatch != 'p') {
00573               ungetc(ispatch, stdin);
00574               ispatch = 0;
00575        }
00576        if (scanf("%d", &nverts) != 1)
00577               goto fmterr;
00578        printf("\nfill polygon p%d \n", ++npolys);
00579        printf("0\n0\n%d\n", 3*nverts);
00580        while (nverts-- > 0) {
00581               if (scanf("%f %f %f", &x, &y, &z) != 3)
00582                      goto fmterr;
00583               if (ispatch)
00584                      scanf("%*f %*f %*f");
00585               printf("\t%g\t%g\t%g\n", x, y, z);
00586        }
00587        return;
00588 fmterr:
00589        fprintf(stderr, "%s: polygon or patch syntax error\n", progname);
00590        exit(1);
00591 }
00592 /***********************************************************************
00593  * $Author: schorsch $ (Mark VandeWettering, drizzle.cs.uoregon.edu)
00594  * $Revision: 2.7 $
00595  * $Date: 2003/11/15 17:54:06 $
00596  * $Log: nff2rad.c,v $
00597  * Revision 2.7  2003/11/15 17:54:06  schorsch
00598  * Continued ANSIfication and reduced compile warnings.
00599  *
00600  * Revision 2.6  2003/07/27 22:12:01  schorsch
00601  * Added grouping parens to reduce ambiguity warnings.
00602  *
00603  * Revision 2.5  2003/02/22 02:07:23  greg
00604  * Changes and check-in for 3.5 release
00605  * Includes new source files and modifications not recorded for many years
00606  * See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release
00607  *
00608  * Revision 1.2  88/09/12  12:53:47  markv
00609  * Fixed problem in LookupColorbyName, had return ; and return(0).
00610  * [ Thank you lint! ]
00611  * 
00612  * Revision 1.1  88/09/11  11:00:37  markv
00613  * Initial revision
00614  * 
00615  * Peter Averkamp 92/02/01
00616  * added complete X11R5 rgb.txt-table, hacked standalone version 
00617  * for nff2rad
00618  * 
00619  ***********************************************************************/
00620 
00621 /*
00622  * Note: These colors must be in sorted order, because we binary search
00623  * for them.
00624  *
00625  * They were swiped from the X-11 distribution.  Sorry....
00626  */
00627 
00628 ColorEntry Colors[] = {
00629 {"AliceBlue",  {0.941176 , 0.972549 , 1.000000 }},
00630 {"AntiqueWhite",  {0.980392 , 0.921569 , 0.843137 }},
00631 {"AntiqueWhite1",  {1.000000 , 0.937255 , 0.858824 }},
00632 {"AntiqueWhite2",  {0.933333 , 0.874510 , 0.800000 }},
00633 {"AntiqueWhite3",  {0.803922 , 0.752941 , 0.690196 }},
00634 {"AntiqueWhite4",  {0.545098 , 0.513725 , 0.470588 }},
00635 {"BlanchedAlmond",  {1.000000 , 0.921569 , 0.803922 }},
00636 {"BlueViolet",  {0.541176 , 0.168627 , 0.886275 }},
00637 {"CadetBlue",  {0.372549 , 0.619608 , 0.627451 }},
00638 {"CadetBlue1",  {0.596078 , 0.960784 , 1.000000 }},
00639 {"CadetBlue2",  {0.556863 , 0.898039 , 0.933333 }},
00640 {"CadetBlue3",  {0.478431 , 0.772549 , 0.803922 }},
00641 {"CadetBlue4",  {0.325490 , 0.525490 , 0.545098 }},
00642 {"CornflowerBlue",  {0.392157 , 0.584314 , 0.929412 }},
00643 {"DarkGoldenrod",  {0.721569 , 0.525490 , 0.043137 }},
00644 {"DarkGoldenrod1",  {1.000000 , 0.725490 , 0.058824 }},
00645 {"DarkGoldenrod2",  {0.933333 , 0.678431 , 0.054902 }},
00646 {"DarkGoldenrod3",  {0.803922 , 0.584314 , 0.047059 }},
00647 {"DarkGoldenrod4",  {0.545098 , 0.396078 , 0.031373 }},
00648 {"DarkGreen",  {0.000000 , 0.392157 , 0.000000 }},
00649 {"DarkKhaki",  {0.741176 , 0.717647 , 0.419608 }},
00650 {"DarkOliveGreen",  {0.333333 , 0.419608 , 0.184314 }},
00651 {"DarkOliveGreen1",  {0.792157 , 1.000000 , 0.439216 }},
00652 {"DarkOliveGreen2",  {0.737255 , 0.933333 , 0.407843 }},
00653 {"DarkOliveGreen3",  {0.635294 , 0.803922 , 0.352941 }},
00654 {"DarkOliveGreen4",  {0.431373 , 0.545098 , 0.239216 }},
00655 {"DarkOrange",  {1.000000 , 0.549020 , 0.000000 }},
00656 {"DarkOrange1",  {1.000000 , 0.498039 , 0.000000 }},
00657 {"DarkOrange2",  {0.933333 , 0.462745 , 0.000000 }},
00658 {"DarkOrange3",  {0.803922 , 0.400000 , 0.000000 }},
00659 {"DarkOrange4",  {0.545098 , 0.270588 , 0.000000 }},
00660 {"DarkOrchid",  {0.600000 , 0.196078 , 0.800000 }},
00661 {"DarkOrchid1",  {0.749020 , 0.243137 , 1.000000 }},
00662 {"DarkOrchid2",  {0.698039 , 0.227451 , 0.933333 }},
00663 {"DarkOrchid3",  {0.603922 , 0.196078 , 0.803922 }},
00664 {"DarkOrchid4",  {0.407843 , 0.133333 , 0.545098 }},
00665 {"DarkSalmon",  {0.913725 , 0.588235 , 0.478431 }},
00666 {"DarkSeaGreen",  {0.560784 , 0.737255 , 0.560784 }},
00667 {"DarkSeaGreen1",  {0.756863 , 1.000000 , 0.756863 }},
00668 {"DarkSeaGreen2",  {0.705882 , 0.933333 , 0.705882 }},
00669 {"DarkSeaGreen3",  {0.607843 , 0.803922 , 0.607843 }},
00670 {"DarkSeaGreen4",  {0.411765 , 0.545098 , 0.411765 }},
00671 {"DarkSlateBlue",  {0.282353 , 0.239216 , 0.545098 }},
00672 {"DarkSlateGray",  {0.184314 , 0.309804 , 0.309804 }},
00673 {"DarkSlateGray1",  {0.592157 , 1.000000 , 1.000000 }},
00674 {"DarkSlateGray2",  {0.552941 , 0.933333 , 0.933333 }},
00675 {"DarkSlateGray3",  {0.474510 , 0.803922 , 0.803922 }},
00676 {"DarkSlateGray4",  {0.321569 , 0.545098 , 0.545098 }},
00677 {"DarkSlateGrey",  {0.184314 , 0.309804 , 0.309804 }},
00678 {"DarkTurquoise",  {0.000000 , 0.807843 , 0.819608 }},
00679 {"DarkViolet",  {0.580392 , 0.000000 , 0.827451 }},
00680 {"DeepPink",  {1.000000 , 0.078431 , 0.576471 }},
00681 {"DeepPink1",  {1.000000 , 0.078431 , 0.576471 }},
00682 {"DeepPink2",  {0.933333 , 0.070588 , 0.537255 }},
00683 {"DeepPink3",  {0.803922 , 0.062745 , 0.462745 }},
00684 {"DeepPink4",  {0.545098 , 0.039216 , 0.313725 }},
00685 {"DeepSkyBlue",  {0.000000 , 0.749020 , 1.000000 }},
00686 {"DeepSkyBlue1",  {0.000000 , 0.749020 , 1.000000 }},
00687 {"DeepSkyBlue2",  {0.000000 , 0.698039 , 0.933333 }},
00688 {"DeepSkyBlue3",  {0.000000 , 0.603922 , 0.803922 }},
00689 {"DeepSkyBlue4",  {0.000000 , 0.407843 , 0.545098 }},
00690 {"DimGray",  {0.411765 , 0.411765 , 0.411765 }},
00691 {"DimGrey",  {0.411765 , 0.411765 , 0.411765 }},
00692 {"DodgerBlue",  {0.117647 , 0.564706 , 1.000000 }},
00693 {"DodgerBlue1",  {0.117647 , 0.564706 , 1.000000 }},
00694 {"DodgerBlue2",  {0.109804 , 0.525490 , 0.933333 }},
00695 {"DodgerBlue3",  {0.094118 , 0.454902 , 0.803922 }},
00696 {"DodgerBlue4",  {0.062745 , 0.305882 , 0.545098 }},
00697 {"FloralWhite",  {1.000000 , 0.980392 , 0.941176 }},
00698 {"ForestGreen",  {0.133333 , 0.545098 , 0.133333 }},
00699 {"GhostWhite",  {0.972549 , 0.972549 , 1.000000 }},
00700 {"GreenYellow",  {0.678431 , 1.000000 , 0.184314 }},
00701 {"HotPink",  {1.000000 , 0.411765 , 0.705882 }},
00702 {"HotPink1",  {1.000000 , 0.431373 , 0.705882 }},
00703 {"HotPink2",  {0.933333 , 0.415686 , 0.654902 }},
00704 {"HotPink3",  {0.803922 , 0.376471 , 0.564706 }},
00705 {"HotPink4",  {0.545098 , 0.227451 , 0.384314 }},
00706 {"IndianRed",  {0.803922 , 0.360784 , 0.360784 }},
00707 {"IndianRed1",  {1.000000 , 0.415686 , 0.415686 }},
00708 {"IndianRed2",  {0.933333 , 0.388235 , 0.388235 }},
00709 {"IndianRed3",  {0.803922 , 0.333333 , 0.333333 }},
00710 {"IndianRed4",  {0.545098 , 0.227451 , 0.227451 }},
00711 {"LavenderBlush",  {1.000000 , 0.941176 , 0.960784 }},
00712 {"LavenderBlush1",  {1.000000 , 0.941176 , 0.960784 }},
00713 {"LavenderBlush2",  {0.933333 , 0.878431 , 0.898039 }},
00714 {"LavenderBlush3",  {0.803922 , 0.756863 , 0.772549 }},
00715 {"LavenderBlush4",  {0.545098 , 0.513725 , 0.525490 }},
00716 {"LawnGreen",  {0.486275 , 0.988235 , 0.000000 }},
00717 {"LemonChiffon",  {1.000000 , 0.980392 , 0.803922 }},
00718 {"LemonChiffon1",  {1.000000 , 0.980392 , 0.803922 }},
00719 {"LemonChiffon2",  {0.933333 , 0.913725 , 0.749020 }},
00720 {"LemonChiffon3",  {0.803922 , 0.788235 , 0.647059 }},
00721 {"LemonChiffon4",  {0.545098 , 0.537255 , 0.439216 }},
00722 {"LightBlue",  {0.678431 , 0.847059 , 0.901961 }},
00723 {"LightBlue1",  {0.749020 , 0.937255 , 1.000000 }},
00724 {"LightBlue2",  {0.698039 , 0.874510 , 0.933333 }},
00725 {"LightBlue3",  {0.603922 , 0.752941 , 0.803922 }},
00726 {"LightBlue4",  {0.407843 , 0.513725 , 0.545098 }},
00727 {"LightCoral",  {0.941176 , 0.501961 , 0.501961 }},
00728 {"LightCyan",  {0.878431 , 1.000000 , 1.000000 }},
00729 {"LightCyan1",  {0.878431 , 1.000000 , 1.000000 }},
00730 {"LightCyan2",  {0.819608 , 0.933333 , 0.933333 }},
00731 {"LightCyan3",  {0.705882 , 0.803922 , 0.803922 }},
00732 {"LightCyan4",  {0.478431 , 0.545098 , 0.545098 }},
00733 {"LightGoldenrod",  {0.933333 , 0.866667 , 0.509804 }},
00734 {"LightGoldenrod1",  {1.000000 , 0.925490 , 0.545098 }},
00735 {"LightGoldenrod2",  {0.933333 , 0.862745 , 0.509804 }},
00736 {"LightGoldenrod3",  {0.803922 , 0.745098 , 0.439216 }},
00737 {"LightGoldenrod4",  {0.545098 , 0.505882 , 0.298039 }},
00738 {"LightGoldenrodYellow",  {0.980392 , 0.980392 , 0.823529 }},
00739 {"LightGray",  {0.827451 , 0.827451 , 0.827451 }},
00740 {"LightGrey",  {0.827451 , 0.827451 , 0.827451 }},
00741 {"LightPink",  {1.000000 , 0.713725 , 0.756863 }},
00742 {"LightPink1",  {1.000000 , 0.682353 , 0.725490 }},
00743 {"LightPink2",  {0.933333 , 0.635294 , 0.678431 }},
00744 {"LightPink3",  {0.803922 , 0.549020 , 0.584314 }},
00745 {"LightPink4",  {0.545098 , 0.372549 , 0.396078 }},
00746 {"LightSalmon",  {1.000000 , 0.627451 , 0.478431 }},
00747 {"LightSalmon1",  {1.000000 , 0.627451 , 0.478431 }},
00748 {"LightSalmon2",  {0.933333 , 0.584314 , 0.447059 }},
00749 {"LightSalmon3",  {0.803922 , 0.505882 , 0.384314 }},
00750 {"LightSalmon4",  {0.545098 , 0.341176 , 0.258824 }},
00751 {"LightSeaGreen",  {0.125490 , 0.698039 , 0.666667 }},
00752 {"LightSkyBlue",  {0.529412 , 0.807843 , 0.980392 }},
00753 {"LightSkyBlue1",  {0.690196 , 0.886275 , 1.000000 }},
00754 {"LightSkyBlue2",  {0.643137 , 0.827451 , 0.933333 }},
00755 {"LightSkyBlue3",  {0.552941 , 0.713725 , 0.803922 }},
00756 {"LightSkyBlue4",  {0.376471 , 0.482353 , 0.545098 }},
00757 {"LightSlateBlue",  {0.517647 , 0.439216 , 1.000000 }},
00758 {"LightSlateGray",  {0.466667 , 0.533333 , 0.600000 }},
00759 {"LightSlateGrey",  {0.466667 , 0.533333 , 0.600000 }},
00760 {"LightSteelBlue",  {0.690196 , 0.768627 , 0.870588 }},
00761 {"LightSteelBlue1",  {0.792157 , 0.882353 , 1.000000 }},
00762 {"LightSteelBlue2",  {0.737255 , 0.823529 , 0.933333 }},
00763 {"LightSteelBlue3",  {0.635294 , 0.709804 , 0.803922 }},
00764 {"LightSteelBlue4",  {0.431373 , 0.482353 , 0.545098 }},
00765 {"LightYellow",  {1.000000 , 1.000000 , 0.878431 }},
00766 {"LightYellow1",  {1.000000 , 1.000000 , 0.878431 }},
00767 {"LightYellow2",  {0.933333 , 0.933333 , 0.819608 }},
00768 {"LightYellow3",  {0.803922 , 0.803922 , 0.705882 }},
00769 {"LightYellow4",  {0.545098 , 0.545098 , 0.478431 }},
00770 {"LimeGreen",  {0.196078 , 0.803922 , 0.196078 }},
00771 {"MediumAquamarine",  {0.400000 , 0.803922 , 0.666667 }},
00772 {"MediumBlue",  {0.000000 , 0.000000 , 0.803922 }},
00773 {"MediumOrchid",  {0.729412 , 0.333333 , 0.827451 }},
00774 {"MediumOrchid1",  {0.878431 , 0.400000 , 1.000000 }},
00775 {"MediumOrchid2",  {0.819608 , 0.372549 , 0.933333 }},
00776 {"MediumOrchid3",  {0.705882 , 0.321569 , 0.803922 }},
00777 {"MediumOrchid4",  {0.478431 , 0.215686 , 0.545098 }},
00778 {"MediumPurple",  {0.576471 , 0.439216 , 0.858824 }},
00779 {"MediumPurple1",  {0.670588 , 0.509804 , 1.000000 }},
00780 {"MediumPurple2",  {0.623529 , 0.474510 , 0.933333 }},
00781 {"MediumPurple3",  {0.537255 , 0.407843 , 0.803922 }},
00782 {"MediumPurple4",  {0.364706 , 0.278431 , 0.545098 }},
00783 {"MediumSeaGreen",  {0.235294 , 0.701961 , 0.443137 }},
00784 {"MediumSlateBlue",  {0.482353 , 0.407843 , 0.933333 }},
00785 {"MediumSpringGreen",  {0.000000 , 0.980392 , 0.603922 }},
00786 {"MediumTurquoise",  {0.282353 , 0.819608 , 0.800000 }},
00787 {"MediumVioletRed",  {0.780392 , 0.082353 , 0.521569 }},
00788 {"MidnightBlue",  {0.098039 , 0.098039 , 0.439216 }},
00789 {"MintCream",  {0.960784 , 1.000000 , 0.980392 }},
00790 {"MistyRose",  {1.000000 , 0.894118 , 0.882353 }},
00791 {"MistyRose1",  {1.000000 , 0.894118 , 0.882353 }},
00792 {"MistyRose2",  {0.933333 , 0.835294 , 0.823529 }},
00793 {"MistyRose3",  {0.803922 , 0.717647 , 0.709804 }},
00794 {"MistyRose4",  {0.545098 , 0.490196 , 0.482353 }},
00795 {"NavajoWhite",  {1.000000 , 0.870588 , 0.678431 }},
00796 {"NavajoWhite1",  {1.000000 , 0.870588 , 0.678431 }},
00797 {"NavajoWhite2",  {0.933333 , 0.811765 , 0.631373 }},
00798 {"NavajoWhite3",  {0.803922 , 0.701961 , 0.545098 }},
00799 {"NavajoWhite4",  {0.545098 , 0.474510 , 0.368627 }},
00800 {"NavyBlue",  {0.000000 , 0.000000 , 0.501961 }},
00801 {"OldLace",  {0.992157 , 0.960784 , 0.901961 }},
00802 {"OliveDrab",  {0.419608 , 0.556863 , 0.137255 }},
00803 {"OliveDrab1",  {0.752941 , 1.000000 , 0.243137 }},
00804 {"OliveDrab2",  {0.701961 , 0.933333 , 0.227451 }},
00805 {"OliveDrab3",  {0.603922 , 0.803922 , 0.196078 }},
00806 {"OliveDrab4",  {0.411765 , 0.545098 , 0.133333 }},
00807 {"OrangeRed",  {1.000000 , 0.270588 , 0.000000 }},
00808 {"OrangeRed1",  {1.000000 , 0.270588 , 0.000000 }},
00809 {"OrangeRed2",  {0.933333 , 0.250980 , 0.000000 }},
00810 {"OrangeRed3",  {0.803922 , 0.215686 , 0.000000 }},
00811 {"OrangeRed4",  {0.545098 , 0.145098 , 0.000000 }},
00812 {"PaleGoldenrod",  {0.933333 , 0.909804 , 0.666667 }},
00813 {"PaleGreen",  {0.596078 , 0.984314 , 0.596078 }},
00814 {"PaleGreen1",  {0.603922 , 1.000000 , 0.603922 }},
00815 {"PaleGreen2",  {0.564706 , 0.933333 , 0.564706 }},
00816 {"PaleGreen3",  {0.486275 , 0.803922 , 0.486275 }},
00817 {"PaleGreen4",  {0.329412 , 0.545098 , 0.329412 }},
00818 {"PaleTurquoise",  {0.686275 , 0.933333 , 0.933333 }},
00819 {"PaleTurquoise1",  {0.733333 , 1.000000 , 1.000000 }},
00820 {"PaleTurquoise2",  {0.682353 , 0.933333 , 0.933333 }},
00821 {"PaleTurquoise3",  {0.588235 , 0.803922 , 0.803922 }},
00822 {"PaleTurquoise4",  {0.400000 , 0.545098 , 0.545098 }},
00823 {"PaleVioletRed",  {0.858824 , 0.439216 , 0.576471 }},
00824 {"PaleVioletRed1",  {1.000000 , 0.509804 , 0.670588 }},
00825 {"PaleVioletRed2",  {0.933333 , 0.474510 , 0.623529 }},
00826 {"PaleVioletRed3",  {0.803922 , 0.407843 , 0.537255 }},
00827 {"PaleVioletRed4",  {0.545098 , 0.278431 , 0.364706 }},
00828 {"PapayaWhip",  {1.000000 , 0.937255 , 0.835294 }},
00829 {"PeachPuff",  {1.000000 , 0.854902 , 0.725490 }},
00830 {"PeachPuff1",  {1.000000 , 0.854902 , 0.725490 }},
00831 {"PeachPuff2",  {0.933333 , 0.796078 , 0.678431 }},
00832 {"PeachPuff3",  {0.803922 , 0.686275 , 0.584314 }},
00833 {"PeachPuff4",  {0.545098 , 0.466667 , 0.396078 }},
00834 {"PowderBlue",  {0.690196 , 0.878431 , 0.901961 }},
00835 {"RosyBrown",  {0.737255 , 0.560784 , 0.560784 }},
00836 {"RosyBrown1",  {1.000000 , 0.756863 , 0.756863 }},
00837 {"RosyBrown2",  {0.933333 , 0.705882 , 0.705882 }},
00838 {"RosyBrown3",  {0.803922 , 0.607843 , 0.607843 }},
00839 {"RosyBrown4",  {0.545098 , 0.411765 , 0.411765 }},
00840 {"RoyalBlue",  {0.254902 , 0.411765 , 0.882353 }},
00841 {"RoyalBlue1",  {0.282353 , 0.462745 , 1.000000 }},
00842 {"RoyalBlue2",  {0.262745 , 0.431373 , 0.933333 }},
00843 {"RoyalBlue3",  {0.227451 , 0.372549 , 0.803922 }},
00844 {"RoyalBlue4",  {0.152941 , 0.250980 , 0.545098 }},
00845 {"SaddleBrown",  {0.545098 , 0.270588 , 0.074510 }},
00846 {"SandyBrown",  {0.956863 , 0.643137 , 0.376471 }},
00847 {"SeaGreen",  {0.180392 , 0.545098 , 0.341176 }},
00848 {"SeaGreen1",  {0.329412 , 1.000000 , 0.623529 }},
00849 {"SeaGreen2",  {0.305882 , 0.933333 , 0.580392 }},
00850 {"SeaGreen3",  {0.262745 , 0.803922 , 0.501961 }},
00851 {"SeaGreen4",  {0.180392 , 0.545098 , 0.341176 }},
00852 {"SkyBlue",  {0.529412 , 0.807843 , 0.921569 }},
00853 {"SkyBlue1",  {0.529412 , 0.807843 , 1.000000 }},
00854 {"SkyBlue2",  {0.494118 , 0.752941 , 0.933333 }},
00855 {"SkyBlue3",  {0.423529 , 0.650980 , 0.803922 }},
00856 {"SkyBlue4",  {0.290196 , 0.439216 , 0.545098 }},
00857 {"SlateBlue",  {0.415686 , 0.352941 , 0.803922 }},
00858 {"SlateBlue1",  {0.513725 , 0.435294 , 1.000000 }},
00859 {"SlateBlue2",  {0.478431 , 0.403922 , 0.933333 }},
00860 {"SlateBlue3",  {0.411765 , 0.349020 , 0.803922 }},
00861 {"SlateBlue4",  {0.278431 , 0.235294 , 0.545098 }},
00862 {"SlateGray",  {0.439216 , 0.501961 , 0.564706 }},
00863 {"SlateGray1",  {0.776471 , 0.886275 , 1.000000 }},
00864 {"SlateGray2",  {0.725490 , 0.827451 , 0.933333 }},
00865 {"SlateGray3",  {0.623529 , 0.713725 , 0.803922 }},
00866 {"SlateGray4",  {0.423529 , 0.482353 , 0.545098 }},
00867 {"SlateGrey",  {0.439216 , 0.501961 , 0.564706 }},
00868 {"SpringGreen",  {0.000000 , 1.000000 , 0.498039 }},
00869 {"SpringGreen1",  {0.000000 , 1.000000 , 0.498039 }},
00870 {"SpringGreen2",  {0.000000 , 0.933333 , 0.462745 }},
00871 {"SpringGreen3",  {0.000000 , 0.803922 , 0.400000 }},
00872 {"SpringGreen4",  {0.000000 , 0.545098 , 0.270588 }},
00873 {"SteelBlue",  {0.274510 , 0.509804 , 0.705882 }},
00874 {"SteelBlue1",  {0.388235 , 0.721569 , 1.000000 }},
00875 {"SteelBlue2",  {0.360784 , 0.674510 , 0.933333 }},
00876 {"SteelBlue3",  {0.309804 , 0.580392 , 0.803922 }},
00877 {"SteelBlue4",  {0.211765 , 0.392157 , 0.545098 }},
00878 {"VioletRed",  {0.815686 , 0.125490 , 0.564706 }},
00879 {"VioletRed1",  {1.000000 , 0.243137 , 0.588235 }},
00880 {"VioletRed2",  {0.933333 , 0.227451 , 0.549020 }},
00881 {"VioletRed3",  {0.803922 , 0.196078 , 0.470588 }},
00882 {"VioletRed4",  {0.545098 , 0.133333 , 0.321569 }},
00883 {"WhiteSmoke",  {0.960784 , 0.960784 , 0.960784 }},
00884 {"YellowGreen",  {0.603922 , 0.803922 , 0.196078 }},
00885 {"alice_blue",  {0.941176 , 0.972549 , 1.000000 }},
00886 {"antique_white",  {0.980392 , 0.921569 , 0.843137 }},
00887 {"aquamarine",  {0.498039 , 1.000000 , 0.831373 }},
00888 {"aquamarine1",  {0.498039 , 1.000000 , 0.831373 }},
00889 {"aquamarine2",  {0.462745 , 0.933333 , 0.776471 }},
00890 {"aquamarine3",  {0.400000 , 0.803922 , 0.666667 }},
00891 {"aquamarine4",  {0.270588 , 0.545098 , 0.454902 }},
00892 {"azure",  {0.941176 , 1.000000 , 1.000000 }},
00893 {"azure1",  {0.941176 , 1.000000 , 1.000000 }},
00894 {"azure2",  {0.878431 , 0.933333 , 0.933333 }},
00895 {"azure3",  {0.756863 , 0.803922 , 0.803922 }},
00896 {"azure4",  {0.513725 , 0.545098 , 0.545098 }},
00897 {"beige",  {0.960784 , 0.960784 , 0.862745 }},
00898 {"bisque",  {1.000000 , 0.894118 , 0.768627 }},
00899 {"bisque1",  {1.000000 , 0.894118 , 0.768627 }},
00900 {"bisque2",  {0.933333 , 0.835294 , 0.717647 }},
00901 {"bisque3",  {0.803922 , 0.717647 , 0.619608 }},
00902 {"bisque4",  {0.545098 , 0.490196 , 0.419608 }},
00903 {"black",  {0.000000 , 0.000000 , 0.000000 }},
00904 {"blanched_almond",  {1.000000 , 0.921569 , 0.803922 }},
00905 {"blue",  {0.000000 , 0.000000 , 1.000000 }},
00906 {"blue1",  {0.000000 , 0.000000 , 1.000000 }},
00907 {"blue2",  {0.000000 , 0.000000 , 0.933333 }},
00908 {"blue3",  {0.000000 , 0.000000 , 0.803922 }},
00909 {"blue4",  {0.000000 , 0.000000 , 0.545098 }},
00910 {"blue_violet",  {0.541176 , 0.168627 , 0.886275 }},
00911 {"brown",  {0.647059 , 0.164706 , 0.164706 }},
00912 {"brown1",  {1.000000 , 0.250980 , 0.250980 }},
00913 {"brown2",  {0.933333 , 0.231373 , 0.231373 }},
00914 {"brown3",  {0.803922 , 0.200000 , 0.200000 }},
00915 {"brown4",  {0.545098 , 0.137255 , 0.137255 }},
00916 {"burlywood",  {0.870588 , 0.721569 , 0.529412 }},
00917 {"burlywood1",  {1.000000 , 0.827451 , 0.607843 }},
00918 {"burlywood2",  {0.933333 , 0.772549 , 0.568627 }},
00919 {"burlywood3",  {0.803922 , 0.666667 , 0.490196 }},
00920 {"burlywood4",  {0.545098 , 0.450980 , 0.333333 }},
00921 {"cadet_blue",  {0.372549 , 0.619608 , 0.627451 }},
00922 {"chartreuse",  {0.498039 , 1.000000 , 0.000000 }},
00923 {"chartreuse1",  {0.498039 , 1.000000 , 0.000000 }},
00924 {"chartreuse2",  {0.462745 , 0.933333 , 0.000000 }},
00925 {"chartreuse3",  {0.400000 , 0.803922 , 0.000000 }},
00926 {"chartreuse4",  {0.270588 , 0.545098 , 0.000000 }},
00927 {"chocolate",  {0.823529 , 0.411765 , 0.117647 }},
00928 {"chocolate1",  {1.000000 , 0.498039 , 0.141176 }},
00929 {"chocolate2",  {0.933333 , 0.462745 , 0.129412 }},
00930 {"chocolate3",  {0.803922 , 0.400000 , 0.113725 }},
00931 {"chocolate4",  {0.545098 , 0.270588 , 0.074510 }},
00932 {"coral",  {1.000000 , 0.498039 , 0.313725 }},
00933 {"coral1",  {1.000000 , 0.447059 , 0.337255 }},
00934 {"coral2",  {0.933333 , 0.415686 , 0.313725 }},
00935 {"coral3",  {0.803922 , 0.356863 , 0.270588 }},
00936 {"coral4",  {0.545098 , 0.243137 , 0.184314 }},
00937 {"cornflower_blue",  {0.392157 , 0.584314 , 0.929412 }},
00938 {"cornsilk",  {1.000000 , 0.972549 , 0.862745 }},
00939 {"cornsilk1",  {1.000000 , 0.972549 , 0.862745 }},
00940 {"cornsilk2",  {0.933333 , 0.909804 , 0.803922 }},
00941 {"cornsilk3",  {0.803922 , 0.784314 , 0.694118 }},
00942 {"cornsilk4",  {0.545098 , 0.533333 , 0.470588 }},
00943 {"cyan",  {0.000000 , 1.000000 , 1.000000 }},
00944 {"cyan1",  {0.000000 , 1.000000 , 1.000000 }},
00945 {"cyan2",  {0.000000 , 0.933333 , 0.933333 }},
00946 {"cyan3",  {0.000000 , 0.803922 , 0.803922 }},
00947 {"cyan4",  {0.000000 , 0.545098 , 0.545098 }},
00948 {"dark_goldenrod",  {0.721569 , 0.525490 , 0.043137 }},
00949 {"dark_green",  {0.000000 , 0.392157 , 0.000000 }},
00950 {"dark_khaki",  {0.741176 , 0.717647 , 0.419608 }},
00951 {"dark_olive_green",  {0.333333 , 0.419608 , 0.184314 }},
00952 {"dark_orange",  {1.000000 , 0.549020 , 0.000000 }},
00953 {"dark_orchid",  {0.600000 , 0.196078 , 0.800000 }},
00954 {"dark_salmon",  {0.913725 , 0.588235 , 0.478431 }},
00955 {"dark_sea_green",  {0.560784 , 0.737255 , 0.560784 }},
00956 {"dark_slate_blue",  {0.282353 , 0.239216 , 0.545098 }},
00957 {"dark_slate_gray",  {0.184314 , 0.309804 , 0.309804 }},
00958 {"dark_slate_grey",  {0.184314 , 0.309804 , 0.309804 }},
00959 {"dark_turquoise",  {0.000000 , 0.807843 , 0.819608 }},
00960 {"dark_violet",  {0.580392 , 0.000000 , 0.827451 }},
00961 {"deep_pink",  {1.000000 , 0.078431 , 0.576471 }},
00962 {"deep_sky_blue",  {0.000000 , 0.749020 , 1.000000 }},
00963 {"dim_gray",  {0.411765 , 0.411765 , 0.411765 }},
00964 {"dim_grey",  {0.411765 , 0.411765 , 0.411765 }},
00965 {"dodger_blue",  {0.117647 , 0.564706 , 1.000000 }},
00966 {"firebrick",  {0.698039 , 0.133333 , 0.133333 }},
00967 {"firebrick1",  {1.000000 , 0.188235 , 0.188235 }},
00968 {"firebrick2",  {0.933333 , 0.172549 , 0.172549 }},
00969 {"firebrick3",  {0.803922 , 0.149020 , 0.149020 }},
00970 {"firebrick4",  {0.545098 , 0.101961 , 0.101961 }},
00971 {"floral_white",  {1.000000 , 0.980392 , 0.941176 }},
00972 {"forest_green",  {0.133333 , 0.545098 , 0.133333 }},
00973 {"gainsboro",  {0.862745 , 0.862745 , 0.862745 }},
00974 {"ghost_white",  {0.972549 , 0.972549 , 1.000000 }},
00975 {"gold",  {1.000000 , 0.843137 , 0.000000 }},
00976 {"gold1",  {1.000000 , 0.843137 , 0.000000 }},
00977 {"gold2",  {0.933333 , 0.788235 , 0.000000 }},
00978 {"gold3",  {0.803922 , 0.678431 , 0.000000 }},
00979 {"gold4",  {0.545098 , 0.458824 , 0.000000 }},
00980 {"goldenrod",  {0.854902 , 0.647059 , 0.125490 }},
00981 {"goldenrod1",  {1.000000 , 0.756863 , 0.145098 }},
00982 {"goldenrod2",  {0.933333 , 0.705882 , 0.133333 }},
00983 {"goldenrod3",  {0.803922 , 0.607843 , 0.113725 }},
00984 {"goldenrod4",  {0.545098 , 0.411765 , 0.078431 }},
00985 {"gray",  {0.752941 , 0.752941 , 0.752941 }},
00986 {"gray0",  {0.000000 , 0.000000 , 0.000000 }},
00987 {"gray1",  {0.011765 , 0.011765 , 0.011765 }},
00988 {"gray10",  {0.101961 , 0.101961 , 0.101961 }},
00989 {"gray100",  {1.000000 , 1.000000 , 1.000000 }},
00990 {"gray11",  {0.109804 , 0.109804 , 0.109804 }},
00991 {"gray12",  {0.121569 , 0.121569 , 0.121569 }},
00992 {"gray13",  {0.129412 , 0.129412 , 0.129412 }},
00993 {"gray14",  {0.141176 , 0.141176 , 0.141176 }},
00994 {"gray15",  {0.149020 , 0.149020 , 0.149020 }},
00995 {"gray16",  {0.160784 , 0.160784 , 0.160784 }},
00996 {"gray17",  {0.168627 , 0.168627 , 0.168627 }},
00997 {"gray18",  {0.180392 , 0.180392 , 0.180392 }},
00998 {"gray19",  {0.188235 , 0.188235 , 0.188235 }},
00999 {"gray2",  {0.019608 , 0.019608 , 0.019608 }},
01000 {"gray20",  {0.200000 , 0.200000 , 0.200000 }},
01001 {"gray21",  {0.211765 , 0.211765 , 0.211765 }},
01002 {"gray22",  {0.219608 , 0.219608 , 0.219608 }},
01003 {"gray23",  {0.231373 , 0.231373 , 0.231373 }},
01004 {"gray24",  {0.239216 , 0.239216 , 0.239216 }},
01005 {"gray25",  {0.250980 , 0.250980 , 0.250980 }},
01006 {"gray26",  {0.258824 , 0.258824 , 0.258824 }},
01007 {"gray27",  {0.270588 , 0.270588 , 0.270588 }},
01008 {"gray28",  {0.278431 , 0.278431 , 0.278431 }},
01009 {"gray29",  {0.290196 , 0.290196 , 0.290196 }},
01010 {"gray3",  {0.031373 , 0.031373 , 0.031373 }},
01011 {"gray30",  {0.301961 , 0.301961 , 0.301961 }},
01012 {"gray31",  {0.309804 , 0.309804 , 0.309804 }},
01013 {"gray32",  {0.321569 , 0.321569 , 0.321569 }},
01014 {"gray33",  {0.329412 , 0.329412 , 0.329412 }},
01015 {"gray34",  {0.341176 , 0.341176 , 0.341176 }},
01016 {"gray35",  {0.349020 , 0.349020 , 0.349020 }},
01017 {"gray36",  {0.360784 , 0.360784 , 0.360784 }},
01018 {"gray37",  {0.368627 , 0.368627 , 0.368627 }},
01019 {"gray38",  {0.380392 , 0.380392 , 0.380392 }},
01020 {"gray39",  {0.388235 , 0.388235 , 0.388235 }},
01021 {"gray4",  {0.039216 , 0.039216 , 0.039216 }},
01022 {"gray40",  {0.400000 , 0.400000 , 0.400000 }},
01023 {"gray41",  {0.411765 , 0.411765 , 0.411765 }},
01024 {"gray42",  {0.419608 , 0.419608 , 0.419608 }},
01025 {"gray43",  {0.431373 , 0.431373 , 0.431373 }},
01026 {"gray44",  {0.439216 , 0.439216 , 0.439216 }},
01027 {"gray45",  {0.450980 , 0.450980 , 0.450980 }},
01028 {"gray46",  {0.458824 , 0.458824 , 0.458824 }},
01029 {"gray47",  {0.470588 , 0.470588 , 0.470588 }},
01030 {"gray48",  {0.478431 , 0.478431 , 0.478431 }},
01031 {"gray49",  {0.490196 , 0.490196 , 0.490196 }},
01032 {"gray5",  {0.050980 , 0.050980 , 0.050980 }},
01033 {"gray50",  {0.498039 , 0.498039 , 0.498039 }},
01034 {"gray51",  {0.509804 , 0.509804 , 0.509804 }},
01035 {"gray52",  {0.521569 , 0.521569 , 0.521569 }},
01036 {"gray53",  {0.529412 , 0.529412 , 0.529412 }},
01037 {"gray54",  {0.541176 , 0.541176 , 0.541176 }},
01038 {"gray55",  {0.549020 , 0.549020 , 0.549020 }},
01039 {"gray56",  {0.560784 , 0.560784 , 0.560784 }},
01040 {"gray57",  {0.568627 , 0.568627 , 0.568627 }},
01041 {"gray58",  {0.580392 , 0.580392 , 0.580392 }},
01042 {"gray59",  {0.588235 , 0.588235 , 0.588235 }},
01043 {"gray6",  {0.058824 , 0.058824 , 0.058824 }},
01044 {"gray60",  {0.600000 , 0.600000 , 0.600000 }},
01045 {"gray61",  {0.611765 , 0.611765 , 0.611765 }},
01046 {"gray62",  {0.619608 , 0.619608 , 0.619608 }},
01047 {"gray63",  {0.631373 , 0.631373 , 0.631373 }},
01048 {"gray64",  {0.639216 , 0.639216 , 0.639216 }},
01049 {"gray65",  {0.650980 , 0.650980 , 0.650980 }},
01050 {"gray66",  {0.658824 , 0.658824 , 0.658824 }},
01051 {"gray67",  {0.670588 , 0.670588 , 0.670588 }},
01052 {"gray68",  {0.678431 , 0.678431 , 0.678431 }},
01053 {"gray69",  {0.690196 , 0.690196 , 0.690196 }},
01054 {"gray7",  {0.070588 , 0.070588 , 0.070588 }},
01055 {"gray70",  {0.701961 , 0.701961 , 0.701961 }},
01056 {"gray71",  {0.709804 , 0.709804 , 0.709804 }},
01057 {"gray72",  {0.721569 , 0.721569 , 0.721569 }},
01058 {"gray73",  {0.729412 , 0.729412 , 0.729412 }},
01059 {"gray74",  {0.741176 , 0.741176 , 0.741176 }},
01060 {"gray75",  {0.749020 , 0.749020 , 0.749020 }},
01061 {"gray76",  {0.760784 , 0.760784 , 0.760784 }},
01062 {"gray77",  {0.768627 , 0.768627 , 0.768627 }},
01063 {"gray78",  {0.780392 , 0.780392 , 0.780392 }},
01064 {"gray79",  {0.788235 , 0.788235 , 0.788235 }},
01065 {"gray8",  {0.078431 , 0.078431 , 0.078431 }},
01066 {"gray80",  {0.800000 , 0.800000 , 0.800000 }},
01067 {"gray81",  {0.811765 , 0.811765 , 0.811765 }},
01068 {"gray82",  {0.819608 , 0.819608 , 0.819608 }},
01069 {"gray83",  {0.831373 , 0.831373 , 0.831373 }},
01070 {"gray84",  {0.839216 , 0.839216 , 0.839216 }},
01071 {"gray85",  {0.850980 , 0.850980 , 0.850980 }},
01072 {"gray86",  {0.858824 , 0.858824 , 0.858824 }},
01073 {"gray87",  {0.870588 , 0.870588 , 0.870588 }},
01074 {"gray88",  {0.878431 , 0.878431 , 0.878431 }},
01075 {"gray89",  {0.890196 , 0.890196 , 0.890196 }},
01076 {"gray9",  {0.090196 , 0.090196 , 0.090196 }},
01077 {"gray90",  {0.898039 , 0.898039 , 0.898039 }},
01078 {"gray91",  {0.909804 , 0.909804 , 0.909804 }},
01079 {"gray92",  {0.921569 , 0.921569 , 0.921569 }},
01080 {"gray93",  {0.929412 , 0.929412 , 0.929412 }},
01081 {"gray94",  {0.941176 , 0.941176 , 0.941176 }},
01082 {"gray95",  {0.949020 , 0.949020 , 0.949020 }},
01083 {"gray96",  {0.960784 , 0.960784 , 0.960784 }},
01084 {"gray97",  {0.968627 , 0.968627 , 0.968627 }},
01085 {"gray98",  {0.980392 , 0.980392 , 0.980392 }},
01086 {"gray99",  {0.988235 , 0.988235 , 0.988235 }},
01087 {"green",  {0.000000 , 1.000000 , 0.000000 }},
01088 {"green1",  {0.000000 , 1.000000 , 0.000000 }},
01089 {"green2",  {0.000000 , 0.933333 , 0.000000 }},
01090 {"green3",  {0.000000 , 0.803922 , 0.000000 }},
01091 {"green4",  {0.000000 , 0.545098 , 0.000000 }},
01092 {"green_yellow",  {0.678431 , 1.000000 , 0.184314 }},
01093 {"grey",  {0.752941 , 0.752941 , 0.752941 }},
01094 {"grey0",  {0.000000 , 0.000000 , 0.000000 }},
01095 {"grey1",  {0.011765 , 0.011765 , 0.011765 }},
01096 {"grey10",  {0.101961 , 0.101961 , 0.101961 }},
01097 {"grey100",  {1.000000 , 1.000000 , 1.000000 }},
01098 {"grey11",  {0.109804 , 0.109804 , 0.109804 }},
01099 {"grey12",  {0.121569 , 0.121569 , 0.121569 }},
01100 {"grey13",  {0.129412 , 0.129412 , 0.129412 }},
01101 {"grey14",  {0.141176 , 0.141176 , 0.141176 }},
01102 {"grey15",  {0.149020 , 0.149020 , 0.149020 }},
01103 {"grey16",  {0.160784 , 0.160784 , 0.160784 }},
01104 {"grey17",  {0.168627 , 0.168627 , 0.168627 }},
01105 {"grey18",  {0.180392 , 0.180392 , 0.180392 }},
01106 {"grey19",  {0.188235 , 0.188235 , 0.188235 }},
01107 {"grey2",  {0.019608 , 0.019608 , 0.019608 }},
01108 {"grey20",  {0.200000 , 0.200000 , 0.200000 }},
01109 {"grey21",  {0.211765 , 0.211765 , 0.211765 }},
01110 {"grey22",  {0.219608 , 0.219608 , 0.219608 }},
01111 {"grey23",  {0.231373 , 0.231373 , 0.231373 }},
01112 {"grey24",  {0.239216 , 0.239216 , 0.239216 }},
01113 {"grey25",  {0.250980 , 0.250980 , 0.250980 }},
01114 {"grey26",  {0.258824 , 0.258824 , 0.258824 }},
01115 {"grey27",  {0.270588 , 0.270588 , 0.270588 }},
01116 {"grey28",  {0.278431 , 0.278431 , 0.278431 }},
01117 {"grey29",  {0.290196 , 0.290196 , 0.290196 }},
01118 {"grey3",  {0.031373 , 0.031373 , 0.031373 }},
01119 {"grey30",  {0.301961 , 0.301961 , 0.301961 }},
01120 {"grey31",  {0.309804 , 0.309804 , 0.309804 }},
01121 {"grey32",  {0.321569 , 0.321569 , 0.321569 }},
01122 {"grey33",  {0.329412 , 0.329412 , 0.329412 }},
01123 {"grey34",  {0.341176 , 0.341176 , 0.341176 }},
01124 {"grey35",  {0.349020 , 0.349020 , 0.349020 }},
01125 {"grey36",  {0.360784 , 0.360784 , 0.360784 }},
01126 {"grey37",  {0.368627 , 0.368627 , 0.368627 }},
01127 {"grey38",  {0.380392 , 0.380392 , 0.380392 }},
01128 {"grey39",  {0.388235 , 0.388235 , 0.388235 }},
01129 {"grey4",  {0.039216 , 0.039216 , 0.039216 }},
01130 {"grey40",  {0.400000 , 0.400000 , 0.400000 }},
01131 {"grey41",  {0.411765 , 0.411765 , 0.411765 }},
01132 {"grey42",  {0.419608 , 0.419608 , 0.419608 }},
01133 {"grey43",  {0.431373 , 0.431373 , 0.431373 }},
01134 {"grey44",  {0.439216 , 0.439216 , 0.439216 }},
01135 {"grey45",  {0.450980 , 0.450980 , 0.450980 }},
01136 {"grey46",  {0.458824 , 0.458824 , 0.458824 }},
01137 {"grey47",  {0.470588 , 0.470588 , 0.470588 }},
01138 {"grey48",  {0.478431 , 0.478431 , 0.478431 }},
01139 {"grey49",  {0.490196 , 0.490196 , 0.490196 }},
01140 {"grey5",  {0.050980 , 0.050980 , 0.050980 }},
01141 {"grey50",  {0.498039 , 0.498039 , 0.498039 }},
01142 {"grey51",  {0.509804 , 0.509804 , 0.509804 }},
01143 {"grey52",  {0.521569 , 0.521569 , 0.521569 }},
01144 {"grey53",  {0.529412 , 0.529412 , 0.529412 }},
01145 {"grey54",  {0.541176 , 0.541176 , 0.541176 }},
01146 {"grey55",  {0.549020 , 0.549020 , 0.549020 }},
01147 {"grey56",  {0.560784 , 0.560784 , 0.560784 }},
01148 {"grey57",  {0.568627 , 0.568627 , 0.568627 }},
01149 {"grey58",  {0.580392 , 0.580392 , 0.580392 }},
01150 {"grey59",  {0.588235 , 0.588235 , 0.588235 }},
01151 {"grey6",  {0.058824 , 0.058824 , 0.058824 }},
01152 {"grey60",  {0.600000 , 0.600000 , 0.600000 }},
01153 {"grey61",  {0.611765 , 0.611765 , 0.611765 }},
01154 {"grey62",  {0.619608 , 0.619608 , 0.619608 }},
01155 {"grey63",  {0.631373 , 0.631373 , 0.631373 }},
01156 {"grey64",  {0.639216 , 0.639216 , 0.639216 }},
01157 {"grey65",  {0.650980 , 0.650980 , 0.650980 }},
01158 {"grey66",  {0.658824 , 0.658824 , 0.658824 }},
01159 {"grey67",  {0.670588 , 0.670588 , 0.670588 }},
01160 {"grey68",  {0.678431 , 0.678431 , 0.678431 }},
01161 {"grey69",  {0.690196 , 0.690196 , 0.690196 }},
01162 {"grey7",  {0.070588 , 0.070588 , 0.070588 }},
01163 {"grey70",  {0.701961 , 0.701961 , 0.701961 }},
01164 {"grey71",  {0.709804 , 0.709804 , 0.709804 }},
01165 {"grey72",  {0.721569 , 0.721569 , 0.721569 }},
01166 {"grey73",  {0.729412 , 0.729412 , 0.729412 }},
01167 {"grey74",  {0.741176 , 0.741176 , 0.741176 }},
01168 {"grey75",  {0.749020 , 0.749020 , 0.749020 }},
01169 {"grey76",  {0.760784 , 0.760784 , 0.760784 }},
01170 {"grey77",  {0.768627 , 0.768627 , 0.768627 }},
01171 {"grey78",  {0.780392 , 0.780392 , 0.780392 }},
01172 {"grey79",  {0.788235 , 0.788235 , 0.788235 }},
01173 {"grey8",  {0.078431 , 0.078431 , 0.078431 }},
01174 {"grey80",  {0.800000 , 0.800000 , 0.800000 }},
01175 {"grey81",  {0.811765 , 0.811765 , 0.811765 }},
01176 {"grey82",  {0.819608 , 0.819608 , 0.819608 }},
01177 {"grey83",  {0.831373 , 0.831373 , 0.831373 }},
01178 {"grey84",  {0.839216 , 0.839216 , 0.839216 }},
01179 {"grey85",  {0.850980 , 0.850980 , 0.850980 }},
01180 {"grey86",  {0.858824 , 0.858824 , 0.858824 }},
01181 {"grey87",  {0.870588 , 0.870588 , 0.870588 }},
01182 {"grey88",  {0.878431 , 0.878431 , 0.878431 }},
01183 {"grey89",  {0.890196 , 0.890196 , 0.890196 }},
01184 {"grey9",  {0.090196 , 0.090196 , 0.090196 }},
01185 {"grey90",  {0.898039 , 0.898039 , 0.898039 }},
01186 {"grey91",  {0.909804 , 0.909804 , 0.909804 }},
01187 {"grey92",  {0.921569 , 0.921569 , 0.921569 }},
01188 {"grey93",  {0.929412 , 0.929412 , 0.929412 }},
01189 {"grey94",  {0.941176 , 0.941176 , 0.941176 }},
01190 {"grey95",  {0.949020 , 0.949020 , 0.949020 }},
01191 {"grey96",  {0.960784 , 0.960784 , 0.960784 }},
01192 {"grey97",  {0.968627 , 0.968627 , 0.968627 }},
01193 {"grey98",  {0.980392 , 0.980392 , 0.980392 }},
01194 {"grey99",  {0.988235 , 0.988235 , 0.988235 }},
01195 {"honeydew",  {0.941176 , 1.000000 , 0.941176 }},
01196 {"honeydew1",  {0.941176 , 1.000000 , 0.941176 }},
01197 {"honeydew2",  {0.878431 , 0.933333 , 0.878431 }},
01198 {"honeydew3",  {0.756863 , 0.803922 , 0.756863 }},
01199 {"honeydew4",  {0.513725 , 0.545098 , 0.513725 }},
01200 {"hot_pink",  {1.000000 , 0.411765 , 0.705882 }},
01201 {"indian_red",  {0.803922 , 0.360784 , 0.360784 }},
01202 {"ivory",  {1.000000 , 1.000000 , 0.941176 }},
01203 {"ivory1",  {1.000000 , 1.000000 , 0.941176 }},
01204 {"ivory2",  {0.933333 , 0.933333 , 0.878431 }},
01205 {"ivory3",  {0.803922 , 0.803922 , 0.756863 }},
01206 {"ivory4",  {0.545098 , 0.545098 , 0.513725 }},
01207 {"khaki",  {0.941176 , 0.901961 , 0.549020 }},
01208 {"khaki1",  {1.000000 , 0.964706 , 0.560784 }},
01209 {"khaki2",  {0.933333 , 0.901961 , 0.521569 }},
01210 {"khaki3",  {0.803922 , 0.776471 , 0.450980 }},
01211 {"khaki4",  {0.545098 , 0.525490 , 0.305882 }},
01212 {"lavender",  {0.901961 , 0.901961 , 0.980392 }},
01213 {"lavender_blush",  {1.000000 , 0.941176 , 0.960784 }},
01214 {"lawn_green",  {0.486275 , 0.988235 , 0.000000 }},
01215 {"lemon_chiffon",  {1.000000 , 0.980392 , 0.803922 }},
01216 {"light_blue",  {0.678431 , 0.847059 , 0.901961 }},
01217 {"light_coral",  {0.941176 , 0.501961 , 0.501961 }},
01218 {"light_cyan",  {0.878431 , 1.000000 , 1.000000 }},
01219 {"light_goldenrod",  {0.933333 , 0.866667 , 0.509804 }},
01220 {"light_goldenrod_yellow",  {0.980392 , 0.980392 , 0.823529 }},
01221 {"light_gray",  {0.827451 , 0.827451 , 0.827451 }},
01222 {"light_grey",  {0.827451 , 0.827451 , 0.827451 }},
01223 {"light_pink",  {1.000000 , 0.713725 , 0.756863 }},
01224 {"light_salmon",  {1.000000 , 0.627451 , 0.478431 }},
01225 {"light_sea_green",  {0.125490 , 0.698039 , 0.666667 }},
01226 {"light_sky_blue",  {0.529412 , 0.807843 , 0.980392 }},
01227 {"light_slate_blue",  {0.517647 , 0.439216 , 1.000000 }},
01228 {"light_slate_gray",  {0.466667 , 0.533333 , 0.600000 }},
01229 {"light_slate_grey",  {0.466667 , 0.533333 , 0.600000 }},
01230 {"light_steel_blue",  {0.690196 , 0.768627 , 0.870588 }},
01231 {"light_yellow",  {1.000000 , 1.000000 , 0.878431 }},
01232 {"lime_green",  {0.196078 , 0.803922 , 0.196078 }},
01233 {"linen",  {0.980392 , 0.941176 , 0.901961 }},
01234 {"magenta",  {1.000000 , 0.000000 , 1.000000 }},
01235 {"magenta1",  {1.000000 , 0.000000 , 1.000000 }},
01236 {"magenta2",  {0.933333 , 0.000000 , 0.933333 }},
01237 {"magenta3",  {0.803922 , 0.000000 , 0.803922 }},
01238 {"magenta4",  {0.545098 , 0.000000 , 0.545098 }},
01239 {"maroon",  {0.690196 , 0.188235 , 0.376471 }},
01240 {"maroon1",  {1.000000 , 0.203922 , 0.701961 }},
01241 {"maroon2",  {0.933333 , 0.188235 , 0.654902 }},
01242 {"maroon3",  {0.803922 , 0.160784 , 0.564706 }},
01243 {"maroon4",  {0.545098 , 0.109804 , 0.384314 }},
01244 {"medium_aquamarine",  {0.400000 , 0.803922 , 0.666667 }},
01245 {"medium_blue",  {0.000000 , 0.000000 , 0.803922 }},
01246 {"medium_orchid",  {0.729412 , 0.333333 , 0.827451 }},
01247 {"medium_purple",  {0.576471 , 0.439216 , 0.858824 }},
01248 {"medium_sea_green",  {0.235294 , 0.701961 , 0.443137 }},
01249 {"medium_slate_blue",  {0.482353 , 0.407843 , 0.933333 }},
01250 {"medium_spring_green",  {0.000000 , 0.980392 , 0.603922 }},
01251 {"medium_turquoise",  {0.282353 , 0.819608 , 0.800000 }},
01252 {"medium_violet_red",  {0.780392 , 0.082353 , 0.521569 }},
01253 {"midnight_blue",  {0.098039 , 0.098039 , 0.439216 }},
01254 {"mint_cream",  {0.960784 , 1.000000 , 0.980392 }},
01255 {"misty_rose",  {1.000000 , 0.894118 , 0.882353 }},
01256 {"moccasin",  {1.000000 , 0.894118 , 0.709804 }},
01257 {"navajo_white",  {1.000000 , 0.870588 , 0.678431 }},
01258 {"navy",  {0.000000 , 0.000000 , 0.501961 }},
01259 {"navy_blue",  {0.000000 , 0.000000 , 0.501961 }},
01260 {"old_lace",  {0.992157 , 0.960784 , 0.901961 }},
01261 {"olive_drab",  {0.419608 , 0.556863 , 0.137255 }},
01262 {"orange",  {1.000000 , 0.647059 , 0.000000 }},
01263 {"orange1",  {1.000000 , 0.647059 , 0.000000 }},
01264 {"orange2",  {0.933333 , 0.603922 , 0.000000 }},
01265 {"orange3",  {0.803922 , 0.521569 , 0.000000 }},
01266 {"orange4",  {0.545098 , 0.352941 , 0.000000 }},
01267 {"orange_red",  {1.000000 , 0.270588 , 0.000000 }},
01268 {"orchid",  {0.854902 , 0.439216 , 0.839216 }},
01269 {"orchid1",  {1.000000 , 0.513725 , 0.980392 }},
01270 {"orchid2",  {0.933333 , 0.478431 , 0.913725 }},
01271 {"orchid3",  {0.803922 , 0.411765 , 0.788235 }},
01272 {"orchid4",  {0.545098 , 0.278431 , 0.537255 }},
01273 {"pale_goldenrod",  {0.933333 , 0.909804 , 0.666667 }},
01274 {"pale_green",  {0.596078 , 0.984314 , 0.596078 }},
01275 {"pale_turquoise",  {0.686275 , 0.933333 , 0.933333 }},
01276 {"pale_violet_red",  {0.858824 , 0.439216 , 0.576471 }},
01277 {"papaya_whip",  {1.000000 , 0.937255 , 0.835294 }},
01278 {"peach_puff",  {1.000000 , 0.854902 , 0.725490 }},
01279 {"peru",  {0.803922 , 0.521569 , 0.247059 }},
01280 {"pink",  {1.000000 , 0.752941 , 0.796078 }},
01281 {"pink1",  {1.000000 , 0.709804 , 0.772549 }},
01282 {"pink2",  {0.933333 , 0.662745 , 0.721569 }},
01283 {"pink3",  {0.803922 , 0.568627 , 0.619608 }},
01284 {"pink4",  {0.545098 , 0.388235 , 0.423529 }},
01285 {"plum",  {0.866667 , 0.627451 , 0.866667 }},
01286 {"plum1",  {1.000000 , 0.733333 , 1.000000 }},
01287 {"plum2",  {0.933333 , 0.682353 , 0.933333 }},
01288 {"plum3",  {0.803922 , 0.588235 , 0.803922 }},
01289 {"plum4",  {0.545098 , 0.400000 , 0.545098 }},
01290 {"powder_blue",  {0.690196 , 0.878431 , 0.901961 }},
01291 {"purple",  {0.627451 , 0.125490 , 0.941176 }},
01292 {"purple1",  {0.607843 , 0.188235 , 1.000000 }},
01293 {"purple2",  {0.568627 , 0.172549 , 0.933333 }},
01294 {"purple3",  {0.490196 , 0.149020 , 0.803922 }},
01295 {"purple4",  {0.333333 , 0.101961 , 0.545098 }},
01296 {"red",  {1.000000 , 0.000000 , 0.000000 }},
01297 {"red1",  {1.000000 , 0.000000 , 0.000000 }},
01298 {"red2",  {0.933333 , 0.000000 , 0.000000 }},
01299 {"red3",  {0.803922 , 0.000000 , 0.000000 }},
01300 {"red4",  {0.545098 , 0.000000 , 0.000000 }},
01301 {"rosy_brown",  {0.737255 , 0.560784 , 0.560784 }},
01302 {"royal_blue",  {0.254902 , 0.411765 , 0.882353 }},
01303 {"saddle_brown",  {0.545098 , 0.270588 , 0.074510 }},
01304 {"salmon",  {0.980392 , 0.501961 , 0.447059 }},
01305 {"salmon1",  {1.000000 , 0.549020 , 0.411765 }},
01306 {"salmon2",  {0.933333 , 0.509804 , 0.384314 }},
01307 {"salmon3",  {0.803922 , 0.439216 , 0.329412 }},
01308 {"salmon4",  {0.545098 , 0.298039 , 0.223529 }},
01309 {"sandy_brown",  {0.956863 , 0.643137 , 0.376471 }},
01310 {"sea_green",  {0.180392 , 0.545098 , 0.341176 }},
01311 {"seashell",  {1.000000 , 0.960784 , 0.933333 }},
01312 {"seashell1",  {1.000000 , 0.960784 , 0.933333 }},
01313 {"seashell2",  {0.933333 , 0.898039 , 0.870588 }},
01314 {"seashell3",  {0.803922 , 0.772549 , 0.749020 }},
01315 {"seashell4",  {0.545098 , 0.525490 , 0.509804 }},
01316 {"sienna",  {0.627451 , 0.321569 , 0.176471 }},
01317 {"sienna1",  {1.000000 , 0.509804 , 0.278431 }},
01318 {"sienna2",  {0.933333 , 0.474510 , 0.258824 }},
01319 {"sienna3",  {0.803922 , 0.407843 , 0.223529 }},
01320 {"sienna4",  {0.545098 , 0.278431 , 0.149020 }},
01321 {"sky_blue",  {0.529412 , 0.807843 , 0.921569 }},
01322 {"slate_blue",  {0.415686 , 0.352941 , 0.803922 }},
01323 {"slate_gray",  {0.439216 , 0.501961 , 0.564706 }},
01324 {"slate_grey",  {0.439216 , 0.501961 , 0.564706 }},
01325 {"snow",  {1.000000 , 0.980392 , 0.980392 }},
01326 {"snow1",  {1.000000 , 0.980392 , 0.980392 }},
01327 {"snow2",  {0.933333 , 0.913725 , 0.913725 }},
01328 {"snow3",  {0.803922 , 0.788235 , 0.788235 }},
01329 {"snow4",  {0.545098 , 0.537255 , 0.537255 }},
01330 {"spring_green",  {0.000000 , 1.000000 , 0.498039 }},
01331 {"steel_blue",  {0.274510 , 0.509804 , 0.705882 }},
01332 {"tan",  {0.823529 , 0.705882 , 0.549020 }},
01333 {"tan1",  {1.000000 , 0.647059 , 0.309804 }},
01334 {"tan2",  {0.933333 , 0.603922 , 0.286275 }},
01335 {"tan3",  {0.803922 , 0.521569 , 0.247059 }},
01336 {"tan4",  {0.545098 , 0.352941 , 0.168627 }},
01337 {"thistle",  {0.847059 , 0.749020 , 0.847059 }},
01338 {"thistle1",  {1.000000 , 0.882353 , 1.000000 }},
01339 {"thistle2",  {0.933333 , 0.823529 , 0.933333 }},
01340 {"thistle3",  {0.803922 , 0.709804 , 0.803922 }},
01341 {"thistle4",  {0.545098 , 0.482353 , 0.545098 }},
01342 {"tomato",  {1.000000 , 0.388235 , 0.278431 }},
01343 {"tomato1",  {1.000000 , 0.388235 , 0.278431 }},
01344 {"tomato2",  {0.933333 , 0.360784 , 0.258824 }},
01345 {"tomato3",  {0.803922 , 0.309804 , 0.223529 }},
01346 {"tomato4",  {0.545098 , 0.211765 , 0.149020 }},
01347 {"turquoise",  {0.250980 , 0.878431 , 0.815686 }},
01348 {"turquoise1",  {0.000000 , 0.960784 , 1.000000 }},
01349 {"turquoise2",  {0.000000 , 0.898039 , 0.933333 }},
01350 {"turquoise3",  {0.000000 , 0.772549 , 0.803922 }},
01351 {"turquoise4",  {0.000000 , 0.525490 , 0.545098 }},
01352 {"violet",  {0.933333 , 0.509804 , 0.933333 }},
01353 {"violet_red",  {0.815686 , 0.125490 , 0.564706 }},
01354 {"wheat",  {0.960784 , 0.870588 , 0.701961 }},
01355 {"wheat1",  {1.000000 , 0.905882 , 0.729412 }},
01356 {"wheat2",  {0.933333 , 0.847059 , 0.682353 }},
01357 {"wheat3",  {0.803922 , 0.729412 , 0.588235 }},
01358 {"wheat4",  {0.545098 , 0.494118 , 0.400000 }},
01359 {"white",  {1.000000 , 1.000000 , 1.000000 }},
01360 {"white_smoke",  {0.960784 , 0.960784 , 0.960784 }},
01361 {"yellow",  {1.000000 , 1.000000 , 0.000000 }},
01362 {"yellow1",  {1.000000 , 1.000000 , 0.000000 }},
01363 {"yellow2",  {0.933333 , 0.933333 , 0.000000 }},
01364 {"yellow3",  {0.803922 , 0.803922 , 0.000000 }},
01365 {"yellow4",  {0.545098 , 0.545098 , 0.000000 }},
01366 {"yellow_green",  {0.603922 , 0.803922 , 0.196078} }
01367 } ;
01368 
01369 int
01370 LookupColorByName(
01371               char * name,
01372               Vec color
01373 )
01374 {
01375        int rc ;
01376        rc = BinarySearch(name, 0, NCOLORS - 1 , Colors) ;
01377        if (rc < 0) {
01378               return(0) ;
01379        }
01380 
01381        VecCopy(Colors[rc].ce_color, color) ;
01382        return 1 ;
01383 }
01384 
01385 
01386 int 
01387 BinarySearch(
01388        char * name,
01389        int l,
01390        int h,
01391        ColorEntry array[]
01392 )
01393 {
01394        int m, rc ;
01395        if (l > h)
01396               return(-1) ;
01397        
01398        m = (l + h) / 2 ;
01399 
01400        rc = strcmp(name, array[m].ce_name) ;
01401        if (rc == 0)
01402               return m ;
01403        else if (rc < 0)
01404               return BinarySearch(name, l, m-1, array) ;
01405        else
01406               return BinarySearch(name, m + 1, h, array) ;
01407 }