]> granicus.if.org Git - graphviz/commitdiff
Add initial code for gvmap
authorerg <devnull@localhost>
Thu, 3 Mar 2011 15:29:36 +0000 (15:29 +0000)
committererg <devnull@localhost>
Thu, 3 Mar 2011 15:29:36 +0000 (15:29 +0000)
18 files changed:
cmd/gvmap/DotIO.c [new file with mode: 0644]
cmd/gvmap/DotIO.h [new file with mode: 0644]
cmd/gvmap/Makefile.am [new file with mode: 0644]
cmd/gvmap/clustering.c [new file with mode: 0644]
cmd/gvmap/clustering.h [new file with mode: 0644]
cmd/gvmap/color_palette.h [new file with mode: 0644]
cmd/gvmap/colorutil.c [new file with mode: 0644]
cmd/gvmap/colorutil.h [new file with mode: 0644]
cmd/gvmap/country_graph_coloring.c [new file with mode: 0644]
cmd/gvmap/country_graph_coloring.h [new file with mode: 0644]
cmd/gvmap/gvmap.1 [new file with mode: 0644]
cmd/gvmap/gvmap.c [new file with mode: 0644]
cmd/gvmap/make_map.c [new file with mode: 0644]
cmd/gvmap/make_map.h [new file with mode: 0644]
cmd/gvmap/mq.c [new file with mode: 0644]
cmd/gvmap/mq.h [new file with mode: 0644]
cmd/gvmap/power.c [new file with mode: 0644]
cmd/gvmap/power.h [new file with mode: 0644]

diff --git a/cmd/gvmap/DotIO.c b/cmd/gvmap/DotIO.c
new file mode 100644 (file)
index 0000000..8456578
--- /dev/null
@@ -0,0 +1,815 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#define STANDALONE
+#include "general.h"
+#include "DotIO.h"
+#include "clustering.h"
+#include "mq.h"
+#include "spring_electrical.h"
+#include "color_palette.h"
+#include "colorutil.h"
+
+typedef struct {
+    Agrec_t h;
+    unsigned int id;
+} Agnodeinfo_t;
+
+#define ND_id(n)  (((Agnodeinfo_t*)((n)->base.data))->id)
+
+#if 0
+static void
+posStr (char* buf, int dim, real* x, double sc)
+{
+  if (dim== 3){
+    sprintf (buf, "%f,%f,%f", sc*x[0], sc*x[1], sc*x[2]);
+  } else if (dim == 2) {
+    sprintf (buf, "%f,%f", sc*x[0], sc*x[1]);
+  } else if (dim == 1) {
+    sprintf (buf, "%f", sc*x[0]);
+  } else {
+    assert(0);
+  }
+}
+
+static void 
+attach_embedding (Agraph_t* g, int dim, double sc, real *x)
+{
+  Agsym_t* sym = agattr(g, AGNODE, "pos", NULL); 
+  Agnode_t* n;
+  char buf[1024];
+  int i = 0;
+
+  if (!sym)
+    sym = agattr (g, AGNODE, "pos", "");
+
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    assert (i == ND_id(n));
+    posStr (buf, dim, x + i*dim, sc);
+    agxset (n, sym, buf);
+    i++;
+  }
+  
+}
+#endif
+
+/* SparseMatrix_import_dot:
+ * Assumes g is connected and simple, i.e., we can have a->b and b->a
+ * but not a->b and a->b
+ */
+SparseMatrix 
+SparseMatrix_import_dot (Agraph_t* g, int dim, real **label_sizes, real **x, int *n_edge_label_nodes, int **edge_label_nodes, int format, SparseMatrix *D)
+{
+  SparseMatrix A = 0;
+  Agnode_t* n;
+  Agedge_t* e;
+  Agsym_t *sym, *symD = NULL;
+  int nnodes;
+  int nedges;
+  int i, row;
+  int* I;
+  int* J;
+  real *val, *valD = NULL;
+  real v;
+  int type = MATRIX_TYPE_REAL;
+  real padding = 10;
+  int nedge_nodes = 0;
+
+  if (!g) return NULL;
+  nnodes = agnnodes (g);
+  nedges = agnedges (g);
+  if (format != FORMAT_CSR) {
+    fprintf (stderr, "Format %d not supported\n", format);
+    exit (1);
+  }
+
+  /* Assign node ids */
+  i = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n))
+    ND_id(n) = i++;
+
+  I = N_NEW(nedges, int);
+  J = N_NEW(nedges, int);
+  val = N_NEW(nedges, real);
+
+  sym = agattr(g, AGEDGE, "weight", NULL); 
+  if (D) {
+    symD = agattr(g, AGEDGE, "len", NULL); 
+    valD = N_NEW(nedges, real);
+  }
+  i = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    if (edge_label_nodes && strncmp(agnameof(n), "|edgelabel|",11)==0) nedge_nodes++;
+    row = ND_id(n);
+    for (e = agfstout (g, n); e; e = agnxtout (g, e)) {
+      I[i] = row;
+      J[i] = ND_id(aghead(e));
+
+      /* edge weight */
+      if (sym) {
+        if (sscanf (agxget(e,sym), "%lf", &v) != 1) v = 1;
+      } else {
+        v = 1;
+      }
+      val[i] = v;
+
+      /* edge length */
+      if (symD) {
+        if (sscanf (agxget(e,symD), "%lf", &v) != 1) v = 1;
+       valD[i] = v;
+      }
+
+      i++;
+    }
+  }
+  
+  if (edge_label_nodes) {
+    *edge_label_nodes = MALLOC(sizeof(int)*nedge_nodes);
+    nedge_nodes = 0;
+  }
+
+  *label_sizes = MALLOC(sizeof(real)*2*nnodes);
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    real sz;
+    i = ND_id(n);
+    if (edge_label_nodes && strncmp(agnameof(n), "|edgelabel|",11)==0) {
+      (*edge_label_nodes)[nedge_nodes++] = i;
+    }
+    if (agget(n, "width") && agget(n, "height")){
+      sscanf(agget(n, "width"), "%lf", &sz);
+      /*      (*label_sizes)[i*2] = POINTS(sz)*.6;*/
+      (*label_sizes)[i*2] = POINTS(sz)*.5 + padding*0.5;
+      sscanf(agget(n, "height"), "%lf", &sz);
+      /*(*label_sizes)[i*2+1] = POINTS(sz)*.6;*/
+      (*label_sizes)[i*2+1] = POINTS(sz)*.5  + padding*0.5;
+    } else {
+      (*label_sizes)[i*2] = 4*POINTS(0.75)*.5;
+      (*label_sizes)[i*2+1] = 4*POINTS(0.5)*.5;
+    }
+ }
+
+  if (x){
+    if (!(*x)) {
+      *x = MALLOC(sizeof(real)*dim*nnodes);
+      assert(*x);
+    }
+    for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+      real xx,yy, zz,ww;
+      int nitems, k;
+      i = ND_id(n);
+      if (agget(n, "pos")){
+       if (dim == 2){
+         nitems = sscanf(agget(n, "pos"), "%lf,%lf", &xx, &yy);
+         if (nitems != 2) return NULL;
+         (*x)[i*dim] = xx;
+         (*x)[i*dim+1] = yy;
+       } else if (dim == 3){
+         nitems = sscanf(agget(n, "pos"), "%lf,%lf,%lf", &xx, &yy, &zz);
+         if (nitems != 3) return NULL;
+         (*x)[i*dim] = xx;
+         (*x)[i*dim+1] = yy;
+         (*x)[i*dim+2] = zz;
+       } else if (dim == 4){
+         nitems = sscanf(agget(n, "pos"), "%lf,%lf,%lf,%lf", &xx, &yy, &zz,&ww);
+         if (nitems != 4) return NULL;
+         (*x)[i*dim] = xx;
+         (*x)[i*dim+1] = yy;
+         (*x)[i*dim+2] = zz;
+         (*x)[i*dim+3] = ww;
+       } else if (dim == 1){
+         nitems = sscanf(agget(n, "pos"), "%lf", &xx);
+         if (nitems != 1) return NULL;
+         (*x)[i*dim] = xx;
+       } else {
+         assert(0);
+       }
+      } else {
+       for (k = 0; k < dim; k++) (*x)[i*dim + k] = 0;
+      }
+    }
+  }
+
+  A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, val, type);
+  if (edge_label_nodes) *n_edge_label_nodes = nedge_nodes;
+
+  if (D) *D = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, valD, type);
+
+  FREE(I);
+  FREE(J);
+  FREE(val);
+  if (valD) FREE(valD);
+
+  return A;
+}
+
+
+void dump_coordinates(char *name, int n, int dim, real *x){
+  char fn[1000];
+  FILE *fp;
+  int i, k;
+
+  if (!name){
+    name = "";
+  } else {
+    name = strip_dir(name);
+  }
+  
+  strcpy(fn, name);
+  strcat(fn,".x");
+  fp = fopen(fn,"w");
+  fprintf(fp, "%d %d\n",n, dim);
+  for (i = 0; i < n; i++){
+    for (k = 0; k < dim; k++){
+      fprintf(fp,"%f ",x[i*dim+k]);
+    }
+    fprintf(fp,"\n");
+  }
+  fclose(fp);
+
+}
+
+static Agnode_t*
+mkNode (Agraph_t* g, char* name)
+{
+  Agnode_t* n = agnode(g, name, 1);
+  agbindrec(n, "info", sizeof(Agnodeinfo_t), TRUE);
+  return n;
+}
+
+Agraph_t* 
+makeDotGraph (SparseMatrix A, char *name, int dim, real *x, int with_color, int with_label, int  use_matrix_value)
+{
+  Agraph_t* g;
+  Agnode_t* n;
+  Agnode_t* h;
+  Agedge_t* e;
+  int i, j;
+  char buf[1024], buf2[1024];
+  Agsym_t *sym, *sym2 = NULL, *sym3 = NULL;
+  int* ia=A->ia;
+  int* ja=A->ja;
+  real* val = (real*)(A->a);
+  Agnode_t** arr = N_NEW (A->m, Agnode_t*);
+  real *color = NULL;
+  char cstring[8];
+  char *label_string;
+
+  if (!name){
+    name = "stdin";
+  } else {
+    name = strip_dir(name);
+  }
+  label_string = MALLOC(sizeof(char)*1000);
+
+  if (SparseMatrix_known_undirected(A)){
+    g = agopen ("G", Agundirected, 0);
+  } else {
+    g = agopen ("G", Agdirected, 0);
+  }
+  sprintf (buf, "%f", 1.0);
+
+  label_string = strcpy(label_string, name);
+  label_string = strcat(label_string, ". ");
+  sprintf (buf, "%d", A->m);
+  label_string = strcat(label_string, buf);
+  label_string = strcat(label_string, " nodes, ");
+  sprintf (buf, "%d", A->nz);
+  label_string = strcat(label_string, buf);
+  /*  label_string = strcat(label_string, " edges. Created by Yifan Hu");*/
+  label_string = strcat(label_string, " edges.");
+
+
+  if (with_label) sym = agattr(g, AGRAPH, "label", label_string); 
+  sym = agattr(g, AGRAPH, "fontcolor", "#808090");
+  if (with_color) sym = agattr(g, AGRAPH, "bgcolor", "black"); 
+  sym = agattr(g, AGRAPH, "outputorder", "edgesfirst"); 
+
+  if (A->m > 100) {
+    /* -Estyle=setlinewidth(0.0)' -Eheadclip=false -Etailclip=false -Nstyle=invis*/
+    agattr(g, AGNODE, "style", "invis"); 
+  } else {
+    /*    width=0, height = 0, label="", style=filled*/
+    agattr(g, AGNODE, "shape", "point"); 
+    if (A->m < 50){
+      agattr(g, AGNODE, "width", "0.03"); 
+    } else {
+      agattr(g, AGNODE, "width", "0"); 
+    }
+    agattr(g, AGNODE, "label", ""); 
+    agattr(g, AGNODE, "style", "filled"); 
+    if (with_color) {
+      agattr(g, AGNODE, "color", "#FF0000"); 
+    } else {
+      agattr(g, AGNODE, "color", "#000000"); 
+    }
+  }
+
+  agattr(g, AGEDGE, "headclip", "false"); 
+  agattr(g, AGEDGE, "tailclip", "false"); 
+  if (A->m < 50){
+    agattr(g, AGEDGE, "style", "setlinewidth(2)"); 
+  } else if (A->m < 500){
+    agattr(g, AGEDGE, "style", "setlinewidth(0.5)"); 
+  } else if (A->m < 5000){
+    agattr(g, AGEDGE, "style", "setlinewidth(0.1)"); 
+  } else {
+    agattr(g, AGEDGE, "style", "setlinewidth(0.0)"); 
+  }
+
+  if (with_color) {
+    sym2 = agattr(g, AGEDGE, "color", ""); 
+    sym3 = agattr(g, AGEDGE, "wt", ""); 
+  }
+  for (i = 0; i < A->m; i++) {
+    sprintf (buf, "%d", i);
+    n = mkNode (g, buf);
+    ND_id(n) = i;
+    arr[i] = n;
+  }
+
+  if (with_color){
+    real maxdist = 0.;
+    real mindist = 0.;
+    int first = TRUE;
+    color = malloc(sizeof(real)*A->nz);
+    for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+      i = ND_id(n);
+      if (A->type != MATRIX_TYPE_REAL || use_matrix_value){
+       for (j = ia[i]; j < ia[i+1]; j++) {
+         color[j] = distance(x, dim, i, ja[j]);
+         if (i != ja[j]){
+           if (first){
+             mindist = color[j];
+             first = FALSE;
+           } else {
+             mindist = MIN(mindist, color[j]);
+           }
+         }
+         maxdist = MAX(color[j], maxdist);
+       }
+      } else {
+       for (j = ia[i]; j < ia[i+1]; j++) {
+         color[j] = ABS(val[j]);
+         if (i != ja[j]){
+           if (first){
+             mindist = color[j];
+             first = FALSE;
+           } else {
+             mindist = MIN(mindist, color[j]);
+           }
+         }
+         maxdist = MAX(color[j], maxdist);
+       }
+      }
+    }
+    for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+      i = ND_id(n);
+      for (j = ia[i]; j < ia[i+1]; j++) {
+       color[j] = ((color[j] - mindist)/MAX(maxdist-mindist, 0.000001));
+      }
+    }
+  }
+
+  i = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    i = ND_id(n);
+    for (j = ia[i]; j < ia[i+1]; j++) {
+      h = arr [ja[j]];
+      if (val){
+       switch (A->type){
+       case MATRIX_TYPE_REAL:
+         sprintf (buf, "%f", ((real*)A->a)[j]);
+         break;
+       case MATRIX_TYPE_INTEGER:
+         sprintf (buf, "%d", ((int*)A->a)[j]);
+         break;
+       case MATRIX_TYPE_COMPLEX:/* take real part as weight */
+         sprintf (buf, "%f", ((real*)A->a)[2*j]);
+         break;
+       }
+       if (with_color) sprintf (buf2, "%s", hue2rgb(.65*color[j], cstring));
+      } else {
+       sprintf (buf, "%f", 1.);
+       if (with_color) sprintf (buf2, "%s", hue2rgb(.65*color[j], cstring));
+     }
+      e = agedge (g, n, h, NULL, 1);
+      if (with_color) {
+       agxset (e, sym2, buf2);
+       sprintf (buf2, "%f", color[j]);
+       agxset (e, sym3, buf2);
+      }
+    }
+  }
+  
+  FREE(color);
+  FREE (arr);
+  FREE(label_string);
+  return g;
+}
+
+
+char *cat_string(char *s1, char *s2){
+  char *s;
+  s = malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1+1));
+  strcpy(s,s1);
+  strcat(s,"|");
+  strcat(s,s2);
+  return s;
+}
+
+char *cat_string3(char *s1, char *s2, char *s3, int id){
+  char *s;
+  char sid[1000];
+  sprintf(sid,"%d",id);
+  s = malloc(sizeof(char)*(strlen(s1)+strlen(s2)+strlen(s3)+strlen(sid)+1+3));
+  strcpy(s,s1);
+  strcat(s,"|");
+  strcat(s,s2);
+  strcat(s,"|");
+  strcat(s,s3);
+  strcat(s,"|");
+  strcat(s,sid);
+  return s;
+}
+
+
+Agraph_t *convert_edge_labels_to_nodes(Agraph_t* g){
+  Agnode_t *n, *newnode;
+  Agraph_t *dg;
+
+  int nnodes;
+  int nedges;
+
+
+  Agedge_t *ep, *e;
+  int i = 0;
+  Agnode_t **ndmap = NULL;
+  char *s;
+  char *elabel;
+  int id = 0;
+
+  Agsym_t* sym = agattr(g, AGEDGE, "label", NULL);
+
+  dg = agopen("test", g->desc, 0);
+
+  if (!g) return NULL;
+  nnodes = agnnodes (g);
+  nedges = agnedges (g);
+
+  ndmap = malloc(sizeof(Agnode_t *)*nnodes);
+
+  agattr(dg, AGNODE, "label", "\\N"); 
+  agattr(dg, AGNODE, "shape", "ellipse"); 
+  agattr(dg, AGNODE, "width","0.00001");
+  agattr(dg, AGNODE, "height", "0.00001");
+  agattr(dg, AGNODE, "margin","0.");
+  agattr(dg, AGEDGE, "arrowsize", "0.5"); 
+
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    newnode = mkNode(dg, agnameof(n));
+    agset(newnode,"shape","box");
+    ndmap[i] = newnode;
+    ND_id(n) = i++;
+  }
+
+
+  /*
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) {
+      if (agtail(ep) == n) continue;
+      agedge(dg, ndmap[ND_id(agtail(ep))], ndmap[ND_id(aghead(ep))]);
+    }
+  }
+  */
+
+
+
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) {
+      if (agtail(ep) == n && (aghead(ep) != n)) continue;
+      if (sym && (elabel = agxget(ep,sym)) && strcmp(elabel,"") != 0) {
+       s = cat_string3("|edgelabel",agnameof(agtail(ep)), agnameof(aghead(ep)), id++);
+       newnode = mkNode(dg,s);
+       agset(newnode,"label",elabel);
+       agset(newnode,"shape","plaintext");
+       e = agedge(dg, ndmap[ND_id(agtail(ep))], newnode, NULL, 1);
+       agset(e, "arrowsize","0");
+       agedge(dg, newnode, ndmap[ND_id(aghead(ep))], NULL, 1);
+       free(s);
+      } else {
+       agedge(dg, ndmap[ND_id(agtail(ep))], ndmap[ND_id(aghead(ep))], NULL, 1);
+      }
+    }
+  }
+
+  free(ndmap);
+  return dg;
+ }
+
+Agraph_t* assign_random_edge_color(Agraph_t* g){
+  char cstring[8];
+  char buf2[1024];
+  Agsym_t *sym2;
+  Agnode_t* n;
+  Agedge_t *ep;
+
+  sym2 = agattr(g, AGEDGE, "color", ""); 
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) {
+      sprintf (buf2, "%s", hue2rgb(0.65*drand(), cstring));
+      agxset (ep, sym2, buf2);
+    }
+  }
+
+  return g;
+ }
+
+void Dot_SetClusterColor(Agraph_t* g, float *rgb_r,  float *rgb_g,  float *rgb_b, int *clusters){
+
+  Agnode_t* n;
+  char scluster[20];
+  int i;
+  Agsym_t* clust_clr_sym = agattr(g, AGNODE, "clustercolor", NULL); 
+
+  if (!clust_clr_sym) clust_clr_sym = agattr(g, AGNODE, "clustercolor", "-1"); 
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    i = ND_id(n);
+    if (rgb_r && rgb_g && rgb_b) {
+      rgb2hex((rgb_r)[(clusters)[i]],(rgb_g)[(clusters)[i]],(rgb_b)[(clusters)[i]], scluster);
+      //sprintf(scluster,"#%2x%2x%2x", (int) (255*((rgb_r)[(clusters)[i]])), (int) (255*((rgb_g)[(clusters)[i]])), (int) (255*((rgb_b)[(clusters)[i]])));
+    }
+    agxset(n,clust_clr_sym,scluster);
+  }
+}
+
+SparseMatrix Import_coord_clusters_from_dot(Agraph_t* g, int maxcluster, int dim, int *nn, real **label_sizes, real **areas, real **x, int **clusters, float **rgb_r,  float **rgb_g,  float **rgb_b,  float **fsz, char ***labels, int default_color_scheme, int clustering_scheme){
+  SparseMatrix A = 0;
+  Agnode_t* n;
+  Agedge_t* e;
+  Agsym_t* sym;
+  Agsym_t* clust_sym;
+  Agsym_t* clust_clr_sym;
+  int nnodes;
+  int nedges;
+  int i, row, ic,nc, j;
+  int* I;
+  int* J;
+  real* val;
+  real v;
+  int type = MATRIX_TYPE_REAL;
+  char scluster[100];
+  float ff;
+  real* areap = NULL;
+
+  int MAX_GRPS, MIN_GRPS, noclusterinfo = FALSE, first = TRUE;
+  float *pal;
+
+  switch (default_color_scheme){
+  case COLOR_SCHEME_BLUE_YELLOW:
+    pal = &(palette_blue_to_yellow[0][0]);
+    break;
+  case COLOR_SCHEME_WHITE_RED:
+    pal = &(palette_white_to_red[0][0]);
+    break;
+  case COLOR_SCHEME_GREY_RED:
+    pal = &(palette_grey_to_red[0][0]);
+    break;
+  case COLOR_SCHEME_GREY:
+    pal = &(palette_grey[0][0]);
+    break;
+  case COLOR_SCHEME_PASTEL:
+    pal = &(palette_pastel[0][0]);
+    break;
+  case COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED:
+    fprintf(stderr," HERE!\n");
+    pal = &(palette_sequential_singlehue_red[0][0]);
+    break;
+  case COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED_LIGHTER:
+    fprintf(stderr," HERE!\n");
+    pal = &(palette_sequential_singlehue_red_lighter[0][0]);
+    break;
+  case COLOR_SCHEME_PRIMARY:
+    pal = &(palette_primary[0][0]);
+    break;
+  case COLOR_SCHEME_NONE:
+    pal = NULL;
+    break;
+  default:
+    pal = &(palette_pastel[0][0]);
+    break;
+  }
+    
+  if (!g) return NULL;
+  nnodes = agnnodes (g);
+  nedges = agnedges (g);
+  *nn = nnodes;
+
+  /* Assign node ids */
+  i = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n))
+    ND_id(n) = i++;
+
+  /* form matrix */  
+  I = N_NEW(nedges, int);
+  J = N_NEW(nedges, int);
+  val = N_NEW(nedges, real);
+
+  sym = agattr(g, AGEDGE, "weight", NULL); 
+  clust_sym = agattr(g, AGNODE, "cluster", NULL); 
+  clust_clr_sym = agattr(g, AGNODE, "clustercolor", NULL); 
+  //sym = agattr(g, AGEDGE, "wt", NULL); 
+  i = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    row = ND_id(n);
+    for (e = agfstout (g, n); e; e = agnxtout (g, e)) {
+      I[i] = row;
+      J[i] = ND_id(aghead(e));
+      if (sym) {
+        if (sscanf (agxget(e,sym), "%lf", &v) != 1)
+          v = 1;
+      }
+      else
+        v = 1;
+      val[i] = v;
+      i++;
+    }
+  }
+  A = SparseMatrix_from_coordinate_arrays(nedges, nnodes, nnodes, I, J, val, type);
+
+  /* get clustering info */
+  nc = 1;
+  MIN_GRPS = 0;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    i = ND_id(n);
+    if (clust_sym && (sscanf(agxget(n,clust_sym), "%d", &ic)>0)) {
+      nc = MAX(nc, ic);
+      if (first){
+       MIN_GRPS = ic;
+       first = FALSE;
+      } else {
+       MIN_GRPS = MIN(MIN_GRPS, ic);
+      }
+    } else {
+      noclusterinfo = TRUE;
+    }
+  }
+  MAX_GRPS = nc;
+
+  *clusters = MALLOC(sizeof(int)*nnodes);
+
+  if (noclusterinfo) {
+    int use_value = TRUE, flag = 0;
+    real modularity;
+    if (!clust_sym) clust_sym = agattr(g,AGNODE,"cluster","-1");
+
+    if (clustering_scheme == CLUSTERING_MQ){
+      mq_clustering(A, FALSE, maxcluster, use_value,
+                   &nc, clusters, &modularity, &flag);
+    } else if (clustering_scheme == CLUSTERING_MODULARITY){ 
+      modularity_clustering(A, FALSE, maxcluster, use_value,
+                   &nc, clusters, &modularity, &flag);
+    } else {
+      assert(0);
+    }
+    for (i = 0; i < nnodes; i++) (*clusters)[i]++;/* make into 1 based */
+    for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+      i = ND_id(n);
+      sprintf(scluster,"%d",(*clusters)[i]);
+      agxset(n,clust_sym,scluster);
+    }
+    MIN_GRPS = 1;
+    MAX_GRPS = nc;
+    if (Verbose){
+      fprintf(stderr," no complement clustering info in dot file, using modularity clustering. Modularity = %f, ncluster=%d\n",modularity, nc);
+    }
+  }
+
+  *label_sizes = MALLOC(sizeof(real)*dim*nnodes);
+  if (pal){
+    *rgb_r = MALLOC(sizeof(float)*(1+MAX_GRPS));
+    *rgb_g = MALLOC(sizeof(float)*(1+MAX_GRPS));
+    *rgb_b = MALLOC(sizeof(float)*(1+MAX_GRPS));
+  } else {
+    *rgb_r = NULL;
+    *rgb_g = NULL;
+    *rgb_b = NULL;
+  }
+  *fsz = MALLOC(sizeof(float)*nnodes);
+  *labels = MALLOC(sizeof(char*)*nnodes);
+
+  if (areas){
+    *areas = areap = MALLOC(sizeof(real)*nnodes);
+  }
+
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    gvcolor_t color;
+    real sz;
+    i = ND_id(n);
+    if (agget(n, "width") && agget(n, "height")){
+      sscanf(agget(n, "width"), "%lf", &sz);
+      (*label_sizes)[i*2] = POINTS(sz*0.5);
+      sscanf(agget(n, "height"), "%lf", &sz);
+      (*label_sizes)[i*2+1] = POINTS(sz*0.5);
+    } else {
+      (*label_sizes)[i*2] = POINTS(0.75/2);
+      (*label_sizes)[i*2+1] = POINTS(0.5*2);
+    }
+
+    if (areap) {
+      char* s;
+      double d;
+      if ((s = agget(n, "area")) && sscanf(s, "%lf", &d))
+        areap[i] = d;
+      else
+        areap[i] = 1.0;
+    }
+
+    if (!noclusterinfo && (sscanf(agxget(n, clust_sym), "%d", &ic)>0)) {
+      (*clusters)[i] = ic;
+    }
+
+
+   if (agget(n, "fontsize")){
+      sscanf(agget(n, "fontsize"), "%f", &ff);
+      (*fsz)[i] = ff;
+    } else {
+     (*fsz)[i] = 14;
+    }
+
+   if (agget(n, "label") && strcmp(agget(n, "label"), "") != 0 && strcmp(agget(n, "label"), "\\N") != 0){
+     char *lbs;
+     lbs = agget(n, "label");
+      (*labels)[i] = MALLOC(sizeof(char)*(strlen(lbs)+1));
+      strcpy((*labels)[i], lbs);
+    } else {
+     (*labels)[i] = MALLOC(sizeof(char)*(strlen(agnameof(n))+1));
+      strcpy((*labels)[i], agnameof(n));
+    }
+
+
+
+   j = (*clusters)[i];
+   if (MAX_GRPS-MIN_GRPS < MAX_COLOR) {
+     j = (j-MIN_GRPS)*((int)((MAX_COLOR-1)/MAX((MAX_GRPS-MIN_GRPS),1)));
+   } else {
+     j = (j-MIN_GRPS)%MAX_COLOR;
+   }
+
+   if (pal){
+     //     assert((*clusters)[i] >= 0 && (*clusters)[i] <= MAX_GRPS);
+     (*rgb_r)[(*clusters)[i]] = pal[3*j+0];
+     (*rgb_g)[(*clusters)[i]] =  pal[3*j+1];
+     (*rgb_b)[(*clusters)[i]] = pal[3*j+2];
+   }
+
+   if (!noclusterinfo && clust_clr_sym && (colorxlate(agxget(n,clust_clr_sym),&color,RGBA_DOUBLE) == COLOR_OK)) {
+     (*rgb_r)[(*clusters)[i]] = color.u.RGBA[0];
+     (*rgb_g)[(*clusters)[i]] = color.u.RGBA[1];
+     (*rgb_b)[(*clusters)[i]] = color.u.RGBA[2];
+   }
+
+
+  }
+
+
+  if (x){
+    *x = MALLOC(sizeof(real)*dim*nnodes);
+    for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+      real xx,yy;
+      i = ND_id(n);
+      if (agget(n, "pos")){
+       sscanf(agget(n, "pos"), "%lf,%lf", &xx, &yy);
+       (*x)[i*dim] = xx;
+       (*x)[i*dim+1] = yy;
+      } else {
+       fprintf(stderr,"WARNING: pos field missing for node %d, set to origin\n",i);
+       (*x)[i*dim] = 0;
+       (*x)[i*dim+1] = 0;
+      }
+    }
+  }
+
+
+  FREE(I);
+  FREE(J);
+  FREE(val);
+
+  return A;
+}
+
+
+void initDotIO (Agraph_t *g)
+{
+  aginit(g, AGNODE, "info", sizeof(Agnodeinfo_t), TRUE);
+}
+
diff --git a/cmd/gvmap/DotIO.h b/cmd/gvmap/DotIO.h
new file mode 100644 (file)
index 0000000..ae24ded
--- /dev/null
@@ -0,0 +1,35 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef DOTIO_H
+#define DOTIO_H
+
+#include <cgraph.h>
+#include "SparseMatrix.h"
+
+enum {COLOR_SCHEME_NONE, COLOR_SCHEME_PASTEL = 1, COLOR_SCHEME_BLUE_YELLOW, COLOR_SCHEME_WHITE_RED, COLOR_SCHEME_GREY_RED, COLOR_SCHEME_PRIMARY, COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED, COLOR_SCHEME_SEQUENTIAL_SINGLEHUE_RED_LIGHTER, COLOR_SCHEME_GREY};
+extern void initDotIO (Agraph_t *g);
+
+/* extern void attach_embedding(Agraph_t *g, int dim, double sc, real *x); */
+extern SparseMatrix SparseMatrix_import_dot(Agraph_t* g, int dim, real **label_sizes, real **x, int *n_edge_label_nodes,
+                                           int **edge_label_nodes, int format, SparseMatrix *D);
+extern Agraph_t* makeDotGraph (SparseMatrix, char *title, int dim, real *x, int with_color, int with_label, int use_matrix_value);
+Agraph_t *convert_edge_labels_to_nodes(Agraph_t* g);
+Agraph_t* assign_random_edge_color(Agraph_t* g);
+void dump_coordinates(char *name, int n, int dim, real *x);
+char * hue2rgb(real hue, char *color);
+
+SparseMatrix Import_coord_clusters_from_dot(Agraph_t* g, int maxcluster, int dim, int *nn, real **label_sizes, real ** areas, real **x, int **clusters, float **rgb_r,  float **rgb_g,  float **rgb_b,  float **fsz, char ***labels, int default_color_scheme, int clustering_scheme);
+
+void Dot_SetClusterColor(Agraph_t* g, float *rgb_r,  float *rgb_g,  float *rgb_b, int *clustering);
+#endif
diff --git a/cmd/gvmap/Makefile.am b/cmd/gvmap/Makefile.am
new file mode 100644 (file)
index 0000000..640fae4
--- /dev/null
@@ -0,0 +1,42 @@
+# $Id$Revision$
+## Process this file with automake to produce Makefile.in
+
+pdfdir = $(pkgdatadir)/doc/pdf
+man_MANS = gvmap.1
+pdf_DATA = gvmap.1.pdf
+
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/lib/common \
+       -I$(top_srcdir)/lib/neatogen \
+       -I$(top_srcdir)/lib/sfdpgen \
+       -I$(top_srcdir)/lib/sparse \
+       -I$(top_srcdir)/lib/cgraph \
+       -I$(top_srcdir)/lib/ingraphs \
+       -I$(top_srcdir)/lib/cdt
+
+bin_PROGRAMS = gvmap
+
+noinst_HEADERS = make_map.h power.h country_graph_coloring.h DotIO.h \
+       colorutil.h color_palette.h mq.h clustering.h
+
+gvmap_SOURCES = gvmap.c make_map.c power.c country_graph_coloring.c DotIO.c \
+       colorutil.c mq.c clustering.c
+
+gvmap_CPPFLAGS = $(AM_CPPFLAGS)
+gvmap_LDADD = \
+       $(top_builddir)/lib/sfdpgen/libsfdpgen_C.la \
+       $(top_builddir)/lib/neatogen/libneatogen_C.la \
+       $(top_builddir)/lib/sparse/libsparse_C.la \
+       $(top_builddir)/lib/rbtree/librbtree_C.la \
+       $(top_builddir)/lib/ingraphs/libingraphs_C.la \
+       $(top_builddir)/lib/common/libcommon_C.la \
+       $(top_builddir)/lib/cgraph/libcgraph.la \
+       $(GTS_LIBS)
+
+gvmap.1.pdf: $(srcdir)/gvmap.1
+       - @GROFF@ -Tps -man $(srcdir)/gvmap.1 | @PS2PDF@ - - >gvmap.1.pdf
+
+EXTRA_DIST = $(man_MANS) $(pdf_DATA) # gvmap.vcproj
+
+DISTCLEANFILES = $(pdf_DATA)
diff --git a/cmd/gvmap/clustering.c b/cmd/gvmap/clustering.c
new file mode 100644 (file)
index 0000000..caf702e
--- /dev/null
@@ -0,0 +1,338 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#define STANDALONE
+#include "general.h"
+#include "SparseMatrix.h"
+#include "clustering.h"
+
+Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_init(SparseMatrix A, int level){
+  Multilevel_Modularity_Clustering grid;
+  int n = A->n, i, j;
+
+  assert(A->type == MATRIX_TYPE_REAL);
+  assert(SparseMatrix_is_symmetric(A, FALSE));
+
+  if (!A) return NULL;
+  assert(A->m == n);
+  grid = MALLOC(sizeof(struct Multilevel_Modularity_Clustering_struct));
+  grid->level = level;
+  grid->n = n;
+  grid->A = A;
+  grid->P = NULL;
+  grid->R = NULL;
+  grid->next = NULL;
+  grid->prev = NULL;
+  grid->delete_top_level_A = FALSE;
+  grid->matching = MALLOC(sizeof(real)*(n));
+  grid->deg = NULL;
+
+  if (level == 0){
+    real modularity = 0;
+    int *ia = A->ia, *ja = A->ja, n = A->n;
+    real deg_total = 0;
+    real *deg, *a = (real*) (A->a);
+    real *indeg;
+
+    grid->deg_total = 0.;
+    grid->deg = MALLOC(sizeof(real)*(n));
+    deg = grid->deg;
+
+    indeg = MALLOC(sizeof(real)*n);
+    for (i = 0; i < n; i++){
+      deg[i] = 0;
+      indeg[i] = 0.;
+      for (j = ia[i]; j < ia[i+1]; j++){
+       deg[i] += a[j];
+       if (ja[j] == i) indeg[i] = a[j];
+      }
+      deg_total += deg[i];
+    }
+    if (deg_total == 0) deg_total = 1;
+    for (i = 0; i < n; i++){
+      modularity += (indeg[i] - deg[i]*deg[i]/deg_total)/deg_total;
+    }
+    grid->deg_total = deg_total;
+    grid->deg = deg;
+    grid->modularity = modularity;
+    FREE(indeg);
+  }
+
+
+  return grid;
+} 
+
+void Multilevel_Modularity_Clustering_delete(Multilevel_Modularity_Clustering grid){
+  if (!grid) return;
+  if (grid->A){
+    if (grid->level == 0) {
+      if (grid->delete_top_level_A) SparseMatrix_delete(grid->A);
+    } else {
+      SparseMatrix_delete(grid->A);
+    }
+  }
+  SparseMatrix_delete(grid->P);
+  SparseMatrix_delete(grid->R);
+  FREE(grid->matching);
+  FREE(grid->deg);
+
+  Multilevel_Modularity_Clustering_delete(grid->next);
+  FREE(grid);
+}
+
+Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_establish(Multilevel_Modularity_Clustering grid, int maxcluster){
+  int *matching = grid->matching;
+  SparseMatrix A = grid->A;
+  int n = grid->n, level = grid->level, nc = 0;
+  real modularity = 0;
+  int *ia = A->ia, *ja = A->ja;
+  real *a;
+  real *deg = grid->deg;
+  real *deg_new;
+  int i, j, jj, jc, jmax;
+  real inv_deg_total = 1./(grid->deg_total);
+  real *deg_inter, gain;
+  int *mask;
+  real maxgain;
+  real total_gain = 0;
+  modularity = grid->modularity;
+
+  deg_new = MALLOC(sizeof(real)*n);
+  deg_inter = MALLOC(sizeof(real)*n);
+  mask = MALLOC(sizeof(int)*n);
+  for (i = 0; i < n; i++) mask[i] = -1;
+
+  assert(n == A->n);
+  for (i = 0; i < n; i++) matching[i] = UNMATCHED;
+
+  /* gain in merging node i into cluster j is
+     deg(i,j)/deg_total - 2*deg(i)*deg(j)/deg_total^2
+  */
+  a = (real*) A->a;
+  for (i = 0; i < n; i++){
+    if (matching[i] != UNMATCHED) continue;
+    /* accumulate connections between i and clusters */
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj == i) continue;
+      if ((jc=matching[jj]) != UNMATCHED){
+       if (mask[jc] != i) {
+         mask[jc] = i;
+         deg_inter[jc] = a[j];
+       } else {
+         deg_inter[jc] += a[j];
+       }
+      }
+    }
+
+    maxgain = 0;
+    jmax = -1;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj == i) continue;
+      if ((jc=matching[jj]) == UNMATCHED){
+       /* the first 2 is due to the fact that deg_iter gives edge weight from i to jj, but there are also edges from jj to i */
+       gain = (2*a[j] - 2*deg[i]*deg[jj]*inv_deg_total)*inv_deg_total;
+      } else {
+       if (deg_inter[jc] > 0){
+         /* the first 2 is due to the fact that deg_iter gives edge weight from i to jc, but there are also edges from jc to i */
+         gain = (2*deg_inter[jc] - 2*deg[i]*deg_new[jc]*inv_deg_total)*inv_deg_total;
+         //      printf("mod = %f deg_inter[jc] =%f, deg[i] = %f, deg_new[jc]=%f, gain = %f\n",modularity, deg_inter[jc],deg[i],deg_new[jc],gain);
+         deg_inter[jc] = -1; /* so that we do not redo the calulation when we hit another neighbor in cluster jc */
+       } else {
+         gain = -1;
+       }
+      }
+      if (j == ia[i] || gain > maxgain){
+       maxgain = gain;
+       jmax = jj;
+      }
+
+    }
+
+    /* now merge i and jmax */
+    if (maxgain > 0 || (nc >= 1 && nc > maxcluster)){
+      total_gain += maxgain;
+      jc = matching[jmax];
+      if (jc == UNMATCHED){
+       //     printf("maxgain=%f, merge %d, %d\n",maxgain, i, jmax);
+       matching[i] = matching[jmax] = nc;
+       deg_new[nc] = deg[i] + deg[jmax];
+       nc++;
+      } else {
+       //      printf("maxgain=%f, merge with existing cluster %d, %d\n",maxgain, i, jc);
+       deg_new[jc] += deg[i];
+       matching[i] = jc;
+      }
+    } else {
+      assert(maxgain <= 0);
+      matching[i] = nc;
+      deg_new[nc] = deg[i];
+      nc++;
+    }
+
+  }
+
+  if (Verbose) fprintf(stderr,"modularity = %f new modularity = %f level = %d, n = %d, nc = %d, gain = %g\n", modularity, modularity + total_gain, 
+                      level, n, nc, total_gain);
+
+  if (nc >= 1 && (total_gain > 0 || nc < n)){
+    /* now set up restriction and prolongation operator */
+    SparseMatrix P, R, R0, B, cA;
+    real one = 1.;
+    Multilevel_Modularity_Clustering cgrid;
+
+    R0 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD);
+    for (i = 0; i < n; i++){
+      jj = matching[i];
+      SparseMatrix_coordinate_form_add_entries(R0, 1, &jj, &i, &one);
+    }
+    R = SparseMatrix_from_coordinate_format(R0);
+    SparseMatrix_delete(R0);
+    P = SparseMatrix_transpose(R);
+    B = SparseMatrix_multiply(R, A);
+    if (!B) goto RETURN;
+    cA = SparseMatrix_multiply(B, P); 
+    if (!cA) goto RETURN;
+    SparseMatrix_delete(B);
+    grid->P = P;
+    grid->R = R;
+    level++;
+    cgrid = Multilevel_Modularity_Clustering_init(cA, level); 
+    deg_new = REALLOC(deg_new, nc*sizeof(real));
+    cgrid->deg = deg_new;
+    cgrid->modularity = grid->modularity + total_gain;
+    cgrid->deg_total = grid->deg_total;
+    cgrid = Multilevel_Modularity_Clustering_establish(cgrid, maxcluster);
+    grid->next = cgrid;
+    cgrid->prev = grid;
+  } else {
+    /* no more improvement, stop and final clustering found */
+    for (i = 0; i < n; i++) matching[i] = i;
+    FREE(deg_new);
+  }
+
+ RETURN:
+  FREE(deg_inter);
+  FREE(mask);
+  return grid;
+}
+
+Multilevel_Modularity_Clustering Multilevel_Modularity_Clustering_new(SparseMatrix A0, int maxcluster){
+  /* maxcluster is used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     is desired. this may not always be realized, and modularity may be low when this is specified. Default: maxcluster = 0 */
+  Multilevel_Modularity_Clustering grid;
+  SparseMatrix A = A0;
+
+  if (maxcluster <= 0) maxcluster = A->m;
+  if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){
+    A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A);
+  }
+  grid = Multilevel_Modularity_Clustering_init(A, 0);
+
+  grid = Multilevel_Modularity_Clustering_establish(grid, maxcluster);
+
+  if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */
+  return grid;
+}
+
+
+static void hierachical_modularity_clustering(SparseMatrix A, int maxcluster,
+                                             int *nclusters, int **assignment, real *modularity, int *flag){
+  /* find a clustering of vertices by maximize modularity
+     A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+     maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     .   is desired. this may not always be realized, and modularity may be low when this is specified. Default: maxcluster = 0 
+     nclusters: on output the number of clusters
+     assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters
+   */
+
+  Multilevel_Modularity_Clustering grid, cgrid;
+  int *matching, i;
+  SparseMatrix P;
+  real *u;
+  assert(A->m == A->n);
+
+  *modularity = 0.;
+
+  *flag = 0;
+
+  grid = Multilevel_Modularity_Clustering_new(A, maxcluster);
+
+  /* find coarsest */
+  cgrid = grid;
+  while (cgrid->next){
+    cgrid = cgrid->next;
+  }
+
+  /* project clustering up */
+  u =  MALLOC(sizeof(real)*cgrid->n);
+  for (i = 0; i < cgrid->n; i++) u[i] = (real) (cgrid->matching)[i];
+  *nclusters = cgrid->n;
+  *modularity = cgrid->modularity;
+
+  while (cgrid->prev){
+    real *v = NULL;
+    P = cgrid->prev->P;
+    SparseMatrix_multiply_vector(P, u, &v, FALSE);
+    FREE(u);
+    u = v;
+    cgrid = cgrid->prev;
+  }
+
+  if (*assignment){
+    matching = *assignment; 
+  } else {
+    matching = MALLOC(sizeof(int)*(grid->n));
+    *assignment = matching;
+  }
+  for (i = 0; i < grid->n; i++) (matching)[i] = (int) u[i];
+  FREE(u);
+
+  Multilevel_Modularity_Clustering_delete(grid);
+  
+}
+
+
+
+void modularity_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value,
+                          int *nclusters, int **assignment, real *modularity, int *flag){
+  /* find a clustering of vertices by maximize modularity
+     A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+     inplace: whether A can e modified. If true, A will be modified by removing diagonal.
+     maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     .   is desired. this may not always be realized, and modularity may be low when this is specified. Default: maxcluster = 0 
+     nclusters: on output the number of clusters
+     assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters
+   */
+  SparseMatrix B;
+
+  *flag = 0;
+  
+  assert(A->m == A->n);
+
+  B = SparseMatrix_symmetrize(A, FALSE);
+
+  if (!inplace && B == A) {
+    B = SparseMatrix_copy(A);
+  }
+
+  B = SparseMatrix_remove_diagonal(B);
+
+  if (B->type != MATRIX_TYPE_REAL || !use_value) B = SparseMatrix_set_entries_to_real_one(B);
+
+  hierachical_modularity_clustering(B, maxcluster, nclusters, assignment, modularity, flag);
+
+  if (B != A) SparseMatrix_delete(B);
+
+}
diff --git a/cmd/gvmap/clustering.h b/cmd/gvmap/clustering.h
new file mode 100644 (file)
index 0000000..26691e6
--- /dev/null
@@ -0,0 +1,52 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef CLUSTERING_H
+#define CLUSTERING_H
+
+typedef struct Multilevel_Modularity_Clustering_struct *Multilevel_Modularity_Clustering;
+
+struct Multilevel_Modularity_Clustering_struct {
+  int level;/* 0, 1, ... */
+  int n;
+  SparseMatrix A; /* n x n matrix */
+  SparseMatrix P; 
+  SparseMatrix R; 
+  Multilevel_Modularity_Clustering next;
+  Multilevel_Modularity_Clustering prev;
+  int delete_top_level_A;
+  int *matching; /* dimension n. matching[i] is the clustering assignment of node i */
+  real modularity;
+  real deg_total; /* total edge weights, including self-edges */
+  real *deg;/* dimension n. deg[i] equal to the sum of edge weights connected to vertex i. I.e., sum of  row i */
+};
+
+enum {CLUSTERING_MODULARITY = 0, CLUSTERING_MQ};
+
+/* find a clustering of vertices by maximize modularity
+   A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+   inplace: whether A can e modified. If true, A will be modified by removing diagonal.
+
+   maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+   .   is desired. this may not always be realized, and modularity may be low when this is specified. Default: maxcluster = 0 (no limit)
+
+   use_value: whether to use the entry value, or treat edge weights as 1.
+   nclusters: on output the number of clusters
+   assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters.
+   .   If *assignment = NULL on entry, it will be allocated. Otherwise used.
+   modularity: achieve modularity
+*/
+void modularity_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value,
+                          int *nclusters, int **assignment, real *modularity, int *flag);
+
+#endif
diff --git a/cmd/gvmap/color_palette.h b/cmd/gvmap/color_palette.h
new file mode 100644 (file)
index 0000000..0ce6907
--- /dev/null
@@ -0,0 +1,6215 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef COLOR_PALLETE_H
+#define COLOR_PALLETE
+
+enum {MAX_COLOR = 1001};
+float palette_pastel[1001][3]={{0.984313725490196, 0.7058823529411764, 0.6823529411764706}, 
+ {0.9831843137254901, 0.7062745098039215, 0.6831843137254903}, 
+ {0.9820549019607843, 0.7066666666666666, 0.6840156862745098}, 
+ {0.9809254901960783, 0.7070588235294117, 0.6848470588235295}, 
+ {0.9797960784313725, 0.7074509803921568, 0.685678431372549}, 
+ {0.9786666666666666, 0.7078431372549019, 0.6865098039215687}, 
+ {0.9775372549019608, 0.708235294117647, 0.6873411764705882}, 
+ {0.9764078431372548, 0.7086274509803921, 0.6881725490196079}, 
+ {0.975278431372549, 0.7090196078431372, 0.6890039215686274}, 
+ {0.9741490196078431, 0.7094117647058823, 0.6898352941176471}, 
+ {0.9730196078431372, 0.7098039215686274, 0.6906666666666667}, 
+ {0.9718901960784313, 0.7101960784313724, 0.6914980392156863}, 
+ {0.9707607843137255, 0.7105882352941176, 0.6923294117647059}, 
+ {0.9696313725490195, 0.7109803921568627, 0.6931607843137255}, 
+ {0.9685019607843137, 0.7113725490196078, 0.6939921568627451}, 
+ {0.9673725490196078, 0.7117647058823529, 0.6948235294117647}, 
+ {0.9662431372549019, 0.7121568627450979, 0.6956549019607843}, 
+ {0.965113725490196, 0.7125490196078431, 0.6964862745098039}, 
+ {0.9639843137254901, 0.7129411764705882, 0.6973176470588236}, 
+ {0.9628549019607843, 0.7133333333333333, 0.6981490196078431}, 
+ {0.9617254901960783, 0.7137254901960783, 0.6989803921568628}, 
+ {0.9605960784313725, 0.7141176470588235, 0.6998117647058824}, 
+ {0.9594666666666666, 0.7145098039215686, 0.700643137254902}, 
+ {0.9583372549019608, 0.7149019607843137, 0.7014745098039216}, 
+ {0.9572078431372548, 0.7152941176470587, 0.7023058823529412}, 
+ {0.956078431372549, 0.7156862745098038, 0.7031372549019608}, 
+ {0.9549490196078431, 0.716078431372549, 0.7039686274509804}, 
+ {0.9538196078431372, 0.7164705882352941, 0.7048}, 
+ {0.9526901960784313, 0.7168627450980392, 0.7056313725490196}, 
+ {0.9515607843137255, 0.7172549019607842, 0.7064627450980392}, 
+ {0.9504313725490195, 0.7176470588235293, 0.7072941176470589}, 
+ {0.9493019607843136, 0.7180392156862745, 0.7081254901960784}, 
+ {0.9481725490196078, 0.7184313725490196, 0.7089568627450981}, 
+ {0.9470431372549019, 0.7188235294117646, 0.7097882352941176}, 
+ {0.945913725490196, 0.7192156862745097, 0.7106196078431373}, 
+ {0.9447843137254901, 0.7196078431372549, 0.7114509803921569}, 
+ {0.9436549019607843, 0.72, 0.7122823529411765}, 
+ {0.9425254901960783, 0.720392156862745, 0.7131137254901961}, 
+ {0.9413960784313725, 0.7207843137254901, 0.7139450980392157}, 
+ {0.9402666666666666, 0.7211764705882352, 0.7147764705882353}, 
+ {0.9391372549019608, 0.7215686274509804, 0.7156078431372549}, 
+ {0.9380078431372548, 0.7219607843137255, 0.7164392156862746}, 
+ {0.936878431372549, 0.7223529411764705, 0.7172705882352941}, 
+ {0.9357490196078431, 0.7227450980392156, 0.7181019607843138}, 
+ {0.9346196078431372, 0.7231372549019608, 0.7189333333333333}, 
+ {0.9334901960784313, 0.7235294117647059, 0.719764705882353}, 
+ {0.9323607843137255, 0.7239215686274509, 0.7205960784313725}, 
+ {0.9312313725490196, 0.724313725490196, 0.7214274509803922}, 
+ {0.9301019607843136, 0.7247058823529411, 0.7222588235294117}, 
+ {0.9289725490196078, 0.7250980392156863, 0.7230901960784314}, 
+ {0.9278431372549019, 0.7254901960784313, 0.7239215686274509}, 
+ {0.926713725490196, 0.7258823529411764, 0.7247529411764706}, 
+ {0.9255843137254901, 0.7262745098039215, 0.7255843137254903}, 
+ {0.9244549019607843, 0.7266666666666666, 0.7264156862745098}, 
+ {0.9233254901960783, 0.7270588235294118, 0.7272470588235294}, 
+ {0.9221960784313725, 0.7274509803921568, 0.728078431372549}, 
+ {0.9210666666666666, 0.7278431372549019, 0.7289098039215687}, 
+ {0.9199372549019608, 0.728235294117647, 0.7297411764705882}, 
+ {0.9188078431372548, 0.7286274509803922, 0.7305725490196079}, 
+ {0.917678431372549, 0.7290196078431372, 0.7314039215686274}, 
+ {0.9165490196078431, 0.7294117647058823, 0.7322352941176471}, 
+ {0.9154196078431371, 0.7298039215686274, 0.7330666666666666}, 
+ {0.9142901960784313, 0.7301960784313725, 0.7338980392156863}, 
+ {0.9131607843137255, 0.7305882352941176, 0.7347294117647059}, 
+ {0.9120313725490196, 0.7309803921568627, 0.7355607843137255}, 
+ {0.9109019607843136, 0.7313725490196078, 0.7363921568627451}, 
+ {0.9097725490196078, 0.7317647058823529, 0.7372235294117647}, 
+ {0.9086431372549019, 0.7321568627450981, 0.7380549019607843}, 
+ {0.907513725490196, 0.7325490196078431, 0.7388862745098039}, 
+ {0.9063843137254901, 0.7329411764705882, 0.7397176470588236}, 
+ {0.9052549019607843, 0.7333333333333333, 0.7405490196078431}, 
+ {0.9041254901960784, 0.7337254901960784, 0.7413803921568628}, 
+ {0.9029960784313725, 0.7341176470588235, 0.7422117647058823}, 
+ {0.9018666666666666, 0.7345098039215686, 0.743043137254902}, 
+ {0.9007372549019608, 0.7349019607843137, 0.7438745098039216}, 
+ {0.8996078431372548, 0.7352941176470588, 0.7447058823529412}, 
+ {0.898478431372549, 0.7356862745098038, 0.7455372549019608}, 
+ {0.8973490196078431, 0.736078431372549, 0.7463686274509804}, 
+ {0.8962196078431373, 0.7364705882352941, 0.7472}, 
+ {0.8950901960784313, 0.7368627450980392, 0.7480313725490196}, 
+ {0.8939607843137254, 0.7372549019607842, 0.7488627450980392}, 
+ {0.8928313725490196, 0.7376470588235293, 0.7496941176470588}, 
+ {0.8917019607843136, 0.7380392156862745, 0.7505254901960784}, 
+ {0.8905725490196078, 0.7384313725490196, 0.751356862745098}, 
+ {0.8894431372549019, 0.7388235294117647, 0.7521882352941176}, 
+ {0.888313725490196, 0.7392156862745097, 0.7530196078431373}, 
+ {0.8871843137254901, 0.7396078431372549, 0.7538509803921569}, 
+ {0.8860549019607843, 0.74, 0.7546823529411765}, 
+ {0.8849254901960784, 0.7403921568627451, 0.755513725490196}, 
+ {0.8837960784313725, 0.7407843137254901, 0.7563450980392157}, 
+ {0.8826666666666666, 0.7411764705882352, 0.7571764705882353}, 
+ {0.8815372549019608, 0.7415686274509804, 0.7580078431372549}, 
+ {0.8804078431372548, 0.7419607843137255, 0.7588392156862745}, 
+ {0.879278431372549, 0.7423529411764705, 0.7596705882352941}, 
+ {0.8781490196078431, 0.7427450980392156, 0.7605019607843138}, 
+ {0.8770196078431372, 0.7431372549019608, 0.7613333333333333}, 
+ {0.8758901960784313, 0.7435294117647059, 0.762164705882353}, 
+ {0.8747607843137254, 0.743921568627451, 0.7629960784313725}, 
+ {0.8736313725490196, 0.744313725490196, 0.7638274509803922}, 
+ {0.8725019607843136, 0.7447058823529411, 0.7646588235294117}, 
+ {0.8713725490196078, 0.7450980392156863, 0.7654901960784314}, 
+ {0.8702431372549019, 0.7454901960784314, 0.7663215686274509}, 
+ {0.869113725490196, 0.7458823529411764, 0.7671529411764706}, 
+ {0.8679843137254901, 0.7462745098039215, 0.7679843137254903}, 
+ {0.8668549019607843, 0.7466666666666666, 0.7688156862745098}, 
+ {0.8657254901960784, 0.7470588235294118, 0.7696470588235294}, 
+ {0.8645960784313725, 0.7474509803921568, 0.770478431372549}, 
+ {0.8634666666666666, 0.7478431372549019, 0.7713098039215687}, 
+ {0.8623372549019608, 0.748235294117647, 0.7721411764705882}, 
+ {0.8612078431372548, 0.7486274509803922, 0.7729725490196078}, 
+ {0.8600784313725489, 0.7490196078431373, 0.7738039215686274}, 
+ {0.8589490196078431, 0.7494117647058823, 0.7746352941176471}, 
+ {0.8578196078431373, 0.7498039215686274, 0.7754666666666666}, 
+ {0.8566901960784313, 0.7501960784313725, 0.7762980392156863}, 
+ {0.8555607843137254, 0.7505882352941177, 0.7771294117647058}, 
+ {0.8544313725490196, 0.7509803921568627, 0.7779607843137255}, 
+ {0.8533019607843136, 0.7513725490196078, 0.778792156862745}, 
+ {0.8521725490196078, 0.7517647058823529, 0.7796235294117647}, 
+ {0.8510431372549019, 0.7521568627450981, 0.7804549019607843}, 
+ {0.8499137254901961, 0.7525490196078432, 0.7812862745098039}, 
+ {0.8487843137254901, 0.7529411764705882, 0.7821176470588235}, 
+ {0.8476549019607843, 0.7533333333333333, 0.7829490196078431}, 
+ {0.8465254901960784, 0.7537254901960784, 0.7837803921568627}, 
+ {0.8453960784313725, 0.7541176470588236, 0.7846117647058823}, 
+ {0.8442666666666666, 0.7545098039215686, 0.785443137254902}, 
+ {0.8431372549019607, 0.7549019607843137, 0.7862745098039216}, 
+ {0.8420078431372549, 0.7552941176470588, 0.7871058823529411}, 
+ {0.840878431372549, 0.7556862745098039, 0.7879372549019608}, 
+ {0.8397490196078431, 0.756078431372549, 0.7887686274509804}, 
+ {0.8386196078431372, 0.7564705882352941, 0.7896}, 
+ {0.8374901960784313, 0.7568627450980392, 0.7904313725490196}, 
+ {0.8363607843137254, 0.7572549019607843, 0.7912627450980392}, 
+ {0.8352313725490196, 0.7576470588235295, 0.7920941176470588}, 
+ {0.8341019607843136, 0.7580392156862745, 0.7929254901960784}, 
+ {0.8329725490196078, 0.7584313725490196, 0.793756862745098}, 
+ {0.8318431372549019, 0.7588235294117647, 0.7945882352941176}, 
+ {0.830713725490196, 0.7592156862745097, 0.7954196078431373}, 
+ {0.8295843137254901, 0.7596078431372549, 0.7962509803921568}, 
+ {0.8284549019607843, 0.76, 0.7970823529411765}, 
+ {0.8273254901960784, 0.7603921568627451, 0.797913725490196}, 
+ {0.8261960784313724, 0.7607843137254902, 0.7987450980392157}, 
+ {0.8250666666666666, 0.7611764705882353, 0.7995764705882353}, 
+ {0.8239372549019607, 0.7615686274509804, 0.8004078431372549}, 
+ {0.8228078431372549, 0.7619607843137255, 0.8012392156862745}, 
+ {0.8216784313725489, 0.7623529411764706, 0.8020705882352941}, 
+ {0.8205490196078431, 0.7627450980392156, 0.8029019607843138}, 
+ {0.8194196078431373, 0.7631372549019608, 0.8037333333333333}, 
+ {0.8182901960784313, 0.7635294117647059, 0.8045647058823528}, 
+ {0.8171607843137254, 0.763921568627451, 0.8053960784313725}, 
+ {0.8160313725490196, 0.764313725490196, 0.8062274509803922}, 
+ {0.8149019607843137, 0.7647058823529411, 0.8070588235294117}, 
+ {0.8137725490196078, 0.7650980392156863, 0.8078901960784314}, 
+ {0.8126431372549019, 0.7654901960784314, 0.8087215686274509}, 
+ {0.8115137254901961, 0.7658823529411765, 0.8095529411764706}, 
+ {0.8103843137254901, 0.7662745098039215, 0.8103843137254901}, 
+ {0.8092549019607842, 0.7666666666666666, 0.8112156862745098}, 
+ {0.8081254901960784, 0.7670588235294118, 0.8120470588235293}, 
+ {0.8069960784313726, 0.7674509803921569, 0.812878431372549}, 
+ {0.8058666666666666, 0.7678431372549019, 0.8137098039215687}, 
+ {0.8047372549019607, 0.768235294117647, 0.8145411764705882}, 
+ {0.8036078431372549, 0.7686274509803922, 0.8153725490196078}, 
+ {0.8024784313725489, 0.7690196078431373, 0.8162039215686274}, 
+ {0.8013490196078431, 0.7694117647058824, 0.8170352941176471}, 
+ {0.8002196078431372, 0.7698039215686274, 0.8178666666666666}, 
+ {0.7990901960784313, 0.7701960784313726, 0.8186980392156863}, 
+ {0.7979607843137254, 0.7705882352941177, 0.8195294117647058}, 
+ {0.7968313725490195, 0.7709803921568628, 0.8203607843137255}, 
+ {0.7957019607843137, 0.7713725490196078, 0.821192156862745}, 
+ {0.7945725490196078, 0.7717647058823529, 0.8220235294117647}, 
+ {0.7934431372549019, 0.7721568627450981, 0.8228549019607843}, 
+ {0.792313725490196, 0.7725490196078432, 0.8236862745098039}, 
+ {0.7911843137254901, 0.7729411764705882, 0.8245176470588236}, 
+ {0.7900549019607842, 0.7733333333333333, 0.8253490196078431}, 
+ {0.7889254901960784, 0.7737254901960784, 0.8261803921568627}, 
+ {0.7877960784313724, 0.7741176470588236, 0.8270117647058823}, 
+ {0.7866666666666666, 0.7745098039215687, 0.827843137254902}, 
+ {0.7855372549019608, 0.7749019607843137, 0.8286745098039215}, 
+ {0.7844078431372549, 0.7752941176470588, 0.8295058823529411}, 
+ {0.7832784313725489, 0.7756862745098039, 0.8303372549019608}, 
+ {0.7821490196078431, 0.7760784313725491, 0.8311686274509804}, 
+ {0.7810196078431372, 0.7764705882352941, 0.832}, 
+ {0.7798901960784314, 0.7768627450980392, 0.8328313725490195}, 
+ {0.7787607843137254, 0.7772549019607843, 0.8336627450980392}, 
+ {0.7776313725490196, 0.7776470588235294, 0.8344941176470588}, 
+ {0.7765019607843137, 0.7780392156862745, 0.8353254901960784}, 
+ {0.7753725490196077, 0.7784313725490196, 0.836156862745098}, 
+ {0.7742431372549019, 0.7788235294117647, 0.8369882352941176}, 
+ {0.7731137254901961, 0.7792156862745098, 0.8378196078431372}, 
+ {0.7719843137254901, 0.779607843137255, 0.8386509803921568}, 
+ {0.7708549019607842, 0.78, 0.8394823529411765}, 
+ {0.7697254901960784, 0.7803921568627451, 0.840313725490196}, 
+ {0.7685960784313725, 0.7807843137254902, 0.8411450980392157}, 
+ {0.7674666666666666, 0.7811764705882354, 0.8419764705882353}, 
+ {0.7663372549019607, 0.7815686274509804, 0.8428078431372549}, 
+ {0.7652078431372549, 0.7819607843137255, 0.8436392156862744}, 
+ {0.7640784313725489, 0.7823529411764706, 0.8444705882352941}, 
+ {0.7629490196078431, 0.7827450980392157, 0.8453019607843137}, 
+ {0.7618196078431372, 0.7831372549019608, 0.8461333333333333}, 
+ {0.7606901960784314, 0.7835294117647059, 0.8469647058823528}, 
+ {0.7595607843137254, 0.783921568627451, 0.8477960784313725}, 
+ {0.7584313725490195, 0.7843137254901961, 0.8486274509803922}, 
+ {0.7573019607843137, 0.7847058823529411, 0.8494588235294117}, 
+ {0.7561725490196078, 0.7850980392156863, 0.8502901960784314}, 
+ {0.7550431372549019, 0.7854901960784314, 0.8511215686274509}, 
+ {0.753913725490196, 0.7858823529411765, 0.8519529411764706}, 
+ {0.7527843137254902, 0.7862745098039216, 0.8527843137254901}, 
+ {0.7516549019607842, 0.7866666666666666, 0.8536156862745098}, 
+ {0.7505254901960784, 0.7870588235294118, 0.8544470588235293}, 
+ {0.7493960784313725, 0.7874509803921569, 0.855278431372549}, 
+ {0.7482666666666666, 0.787843137254902, 0.8561098039215685}, 
+ {0.7471372549019607, 0.788235294117647, 0.8569411764705882}, 
+ {0.7460078431372549, 0.7886274509803921, 0.8577725490196078}, 
+ {0.7448784313725489, 0.7890196078431373, 0.8586039215686274}, 
+ {0.7437490196078431, 0.7894117647058824, 0.8594352941176471}, 
+ {0.7426196078431372, 0.7898039215686274, 0.8602666666666666}, 
+ {0.7414901960784314, 0.7901960784313725, 0.8610980392156862}, 
+ {0.7403607843137254, 0.7905882352941177, 0.8619294117647058}, 
+ {0.7392313725490196, 0.7909803921568628, 0.8627607843137255}, 
+ {0.7381019607843137, 0.7913725490196079, 0.863592156862745}, 
+ {0.7369725490196077, 0.7917647058823529, 0.8644235294117647}, 
+ {0.7358431372549019, 0.7921568627450981, 0.8652549019607843}, 
+ {0.7347137254901961, 0.7925490196078432, 0.8660862745098039}, 
+ {0.7335843137254902, 0.7929411764705883, 0.8669176470588235}, 
+ {0.7324549019607842, 0.7933333333333333, 0.8677490196078431}, 
+ {0.7313254901960784, 0.7937254901960784, 0.8685803921568627}, 
+ {0.7301960784313725, 0.7941176470588236, 0.8694117647058823}, 
+ {0.7290666666666665, 0.7945098039215687, 0.870243137254902}, 
+ {0.7279372549019607, 0.7949019607843137, 0.8710745098039215}, 
+ {0.7268078431372549, 0.7952941176470588, 0.8719058823529411}, 
+ {0.725678431372549, 0.7956862745098039, 0.8727372549019607}, 
+ {0.724549019607843, 0.7960784313725491, 0.8735686274509804}, 
+ {0.7234196078431372, 0.7964705882352942, 0.8744}, 
+ {0.7222901960784314, 0.7968627450980392, 0.8752313725490195}, 
+ {0.7211607843137254, 0.7972549019607843, 0.8760627450980392}, 
+ {0.7200313725490195, 0.7976470588235295, 0.8768941176470588}, 
+ {0.7189019607843137, 0.7980392156862746, 0.8777254901960784}, 
+ {0.7177725490196079, 0.7984313725490196, 0.878556862745098}, 
+ {0.7166431372549019, 0.7988235294117647, 0.8793882352941176}, 
+ {0.715513725490196, 0.7992156862745099, 0.8802196078431372}, 
+ {0.7143843137254902, 0.799607843137255, 0.8810509803921568}, 
+ {0.7132549019607843, 0.8, 0.8818823529411765}, 
+ {0.7121254901960784, 0.8003921568627451, 0.882713725490196}, 
+ {0.7109960784313725, 0.8007843137254902, 0.8835450980392157}, 
+ {0.7098666666666666, 0.8011764705882354, 0.8843764705882352}, 
+ {0.7087372549019607, 0.8015686274509805, 0.8852078431372549}, 
+ {0.7076078431372548, 0.8019607843137255, 0.8860392156862744}, 
+ {0.706478431372549, 0.8023529411764706, 0.8868705882352941}, 
+ {0.7053490196078431, 0.8027450980392157, 0.8877019607843137}, 
+ {0.7042196078431372, 0.8031372549019609, 0.8885333333333333}, 
+ {0.7030901960784313, 0.8035294117647059, 0.8893647058823528}, 
+ {0.7019607843137254, 0.803921568627451, 0.8901960784313725}, 
+ {0.7023529411764705, 0.8043921568627451, 0.8897254901960784}, 
+ {0.7027450980392156, 0.8048627450980392, 0.8892549019607843}, 
+ {0.7031372549019608, 0.8053333333333333, 0.8887843137254902}, 
+ {0.7035294117647058, 0.8058039215686275, 0.888313725490196}, 
+ {0.7039215686274509, 0.8062745098039216, 0.8878431372549019}, 
+ {0.704313725490196, 0.8067450980392157, 0.8873725490196078}, 
+ {0.7047058823529412, 0.8072156862745098, 0.8869019607843137}, 
+ {0.7050980392156863, 0.8076862745098039, 0.8864313725490196}, 
+ {0.7054901960784313, 0.8081568627450981, 0.8859607843137254}, 
+ {0.7058823529411764, 0.8086274509803922, 0.8854901960784313}, 
+ {0.7062745098039215, 0.8090980392156863, 0.8850196078431372}, 
+ {0.7066666666666667, 0.8095686274509805, 0.884549019607843}, 
+ {0.7070588235294117, 0.8100392156862746, 0.8840784313725489}, 
+ {0.7074509803921568, 0.8105098039215687, 0.8836078431372548}, 
+ {0.7078431372549019, 0.8109803921568628, 0.8831372549019607}, 
+ {0.7082352941176471, 0.8114509803921569, 0.8826666666666666}, 
+ {0.7086274509803921, 0.811921568627451, 0.8821960784313725}, 
+ {0.7090196078431372, 0.8123921568627451, 0.8817254901960784}, 
+ {0.7094117647058823, 0.8128627450980392, 0.8812549019607843}, 
+ {0.7098039215686274, 0.8133333333333334, 0.8807843137254902}, 
+ {0.7101960784313726, 0.8138039215686275, 0.880313725490196}, 
+ {0.7105882352941176, 0.8142745098039216, 0.8798431372549019}, 
+ {0.7109803921568627, 0.8147450980392157, 0.8793725490196078}, 
+ {0.7113725490196078, 0.8152156862745098, 0.8789019607843137}, 
+ {0.7117647058823529, 0.8156862745098039, 0.8784313725490196}, 
+ {0.712156862745098, 0.816156862745098, 0.8779607843137255}, 
+ {0.7125490196078431, 0.8166274509803921, 0.8774901960784314}, 
+ {0.7129411764705882, 0.8170980392156864, 0.8770196078431372}, 
+ {0.7133333333333333, 0.8175686274509805, 0.876549019607843}, 
+ {0.7137254901960784, 0.8180392156862746, 0.8760784313725489}, 
+ {0.7141176470588235, 0.8185098039215687, 0.8756078431372548}, 
+ {0.7145098039215686, 0.8189803921568628, 0.8751372549019607}, 
+ {0.7149019607843137, 0.8194509803921569, 0.8746666666666666}, 
+ {0.7152941176470587, 0.819921568627451, 0.8741960784313725}, 
+ {0.7156862745098039, 0.8203921568627451, 0.8737254901960784}, 
+ {0.716078431372549, 0.8208627450980392, 0.8732549019607843}, 
+ {0.7164705882352941, 0.8213333333333334, 0.8727843137254901}, 
+ {0.7168627450980392, 0.8218039215686275, 0.872313725490196}, 
+ {0.7172549019607842, 0.8222745098039216, 0.8718431372549019}, 
+ {0.7176470588235294, 0.8227450980392157, 0.8713725490196078}, 
+ {0.7180392156862745, 0.8232156862745098, 0.8709019607843137}, 
+ {0.7184313725490196, 0.8236862745098039, 0.8704313725490196}, 
+ {0.7188235294117646, 0.824156862745098, 0.8699607843137255}, 
+ {0.7192156862745097, 0.8246274509803921, 0.8694901960784314}, 
+ {0.7196078431372549, 0.8250980392156863, 0.8690196078431373}, 
+ {0.72, 0.8255686274509804, 0.8685490196078431}, 
+ {0.720392156862745, 0.8260392156862745, 0.868078431372549}, 
+ {0.7207843137254901, 0.8265098039215686, 0.8676078431372549}, 
+ {0.7211764705882353, 0.8269803921568628, 0.8671372549019607}, 
+ {0.7215686274509804, 0.8274509803921569, 0.8666666666666666}, 
+ {0.7219607843137255, 0.827921568627451, 0.8661960784313725}, 
+ {0.7223529411764705, 0.8283921568627451, 0.8657254901960784}, 
+ {0.7227450980392156, 0.8288627450980393, 0.8652549019607843}, 
+ {0.7231372549019608, 0.8293333333333334, 0.8647843137254901}, 
+ {0.7235294117647059, 0.8298039215686275, 0.864313725490196}, 
+ {0.7239215686274509, 0.8302745098039216, 0.8638431372549019}, 
+ {0.724313725490196, 0.8307450980392157, 0.8633725490196078}, 
+ {0.7247058823529411, 0.8312156862745098, 0.8629019607843137}, 
+ {0.7250980392156863, 0.8316862745098039, 0.8624313725490196}, 
+ {0.7254901960784313, 0.832156862745098, 0.8619607843137255}, 
+ {0.7258823529411764, 0.8326274509803921, 0.8614901960784314}, 
+ {0.7262745098039215, 0.8330980392156863, 0.8610196078431372}, 
+ {0.7266666666666667, 0.8335686274509804, 0.8605490196078431}, 
+ {0.7270588235294118, 0.8340392156862745, 0.860078431372549}, 
+ {0.7274509803921568, 0.8345098039215686, 0.8596078431372549}, 
+ {0.7278431372549019, 0.8349803921568627, 0.8591372549019608}, 
+ {0.7282352941176471, 0.8354509803921568, 0.8586666666666667}, 
+ {0.7286274509803922, 0.835921568627451, 0.8581960784313725}, 
+ {0.7290196078431372, 0.8363921568627452, 0.8577254901960784}, 
+ {0.7294117647058823, 0.8368627450980393, 0.8572549019607842}, 
+ {0.7298039215686274, 0.8373333333333334, 0.8567843137254901}, 
+ {0.7301960784313726, 0.8378039215686275, 0.856313725490196}, 
+ {0.7305882352941176, 0.8382745098039216, 0.8558431372549019}, 
+ {0.7309803921568627, 0.8387450980392157, 0.8553725490196078}, 
+ {0.7313725490196078, 0.8392156862745098, 0.8549019607843137}, 
+ {0.7317647058823529, 0.8396862745098039, 0.8544313725490196}, 
+ {0.7321568627450981, 0.840156862745098, 0.8539607843137255}, 
+ {0.7325490196078431, 0.8406274509803922, 0.8534901960784314}, 
+ {0.7329411764705882, 0.8410980392156863, 0.8530196078431372}, 
+ {0.7333333333333333, 0.8415686274509804, 0.8525490196078431}, 
+ {0.7337254901960785, 0.8420392156862745, 0.852078431372549}, 
+ {0.7341176470588235, 0.8425098039215686, 0.8516078431372549}, 
+ {0.7345098039215686, 0.8429803921568627, 0.8511372549019608}, 
+ {0.7349019607843137, 0.8434509803921568, 0.8506666666666667}, 
+ {0.7352941176470588, 0.843921568627451, 0.8501960784313725}, 
+ {0.735686274509804, 0.8443921568627452, 0.8497254901960783}, 
+ {0.736078431372549, 0.8448627450980393, 0.8492549019607842}, 
+ {0.7364705882352941, 0.8453333333333334, 0.8487843137254901}, 
+ {0.7368627450980392, 0.8458039215686275, 0.848313725490196}, 
+ {0.7372549019607844, 0.8462745098039216, 0.8478431372549019}, 
+ {0.7376470588235294, 0.8467450980392157, 0.8473725490196078}, 
+ {0.7380392156862745, 0.8472156862745098, 0.8469019607843137}, 
+ {0.7384313725490196, 0.8476862745098039, 0.8464313725490196}, 
+ {0.7388235294117647, 0.848156862745098, 0.8459607843137255}, 
+ {0.7392156862745098, 0.8486274509803922, 0.8454901960784313}, 
+ {0.7396078431372549, 0.8490980392156863, 0.8450196078431372}, 
+ {0.74, 0.8495686274509804, 0.8445490196078431}, 
+ {0.7403921568627451, 0.8500392156862745, 0.844078431372549}, 
+ {0.7407843137254901, 0.8505098039215686, 0.8436078431372549}, 
+ {0.7411764705882353, 0.8509803921568627, 0.8431372549019608}, 
+ {0.7415686274509804, 0.8514509803921568, 0.8426666666666667}, 
+ {0.7419607843137255, 0.8519215686274509, 0.8421960784313726}, 
+ {0.7423529411764705, 0.852392156862745, 0.8417254901960785}, 
+ {0.7427450980392156, 0.8528627450980392, 0.8412549019607843}, 
+ {0.7431372549019608, 0.8533333333333333, 0.8407843137254902}, 
+ {0.7435294117647059, 0.8538039215686274, 0.8403137254901961}, 
+ {0.743921568627451, 0.8542745098039215, 0.839843137254902}, 
+ {0.744313725490196, 0.8547450980392157, 0.8393725490196078}, 
+ {0.7447058823529411, 0.8552156862745098, 0.8389019607843137}, 
+ {0.7450980392156863, 0.855686274509804, 0.8384313725490196}, 
+ {0.7454901960784314, 0.8561568627450981, 0.8379607843137254}, 
+ {0.7458823529411764, 0.8566274509803922, 0.8374901960784313}, 
+ {0.7462745098039215, 0.8570980392156863, 0.8370196078431372}, 
+ {0.7466666666666667, 0.8575686274509804, 0.8365490196078431}, 
+ {0.7470588235294118, 0.8580392156862745, 0.836078431372549}, 
+ {0.7474509803921568, 0.8585098039215686, 0.8356078431372549}, 
+ {0.7478431372549019, 0.8589803921568627, 0.8351372549019608}, 
+ {0.748235294117647, 0.8594509803921568, 0.8346666666666667}, 
+ {0.7486274509803922, 0.859921568627451, 0.8341960784313726}, 
+ {0.7490196078431373, 0.8603921568627451, 0.8337254901960784}, 
+ {0.7494117647058823, 0.8608627450980392, 0.8332549019607843}, 
+ {0.7498039215686274, 0.8613333333333333, 0.8327843137254902}, 
+ {0.7501960784313726, 0.8618039215686274, 0.8323137254901961}, 
+ {0.7505882352941177, 0.8622745098039215, 0.831843137254902}, 
+ {0.7509803921568627, 0.8627450980392157, 0.8313725490196078}, 
+ {0.7513725490196078, 0.8632156862745098, 0.8309019607843137}, 
+ {0.7517647058823529, 0.863686274509804, 0.8304313725490196}, 
+ {0.7521568627450981, 0.8641568627450981, 0.8299607843137254}, 
+ {0.7525490196078432, 0.8646274509803922, 0.8294901960784313}, 
+ {0.7529411764705882, 0.8650980392156863, 0.8290196078431372}, 
+ {0.7533333333333333, 0.8655686274509804, 0.8285490196078431}, 
+ {0.7537254901960785, 0.8660392156862745, 0.828078431372549}, 
+ {0.7541176470588236, 0.8665098039215686, 0.8276078431372549}, 
+ {0.7545098039215686, 0.8669803921568627, 0.8271372549019608}, 
+ {0.7549019607843137, 0.8674509803921568, 0.8266666666666667}, 
+ {0.7552941176470588, 0.867921568627451, 0.8261960784313725}, 
+ {0.755686274509804, 0.8683921568627451, 0.8257254901960784}, 
+ {0.756078431372549, 0.8688627450980392, 0.8252549019607843}, 
+ {0.7564705882352941, 0.8693333333333333, 0.8247843137254902}, 
+ {0.7568627450980392, 0.8698039215686274, 0.8243137254901961}, 
+ {0.7572549019607844, 0.8702745098039215, 0.823843137254902}, 
+ {0.7576470588235295, 0.8707450980392157, 0.8233725490196078}, 
+ {0.7580392156862745, 0.8712156862745097, 0.8229019607843138}, 
+ {0.7584313725490196, 0.871686274509804, 0.8224313725490195}, 
+ {0.7588235294117647, 0.8721568627450981, 0.8219607843137254}, 
+ {0.7592156862745099, 0.8726274509803922, 0.8214901960784313}, 
+ {0.7596078431372549, 0.8730980392156863, 0.8210196078431372}, 
+ {0.76, 0.8735686274509804, 0.8205490196078431}, 
+ {0.7603921568627451, 0.8740392156862745, 0.820078431372549}, 
+ {0.7607843137254902, 0.8745098039215686, 0.8196078431372549}, 
+ {0.7611764705882353, 0.8749803921568627, 0.8191372549019608}, 
+ {0.7615686274509804, 0.8754509803921569, 0.8186666666666667}, 
+ {0.7619607843137255, 0.875921568627451, 0.8181960784313725}, 
+ {0.7623529411764706, 0.8763921568627451, 0.8177254901960784}, 
+ {0.7627450980392158, 0.8768627450980392, 0.8172549019607843}, 
+ {0.7631372549019608, 0.8773333333333333, 0.8167843137254902}, 
+ {0.7635294117647059, 0.8778039215686274, 0.8163137254901961}, 
+ {0.763921568627451, 0.8782745098039215, 0.815843137254902}, 
+ {0.764313725490196, 0.8787450980392156, 0.8153725490196079}, 
+ {0.7647058823529412, 0.8792156862745097, 0.8149019607843138}, 
+ {0.7650980392156863, 0.879686274509804, 0.8144313725490195}, 
+ {0.7654901960784314, 0.8801568627450981, 0.8139607843137254}, 
+ {0.7658823529411765, 0.8806274509803922, 0.8134901960784313}, 
+ {0.7662745098039216, 0.8810980392156863, 0.8130196078431372}, 
+ {0.7666666666666667, 0.8815686274509804, 0.8125490196078431}, 
+ {0.7670588235294118, 0.8820392156862745, 0.812078431372549}, 
+ {0.7674509803921569, 0.8825098039215686, 0.8116078431372549}, 
+ {0.7678431372549019, 0.8829803921568627, 0.8111372549019608}, 
+ {0.7682352941176471, 0.8834509803921569, 0.8106666666666666}, 
+ {0.7686274509803922, 0.883921568627451, 0.8101960784313725}, 
+ {0.7690196078431373, 0.8843921568627451, 0.8097254901960784}, 
+ {0.7694117647058824, 0.8848627450980392, 0.8092549019607843}, 
+ {0.7698039215686274, 0.8853333333333333, 0.8087843137254902}, 
+ {0.7701960784313726, 0.8858039215686274, 0.8083137254901961}, 
+ {0.7705882352941177, 0.8862745098039215, 0.807843137254902}, 
+ {0.7709803921568628, 0.8867450980392156, 0.8073725490196079}, 
+ {0.7713725490196078, 0.8872156862745098, 0.8069019607843138}, 
+ {0.7717647058823529, 0.8876862745098039, 0.8064313725490196}, 
+ {0.7721568627450981, 0.888156862745098, 0.8059607843137255}, 
+ {0.7725490196078432, 0.8886274509803921, 0.8054901960784314}, 
+ {0.7729411764705882, 0.8890980392156862, 0.8050196078431373}, 
+ {0.7733333333333333, 0.8895686274509804, 0.8045490196078431}, 
+ {0.7737254901960784, 0.8900392156862744, 0.8040784313725491}, 
+ {0.7741176470588236, 0.8905098039215686, 0.8036078431372549}, 
+ {0.7745098039215687, 0.8909803921568628, 0.8031372549019608}, 
+ {0.7749019607843137, 0.8914509803921569, 0.8026666666666666}, 
+ {0.7752941176470588, 0.891921568627451, 0.8021960784313725}, 
+ {0.775686274509804, 0.8923921568627451, 0.8017254901960784}, 
+ {0.7760784313725491, 0.8928627450980392, 0.8012549019607843}, 
+ {0.7764705882352941, 0.8933333333333333, 0.8007843137254902}, 
+ {0.7768627450980392, 0.8938039215686274, 0.8003137254901961}, 
+ {0.7772549019607844, 0.8942745098039215, 0.799843137254902}, 
+ {0.7776470588235295, 0.8947450980392156, 0.7993725490196079}, 
+ {0.7780392156862745, 0.8952156862745098, 0.7989019607843137}, 
+ {0.7784313725490196, 0.8956862745098039, 0.7984313725490196}, 
+ {0.7788235294117647, 0.896156862745098, 0.7979607843137255}, 
+ {0.7792156862745099, 0.8966274509803921, 0.7974901960784314}, 
+ {0.779607843137255, 0.8970980392156862, 0.7970196078431373}, 
+ {0.78, 0.8975686274509803, 0.7965490196078432}, 
+ {0.7803921568627451, 0.8980392156862744, 0.7960784313725491}, 
+ {0.7807843137254902, 0.8985098039215687, 0.7956078431372549}, 
+ {0.7811764705882354, 0.8989803921568627, 0.7951372549019609}, 
+ {0.7815686274509804, 0.8994509803921569, 0.7946666666666666}, 
+ {0.7819607843137255, 0.899921568627451, 0.7941960784313725}, 
+ {0.7823529411764706, 0.9003921568627451, 0.7937254901960784}, 
+ {0.7827450980392157, 0.9008627450980392, 0.7932549019607843}, 
+ {0.7831372549019608, 0.9013333333333333, 0.7927843137254902}, 
+ {0.7835294117647059, 0.9018039215686274, 0.7923137254901961}, 
+ {0.783921568627451, 0.9022745098039215, 0.791843137254902}, 
+ {0.7843137254901961, 0.9027450980392157, 0.7913725490196079}, 
+ {0.7847058823529413, 0.9032156862745098, 0.7909019607843137}, 
+ {0.7850980392156863, 0.9036862745098039, 0.7904313725490196}, 
+ {0.7854901960784314, 0.904156862745098, 0.7899607843137255}, 
+ {0.7858823529411765, 0.9046274509803921, 0.7894901960784314}, 
+ {0.7862745098039217, 0.9050980392156862, 0.7890196078431373}, 
+ {0.7866666666666667, 0.9055686274509803, 0.7885490196078432}, 
+ {0.7870588235294118, 0.9060392156862744, 0.7880784313725491}, 
+ {0.7874509803921569, 0.9065098039215687, 0.7876078431372548}, 
+ {0.787843137254902, 0.9069803921568627, 0.7871372549019608}, 
+ {0.7882352941176471, 0.9074509803921569, 0.7866666666666666}, 
+ {0.7886274509803922, 0.907921568627451, 0.7861960784313725}, 
+ {0.7890196078431373, 0.9083921568627451, 0.7857254901960784}, 
+ {0.7894117647058824, 0.9088627450980392, 0.7852549019607843}, 
+ {0.7898039215686274, 0.9093333333333333, 0.7847843137254902}, 
+ {0.7901960784313726, 0.9098039215686274, 0.7843137254901961}, 
+ {0.7905882352941177, 0.9102745098039215, 0.783843137254902}, 
+ {0.7909803921568628, 0.9107450980392157, 0.7833725490196078}, 
+ {0.7913725490196079, 0.9112156862745098, 0.7829019607843137}, 
+ {0.791764705882353, 0.9116862745098039, 0.7824313725490196}, 
+ {0.7921568627450981, 0.912156862745098, 0.7819607843137255}, 
+ {0.7925490196078432, 0.9126274509803921, 0.7814901960784314}, 
+ {0.7929411764705883, 0.9130980392156862, 0.7810196078431373}, 
+ {0.7933333333333333, 0.9135686274509803, 0.7805490196078432}, 
+ {0.7937254901960784, 0.9140392156862744, 0.7800784313725491}, 
+ {0.7941176470588236, 0.9145098039215686, 0.779607843137255}, 
+ {0.7945098039215687, 0.9149803921568627, 0.7791372549019608}, 
+ {0.7949019607843137, 0.9154509803921568, 0.7786666666666667}, 
+ {0.7952941176470588, 0.9159215686274509, 0.7781960784313726}, 
+ {0.795686274509804, 0.916392156862745, 0.7777254901960785}, 
+ {0.7960784313725491, 0.9168627450980391, 0.7772549019607844}, 
+ {0.7964705882352942, 0.9173333333333333, 0.7767843137254902}, 
+ {0.7968627450980392, 0.9178039215686273, 0.7763137254901962}, 
+ {0.7972549019607844, 0.9182745098039216, 0.775843137254902}, 
+ {0.7976470588235295, 0.9187450980392157, 0.7753725490196078}, 
+ {0.7980392156862746, 0.9192156862745098, 0.7749019607843137}, 
+ {0.7984313725490196, 0.9196862745098039, 0.7744313725490196}, 
+ {0.7988235294117647, 0.920156862745098, 0.7739607843137255}, 
+ {0.7992156862745099, 0.9206274509803921, 0.7734901960784314}, 
+ {0.799607843137255, 0.9210980392156862, 0.7730196078431373}, 
+ {0.8, 0.9215686274509803, 0.7725490196078432}, 
+ {0.8002823529411766, 0.9210666666666666, 0.773035294117647}, 
+ {0.800564705882353, 0.9205647058823528, 0.773521568627451}, 
+ {0.8008470588235295, 0.9200627450980392, 0.7740078431372549}, 
+ {0.801129411764706, 0.9195607843137255, 0.7744941176470589}, 
+ {0.8014117647058824, 0.9190588235294117, 0.7749803921568628}, 
+ {0.8016941176470589, 0.918556862745098, 0.7754666666666667}, 
+ {0.8019764705882353, 0.9180549019607842, 0.7759529411764706}, 
+ {0.8022588235294118, 0.9175529411764706, 0.7764392156862745}, 
+ {0.8025411764705883, 0.9170509803921568, 0.7769254901960785}, 
+ {0.8028235294117647, 0.9165490196078431, 0.7774117647058824}, 
+ {0.8031058823529412, 0.9160470588235293, 0.7778980392156863}, 
+ {0.8033882352941177, 0.9155450980392156, 0.7783843137254902}, 
+ {0.8036705882352941, 0.9150431372549019, 0.7788705882352942}, 
+ {0.8039529411764706, 0.9145411764705882, 0.7793568627450981}, 
+ {0.8042352941176472, 0.9140392156862744, 0.779843137254902}, 
+ {0.8045176470588236, 0.9135372549019607, 0.7803294117647059}, 
+ {0.8048000000000001, 0.913035294117647, 0.7808156862745098}, 
+ {0.8050823529411765, 0.9125333333333333, 0.7813019607843138}, 
+ {0.805364705882353, 0.9120313725490196, 0.7817882352941177}, 
+ {0.8056470588235295, 0.9115294117647058, 0.7822745098039215}, 
+ {0.8059294117647059, 0.9110274509803921, 0.7827607843137255}, 
+ {0.8062117647058824, 0.9105254901960783, 0.7832470588235294}, 
+ {0.8064941176470589, 0.9100235294117647, 0.7837333333333334}, 
+ {0.8067764705882353, 0.9095215686274509, 0.7842196078431373}, 
+ {0.8070588235294118, 0.9090196078431372, 0.7847058823529413}, 
+ {0.8073411764705882, 0.9085176470588234, 0.7851921568627451}, 
+ {0.8076235294117647, 0.9080156862745097, 0.785678431372549}, 
+ {0.8079058823529413, 0.907513725490196, 0.786164705882353}, 
+ {0.8081882352941177, 0.9070117647058823, 0.7866509803921569}, 
+ {0.8084705882352942, 0.9065098039215685, 0.7871372549019608}, 
+ {0.8087529411764707, 0.9060078431372548, 0.7876235294117647}, 
+ {0.8090352941176471, 0.9055058823529412, 0.7881098039215687}, 
+ {0.8093176470588236, 0.9050039215686274, 0.7885960784313726}, 
+ {0.8096000000000001, 0.9045019607843137, 0.7890823529411765}, 
+ {0.8098823529411765, 0.9039999999999999, 0.7895686274509804}, 
+ {0.810164705882353, 0.9034980392156862, 0.7900549019607843}, 
+ {0.8104470588235294, 0.9029960784313725, 0.7905411764705883}, 
+ {0.8107294117647059, 0.9024941176470588, 0.7910274509803922}, 
+ {0.8110117647058824, 0.901992156862745, 0.7915137254901962}, 
+ {0.8112941176470588, 0.9014901960784313, 0.792}, 
+ {0.8115764705882353, 0.9009882352941175, 0.7924862745098039}, 
+ {0.8118588235294119, 0.9004862745098039, 0.7929725490196079}, 
+ {0.8121411764705883, 0.8999843137254901, 0.7934588235294118}, 
+ {0.8124235294117648, 0.8994823529411764, 0.7939450980392158}, 
+ {0.8127058823529413, 0.8989803921568627, 0.7944313725490196}, 
+ {0.8129882352941177, 0.8984784313725489, 0.7949176470588235}, 
+ {0.8132705882352942, 0.8979764705882353, 0.7954039215686275}, 
+ {0.8135529411764706, 0.8974745098039215, 0.7958901960784314}, 
+ {0.8138352941176471, 0.8969725490196078, 0.7963764705882354}, 
+ {0.8141176470588236, 0.896470588235294, 0.7968627450980392}, 
+ {0.8144, 0.8959686274509803, 0.7973490196078432}, 
+ {0.8146823529411765, 0.8954666666666666, 0.7978352941176471}, 
+ {0.814964705882353, 0.8949647058823529, 0.798321568627451}, 
+ {0.8152470588235294, 0.8944627450980391, 0.798807843137255}, 
+ {0.815529411764706, 0.8939607843137254, 0.7992941176470588}, 
+ {0.8158117647058825, 0.8934588235294116, 0.7997803921568628}, 
+ {0.8160941176470589, 0.892956862745098, 0.8002666666666667}, 
+ {0.8163764705882354, 0.8924549019607843, 0.8007529411764707}, 
+ {0.8166588235294118, 0.8919529411764705, 0.8012392156862745}, 
+ {0.8169411764705883, 0.8914509803921568, 0.8017254901960784}, 
+ {0.8172235294117648, 0.890949019607843, 0.8022117647058824}, 
+ {0.8175058823529412, 0.8904470588235294, 0.8026980392156863}, 
+ {0.8177882352941177, 0.8899450980392156, 0.8031843137254903}, 
+ {0.8180705882352942, 0.8894431372549019, 0.8036705882352941}, 
+ {0.8183529411764706, 0.8889411764705881, 0.8041568627450981}, 
+ {0.8186352941176471, 0.8884392156862744, 0.804643137254902}, 
+ {0.8189176470588235, 0.8879372549019607, 0.8051294117647059}, 
+ {0.8192, 0.887435294117647, 0.8056156862745099}, 
+ {0.8194823529411766, 0.8869333333333332, 0.8061019607843137}, 
+ {0.819764705882353, 0.8864313725490195, 0.8065882352941177}, 
+ {0.8200470588235295, 0.8859294117647059, 0.8070745098039216}, 
+ {0.820329411764706, 0.8854274509803921, 0.8075607843137256}, 
+ {0.8206117647058824, 0.8849254901960784, 0.8080470588235295}, 
+ {0.8208941176470589, 0.8844235294117646, 0.8085333333333333}, 
+ {0.8211764705882354, 0.8839215686274509, 0.8090196078431373}, 
+ {0.8214588235294118, 0.8834196078431371, 0.8095058823529412}, 
+ {0.8217411764705883, 0.8829176470588235, 0.8099921568627451}, 
+ {0.8220235294117647, 0.8824156862745097, 0.810478431372549}, 
+ {0.8223058823529412, 0.8819137254901961, 0.8109647058823529}, 
+ {0.8225882352941176, 0.8814117647058823, 0.8114509803921568}, 
+ {0.8228705882352941, 0.8809098039215686, 0.8119372549019608}, 
+ {0.8231529411764706, 0.8804078431372548, 0.8124235294117647}, 
+ {0.823435294117647, 0.8799058823529411, 0.8129098039215686}, 
+ {0.8237176470588236, 0.8794039215686275, 0.8133960784313725}, 
+ {0.8240000000000001, 0.8789019607843137, 0.8138823529411765}, 
+ {0.8242823529411765, 0.8784, 0.8143686274509804}, 
+ {0.824564705882353, 0.8778980392156862, 0.8148549019607843}, 
+ {0.8248470588235295, 0.8773960784313725, 0.8153411764705882}, 
+ {0.8251294117647059, 0.8768941176470588, 0.8158274509803921}, 
+ {0.8254117647058824, 0.8763921568627451, 0.8163137254901961}, 
+ {0.8256941176470588, 0.8758901960784313, 0.8168}, 
+ {0.8259764705882353, 0.8753882352941176, 0.817286274509804}, 
+ {0.8262588235294118, 0.8748862745098038, 0.8177725490196078}, 
+ {0.8265411764705882, 0.8743843137254902, 0.8182588235294117}, 
+ {0.8268235294117647, 0.8738823529411764, 0.8187450980392157}, 
+ {0.8271058823529412, 0.8733803921568627, 0.8192313725490196}, 
+ {0.8273882352941176, 0.872878431372549, 0.8197176470588236}, 
+ {0.8276705882352942, 0.8723764705882353, 0.8202039215686274}, 
+ {0.8279529411764706, 0.8718745098039216, 0.8206901960784314}, 
+ {0.8282352941176471, 0.8713725490196078, 0.8211764705882353}, 
+ {0.8285176470588236, 0.8708705882352941, 0.8216627450980392}, 
+ {0.8288, 0.8703686274509803, 0.8221490196078431}, 
+ {0.8290823529411765, 0.8698666666666666, 0.822635294117647}, 
+ {0.829364705882353, 0.8693647058823529, 0.823121568627451}, 
+ {0.8296470588235294, 0.8688627450980392, 0.8236078431372549}, 
+ {0.8299294117647059, 0.8683607843137254, 0.8240941176470588}, 
+ {0.8302117647058824, 0.8678588235294117, 0.8245803921568627}, 
+ {0.8304941176470588, 0.867356862745098, 0.8250666666666666}, 
+ {0.8307764705882353, 0.8668549019607843, 0.8255529411764706}, 
+ {0.8310588235294118, 0.8663529411764705, 0.8260392156862745}, 
+ {0.8313411764705883, 0.8658509803921568, 0.8265254901960785}, 
+ {0.8316235294117648, 0.865349019607843, 0.8270117647058823}, 
+ {0.8319058823529412, 0.8648470588235294, 0.8274980392156862}, 
+ {0.8321882352941177, 0.8643450980392157, 0.8279843137254902}, 
+ {0.8324705882352942, 0.8638431372549019, 0.8284705882352941}, 
+ {0.8327529411764706, 0.8633411764705882, 0.828956862745098}, 
+ {0.8330352941176471, 0.8628392156862744, 0.8294431372549019}, 
+ {0.8333176470588236, 0.8623372549019608, 0.8299294117647059}, 
+ {0.8336, 0.861835294117647, 0.8304156862745098}, 
+ {0.8338823529411765, 0.8613333333333333, 0.8309019607843137}, 
+ {0.8341647058823529, 0.8608313725490195, 0.8313882352941177}, 
+ {0.8344470588235294, 0.8603294117647058, 0.8318745098039215}, 
+ {0.8347294117647059, 0.8598274509803921, 0.8323607843137255}, 
+ {0.8350117647058823, 0.8593254901960784, 0.8328470588235294}, 
+ {0.8352941176470589, 0.8588235294117647, 0.8333333333333333}, 
+ {0.8355764705882354, 0.8583215686274509, 0.8338196078431372}, 
+ {0.8358588235294118, 0.8578196078431372, 0.8343058823529411}, 
+ {0.8361411764705883, 0.8573176470588235, 0.8347921568627451}, 
+ {0.8364235294117648, 0.8568156862745098, 0.835278431372549}, 
+ {0.8367058823529412, 0.856313725490196, 0.835764705882353}, 
+ {0.8369882352941177, 0.8558117647058823, 0.8362509803921568}, 
+ {0.8372705882352941, 0.8553098039215685, 0.8367372549019607}, 
+ {0.8375529411764706, 0.8548078431372549, 0.8372235294117647}, 
+ {0.8378352941176471, 0.8543058823529411, 0.8377098039215686}, 
+ {0.8381176470588235, 0.8538039215686274, 0.8381960784313726}, 
+ {0.8384, 0.8533019607843136, 0.8386823529411764}, 
+ {0.8386823529411765, 0.8528, 0.8391686274509804}, 
+ {0.838964705882353, 0.8522980392156863, 0.8396549019607843}, 
+ {0.8392470588235295, 0.8517960784313725, 0.8401411764705882}, 
+ {0.8395294117647059, 0.8512941176470588, 0.8406274509803922}, 
+ {0.8398117647058824, 0.850792156862745, 0.841113725490196}, 
+ {0.8400941176470589, 0.8502901960784313, 0.8416}, 
+ {0.8403764705882353, 0.8497882352941176, 0.8420862745098039}, 
+ {0.8406588235294118, 0.8492862745098039, 0.8425725490196079}, 
+ {0.8409411764705883, 0.8487843137254901, 0.8430588235294117}, 
+ {0.8412235294117647, 0.8482823529411764, 0.8435450980392156}, 
+ {0.8415058823529412, 0.8477803921568627, 0.8440313725490196}, 
+ {0.8417882352941177, 0.847278431372549, 0.8445176470588235}, 
+ {0.8420705882352941, 0.8467764705882352, 0.8450039215686275}, 
+ {0.8423529411764706, 0.8462745098039215, 0.8454901960784313}, 
+ {0.8426352941176471, 0.8457725490196077, 0.8459764705882353}, 
+ {0.8429176470588235, 0.845270588235294, 0.8464627450980392}, 
+ {0.8432000000000001, 0.8447686274509804, 0.8469490196078431}, 
+ {0.8434823529411765, 0.8442666666666666, 0.8474352941176471}, 
+ {0.843764705882353, 0.8437647058823529, 0.8479215686274509}, 
+ {0.8440470588235295, 0.8432627450980391, 0.8484078431372549}, 
+ {0.8443294117647059, 0.8427607843137255, 0.8488941176470588}, 
+ {0.8446117647058824, 0.8422588235294117, 0.8493803921568628}, 
+ {0.8448941176470589, 0.841756862745098, 0.8498666666666667}, 
+ {0.8451764705882353, 0.8412549019607842, 0.8503529411764705}, 
+ {0.8454588235294118, 0.8407529411764705, 0.8508392156862745}, 
+ {0.8457411764705882, 0.8402509803921567, 0.8513254901960784}, 
+ {0.8460235294117647, 0.8397490196078431, 0.8518117647058824}, 
+ {0.8463058823529412, 0.8392470588235293, 0.8522980392156863}, 
+ {0.8465882352941176, 0.8387450980392156, 0.8527843137254902}, 
+ {0.8468705882352942, 0.8382431372549018, 0.8532705882352941}, 
+ {0.8471529411764707, 0.8377411764705882, 0.853756862745098}, 
+ {0.8474352941176471, 0.8372392156862745, 0.854243137254902}, 
+ {0.8477176470588236, 0.8367372549019607, 0.8547294117647058}, 
+ {0.8480000000000001, 0.836235294117647, 0.8552156862745098}, 
+ {0.8482823529411765, 0.8357333333333332, 0.8557019607843137}, 
+ {0.848564705882353, 0.8352313725490196, 0.8561882352941176}, 
+ {0.8488470588235294, 0.8347294117647058, 0.8566745098039216}, 
+ {0.8491294117647059, 0.8342274509803921, 0.8571607843137254}, 
+ {0.8494117647058824, 0.8337254901960783, 0.8576470588235294}, 
+ {0.8496941176470588, 0.8332235294117646, 0.8581333333333333}, 
+ {0.8499764705882353, 0.832721568627451, 0.8586196078431372}, 
+ {0.8502588235294118, 0.8322196078431372, 0.8591058823529412}, 
+ {0.8505411764705882, 0.8317176470588235, 0.859592156862745}, 
+ {0.8508235294117648, 0.8312156862745097, 0.860078431372549}, 
+ {0.8511058823529412, 0.830713725490196, 0.8605647058823529}, 
+ {0.8513882352941177, 0.8302117647058823, 0.8610509803921569}, 
+ {0.8516705882352942, 0.8297098039215686, 0.8615372549019608}, 
+ {0.8519529411764706, 0.8292078431372548, 0.8620235294117646}, 
+ {0.8522352941176471, 0.8287058823529411, 0.8625098039215686}, 
+ {0.8525176470588236, 0.8282039215686274, 0.8629960784313725}, 
+ {0.8528, 0.8277019607843137, 0.8634823529411765}, 
+ {0.8530823529411765, 0.8271999999999999, 0.8639686274509804}, 
+ {0.853364705882353, 0.8266980392156862, 0.8644549019607843}, 
+ {0.8536470588235294, 0.8261960784313724, 0.8649411764705882}, 
+ {0.8539294117647059, 0.8256941176470587, 0.8654274509803921}, 
+ {0.8542117647058824, 0.825192156862745, 0.8659137254901961}, 
+ {0.8544941176470588, 0.8246901960784313, 0.8664}, 
+ {0.8547764705882354, 0.8241882352941176, 0.8668862745098039}, 
+ {0.8550588235294118, 0.8236862745098038, 0.8673725490196078}, 
+ {0.8553411764705883, 0.8231843137254902, 0.8678588235294118}, 
+ {0.8556235294117648, 0.8226823529411764, 0.8683450980392157}, 
+ {0.8559058823529412, 0.8221803921568627, 0.8688313725490195}, 
+ {0.8561882352941177, 0.8216784313725489, 0.8693176470588235}, 
+ {0.8564705882352942, 0.8211764705882352, 0.8698039215686274}, 
+ {0.8567529411764706, 0.8206745098039214, 0.8702901960784314}, 
+ {0.8570352941176471, 0.8201725490196078, 0.8707764705882353}, 
+ {0.8573176470588235, 0.819670588235294, 0.8712627450980392}, 
+ {0.8576, 0.8191686274509804, 0.871749019607843}, 
+ {0.8578823529411764, 0.8186666666666667, 0.872235294117647}, 
+ {0.8581647058823529, 0.8181647058823529, 0.8727215686274509}, 
+ {0.8584470588235295, 0.8176627450980392, 0.8732078431372549}, 
+ {0.8587294117647059, 0.8171607843137254, 0.8736941176470587}, 
+ {0.8590117647058824, 0.8166588235294118, 0.8741803921568627}, 
+ {0.8592941176470589, 0.816156862745098, 0.8746666666666666}, 
+ {0.8595764705882353, 0.8156549019607843, 0.8751529411764705}, 
+ {0.8598588235294118, 0.8151529411764705, 0.8756392156862745}, 
+ {0.8601411764705883, 0.8146509803921569, 0.8761254901960783}, 
+ {0.8604235294117647, 0.8141490196078431, 0.8766117647058823}, 
+ {0.8607058823529412, 0.8136470588235294, 0.8770980392156862}, 
+ {0.8609882352941176, 0.8131450980392156, 0.8775843137254902}, 
+ {0.8612705882352941, 0.8126431372549019, 0.878070588235294}, 
+ {0.8615529411764706, 0.8121411764705881, 0.8785568627450979}, 
+ {0.861835294117647, 0.8116392156862745, 0.8790431372549019}, 
+ {0.8621176470588235, 0.8111372549019608, 0.8795294117647058}, 
+ {0.8624, 0.810635294117647, 0.8800156862745098}, 
+ {0.8626823529411765, 0.8101333333333333, 0.8805019607843136}, 
+ {0.862964705882353, 0.8096313725490196, 0.8809882352941176}, 
+ {0.8632470588235295, 0.8091294117647059, 0.8814745098039215}, 
+ {0.8635294117647059, 0.8086274509803921, 0.8819607843137254}, 
+ {0.8638117647058824, 0.8081254901960784, 0.8824470588235294}, 
+ {0.8640941176470588, 0.8076235294117646, 0.8829333333333332}, 
+ {0.8643764705882353, 0.8071215686274509, 0.8834196078431372}, 
+ {0.8646588235294118, 0.8066196078431372, 0.8839058823529411}, 
+ {0.8649411764705882, 0.8061176470588235, 0.8843921568627451}, 
+ {0.8652235294117647, 0.8056156862745097, 0.884878431372549}, 
+ {0.8655058823529412, 0.805113725490196, 0.8853647058823528}, 
+ {0.8657882352941176, 0.8046117647058824, 0.8858509803921568}, 
+ {0.8660705882352941, 0.8041098039215686, 0.8863372549019607}, 
+ {0.8663529411764705, 0.8036078431372549, 0.8868235294117647}, 
+ {0.8666352941176471, 0.8031058823529411, 0.8873098039215686}, 
+ {0.8669176470588236, 0.8026039215686274, 0.8877960784313725}, 
+ {0.8672, 0.8021019607843136, 0.8882823529411764}, 
+ {0.8674823529411765, 0.8016, 0.8887686274509803}, 
+ {0.867764705882353, 0.8010980392156862, 0.8892549019607843}, 
+ {0.8680470588235294, 0.8005960784313725, 0.8897411764705881}, 
+ {0.8683294117647059, 0.8000941176470587, 0.8902274509803921}, 
+ {0.8686117647058824, 0.7995921568627451, 0.890713725490196}, 
+ {0.8688941176470588, 0.7990901960784313, 0.8912}, 
+ {0.8691764705882353, 0.7985882352941176, 0.8916862745098039}, 
+ {0.8694588235294118, 0.7980862745098039, 0.8921725490196077}, 
+ {0.8697411764705882, 0.7975843137254901, 0.8926588235294117}, 
+ {0.8700235294117648, 0.7970823529411765, 0.8931450980392156}, 
+ {0.8703058823529412, 0.7965803921568627, 0.8936313725490196}, 
+ {0.8705882352941177, 0.796078431372549, 0.8941176470588235}, 
+ {0.8710901960784314, 0.7962980392156862, 0.8931450980392156}, 
+ {0.8715921568627452, 0.7965176470588234, 0.8921725490196077}, 
+ {0.8720941176470588, 0.7967372549019607, 0.8911999999999999}, 
+ {0.8725960784313725, 0.796956862745098, 0.8902274509803921}, 
+ {0.8730980392156863, 0.7971764705882353, 0.8892549019607843}, 
+ {0.8736, 0.7973960784313725, 0.8882823529411764}, 
+ {0.8741019607843138, 0.7976156862745097, 0.8873098039215686}, 
+ {0.8746039215686274, 0.797835294117647, 0.8863372549019607}, 
+ {0.8751058823529412, 0.7980549019607842, 0.8853647058823528}, 
+ {0.8756078431372549, 0.7982745098039216, 0.884392156862745}, 
+ {0.8761098039215687, 0.7984941176470588, 0.8834196078431372}, 
+ {0.8766117647058824, 0.798713725490196, 0.8824470588235294}, 
+ {0.8771137254901961, 0.7989333333333333, 0.8814745098039215}, 
+ {0.8776156862745098, 0.7991529411764705, 0.8805019607843136}, 
+ {0.8781176470588236, 0.7993725490196077, 0.8795294117647058}, 
+ {0.8786196078431373, 0.7995921568627451, 0.8785568627450979}, 
+ {0.879121568627451, 0.7998117647058823, 0.8775843137254902}, 
+ {0.8796235294117647, 0.8000313725490196, 0.8766117647058823}, 
+ {0.8801254901960784, 0.8002509803921568, 0.8756392156862745}, 
+ {0.8806274509803922, 0.800470588235294, 0.8746666666666666}, 
+ {0.8811294117647059, 0.8006901960784313, 0.8736941176470587}, 
+ {0.8816313725490197, 0.8009098039215686, 0.8727215686274509}, 
+ {0.8821333333333333, 0.8011294117647059, 0.871749019607843}, 
+ {0.8826352941176471, 0.8013490196078431, 0.8707764705882353}, 
+ {0.8831372549019608, 0.8015686274509803, 0.8698039215686274}, 
+ {0.8836392156862746, 0.8017882352941176, 0.8688313725490195}, 
+ {0.8841411764705882, 0.8020078431372548, 0.8678588235294117}, 
+ {0.884643137254902, 0.8022274509803922, 0.8668862745098038}, 
+ {0.8851450980392157, 0.8024470588235294, 0.865913725490196}, 
+ {0.8856470588235295, 0.8026666666666666, 0.8649411764705881}, 
+ {0.8861490196078432, 0.8028862745098039, 0.8639686274509804}, 
+ {0.8866509803921568, 0.8031058823529411, 0.8629960784313725}, 
+ {0.8871529411764706, 0.8033254901960784, 0.8620235294117646}, 
+ {0.8876549019607843, 0.8035450980392156, 0.8610509803921568}, 
+ {0.8881568627450981, 0.8037647058823529, 0.8600784313725489}, 
+ {0.8886588235294118, 0.8039843137254902, 0.859105882352941}, 
+ {0.8891607843137255, 0.8042039215686274, 0.8581333333333332}, 
+ {0.8896627450980392, 0.8044235294117646, 0.8571607843137254}, 
+ {0.890164705882353, 0.8046431372549019, 0.8561882352941176}, 
+ {0.8906666666666667, 0.8048627450980391, 0.8552156862745097}, 
+ {0.8911686274509805, 0.8050823529411765, 0.8542431372549019}, 
+ {0.8916705882352941, 0.8053019607843137, 0.853270588235294}, 
+ {0.8921725490196079, 0.805521568627451, 0.8522980392156861}, 
+ {0.8926745098039216, 0.8057411764705882, 0.8513254901960783}, 
+ {0.8931764705882353, 0.8059607843137254, 0.8503529411764705}, 
+ {0.8936784313725491, 0.8061803921568627, 0.8493803921568627}, 
+ {0.8941803921568627, 0.8064, 0.8484078431372548}, 
+ {0.8946823529411765, 0.8066196078431372, 0.847435294117647}, 
+ {0.8951843137254902, 0.8068392156862745, 0.8464627450980391}, 
+ {0.895686274509804, 0.8070588235294117, 0.8454901960784312}, 
+ {0.8961882352941177, 0.807278431372549, 0.8445176470588235}, 
+ {0.8966901960784314, 0.8074980392156862, 0.8435450980392156}, 
+ {0.8971921568627451, 0.8077176470588235, 0.8425725490196078}, 
+ {0.8976941176470589, 0.8079372549019608, 0.8415999999999999}, 
+ {0.8981960784313726, 0.808156862745098, 0.840627450980392}, 
+ {0.8986980392156864, 0.8083764705882353, 0.8396549019607842}, 
+ {0.8992, 0.8085960784313725, 0.8386823529411763}, 
+ {0.8997019607843137, 0.8088156862745097, 0.8377098039215686}, 
+ {0.9002039215686275, 0.8090352941176471, 0.8367372549019607}, 
+ {0.9007058823529412, 0.8092549019607843, 0.8357647058823529}, 
+ {0.901207843137255, 0.8094745098039215, 0.834792156862745}, 
+ {0.9017098039215686, 0.8096941176470588, 0.8338196078431371}, 
+ {0.9022117647058824, 0.809913725490196, 0.8328470588235293}, 
+ {0.9027137254901961, 0.8101333333333333, 0.8318745098039215}, 
+ {0.9032156862745099, 0.8103529411764706, 0.8309019607843137}, 
+ {0.9037176470588236, 0.8105725490196078, 0.8299294117647058}, 
+ {0.9042196078431373, 0.8107921568627451, 0.8289568627450979}, 
+ {0.904721568627451, 0.8110117647058823, 0.8279843137254901}, 
+ {0.9052235294117648, 0.8112313725490196, 0.8270117647058822}, 
+ {0.9057254901960785, 0.8114509803921568, 0.8260392156862744}, 
+ {0.9062274509803923, 0.811670588235294, 0.8250666666666666}, 
+ {0.9067294117647059, 0.8118901960784314, 0.8240941176470588}, 
+ {0.9072313725490196, 0.8121098039215686, 0.8231215686274509}, 
+ {0.9077333333333334, 0.8123294117647059, 0.822149019607843}, 
+ {0.9082352941176471, 0.8125490196078431, 0.8211764705882352}, 
+ {0.9087372549019608, 0.8127686274509803, 0.8202039215686273}, 
+ {0.9092392156862745, 0.8129882352941176, 0.8192313725490195}, 
+ {0.9097411764705883, 0.8132078431372549, 0.8182588235294117}, 
+ {0.910243137254902, 0.8134274509803922, 0.8172862745098038}, 
+ {0.9107450980392158, 0.8136470588235294, 0.816313725490196}, 
+ {0.9112470588235295, 0.8138666666666666, 0.8153411764705881}, 
+ {0.9117490196078432, 0.8140862745098039, 0.8143686274509803}, 
+ {0.9122509803921569, 0.8143058823529411, 0.8133960784313725}, 
+ {0.9127529411764705, 0.8145254901960783, 0.8124235294117647}, 
+ {0.9132549019607843, 0.8147450980392157, 0.8114509803921569}, 
+ {0.913756862745098, 0.8149647058823529, 0.810478431372549}, 
+ {0.9142588235294118, 0.8151843137254902, 0.8095058823529412}, 
+ {0.9147607843137255, 0.8154039215686274, 0.8085333333333333}, 
+ {0.9152627450980392, 0.8156235294117646, 0.8075607843137255}, 
+ {0.9157647058823529, 0.8158431372549019, 0.8065882352941176}, 
+ {0.9162666666666667, 0.8160627450980391, 0.8056156862745099}, 
+ {0.9167686274509804, 0.8162823529411765, 0.804643137254902}, 
+ {0.9172705882352941, 0.8165019607843137, 0.8036705882352941}, 
+ {0.9177725490196078, 0.8167215686274509, 0.8026980392156863}, 
+ {0.9182745098039216, 0.8169411764705882, 0.8017254901960784}, 
+ {0.9187764705882353, 0.8171607843137254, 0.8007529411764706}, 
+ {0.919278431372549, 0.8173803921568626, 0.7997803921568627}, 
+ {0.9197803921568628, 0.8176, 0.798807843137255}, 
+ {0.9202823529411764, 0.8178196078431372, 0.7978352941176471}, 
+ {0.9207843137254902, 0.8180392156862745, 0.7968627450980392}, 
+ {0.9212862745098039, 0.8182588235294117, 0.7958901960784314}, 
+ {0.9217882352941177, 0.8184784313725489, 0.7949176470588235}, 
+ {0.9222901960784313, 0.8186980392156862, 0.7939450980392156}, 
+ {0.9227921568627451, 0.8189176470588235, 0.7929725490196078}, 
+ {0.9232941176470588, 0.8191372549019608, 0.792}, 
+ {0.9237960784313726, 0.819356862745098, 0.7910274509803922}, 
+ {0.9242980392156863, 0.8195764705882352, 0.7900549019607843}, 
+ {0.9248, 0.8197960784313725, 0.7890823529411765}, 
+ {0.9253019607843137, 0.8200156862745097, 0.7881098039215686}, 
+ {0.9258039215686275, 0.8202352941176471, 0.7871372549019607}, 
+ {0.9263058823529412, 0.8204549019607843, 0.7861647058823529}, 
+ {0.926807843137255, 0.8206745098039215, 0.7851921568627451}, 
+ {0.9273098039215686, 0.8208941176470588, 0.7842196078431373}, 
+ {0.9278117647058823, 0.821113725490196, 0.7832470588235294}, 
+ {0.9283137254901961, 0.8213333333333332, 0.7822745098039215}, 
+ {0.9288156862745098, 0.8215529411764706, 0.7813019607843137}, 
+ {0.9293176470588236, 0.8217725490196078, 0.7803294117647058}, 
+ {0.9298196078431372, 0.8219921568627451, 0.779356862745098}, 
+ {0.930321568627451, 0.8222117647058823, 0.7783843137254902}, 
+ {0.9308235294117647, 0.8224313725490195, 0.7774117647058824}, 
+ {0.9313254901960785, 0.8226509803921568, 0.7764392156862745}, 
+ {0.9318274509803922, 0.822870588235294, 0.7754666666666666}, 
+ {0.9323294117647059, 0.8230901960784314, 0.7744941176470588}, 
+ {0.9328313725490196, 0.8233098039215686, 0.7735215686274509}, 
+ {0.9333333333333333, 0.8235294117647058, 0.7725490196078431}, 
+ {0.9338352941176471, 0.8237490196078431, 0.7715764705882353}, 
+ {0.9343372549019608, 0.8239686274509803, 0.7706039215686274}, 
+ {0.9348392156862745, 0.8241882352941177, 0.7696313725490196}, 
+ {0.9353411764705882, 0.8244078431372549, 0.7686588235294117}, 
+ {0.935843137254902, 0.8246274509803921, 0.7676862745098039}, 
+ {0.9363450980392157, 0.8248470588235294, 0.7667137254901961}, 
+ {0.9368470588235295, 0.8250666666666666, 0.7657411764705881}, 
+ {0.9373490196078431, 0.8252862745098039, 0.7647686274509804}, 
+ {0.9378509803921569, 0.8255058823529411, 0.7637960784313725}, 
+ {0.9383529411764706, 0.8257254901960784, 0.7628235294117647}, 
+ {0.9388549019607844, 0.8259450980392157, 0.7618509803921568}, 
+ {0.9393568627450981, 0.8261647058823529, 0.760878431372549}, 
+ {0.9398588235294117, 0.8263843137254901, 0.7599058823529412}, 
+ {0.9403607843137255, 0.8266039215686274, 0.7589333333333332}, 
+ {0.9408627450980392, 0.8268235294117646, 0.7579607843137255}, 
+ {0.941364705882353, 0.827043137254902, 0.7569882352941176}, 
+ {0.9418666666666666, 0.8272627450980392, 0.7560156862745098}, 
+ {0.9423686274509804, 0.8274823529411764, 0.7550431372549019}, 
+ {0.9428705882352941, 0.8277019607843137, 0.754070588235294}, 
+ {0.9433725490196079, 0.8279215686274509, 0.7530980392156863}, 
+ {0.9438745098039216, 0.8281411764705882, 0.7521254901960783}, 
+ {0.9443764705882354, 0.8283607843137255, 0.7511529411764706}, 
+ {0.944878431372549, 0.8285803921568627, 0.7501803921568627}, 
+ {0.9453803921568628, 0.8288, 0.7492078431372549}, 
+ {0.9458823529411765, 0.8290196078431372, 0.748235294117647}, 
+ {0.9463843137254903, 0.8292392156862745, 0.7472627450980391}, 
+ {0.9468862745098039, 0.8294588235294117, 0.7462901960784314}, 
+ {0.9473882352941176, 0.8296784313725489, 0.7453176470588235}, 
+ {0.9478901960784314, 0.8298980392156863, 0.7443450980392157}, 
+ {0.9483921568627451, 0.8301176470588235, 0.7433725490196078}, 
+ {0.9488941176470589, 0.8303372549019608, 0.7424}, 
+ {0.9493960784313726, 0.830556862745098, 0.7414274509803921}, 
+ {0.9498980392156863, 0.8307764705882352, 0.7404549019607842}, 
+ {0.9504, 0.8309960784313726, 0.7394823529411765}, 
+ {0.9509019607843138, 0.8312156862745098, 0.7385098039215686}, 
+ {0.9514039215686275, 0.831435294117647, 0.7375372549019608}, 
+ {0.9519058823529412, 0.8316549019607843, 0.7365647058823529}, 
+ {0.9524078431372549, 0.8318745098039215, 0.735592156862745}, 
+ {0.9529098039215687, 0.8320941176470588, 0.7346196078431372}, 
+ {0.9534117647058824, 0.832313725490196, 0.7336470588235293}, 
+ {0.9539137254901962, 0.8325333333333333, 0.7326745098039216}, 
+ {0.9544156862745098, 0.8327529411764706, 0.7317019607843137}, 
+ {0.9549176470588235, 0.8329725490196078, 0.7307294117647058}, 
+ {0.9554196078431373, 0.8331921568627451, 0.729756862745098}, 
+ {0.955921568627451, 0.8334117647058823, 0.7287843137254901}, 
+ {0.9564235294117648, 0.8336313725490195, 0.7278117647058823}, 
+ {0.9569254901960784, 0.8338509803921569, 0.7268392156862744}, 
+ {0.9574274509803922, 0.8340705882352941, 0.7258666666666667}, 
+ {0.9579294117647059, 0.8342901960784314, 0.7248941176470588}, 
+ {0.9584313725490197, 0.8345098039215686, 0.7239215686274509}, 
+ {0.9589333333333334, 0.8347294117647058, 0.7229490196078431}, 
+ {0.959435294117647, 0.8349490196078431, 0.7219764705882352}, 
+ {0.9599372549019608, 0.8351686274509804, 0.7210039215686274}, 
+ {0.9604392156862745, 0.8353882352941177, 0.7200313725490195}, 
+ {0.9609411764705883, 0.8356078431372549, 0.7190588235294118}, 
+ {0.961443137254902, 0.8358274509803921, 0.7180862745098039}, 
+ {0.9619450980392157, 0.8360470588235294, 0.717113725490196}, 
+ {0.9624470588235294, 0.8362666666666666, 0.7161411764705882}, 
+ {0.9629490196078432, 0.836486274509804, 0.7151686274509803}, 
+ {0.9634509803921569, 0.8367058823529412, 0.7141960784313726}, 
+ {0.9639529411764707, 0.8369254901960784, 0.7132235294117646}, 
+ {0.9644549019607843, 0.8371450980392157, 0.7122509803921568}, 
+ {0.9649568627450981, 0.8373647058823529, 0.711278431372549}, 
+ {0.9654588235294118, 0.8375843137254901, 0.7103058823529411}, 
+ {0.9659607843137256, 0.8378039215686275, 0.7093333333333333}, 
+ {0.9664627450980392, 0.8380235294117647, 0.7083607843137254}, 
+ {0.966964705882353, 0.838243137254902, 0.7073882352941177}, 
+ {0.9674666666666667, 0.8384627450980392, 0.7064156862745097}, 
+ {0.9679686274509804, 0.8386823529411764, 0.7054431372549019}, 
+ {0.9684705882352942, 0.8389019607843137, 0.7044705882352941}, 
+ {0.9689725490196079, 0.8391215686274509, 0.7034980392156862}, 
+ {0.9694745098039216, 0.8393411764705883, 0.7025254901960784}, 
+ {0.9699764705882353, 0.8395607843137255, 0.7015529411764705}, 
+ {0.9704784313725491, 0.8397803921568627, 0.7005803921568627}, 
+ {0.9709803921568628, 0.84, 0.6996078431372548}, 
+ {0.9714823529411765, 0.8402196078431372, 0.698635294117647}, 
+ {0.9719843137254902, 0.8404392156862744, 0.6976627450980392}, 
+ {0.972486274509804, 0.8406588235294118, 0.6966901960784313}, 
+ {0.9729882352941177, 0.840878431372549, 0.6957176470588234}, 
+ {0.9734901960784315, 0.8410980392156863, 0.6947450980392156}, 
+ {0.9739921568627452, 0.8413176470588235, 0.6937725490196078}, 
+ {0.9744941176470588, 0.8415372549019607, 0.6928}, 
+ {0.9749960784313726, 0.841756862745098, 0.6918274509803921}, 
+ {0.9754980392156863, 0.8419764705882353, 0.6908549019607843}, 
+ {0.976, 0.8421960784313725, 0.6898823529411765}, 
+ {0.9765019607843137, 0.8424156862745098, 0.6889098039215686}, 
+ {0.9770039215686275, 0.842635294117647, 0.6879372549019608}, 
+ {0.9775058823529412, 0.8428549019607843, 0.6869647058823529}, 
+ {0.9780078431372549, 0.8430745098039215, 0.6859921568627452}, 
+ {0.9785098039215686, 0.8432941176470587, 0.6850196078431373}, 
+ {0.9790117647058824, 0.8435137254901961, 0.6840470588235295}, 
+ {0.9795137254901961, 0.8437333333333333, 0.6830745098039216}, 
+ {0.9800156862745097, 0.8439529411764706, 0.6821019607843137}, 
+ {0.9805176470588235, 0.8441725490196078, 0.681129411764706}, 
+ {0.9810196078431372, 0.844392156862745, 0.680156862745098}, 
+ {0.981521568627451, 0.8446117647058823, 0.6791843137254903}, 
+ {0.9820235294117647, 0.8448313725490195, 0.6782117647058824}, 
+ {0.9825254901960785, 0.8450509803921569, 0.6772392156862745}, 
+ {0.9830274509803921, 0.8452705882352941, 0.6762666666666667}, 
+ {0.9835294117647059, 0.8454901960784313, 0.6752941176470588}, 
+ {0.9840313725490196, 0.8457098039215686, 0.6743215686274511}, 
+ {0.9845333333333334, 0.8459294117647058, 0.6733490196078431}, 
+ {0.985035294117647, 0.8461490196078431, 0.6723764705882354}, 
+ {0.9855372549019608, 0.8463686274509804, 0.6714039215686275}, 
+ {0.9860392156862745, 0.8465882352941176, 0.6704313725490196}, 
+ {0.9865411764705883, 0.8468078431372549, 0.6694588235294118}, 
+ {0.987043137254902, 0.8470274509803921, 0.6684862745098039}, 
+ {0.9875450980392158, 0.8472470588235294, 0.6675137254901962}, 
+ {0.9880470588235294, 0.8474666666666666, 0.6665411764705883}, 
+ {0.9885490196078431, 0.8476862745098039, 0.6655686274509804}, 
+ {0.9890509803921569, 0.8479058823529412, 0.6645960784313726}, 
+ {0.9895529411764706, 0.8481254901960784, 0.6636235294117647}, 
+ {0.9900549019607843, 0.8483450980392157, 0.6626509803921569}, 
+ {0.990556862745098, 0.8485647058823529, 0.661678431372549}, 
+ {0.9910588235294118, 0.8487843137254901, 0.6607058823529413}, 
+ {0.9915607843137255, 0.8490039215686275, 0.6597333333333334}, 
+ {0.9920627450980393, 0.8492235294117647, 0.6587607843137255}, 
+ {0.9925647058823529, 0.849443137254902, 0.6577882352941177}, 
+ {0.9930666666666667, 0.8496627450980392, 0.6568156862745098}, 
+ {0.9935686274509804, 0.8498823529411764, 0.655843137254902}, 
+ {0.9940705882352942, 0.8501019607843137, 0.6548705882352941}, 
+ {0.9945725490196079, 0.850321568627451, 0.6538980392156863}, 
+ {0.9950745098039215, 0.8505411764705882, 0.6529254901960785}, 
+ {0.9955764705882353, 0.8507607843137255, 0.6519529411764706}, 
+                          {0.996078431372549, 0.8509803921568627, 0.6509803921568628}};
+
+float palette_blue_to_yellow[1001][3]={{0., 0., 1.}, {0.001, 0.001, 0.999}, {0.002, 0.002, 0.998}, 
+ {0.003, 0.003, 0.997}, {0.004, 0.004, 0.996}, {0.005, 0.005, 0.995}, 
+ {0.006, 0.006, 0.994}, {0.007, 0.007, 0.993}, {0.008, 0.008, 0.992}, 
+ {0.009000000000000001, 0.009000000000000001, 0.991}, {0.01, 0.01, 0.99}, 
+ {0.011, 0.011, 0.989}, {0.012, 0.012, 0.988}, 
+ {0.013000000000000001, 0.013000000000000001, 0.987}, {0.014, 0.014, 0.986}, 
+ {0.015, 0.015, 0.985}, {0.016, 0.016, 0.984}, {0.017, 0.017, 0.983}, 
+ {0.018000000000000002, 0.018000000000000002, 0.982}, {0.019, 0.019, 0.981}, 
+ {0.02, 0.02, 0.98}, {0.021, 0.021, 0.979}, {0.022, 0.022, 0.978}, 
+ {0.023, 0.023, 0.977}, {0.024, 0.024, 0.976}, {0.025, 0.025, 0.975}, 
+ {0.026000000000000002, 0.026000000000000002, 0.974}, {0.027, 0.027, 0.973}, 
+ {0.028, 0.028, 0.972}, {0.029, 0.029, 0.971}, {0.03, 0.03, 0.97}, 
+ {0.031, 0.031, 0.969}, {0.032, 0.032, 0.968}, {0.033, 0.033, 0.967}, 
+ {0.034, 0.034, 0.966}, {0.035, 0.035, 0.965}, 
+ {0.036000000000000004, 0.036000000000000004, 0.964}, {0.037, 0.037, 0.963}, 
+ {0.038, 0.038, 0.962}, {0.039, 0.039, 0.961}, {0.04, 0.04, 0.96}, 
+ {0.041, 0.041, 0.959}, {0.042, 0.042, 0.958}, 
+ {0.043000000000000003, 0.043000000000000003, 0.957}, {0.044, 0.044, 0.956}, 
+ {0.045, 0.045, 0.955}, {0.046, 0.046, 0.954}, {0.047, 0.047, 0.953}, 
+ {0.048, 0.048, 0.952}, {0.049, 0.049, 0.951}, {0.05, 0.05, 0.95}, 
+ {0.051000000000000004, 0.051000000000000004, 0.949}, 
+ {0.052000000000000005, 0.052000000000000005, 0.948}, {0.053, 0.053, 0.947}, 
+ {0.054, 0.054, 0.946}, {0.055, 0.055, 0.945}, {0.056, 0.056, 0.944}, 
+ {0.057, 0.057, 0.943}, {0.058, 0.058, 0.942}, 
+ {0.059000000000000004, 0.059000000000000004, 0.941}, {0.06, 0.06, 0.94}, 
+ {0.061, 0.061, 0.9390000000000001}, {0.062, 0.062, 0.938}, 
+ {0.063, 0.063, 0.937}, {0.064, 0.064, 0.9359999999999999}, 
+ {0.065, 0.065, 0.935}, {0.066, 0.066, 0.9339999999999999}, 
+ {0.067, 0.067, 0.933}, {0.068, 0.068, 0.9319999999999999}, 
+ {0.069, 0.069, 0.931}, {0.07, 0.07, 0.9299999999999999}, 
+ {0.07100000000000001, 0.07100000000000001, 0.929}, 
+ {0.07200000000000001, 0.07200000000000001, 0.9279999999999999}, 
+ {0.073, 0.073, 0.927}, {0.074, 0.074, 0.926}, {0.075, 0.075, 0.925}, 
+ {0.076, 0.076, 0.924}, {0.077, 0.077, 0.923}, {0.078, 0.078, 0.922}, 
+ {0.079, 0.079, 0.921}, {0.08, 0.08, 0.92}, {0.081, 0.081, 0.919}, 
+ {0.082, 0.082, 0.918}, {0.083, 0.083, 0.917}, {0.084, 0.084, 0.916}, 
+ {0.085, 0.085, 0.915}, {0.08600000000000001, 0.08600000000000001, 0.914}, 
+ {0.08700000000000001, 0.08700000000000001, 0.913}, {0.088, 0.088, 0.912}, 
+ {0.089, 0.089, 0.911}, {0.09, 0.09, 0.91}, {0.091, 0.091, 0.909}, 
+ {0.092, 0.092, 0.908}, {0.093, 0.093, 0.907}, {0.094, 0.094, 0.906}, 
+ {0.095, 0.095, 0.905}, {0.096, 0.096, 0.904}, {0.097, 0.097, 0.903}, 
+ {0.098, 0.098, 0.902}, {0.099, 0.099, 0.901}, {0.1, 0.1, 0.9}, 
+ {0.101, 0.101, 0.899}, {0.10200000000000001, 0.10200000000000001, 0.898}, 
+ {0.10300000000000001, 0.10300000000000001, 0.897}, 
+ {0.10400000000000001, 0.10400000000000001, 0.896}, {0.105, 0.105, 0.895}, 
+ {0.106, 0.106, 0.894}, {0.107, 0.107, 0.893}, {0.108, 0.108, 0.892}, 
+ {0.109, 0.109, 0.891}, {0.11, 0.11, 0.89}, {0.111, 0.111, 0.889}, 
+ {0.112, 0.112, 0.888}, {0.113, 0.113, 0.887}, {0.114, 0.114, 0.886}, 
+ {0.115, 0.115, 0.885}, {0.116, 0.116, 0.884}, {0.117, 0.117, 0.883}, 
+ {0.11800000000000001, 0.11800000000000001, 0.882}, 
+ {0.11900000000000001, 0.11900000000000001, 0.881}, {0.12, 0.12, 0.88}, 
+ {0.121, 0.121, 0.879}, {0.122, 0.122, 0.878}, {0.123, 0.123, 0.877}, 
+ {0.124, 0.124, 0.876}, {0.125, 0.125, 0.875}, {0.126, 0.126, 0.874}, 
+ {0.127, 0.127, 0.873}, {0.128, 0.128, 0.872}, {0.129, 0.129, 0.871}, 
+ {0.13, 0.13, 0.87}, {0.131, 0.131, 0.869}, {0.132, 0.132, 0.868}, 
+ {0.133, 0.133, 0.867}, {0.134, 0.134, 0.866}, {0.135, 0.135, 0.865}, 
+ {0.136, 0.136, 0.864}, {0.137, 0.137, 0.863}, {0.138, 0.138, 0.862}, 
+ {0.139, 0.139, 0.861}, {0.14, 0.14, 0.86}, {0.14100000000000001, 
+  0.14100000000000001, 0.859}, {0.14200000000000002, 0.14200000000000002, 
+  0.858}, {0.14300000000000002, 0.14300000000000002, 0.857}, 
+ {0.14400000000000002, 0.14400000000000002, 0.856}, {0.145, 0.145, 0.855}, 
+ {0.146, 0.146, 0.854}, {0.147, 0.147, 0.853}, {0.148, 0.148, 0.852}, 
+ {0.149, 0.149, 0.851}, {0.15, 0.15, 0.85}, {0.151, 0.151, 0.849}, 
+ {0.152, 0.152, 0.848}, {0.153, 0.153, 0.847}, {0.154, 0.154, 0.846}, 
+ {0.155, 0.155, 0.845}, {0.156, 0.156, 0.844}, {0.157, 0.157, 0.843}, 
+ {0.158, 0.158, 0.842}, {0.159, 0.159, 0.841}, {0.16, 0.16, 0.84}, 
+ {0.161, 0.161, 0.839}, {0.162, 0.162, 0.838}, {0.163, 0.163, 0.837}, 
+ {0.164, 0.164, 0.836}, {0.165, 0.165, 0.835}, {0.166, 0.166, 0.834}, 
+ {0.167, 0.167, 0.833}, {0.168, 0.168, 0.832}, {0.169, 0.169, 0.831}, 
+ {0.17, 0.17, 0.83}, {0.171, 0.171, 0.829}, {0.17200000000000001, 
+  0.17200000000000001, 0.828}, {0.17300000000000001, 0.17300000000000001, 
+  0.827}, {0.17400000000000002, 0.17400000000000002, 0.826}, 
+ {0.17500000000000002, 0.17500000000000002, 0.825}, 
+ {0.176, 0.176, 0.8240000000000001}, {0.177, 0.177, 0.823}, 
+ {0.178, 0.178, 0.8220000000000001}, {0.179, 0.179, 0.821}, 
+ {0.18, 0.18, 0.8200000000000001}, {0.181, 0.181, 0.819}, 
+ {0.182, 0.182, 0.8180000000000001}, {0.183, 0.183, 0.817}, 
+ {0.184, 0.184, 0.8160000000000001}, {0.185, 0.185, 0.815}, 
+ {0.186, 0.186, 0.8140000000000001}, {0.187, 0.187, 0.813}, 
+ {0.188, 0.188, 0.812}, {0.189, 0.189, 0.8109999999999999}, 
+ {0.19, 0.19, 0.81}, {0.191, 0.191, 0.8089999999999999}, 
+ {0.192, 0.192, 0.808}, {0.193, 0.193, 0.8069999999999999}, 
+ {0.194, 0.194, 0.806}, {0.195, 0.195, 0.8049999999999999}, 
+ {0.196, 0.196, 0.804}, {0.197, 0.197, 0.8029999999999999}, 
+ {0.198, 0.198, 0.802}, {0.199, 0.199, 0.8009999999999999}, {0.2, 0.2, 0.8}, 
+ {0.201, 0.201, 0.7989999999999999}, {0.202, 0.202, 0.798}, 
+ {0.203, 0.203, 0.7969999999999999}, {0.20400000000000001, 
+  0.20400000000000001, 0.796}, {0.20500000000000002, 0.20500000000000002, 
+  0.7949999999999999}, {0.20600000000000002, 0.20600000000000002, 0.794}, 
+ {0.20700000000000002, 0.20700000000000002, 0.7929999999999999}, 
+ {0.20800000000000002, 0.20800000000000002, 0.792}, {0.209, 0.209, 0.791}, 
+ {0.21, 0.21, 0.79}, {0.211, 0.211, 0.789}, {0.212, 0.212, 0.788}, 
+ {0.213, 0.213, 0.787}, {0.214, 0.214, 0.786}, {0.215, 0.215, 0.785}, 
+ {0.216, 0.216, 0.784}, {0.217, 0.217, 0.783}, {0.218, 0.218, 0.782}, 
+ {0.219, 0.219, 0.781}, {0.22, 0.22, 0.78}, {0.221, 0.221, 0.779}, 
+ {0.222, 0.222, 0.778}, {0.223, 0.223, 0.777}, {0.224, 0.224, 0.776}, 
+ {0.225, 0.225, 0.775}, {0.226, 0.226, 0.774}, {0.227, 0.227, 0.773}, 
+ {0.228, 0.228, 0.772}, {0.229, 0.229, 0.771}, {0.23, 0.23, 0.77}, 
+ {0.231, 0.231, 0.769}, {0.232, 0.232, 0.768}, {0.233, 0.233, 0.767}, 
+ {0.234, 0.234, 0.766}, {0.23500000000000001, 0.23500000000000001, 0.765}, 
+ {0.23600000000000002, 0.23600000000000002, 0.764}, 
+ {0.23700000000000002, 0.23700000000000002, 0.763}, 
+ {0.23800000000000002, 0.23800000000000002, 0.762}, 
+ {0.23900000000000002, 0.23900000000000002, 0.761}, {0.24, 0.24, 0.76}, 
+ {0.241, 0.241, 0.759}, {0.242, 0.242, 0.758}, {0.243, 0.243, 0.757}, 
+ {0.244, 0.244, 0.756}, {0.245, 0.245, 0.755}, {0.246, 0.246, 0.754}, 
+ {0.247, 0.247, 0.753}, {0.248, 0.248, 0.752}, {0.249, 0.249, 0.751}, 
+ {0.25, 0.25, 0.75}, {0.251, 0.251, 0.749}, {0.252, 0.252, 0.748}, 
+ {0.253, 0.253, 0.747}, {0.254, 0.254, 0.746}, {0.255, 0.255, 0.745}, 
+ {0.256, 0.256, 0.744}, {0.257, 0.257, 0.743}, {0.258, 0.258, 0.742}, 
+ {0.259, 0.259, 0.741}, {0.26, 0.26, 0.74}, {0.261, 0.261, 0.739}, 
+ {0.262, 0.262, 0.738}, {0.263, 0.263, 0.737}, {0.264, 0.264, 0.736}, 
+ {0.265, 0.265, 0.735}, {0.266, 0.266, 0.734}, {0.267, 0.267, 0.733}, 
+ {0.268, 0.268, 0.732}, {0.269, 0.269, 0.731}, {0.27, 0.27, 0.73}, 
+ {0.271, 0.271, 0.729}, {0.272, 0.272, 0.728}, {0.273, 0.273, 0.727}, 
+ {0.274, 0.274, 0.726}, {0.275, 0.275, 0.725}, {0.276, 0.276, 0.724}, 
+ {0.277, 0.277, 0.723}, {0.278, 0.278, 0.722}, {0.279, 0.279, 0.721}, 
+ {0.28, 0.28, 0.72}, {0.281, 0.281, 0.719}, {0.28200000000000003, 
+  0.28200000000000003, 0.718}, {0.28300000000000003, 0.28300000000000003, 
+  0.717}, {0.28400000000000003, 0.28400000000000003, 0.716}, 
+ {0.28500000000000003, 0.28500000000000003, 0.715}, 
+ {0.28600000000000003, 0.28600000000000003, 0.714}, 
+ {0.28700000000000003, 0.28700000000000003, 0.713}, 
+ {0.28800000000000003, 0.28800000000000003, 0.712}, 
+ {0.289, 0.289, 0.7110000000000001}, {0.29, 0.29, 0.71}, 
+ {0.291, 0.291, 0.7090000000000001}, {0.292, 0.292, 0.708}, 
+ {0.293, 0.293, 0.7070000000000001}, {0.294, 0.294, 0.706}, 
+ {0.295, 0.295, 0.7050000000000001}, {0.296, 0.296, 0.704}, 
+ {0.297, 0.297, 0.7030000000000001}, {0.298, 0.298, 0.702}, 
+ {0.299, 0.299, 0.7010000000000001}, {0.3, 0.3, 0.7}, 
+ {0.301, 0.301, 0.6990000000000001}, {0.302, 0.302, 0.698}, 
+ {0.303, 0.303, 0.6970000000000001}, {0.304, 0.304, 0.696}, 
+ {0.305, 0.305, 0.6950000000000001}, {0.306, 0.306, 0.694}, 
+ {0.307, 0.307, 0.6930000000000001}, {0.308, 0.308, 0.692}, 
+ {0.309, 0.309, 0.6910000000000001}, {0.31, 0.31, 0.69}, 
+ {0.311, 0.311, 0.6890000000000001}, {0.312, 0.312, 0.688}, 
+ {0.313, 0.313, 0.687}, {0.314, 0.314, 0.6859999999999999}, 
+ {0.315, 0.315, 0.685}, {0.316, 0.316, 0.6839999999999999}, 
+ {0.317, 0.317, 0.683}, {0.318, 0.318, 0.6819999999999999}, 
+ {0.319, 0.319, 0.681}, {0.32, 0.32, 0.6799999999999999}, 
+ {0.321, 0.321, 0.679}, {0.322, 0.322, 0.6779999999999999}, 
+ {0.323, 0.323, 0.677}, {0.324, 0.324, 0.6759999999999999}, 
+ {0.325, 0.325, 0.675}, {0.326, 0.326, 0.6739999999999999}, 
+ {0.327, 0.327, 0.673}, {0.328, 0.328, 0.6719999999999999}, 
+ {0.329, 0.329, 0.671}, {0.33, 0.33, 0.6699999999999999}, 
+ {0.331, 0.331, 0.669}, {0.332, 0.332, 0.6679999999999999}, 
+ {0.333, 0.333, 0.667}, {0.334, 0.334, 0.6659999999999999}, 
+ {0.335, 0.335, 0.665}, {0.336, 0.336, 0.6639999999999999}, 
+ {0.337, 0.337, 0.663}, {0.338, 0.338, 0.6619999999999999}, 
+ {0.339, 0.339, 0.661}, {0.34, 0.34, 0.6599999999999999}, 
+ {0.341, 0.341, 0.659}, {0.342, 0.342, 0.6579999999999999}, 
+ {0.343, 0.343, 0.657}, {0.34400000000000003, 0.34400000000000003, 
+  0.6559999999999999}, {0.34500000000000003, 0.34500000000000003, 0.655}, 
+ {0.34600000000000003, 0.34600000000000003, 0.6539999999999999}, 
+ {0.34700000000000003, 0.34700000000000003, 0.653}, 
+ {0.34800000000000003, 0.34800000000000003, 0.6519999999999999}, 
+ {0.34900000000000003, 0.34900000000000003, 0.651}, 
+ {0.35000000000000003, 0.35000000000000003, 0.6499999999999999}, 
+ {0.35100000000000003, 0.35100000000000003, 0.649}, {0.352, 0.352, 0.648}, 
+ {0.353, 0.353, 0.647}, {0.354, 0.354, 0.646}, {0.355, 0.355, 0.645}, 
+ {0.356, 0.356, 0.644}, {0.357, 0.357, 0.643}, {0.358, 0.358, 0.642}, 
+ {0.359, 0.359, 0.641}, {0.36, 0.36, 0.64}, {0.361, 0.361, 0.639}, 
+ {0.362, 0.362, 0.638}, {0.363, 0.363, 0.637}, {0.364, 0.364, 0.636}, 
+ {0.365, 0.365, 0.635}, {0.366, 0.366, 0.634}, {0.367, 0.367, 0.633}, 
+ {0.368, 0.368, 0.632}, {0.369, 0.369, 0.631}, {0.37, 0.37, 0.63}, 
+ {0.371, 0.371, 0.629}, {0.372, 0.372, 0.628}, {0.373, 0.373, 0.627}, 
+ {0.374, 0.374, 0.626}, {0.375, 0.375, 0.625}, {0.376, 0.376, 0.624}, 
+ {0.377, 0.377, 0.623}, {0.378, 0.378, 0.622}, {0.379, 0.379, 0.621}, 
+ {0.38, 0.38, 0.62}, {0.381, 0.381, 0.619}, {0.382, 0.382, 0.618}, 
+ {0.383, 0.383, 0.617}, {0.384, 0.384, 0.616}, {0.385, 0.385, 0.615}, 
+ {0.386, 0.386, 0.614}, {0.387, 0.387, 0.613}, {0.388, 0.388, 0.612}, 
+ {0.389, 0.389, 0.611}, {0.39, 0.39, 0.61}, {0.391, 0.391, 0.609}, 
+ {0.392, 0.392, 0.608}, {0.393, 0.393, 0.607}, {0.394, 0.394, 0.606}, 
+ {0.395, 0.395, 0.605}, {0.396, 0.396, 0.604}, {0.397, 0.397, 0.603}, 
+ {0.398, 0.398, 0.602}, {0.399, 0.399, 0.601}, {0.4, 0.4, 0.6}, 
+ {0.401, 0.401, 0.599}, {0.402, 0.402, 0.598}, {0.403, 0.403, 0.597}, 
+ {0.404, 0.404, 0.596}, {0.405, 0.405, 0.595}, {0.406, 0.406, 0.594}, 
+ {0.40700000000000003, 0.40700000000000003, 0.593}, 
+ {0.40800000000000003, 0.40800000000000003, 0.592}, 
+ {0.40900000000000003, 0.40900000000000003, 0.591}, 
+ {0.41000000000000003, 0.41000000000000003, 0.59}, 
+ {0.41100000000000003, 0.41100000000000003, 0.589}, 
+ {0.41200000000000003, 0.41200000000000003, 0.588}, 
+ {0.41300000000000003, 0.41300000000000003, 0.587}, 
+ {0.41400000000000003, 0.41400000000000003, 0.586}, 
+ {0.41500000000000004, 0.41500000000000004, 0.585}, 
+ {0.41600000000000004, 0.41600000000000004, 0.584}, {0.417, 0.417, 0.583}, 
+ {0.418, 0.418, 0.5820000000000001}, {0.419, 0.419, 0.581}, 
+ {0.42, 0.42, 0.5800000000000001}, {0.421, 0.421, 0.579}, 
+ {0.422, 0.422, 0.5780000000000001}, {0.423, 0.423, 0.577}, 
+ {0.424, 0.424, 0.5760000000000001}, {0.425, 0.425, 0.575}, 
+ {0.426, 0.426, 0.5740000000000001}, {0.427, 0.427, 0.573}, 
+ {0.428, 0.428, 0.5720000000000001}, {0.429, 0.429, 0.571}, 
+ {0.43, 0.43, 0.5700000000000001}, {0.431, 0.431, 0.569}, 
+ {0.432, 0.432, 0.5680000000000001}, {0.433, 0.433, 0.567}, 
+ {0.434, 0.434, 0.5660000000000001}, {0.435, 0.435, 0.565}, 
+ {0.436, 0.436, 0.5640000000000001}, {0.437, 0.437, 0.563}, 
+ {0.438, 0.438, 0.562}, {0.439, 0.439, 0.5609999999999999}, 
+ {0.44, 0.44, 0.56}, {0.441, 0.441, 0.5589999999999999}, 
+ {0.442, 0.442, 0.558}, {0.443, 0.443, 0.5569999999999999}, 
+ {0.444, 0.444, 0.556}, {0.445, 0.445, 0.5549999999999999}, 
+ {0.446, 0.446, 0.554}, {0.447, 0.447, 0.5529999999999999}, 
+ {0.448, 0.448, 0.552}, {0.449, 0.449, 0.5509999999999999}, 
+ {0.45, 0.45, 0.55}, {0.451, 0.451, 0.5489999999999999}, 
+ {0.452, 0.452, 0.548}, {0.453, 0.453, 0.5469999999999999}, 
+ {0.454, 0.454, 0.546}, {0.455, 0.455, 0.5449999999999999}, 
+ {0.456, 0.456, 0.544}, {0.457, 0.457, 0.5429999999999999}, 
+ {0.458, 0.458, 0.542}, {0.459, 0.459, 0.5409999999999999}, 
+ {0.46, 0.46, 0.54}, {0.461, 0.461, 0.5389999999999999}, 
+ {0.462, 0.462, 0.538}, {0.463, 0.463, 0.5369999999999999}, 
+ {0.464, 0.464, 0.536}, {0.465, 0.465, 0.5349999999999999}, 
+ {0.466, 0.466, 0.534}, {0.467, 0.467, 0.5329999999999999}, 
+ {0.468, 0.468, 0.532}, {0.46900000000000003, 0.46900000000000003, 
+  0.5309999999999999}, {0.47000000000000003, 0.47000000000000003, 0.53}, 
+ {0.47100000000000003, 0.47100000000000003, 0.5289999999999999}, 
+ {0.47200000000000003, 0.47200000000000003, 0.528}, 
+ {0.47300000000000003, 0.47300000000000003, 0.5269999999999999}, 
+ {0.47400000000000003, 0.47400000000000003, 0.526}, 
+ {0.47500000000000003, 0.47500000000000003, 0.5249999999999999}, 
+ {0.47600000000000003, 0.47600000000000003, 0.524}, 
+ {0.47700000000000004, 0.47700000000000004, 0.5229999999999999}, 
+ {0.47800000000000004, 0.47800000000000004, 0.522}, 
+ {0.47900000000000004, 0.47900000000000004, 0.5209999999999999}, 
+ {0.48, 0.48, 0.52}, {0.481, 0.481, 0.519}, {0.482, 0.482, 0.518}, 
+ {0.483, 0.483, 0.517}, {0.484, 0.484, 0.516}, {0.485, 0.485, 0.515}, 
+ {0.486, 0.486, 0.514}, {0.487, 0.487, 0.513}, {0.488, 0.488, 0.512}, 
+ {0.489, 0.489, 0.511}, {0.49, 0.49, 0.51}, {0.491, 0.491, 0.509}, 
+ {0.492, 0.492, 0.508}, {0.493, 0.493, 0.507}, {0.494, 0.494, 0.506}, 
+ {0.495, 0.495, 0.505}, {0.496, 0.496, 0.504}, {0.497, 0.497, 0.503}, 
+ {0.498, 0.498, 0.502}, {0.499, 0.499, 0.501}, {0.5, 0.5, 0.5}, 
+ {0.501, 0.501, 0.499}, {0.502, 0.502, 0.498}, {0.503, 0.503, 0.497}, 
+ {0.504, 0.504, 0.496}, {0.505, 0.505, 0.495}, {0.506, 0.506, 0.494}, 
+ {0.507, 0.507, 0.493}, {0.508, 0.508, 0.492}, {0.509, 0.509, 0.491}, 
+ {0.51, 0.51, 0.49}, {0.511, 0.511, 0.489}, {0.512, 0.512, 0.488}, 
+ {0.513, 0.513, 0.487}, {0.514, 0.514, 0.486}, {0.515, 0.515, 0.485}, 
+ {0.516, 0.516, 0.484}, {0.517, 0.517, 0.483}, {0.518, 0.518, 0.482}, 
+ {0.519, 0.519, 0.481}, {0.52, 0.52, 0.48}, {0.521, 0.521, 0.479}, 
+ {0.522, 0.522, 0.478}, {0.523, 0.523, 0.477}, {0.524, 0.524, 0.476}, 
+ {0.525, 0.525, 0.475}, {0.526, 0.526, 0.474}, {0.527, 0.527, 0.473}, 
+ {0.528, 0.528, 0.472}, {0.529, 0.529, 0.471}, {0.53, 0.53, 0.47}, 
+ {0.531, 0.531, 0.469}, {0.532, 0.532, 0.46799999999999997}, 
+ {0.533, 0.533, 0.46699999999999997}, {0.534, 0.534, 0.46599999999999997}, 
+ {0.535, 0.535, 0.46499999999999997}, {0.536, 0.536, 0.46399999999999997}, 
+ {0.537, 0.537, 0.46299999999999997}, {0.538, 0.538, 0.46199999999999997}, 
+ {0.539, 0.539, 0.46099999999999997}, {0.54, 0.54, 0.45999999999999996}, 
+ {0.541, 0.541, 0.45899999999999996}, {0.542, 0.542, 0.45799999999999996}, 
+ {0.543, 0.543, 0.45699999999999996}, {0.544, 0.544, 0.45599999999999996}, 
+ {0.545, 0.545, 0.45499999999999996}, {0.546, 0.546, 0.45399999999999996}, 
+ {0.547, 0.547, 0.45299999999999996}, {0.548, 0.548, 0.45199999999999996}, 
+ {0.549, 0.549, 0.45099999999999996}, {0.55, 0.55, 0.44999999999999996}, 
+ {0.551, 0.551, 0.44899999999999995}, {0.552, 0.552, 0.44799999999999995}, 
+ {0.553, 0.553, 0.44699999999999995}, {0.554, 0.554, 0.44599999999999995}, 
+ {0.555, 0.555, 0.44499999999999995}, {0.556, 0.556, 0.44399999999999995}, 
+ {0.557, 0.557, 0.44299999999999995}, {0.558, 0.558, 0.44199999999999995}, 
+ {0.559, 0.559, 0.44099999999999995}, {0.56, 0.56, 0.43999999999999995}, 
+ {0.561, 0.561, 0.43899999999999995}, {0.562, 0.562, 0.43799999999999994}, 
+ {0.5630000000000001, 0.5630000000000001, 0.43699999999999994}, 
+ {0.5640000000000001, 0.5640000000000001, 0.43599999999999994}, 
+ {0.5650000000000001, 0.5650000000000001, 0.43499999999999994}, 
+ {0.5660000000000001, 0.5660000000000001, 0.43399999999999994}, 
+ {0.5670000000000001, 0.5670000000000001, 0.43299999999999994}, 
+ {0.5680000000000001, 0.5680000000000001, 0.43199999999999994}, 
+ {0.5690000000000001, 0.5690000000000001, 0.43099999999999994}, 
+ {0.5700000000000001, 0.5700000000000001, 0.42999999999999994}, 
+ {0.5710000000000001, 0.5710000000000001, 0.42899999999999994}, 
+ {0.5720000000000001, 0.5720000000000001, 0.42799999999999994}, 
+ {0.5730000000000001, 0.5730000000000001, 0.42699999999999994}, 
+ {0.5740000000000001, 0.5740000000000001, 0.42599999999999993}, 
+ {0.5750000000000001, 0.5750000000000001, 0.42499999999999993}, 
+ {0.5760000000000001, 0.5760000000000001, 0.42399999999999993}, 
+ {0.577, 0.577, 0.42300000000000004}, {0.578, 0.578, 0.42200000000000004}, 
+ {0.579, 0.579, 0.42100000000000004}, {0.58, 0.58, 0.42000000000000004}, 
+ {0.581, 0.581, 0.41900000000000004}, {0.582, 0.582, 0.41800000000000004}, 
+ {0.583, 0.583, 0.41700000000000004}, {0.584, 0.584, 0.41600000000000004}, 
+ {0.585, 0.585, 0.41500000000000004}, {0.586, 0.586, 0.41400000000000003}, 
+ {0.587, 0.587, 0.41300000000000003}, {0.588, 0.588, 0.41200000000000003}, 
+ {0.589, 0.589, 0.41100000000000003}, {0.59, 0.59, 0.41000000000000003}, 
+ {0.591, 0.591, 0.40900000000000003}, {0.592, 0.592, 0.40800000000000003}, 
+ {0.593, 0.593, 0.40700000000000003}, {0.594, 0.594, 0.406}, 
+ {0.595, 0.595, 0.405}, {0.596, 0.596, 0.404}, {0.597, 0.597, 0.403}, 
+ {0.598, 0.598, 0.402}, {0.599, 0.599, 0.401}, {0.6, 0.6, 0.4}, 
+ {0.601, 0.601, 0.399}, {0.602, 0.602, 0.398}, {0.603, 0.603, 0.397}, 
+ {0.604, 0.604, 0.396}, {0.605, 0.605, 0.395}, {0.606, 0.606, 0.394}, 
+ {0.607, 0.607, 0.393}, {0.608, 0.608, 0.392}, {0.609, 0.609, 0.391}, 
+ {0.61, 0.61, 0.39}, {0.611, 0.611, 0.389}, {0.612, 0.612, 0.388}, 
+ {0.613, 0.613, 0.387}, {0.614, 0.614, 0.386}, {0.615, 0.615, 0.385}, 
+ {0.616, 0.616, 0.384}, {0.617, 0.617, 0.383}, {0.618, 0.618, 0.382}, 
+ {0.619, 0.619, 0.381}, {0.62, 0.62, 0.38}, {0.621, 0.621, 0.379}, 
+ {0.622, 0.622, 0.378}, {0.623, 0.623, 0.377}, {0.624, 0.624, 0.376}, 
+ {0.625, 0.625, 0.375}, {0.626, 0.626, 0.374}, {0.627, 0.627, 0.373}, 
+ {0.628, 0.628, 0.372}, {0.629, 0.629, 0.371}, {0.63, 0.63, 0.37}, 
+ {0.631, 0.631, 0.369}, {0.632, 0.632, 0.368}, {0.633, 0.633, 0.367}, 
+ {0.634, 0.634, 0.366}, {0.635, 0.635, 0.365}, {0.636, 0.636, 0.364}, 
+ {0.637, 0.637, 0.363}, {0.638, 0.638, 0.362}, {0.639, 0.639, 0.361}, 
+ {0.64, 0.64, 0.36}, {0.641, 0.641, 0.359}, {0.642, 0.642, 0.358}, 
+ {0.643, 0.643, 0.357}, {0.644, 0.644, 0.356}, {0.645, 0.645, 0.355}, 
+ {0.646, 0.646, 0.354}, {0.647, 0.647, 0.353}, {0.648, 0.648, 0.352}, 
+ {0.649, 0.649, 0.351}, {0.65, 0.65, 0.35}, {0.651, 0.651, 0.349}, 
+ {0.652, 0.652, 0.348}, {0.653, 0.653, 0.347}, {0.654, 0.654, 0.346}, 
+ {0.655, 0.655, 0.345}, {0.656, 0.656, 0.344}, 
+ {0.657, 0.657, 0.34299999999999997}, {0.658, 0.658, 0.34199999999999997}, 
+ {0.659, 0.659, 0.34099999999999997}, {0.66, 0.66, 0.33999999999999997}, 
+ {0.661, 0.661, 0.33899999999999997}, {0.662, 0.662, 0.33799999999999997}, 
+ {0.663, 0.663, 0.33699999999999997}, {0.664, 0.664, 0.33599999999999997}, 
+ {0.665, 0.665, 0.33499999999999996}, {0.666, 0.666, 0.33399999999999996}, 
+ {0.667, 0.667, 0.33299999999999996}, {0.668, 0.668, 0.33199999999999996}, 
+ {0.669, 0.669, 0.33099999999999996}, {0.67, 0.67, 0.32999999999999996}, 
+ {0.671, 0.671, 0.32899999999999996}, {0.672, 0.672, 0.32799999999999996}, 
+ {0.673, 0.673, 0.32699999999999996}, {0.674, 0.674, 0.32599999999999996}, 
+ {0.675, 0.675, 0.32499999999999996}, {0.676, 0.676, 0.32399999999999995}, 
+ {0.677, 0.677, 0.32299999999999995}, {0.678, 0.678, 0.32199999999999995}, 
+ {0.679, 0.679, 0.32099999999999995}, {0.68, 0.68, 0.31999999999999995}, 
+ {0.681, 0.681, 0.31899999999999995}, {0.682, 0.682, 0.31799999999999995}, 
+ {0.683, 0.683, 0.31699999999999995}, {0.684, 0.684, 0.31599999999999995}, 
+ {0.685, 0.685, 0.31499999999999995}, {0.686, 0.686, 0.31399999999999995}, 
+ {0.687, 0.687, 0.31299999999999994}, {0.6880000000000001, 
+  0.6880000000000001, 0.31199999999999994}, 
+ {0.6890000000000001, 0.6890000000000001, 0.31099999999999994}, 
+ {0.6900000000000001, 0.6900000000000001, 0.30999999999999994}, 
+ {0.6910000000000001, 0.6910000000000001, 0.30899999999999994}, 
+ {0.6920000000000001, 0.6920000000000001, 0.30799999999999994}, 
+ {0.6930000000000001, 0.6930000000000001, 0.30699999999999994}, 
+ {0.6940000000000001, 0.6940000000000001, 0.30599999999999994}, 
+ {0.6950000000000001, 0.6950000000000001, 0.30499999999999994}, 
+ {0.6960000000000001, 0.6960000000000001, 0.30399999999999994}, 
+ {0.6970000000000001, 0.6970000000000001, 0.30299999999999994}, 
+ {0.6980000000000001, 0.6980000000000001, 0.30199999999999994}, 
+ {0.6990000000000001, 0.6990000000000001, 0.30099999999999993}, 
+ {0.7000000000000001, 0.7000000000000001, 0.29999999999999993}, 
+ {0.7010000000000001, 0.7010000000000001, 0.29899999999999993}, 
+ {0.7020000000000001, 0.7020000000000001, 0.29799999999999993}, 
+ {0.7030000000000001, 0.7030000000000001, 0.29699999999999993}, 
+ {0.704, 0.704, 0.29600000000000004}, {0.705, 0.705, 0.29500000000000004}, 
+ {0.706, 0.706, 0.29400000000000004}, {0.707, 0.707, 0.29300000000000004}, 
+ {0.708, 0.708, 0.29200000000000004}, {0.709, 0.709, 0.29100000000000004}, 
+ {0.71, 0.71, 0.29000000000000004}, {0.711, 0.711, 0.28900000000000003}, 
+ {0.712, 0.712, 0.28800000000000003}, {0.713, 0.713, 0.28700000000000003}, 
+ {0.714, 0.714, 0.28600000000000003}, {0.715, 0.715, 0.28500000000000003}, 
+ {0.716, 0.716, 0.28400000000000003}, {0.717, 0.717, 0.28300000000000003}, 
+ {0.718, 0.718, 0.28200000000000003}, {0.719, 0.719, 0.281}, 
+ {0.72, 0.72, 0.28}, {0.721, 0.721, 0.279}, {0.722, 0.722, 0.278}, 
+ {0.723, 0.723, 0.277}, {0.724, 0.724, 0.276}, {0.725, 0.725, 0.275}, 
+ {0.726, 0.726, 0.274}, {0.727, 0.727, 0.273}, {0.728, 0.728, 0.272}, 
+ {0.729, 0.729, 0.271}, {0.73, 0.73, 0.27}, {0.731, 0.731, 0.269}, 
+ {0.732, 0.732, 0.268}, {0.733, 0.733, 0.267}, {0.734, 0.734, 0.266}, 
+ {0.735, 0.735, 0.265}, {0.736, 0.736, 0.264}, {0.737, 0.737, 0.263}, 
+ {0.738, 0.738, 0.262}, {0.739, 0.739, 0.261}, {0.74, 0.74, 0.26}, 
+ {0.741, 0.741, 0.259}, {0.742, 0.742, 0.258}, {0.743, 0.743, 0.257}, 
+ {0.744, 0.744, 0.256}, {0.745, 0.745, 0.255}, {0.746, 0.746, 0.254}, 
+ {0.747, 0.747, 0.253}, {0.748, 0.748, 0.252}, {0.749, 0.749, 0.251}, 
+ {0.75, 0.75, 0.25}, {0.751, 0.751, 0.249}, {0.752, 0.752, 0.248}, 
+ {0.753, 0.753, 0.247}, {0.754, 0.754, 0.246}, {0.755, 0.755, 0.245}, 
+ {0.756, 0.756, 0.244}, {0.757, 0.757, 0.243}, {0.758, 0.758, 0.242}, 
+ {0.759, 0.759, 0.241}, {0.76, 0.76, 0.24}, {0.761, 0.761, 0.239}, 
+ {0.762, 0.762, 0.238}, {0.763, 0.763, 0.237}, {0.764, 0.764, 0.236}, 
+ {0.765, 0.765, 0.235}, {0.766, 0.766, 0.23399999999999999}, 
+ {0.767, 0.767, 0.23299999999999998}, {0.768, 0.768, 0.23199999999999998}, 
+ {0.769, 0.769, 0.23099999999999998}, {0.77, 0.77, 0.22999999999999998}, 
+ {0.771, 0.771, 0.22899999999999998}, {0.772, 0.772, 0.22799999999999998}, 
+ {0.773, 0.773, 0.22699999999999998}, {0.774, 0.774, 0.22599999999999998}, 
+ {0.775, 0.775, 0.22499999999999998}, {0.776, 0.776, 0.22399999999999998}, 
+ {0.777, 0.777, 0.22299999999999998}, {0.778, 0.778, 0.22199999999999998}, 
+ {0.779, 0.779, 0.22099999999999997}, {0.78, 0.78, 0.21999999999999997}, 
+ {0.781, 0.781, 0.21899999999999997}, {0.782, 0.782, 0.21799999999999997}, 
+ {0.783, 0.783, 0.21699999999999997}, {0.784, 0.784, 0.21599999999999997}, 
+ {0.785, 0.785, 0.21499999999999997}, {0.786, 0.786, 0.21399999999999997}, 
+ {0.787, 0.787, 0.21299999999999997}, {0.788, 0.788, 0.21199999999999997}, 
+ {0.789, 0.789, 0.21099999999999997}, {0.79, 0.79, 0.20999999999999996}, 
+ {0.791, 0.791, 0.20899999999999996}, {0.792, 0.792, 0.20799999999999996}, 
+ {0.793, 0.793, 0.20699999999999996}, {0.794, 0.794, 0.20599999999999996}, 
+ {0.795, 0.795, 0.20499999999999996}, {0.796, 0.796, 0.20399999999999996}, 
+ {0.797, 0.797, 0.20299999999999996}, {0.798, 0.798, 0.20199999999999996}, 
+ {0.799, 0.799, 0.20099999999999996}, {0.8, 0.8, 0.19999999999999996}, 
+ {0.801, 0.801, 0.19899999999999995}, {0.802, 0.802, 0.19799999999999995}, 
+ {0.803, 0.803, 0.19699999999999995}, {0.804, 0.804, 0.19599999999999995}, 
+ {0.805, 0.805, 0.19499999999999995}, {0.806, 0.806, 0.19399999999999995}, 
+ {0.807, 0.807, 0.19299999999999995}, {0.808, 0.808, 0.19199999999999995}, 
+ {0.809, 0.809, 0.19099999999999995}, {0.81, 0.81, 0.18999999999999995}, 
+ {0.811, 0.811, 0.18899999999999995}, {0.812, 0.812, 0.18799999999999994}, 
+ {0.8130000000000001, 0.8130000000000001, 0.18699999999999994}, 
+ {0.8140000000000001, 0.8140000000000001, 0.18599999999999994}, 
+ {0.8150000000000001, 0.8150000000000001, 0.18499999999999994}, 
+ {0.8160000000000001, 0.8160000000000001, 0.18399999999999994}, 
+ {0.8170000000000001, 0.8170000000000001, 0.18299999999999994}, 
+ {0.8180000000000001, 0.8180000000000001, 0.18199999999999994}, 
+ {0.8190000000000001, 0.8190000000000001, 0.18099999999999994}, 
+ {0.8200000000000001, 0.8200000000000001, 0.17999999999999994}, 
+ {0.8210000000000001, 0.8210000000000001, 0.17899999999999994}, 
+ {0.8220000000000001, 0.8220000000000001, 0.17799999999999994}, 
+ {0.8230000000000001, 0.8230000000000001, 0.17699999999999994}, 
+ {0.8240000000000001, 0.8240000000000001, 0.17599999999999993}, 
+ {0.8250000000000001, 0.8250000000000001, 0.17499999999999993}, 
+ {0.8260000000000001, 0.8260000000000001, 0.17399999999999993}, 
+ {0.8270000000000001, 0.8270000000000001, 0.17299999999999993}, 
+ {0.8280000000000001, 0.8280000000000001, 0.17199999999999993}, 
+ {0.8290000000000001, 0.8290000000000001, 0.17099999999999993}, 
+ {0.8300000000000001, 0.8300000000000001, 0.16999999999999993}, 
+ {0.8310000000000001, 0.8310000000000001, 0.16899999999999993}, 
+ {0.8320000000000001, 0.8320000000000001, 0.16799999999999993}, 
+ {0.833, 0.833, 0.16700000000000004}, {0.834, 0.834, 0.16600000000000004}, 
+ {0.835, 0.835, 0.16500000000000004}, {0.836, 0.836, 0.16400000000000003}, 
+ {0.837, 0.837, 0.16300000000000003}, {0.838, 0.838, 0.16200000000000003}, 
+ {0.839, 0.839, 0.16100000000000003}, {0.84, 0.84, 0.16000000000000003}, 
+ {0.841, 0.841, 0.15900000000000003}, {0.842, 0.842, 0.15800000000000003}, 
+ {0.843, 0.843, 0.15700000000000003}, {0.844, 0.844, 0.15600000000000003}, 
+ {0.845, 0.845, 0.15500000000000003}, {0.846, 0.846, 0.15400000000000003}, 
+ {0.847, 0.847, 0.15300000000000002}, {0.848, 0.848, 0.15200000000000002}, 
+ {0.849, 0.849, 0.15100000000000002}, {0.85, 0.85, 0.15000000000000002}, 
+ {0.851, 0.851, 0.14900000000000002}, {0.852, 0.852, 0.14800000000000002}, 
+ {0.853, 0.853, 0.14700000000000002}, {0.854, 0.854, 0.14600000000000002}, 
+ {0.855, 0.855, 0.14500000000000002}, {0.856, 0.856, 0.14400000000000002}, 
+ {0.857, 0.857, 0.14300000000000002}, {0.858, 0.858, 0.14200000000000002}, 
+ {0.859, 0.859, 0.14100000000000001}, {0.86, 0.86, 0.14}, 
+ {0.861, 0.861, 0.139}, {0.862, 0.862, 0.138}, {0.863, 0.863, 0.137}, 
+ {0.864, 0.864, 0.136}, {0.865, 0.865, 0.135}, {0.866, 0.866, 0.134}, 
+ {0.867, 0.867, 0.133}, {0.868, 0.868, 0.132}, {0.869, 0.869, 0.131}, 
+ {0.87, 0.87, 0.13}, {0.871, 0.871, 0.129}, {0.872, 0.872, 0.128}, 
+ {0.873, 0.873, 0.127}, {0.874, 0.874, 0.126}, {0.875, 0.875, 0.125}, 
+ {0.876, 0.876, 0.124}, {0.877, 0.877, 0.123}, {0.878, 0.878, 0.122}, 
+ {0.879, 0.879, 0.121}, {0.88, 0.88, 0.12}, {0.881, 0.881, 0.119}, 
+ {0.882, 0.882, 0.118}, {0.883, 0.883, 0.11699999999999999}, 
+ {0.884, 0.884, 0.11599999999999999}, {0.885, 0.885, 0.11499999999999999}, 
+ {0.886, 0.886, 0.11399999999999999}, {0.887, 0.887, 0.11299999999999999}, 
+ {0.888, 0.888, 0.11199999999999999}, {0.889, 0.889, 0.11099999999999999}, 
+ {0.89, 0.89, 0.10999999999999999}, {0.891, 0.891, 0.10899999999999999}, 
+ {0.892, 0.892, 0.10799999999999998}, {0.893, 0.893, 0.10699999999999998}, 
+ {0.894, 0.894, 0.10599999999999998}, {0.895, 0.895, 0.10499999999999998}, 
+ {0.896, 0.896, 0.10399999999999998}, {0.897, 0.897, 0.10299999999999998}, 
+ {0.898, 0.898, 0.10199999999999998}, {0.899, 0.899, 0.10099999999999998}, 
+ {0.9, 0.9, 0.09999999999999998}, {0.901, 0.901, 0.09899999999999998}, 
+ {0.902, 0.902, 0.09799999999999998}, {0.903, 0.903, 0.09699999999999998}, 
+ {0.904, 0.904, 0.09599999999999997}, {0.905, 0.905, 0.09499999999999997}, 
+ {0.906, 0.906, 0.09399999999999997}, {0.907, 0.907, 0.09299999999999997}, 
+ {0.908, 0.908, 0.09199999999999997}, {0.909, 0.909, 0.09099999999999997}, 
+ {0.91, 0.91, 0.08999999999999997}, {0.911, 0.911, 0.08899999999999997}, 
+ {0.912, 0.912, 0.08799999999999997}, {0.913, 0.913, 0.08699999999999997}, 
+ {0.914, 0.914, 0.08599999999999997}, {0.915, 0.915, 0.08499999999999996}, 
+ {0.916, 0.916, 0.08399999999999996}, {0.917, 0.917, 0.08299999999999996}, 
+ {0.918, 0.918, 0.08199999999999996}, {0.919, 0.919, 0.08099999999999996}, 
+ {0.92, 0.92, 0.07999999999999996}, {0.921, 0.921, 0.07899999999999996}, 
+ {0.922, 0.922, 0.07799999999999996}, {0.923, 0.923, 0.07699999999999996}, 
+ {0.924, 0.924, 0.07599999999999996}, {0.925, 0.925, 0.07499999999999996}, 
+ {0.926, 0.926, 0.07399999999999995}, {0.927, 0.927, 0.07299999999999995}, 
+ {0.928, 0.928, 0.07199999999999995}, {0.929, 0.929, 0.07099999999999995}, 
+ {0.93, 0.93, 0.06999999999999995}, {0.931, 0.931, 0.06899999999999995}, 
+ {0.932, 0.932, 0.06799999999999995}, {0.933, 0.933, 0.06699999999999995}, 
+ {0.934, 0.934, 0.06599999999999995}, {0.935, 0.935, 0.06499999999999995}, 
+ {0.936, 0.936, 0.06399999999999995}, {0.937, 0.937, 0.06299999999999994}, 
+ {0.9380000000000001, 0.9380000000000001, 0.061999999999999944}, 
+ {0.9390000000000001, 0.9390000000000001, 0.06099999999999994}, 
+ {0.9400000000000001, 0.9400000000000001, 0.05999999999999994}, 
+ {0.9410000000000001, 0.9410000000000001, 0.05899999999999994}, 
+ {0.9420000000000001, 0.9420000000000001, 0.05799999999999994}, 
+ {0.9430000000000001, 0.9430000000000001, 0.05699999999999994}, 
+ {0.9440000000000001, 0.9440000000000001, 0.05599999999999994}, 
+ {0.9450000000000001, 0.9450000000000001, 0.05499999999999994}, 
+ {0.9460000000000001, 0.9460000000000001, 0.05399999999999994}, 
+ {0.9470000000000001, 0.9470000000000001, 0.052999999999999936}, 
+ {0.9480000000000001, 0.9480000000000001, 0.051999999999999935}, 
+ {0.9490000000000001, 0.9490000000000001, 0.050999999999999934}, 
+ {0.9500000000000001, 0.9500000000000001, 0.04999999999999993}, 
+ {0.9510000000000001, 0.9510000000000001, 0.04899999999999993}, 
+ {0.9520000000000001, 0.9520000000000001, 0.04799999999999993}, 
+ {0.9530000000000001, 0.9530000000000001, 0.04699999999999993}, 
+ {0.9540000000000001, 0.9540000000000001, 0.04599999999999993}, 
+ {0.9550000000000001, 0.9550000000000001, 0.04499999999999993}, 
+ {0.9560000000000001, 0.9560000000000001, 0.04399999999999993}, 
+ {0.9570000000000001, 0.9570000000000001, 0.04299999999999993}, 
+ {0.9580000000000001, 0.9580000000000001, 0.041999999999999926}, 
+ {0.9590000000000001, 0.9590000000000001, 0.040999999999999925}, 
+ {0.96, 0.96, 0.040000000000000036}, {0.961, 0.961, 0.039000000000000035}, 
+ {0.962, 0.962, 0.038000000000000034}, {0.963, 0.963, 0.03700000000000003}, 
+ {0.964, 0.964, 0.03600000000000003}, {0.965, 0.965, 0.03500000000000003}, 
+ {0.966, 0.966, 0.03400000000000003}, {0.967, 0.967, 0.03300000000000003}, 
+ {0.968, 0.968, 0.03200000000000003}, {0.969, 0.969, 0.031000000000000028}, 
+ {0.97, 0.97, 0.030000000000000027}, {0.971, 0.971, 0.029000000000000026}, 
+ {0.972, 0.972, 0.028000000000000025}, {0.973, 0.973, 0.027000000000000024}, 
+ {0.974, 0.974, 0.026000000000000023}, {0.975, 0.975, 0.025000000000000022}, 
+ {0.976, 0.976, 0.02400000000000002}, {0.977, 0.977, 0.02300000000000002}, 
+ {0.978, 0.978, 0.02200000000000002}, {0.979, 0.979, 0.02100000000000002}, 
+ {0.98, 0.98, 0.020000000000000018}, {0.981, 0.981, 0.019000000000000017}, 
+ {0.982, 0.982, 0.018000000000000016}, {0.983, 0.983, 0.017000000000000015}, 
+ {0.984, 0.984, 0.016000000000000014}, {0.985, 0.985, 0.015000000000000013}, 
+ {0.986, 0.986, 0.014000000000000012}, {0.987, 0.987, 0.013000000000000012}, 
+ {0.988, 0.988, 0.01200000000000001}, {0.989, 0.989, 0.01100000000000001}, 
+ {0.99, 0.99, 0.010000000000000009}, {0.991, 0.991, 0.009000000000000008}, 
+ {0.992, 0.992, 0.008000000000000007}, {0.993, 0.993, 0.007000000000000006}, 
+ {0.994, 0.994, 0.006000000000000005}, {0.995, 0.995, 0.0050000000000000044}, 
+ {0.996, 0.996, 0.0040000000000000036}, 
+ {0.997, 0.997, 0.0030000000000000027}, 
+ {0.998, 0.998, 0.0020000000000000018}, 
+                                      {0.999, 0.999, 0.0010000000000000009}, {1., 1., 0.}};
+
+
+
+
+float palette_grey_to_red[1001][3]={{0.99, 0.99, 0.99}, {0.99001, 0.98901, 0.98901}, 
+ {0.99002, 0.98802, 0.98802}, {0.99003, 0.98703, 0.98703}, 
+ {0.99004, 0.98604, 0.98604}, {0.99005, 0.98505, 0.98505}, 
+ {0.9900599999999999, 0.98406, 0.98406}, {0.99007, 0.98307, 0.98307}, 
+ {0.99008, 0.98208, 0.98208}, {0.99009, 0.98109, 0.98109}, 
+ {0.9901, 0.9801, 0.9801}, {0.99011, 0.97911, 0.97911}, 
+ {0.99012, 0.97812, 0.97812}, {0.99013, 0.9771299999999999, 
+  0.9771299999999999}, {0.99014, 0.97614, 0.97614}, 
+ {0.99015, 0.97515, 0.97515}, {0.99016, 0.97416, 0.97416}, 
+ {0.99017, 0.97317, 0.97317}, {0.99018, 0.97218, 0.97218}, 
+ {0.99019, 0.97119, 0.97119}, {0.9902, 0.9702, 0.9702}, 
+ {0.99021, 0.96921, 0.96921}, {0.99022, 0.96822, 0.96822}, 
+ {0.9902299999999999, 0.96723, 0.96723}, {0.99024, 0.96624, 0.96624}, 
+ {0.99025, 0.9652499999999999, 0.9652499999999999}, 
+ {0.99026, 0.96426, 0.96426}, {0.99027, 0.96327, 0.96327}, 
+ {0.9902799999999999, 0.96228, 0.96228}, {0.99029, 0.96129, 0.96129}, 
+ {0.9903, 0.9603, 0.9603}, {0.99031, 0.95931, 0.95931}, 
+ {0.99032, 0.95832, 0.95832}, {0.99033, 0.95733, 0.95733}, 
+ {0.99034, 0.95634, 0.95634}, {0.99035, 0.95535, 0.95535}, 
+ {0.99036, 0.95436, 0.95436}, {0.99037, 0.95337, 0.95337}, 
+ {0.99038, 0.95238, 0.95238}, {0.99039, 0.95139, 0.95139}, 
+ {0.9904, 0.9504, 0.9504}, {0.99041, 0.94941, 0.94941}, 
+ {0.99042, 0.94842, 0.94842}, {0.99043, 0.94743, 0.94743}, 
+ {0.99044, 0.94644, 0.94644}, {0.9904499999999999, 0.94545, 0.94545}, 
+ {0.99046, 0.94446, 0.94446}, {0.99047, 0.94347, 0.94347}, 
+ {0.99048, 0.94248, 0.94248}, {0.99049, 0.9414899999999999, 
+  0.9414899999999999}, {0.9904999999999999, 0.9405, 0.9405}, 
+ {0.99051, 0.93951, 0.93951}, {0.99052, 0.93852, 0.93852}, 
+ {0.99053, 0.93753, 0.93753}, {0.99054, 0.93654, 0.93654}, 
+ {0.99055, 0.93555, 0.93555}, {0.99056, 0.93456, 0.93456}, 
+ {0.99057, 0.93357, 0.93357}, {0.99058, 0.93258, 0.93258}, 
+ {0.99059, 0.93159, 0.93159}, {0.9906, 0.9306, 0.9306}, 
+ {0.99061, 0.92961, 0.92961}, {0.99062, 0.92862, 0.92862}, 
+ {0.99063, 0.92763, 0.92763}, {0.99064, 0.92664, 0.92664}, 
+ {0.99065, 0.92565, 0.92565}, {0.99066, 0.92466, 0.92466}, 
+ {0.9906699999999999, 0.92367, 0.92367}, {0.99068, 0.92268, 0.92268}, 
+ {0.99069, 0.92169, 0.92169}, {0.9907, 0.9207, 0.9207}, 
+ {0.99071, 0.91971, 0.91971}, {0.99072, 0.91872, 0.91872}, 
+ {0.99073, 0.9177299999999999, 0.9177299999999999}, 
+ {0.99074, 0.91674, 0.91674}, {0.99075, 0.91575, 0.91575}, 
+ {0.99076, 0.91476, 0.91476}, {0.99077, 0.91377, 0.91377}, 
+ {0.99078, 0.91278, 0.91278}, {0.99079, 0.91179, 0.91179}, 
+ {0.9908, 0.9107999999999999, 0.9107999999999999}, 
+ {0.99081, 0.90981, 0.90981}, {0.99082, 0.90882, 0.90882}, 
+ {0.99083, 0.90783, 0.90783}, {0.9908399999999999, 0.90684, 0.90684}, 
+ {0.99085, 0.90585, 0.90585}, {0.99086, 0.90486, 0.90486}, 
+ {0.99087, 0.90387, 0.90387}, {0.99088, 0.90288, 0.90288}, 
+ {0.9908899999999999, 0.90189, 0.90189}, {0.9909, 0.9009, 0.9009}, 
+ {0.99091, 0.89991, 0.89991}, {0.99092, 0.8989199999999999, 
+  0.8989199999999999}, {0.99093, 0.89793, 0.89793}, 
+ {0.99094, 0.89694, 0.89694}, {0.99095, 0.89595, 0.89595}, 
+ {0.99096, 0.89496, 0.89496}, {0.99097, 0.8939699999999999, 
+  0.8939699999999999}, {0.99098, 0.89298, 0.89298}, 
+ {0.99099, 0.89199, 0.89199}, {0.991, 0.891, 0.891}, 
+ {0.99101, 0.89001, 0.89001}, {0.99102, 0.88902, 0.88902}, 
+ {0.99103, 0.88803, 0.88803}, {0.99104, 0.8870399999999999, 
+  0.8870399999999999}, {0.99105, 0.88605, 0.88605}, 
+ {0.9910599999999999, 0.88506, 0.88506}, {0.99107, 0.88407, 0.88407}, 
+ {0.99108, 0.88308, 0.88308}, {0.99109, 0.88209, 0.88209}, 
+ {0.9911, 0.8811, 0.8811}, {0.99111, 0.88011, 0.88011}, 
+ {0.99112, 0.87912, 0.87912}, {0.99113, 0.87813, 0.87813}, 
+ {0.99114, 0.87714, 0.87714}, {0.99115, 0.87615, 0.87615}, 
+ {0.99116, 0.8751599999999999, 0.8751599999999999}, 
+ {0.99117, 0.87417, 0.87417}, {0.99118, 0.87318, 0.87318}, 
+ {0.99119, 0.87219, 0.87219}, {0.9912, 0.8712, 0.8712}, 
+ {0.99121, 0.87021, 0.87021}, {0.99122, 0.86922, 0.86922}, 
+ {0.9912299999999999, 0.86823, 0.86823}, {0.99124, 0.86724, 0.86724}, 
+ {0.99125, 0.86625, 0.86625}, {0.99126, 0.86526, 0.86526}, 
+ {0.99127, 0.86427, 0.86427}, {0.9912799999999999, 0.86328, 0.86328}, 
+ {0.99129, 0.86229, 0.86229}, {0.9913, 0.8613, 0.8613}, 
+ {0.99131, 0.86031, 0.86031}, {0.99132, 0.85932, 0.85932}, 
+ {0.99133, 0.85833, 0.85833}, {0.99134, 0.85734, 0.85734}, 
+ {0.99135, 0.85635, 0.85635}, {0.99136, 0.85536, 0.85536}, 
+ {0.99137, 0.85437, 0.85437}, {0.99138, 0.85338, 0.85338}, 
+ {0.99139, 0.85239, 0.85239}, {0.9914, 0.8513999999999999, 
+  0.8513999999999999}, {0.99141, 0.85041, 0.85041}, 
+ {0.99142, 0.84942, 0.84942}, {0.99143, 0.84843, 0.84843}, 
+ {0.99144, 0.84744, 0.84744}, {0.9914499999999999, 0.84645, 0.84645}, 
+ {0.99146, 0.84546, 0.84546}, {0.99147, 0.84447, 0.84447}, 
+ {0.99148, 0.84348, 0.84348}, {0.99149, 0.84249, 0.84249}, 
+ {0.9915, 0.8415, 0.8415}, {0.99151, 0.84051, 0.84051}, 
+ {0.99152, 0.83952, 0.83952}, {0.99153, 0.83853, 0.83853}, 
+ {0.99154, 0.83754, 0.83754}, {0.99155, 0.83655, 0.83655}, 
+ {0.99156, 0.83556, 0.83556}, {0.99157, 0.83457, 0.83457}, 
+ {0.99158, 0.83358, 0.83358}, {0.99159, 0.8325899999999999, 
+  0.8325899999999999}, {0.9916, 0.8316, 0.8316}, {0.99161, 0.83061, 0.83061}, 
+ {0.99162, 0.82962, 0.82962}, {0.99163, 0.82863, 0.82863}, 
+ {0.99164, 0.8276399999999999, 0.8276399999999999}, 
+ {0.99165, 0.82665, 0.82665}, {0.99166, 0.82566, 0.82566}, 
+ {0.9916699999999999, 0.82467, 0.82467}, {0.99168, 0.82368, 0.82368}, 
+ {0.99169, 0.8226899999999999, 0.8226899999999999}, {0.9917, 0.8217, 0.8217}, 
+ {0.99171, 0.8207099999999999, 0.8207099999999999}, 
+ {0.99172, 0.81972, 0.81972}, {0.99173, 0.81873, 0.81873}, 
+ {0.99174, 0.8177399999999999, 0.8177399999999999}, 
+ {0.99175, 0.81675, 0.81675}, {0.99176, 0.81576, 0.81576}, 
+ {0.99177, 0.81477, 0.81477}, {0.99178, 0.81378, 0.81378}, 
+ {0.99179, 0.81279, 0.81279}, {0.9918, 0.8118, 0.8118}, 
+ {0.99181, 0.81081, 0.81081}, {0.99182, 0.80982, 0.80982}, 
+ {0.99183, 0.8088299999999999, 0.8088299999999999}, 
+ {0.9918399999999999, 0.80784, 0.80784}, {0.99185, 0.80685, 0.80685}, 
+ {0.99186, 0.80586, 0.80586}, {0.99187, 0.80487, 0.80487}, 
+ {0.99188, 0.8038799999999999, 0.8038799999999999}, 
+ {0.9918899999999999, 0.80289, 0.80289}, {0.9919, 0.8019000000000001, 
+  0.8019000000000001}, {0.99191, 0.80091, 0.80091}, 
+ {0.99192, 0.79992, 0.79992}, {0.99193, 0.79893, 0.79893}, 
+ {0.99194, 0.79794, 0.79794}, {0.99195, 0.79695, 0.79695}, 
+ {0.99196, 0.79596, 0.79596}, {0.99197, 0.79497, 0.79497}, 
+ {0.99198, 0.79398, 0.79398}, {0.99199, 0.79299, 0.79299}, 
+ {0.992, 0.792, 0.792}, {0.99201, 0.79101, 0.79101}, 
+ {0.99202, 0.79002, 0.79002}, {0.99203, 0.78903, 0.78903}, 
+ {0.99204, 0.78804, 0.78804}, {0.99205, 0.78705, 0.78705}, 
+ {0.9920599999999999, 0.78606, 0.78606}, {0.99207, 0.7850699999999999, 
+  0.7850699999999999}, {0.99208, 0.78408, 0.78408}, 
+ {0.99209, 0.7830900000000001, 0.7830900000000001}, {0.9921, 0.7821, 0.7821}, 
+ {0.99211, 0.78111, 0.78111}, {0.99212, 0.78012, 0.78012}, 
+ {0.99213, 0.77913, 0.77913}, {0.99214, 0.77814, 0.77814}, 
+ {0.99215, 0.77715, 0.77715}, {0.99216, 0.77616, 0.77616}, 
+ {0.99217, 0.77517, 0.77517}, {0.99218, 0.77418, 0.77418}, 
+ {0.99219, 0.77319, 0.77319}, {0.9922, 0.7722, 0.7722}, 
+ {0.99221, 0.77121, 0.77121}, {0.99222, 0.77022, 0.77022}, 
+ {0.99223, 0.76923, 0.76923}, {0.99224, 0.76824, 0.76824}, 
+ {0.99225, 0.76725, 0.76725}, {0.99226, 0.7662599999999999, 
+  0.7662599999999999}, {0.99227, 0.76527, 0.76527}, 
+ {0.9922799999999999, 0.76428, 0.76428}, {0.99229, 0.76329, 0.76329}, 
+ {0.9923, 0.7623, 0.7623}, {0.99231, 0.7613099999999999, 0.7613099999999999}, 
+ {0.99232, 0.76032, 0.76032}, {0.99233, 0.75933, 0.75933}, 
+ {0.99234, 0.75834, 0.75834}, {0.99235, 0.75735, 0.75735}, 
+ {0.99236, 0.7563599999999999, 0.7563599999999999}, 
+ {0.99237, 0.75537, 0.75537}, {0.99238, 0.7543799999999999, 
+  0.7543799999999999}, {0.99239, 0.75339, 0.75339}, {0.9924, 0.7524, 0.7524}, 
+ {0.99241, 0.75141, 0.75141}, {0.99242, 0.75042, 0.75042}, 
+ {0.99243, 0.74943, 0.74943}, {0.99244, 0.74844, 0.74844}, 
+ {0.9924499999999999, 0.74745, 0.74745}, {0.99246, 0.74646, 0.74646}, 
+ {0.99247, 0.74547, 0.74547}, {0.99248, 0.74448, 0.74448}, 
+ {0.99249, 0.74349, 0.74349}, {0.9924999999999999, 0.7424999999999999, 
+  0.7424999999999999}, {0.99251, 0.74151, 0.74151}, 
+ {0.99252, 0.74052, 0.74052}, {0.99253, 0.73953, 0.73953}, 
+ {0.99254, 0.73854, 0.73854}, {0.99255, 0.7375499999999999, 
+  0.7375499999999999}, {0.99256, 0.73656, 0.73656}, 
+ {0.99257, 0.7355700000000001, 0.7355700000000001}, 
+ {0.99258, 0.73458, 0.73458}, {0.99259, 0.73359, 0.73359}, 
+ {0.9926, 0.7325999999999999, 0.7325999999999999}, 
+ {0.99261, 0.73161, 0.73161}, {0.99262, 0.73062, 0.73062}, 
+ {0.99263, 0.72963, 0.72963}, {0.99264, 0.72864, 0.72864}, 
+ {0.99265, 0.7276499999999999, 0.7276499999999999}, 
+ {0.99266, 0.72666, 0.72666}, {0.9926699999999999, 0.72567, 0.72567}, 
+ {0.99268, 0.72468, 0.72468}, {0.99269, 0.7236899999999999, 
+  0.7236899999999999}, {0.9927, 0.7226999999999999, 0.7226999999999999}, 
+ {0.99271, 0.72171, 0.72171}, {0.99272, 0.72072, 0.72072}, 
+ {0.99273, 0.71973, 0.71973}, {0.99274, 0.7187399999999999, 
+  0.7187399999999999}, {0.99275, 0.71775, 0.71775}, 
+ {0.99276, 0.71676, 0.71676}, {0.99277, 0.71577, 0.71577}, 
+ {0.99278, 0.71478, 0.71478}, {0.99279, 0.7137899999999999, 
+  0.7137899999999999}, {0.9928, 0.7128, 0.7128}, 
+ {0.99281, 0.7118099999999999, 0.7118099999999999}, 
+ {0.99282, 0.71082, 0.71082}, {0.99283, 0.70983, 0.70983}, 
+ {0.99284, 0.7088399999999999, 0.7088399999999999}, 
+ {0.99285, 0.70785, 0.70785}, {0.99286, 0.70686, 0.70686}, 
+ {0.99287, 0.70587, 0.70587}, {0.99288, 0.70488, 0.70488}, 
+ {0.9928899999999999, 0.70389, 0.70389}, {0.9929, 0.7029000000000001, 
+  0.7029000000000001}, {0.99291, 0.70191, 0.70191}, 
+ {0.99292, 0.70092, 0.70092}, {0.99293, 0.6999299999999999, 
+  0.6999299999999999}, {0.99294, 0.69894, 0.69894}, 
+ {0.99295, 0.6979500000000001, 0.6979500000000001}, 
+ {0.99296, 0.69696, 0.69696}, {0.99297, 0.69597, 0.69597}, 
+ {0.99298, 0.6949799999999999, 0.6949799999999999}, 
+ {0.99299, 0.69399, 0.69399}, {0.993, 0.6930000000000001, 
+  0.6930000000000001}, {0.99301, 0.69201, 0.69201}, 
+ {0.99302, 0.69102, 0.69102}, {0.99303, 0.6900299999999999, 
+  0.6900299999999999}, {0.99304, 0.68904, 0.68904}, 
+ {0.99305, 0.68805, 0.68805}, {0.9930599999999999, 0.68706, 0.68706}, 
+ {0.99307, 0.68607, 0.68607}, {0.99308, 0.68508, 0.68508}, 
+ {0.99309, 0.68409, 0.68409}, {0.9931, 0.6831, 0.6831}, 
+ {0.99311, 0.68211, 0.68211}, {0.99312, 0.68112, 0.68112}, 
+ {0.99313, 0.68013, 0.68013}, {0.99314, 0.67914, 0.67914}, 
+ {0.99315, 0.67815, 0.67815}, {0.99316, 0.67716, 0.67716}, 
+ {0.99317, 0.6761699999999999, 0.6761699999999999}, 
+ {0.99318, 0.67518, 0.67518}, {0.99319, 0.6741900000000001, 
+  0.6741900000000001}, {0.9932, 0.6732, 0.6732}, {0.99321, 0.67221, 0.67221}, 
+ {0.99322, 0.6712199999999999, 0.6712199999999999}, 
+ {0.99323, 0.67023, 0.67023}, {0.99324, 0.6692400000000001, 
+  0.6692400000000001}, {0.99325, 0.66825, 0.66825}, 
+ {0.99326, 0.66726, 0.66726}, {0.99327, 0.6662699999999999, 
+  0.6662699999999999}, {0.9932799999999999, 0.66528, 0.66528}, 
+ {0.99329, 0.66429, 0.66429}, {0.9933, 0.6633, 0.6633}, 
+ {0.99331, 0.66231, 0.66231}, {0.99332, 0.6613199999999999, 
+  0.6613199999999999}, {0.99333, 0.66033, 0.66033}, 
+ {0.99334, 0.65934, 0.65934}, {0.99335, 0.65835, 0.65835}, 
+ {0.99336, 0.6573599999999999, 0.6573599999999999}, 
+ {0.99337, 0.6563699999999999, 0.6563699999999999}, 
+ {0.99338, 0.65538, 0.65538}, {0.99339, 0.65439, 0.65439}, 
+ {0.9934, 0.6534, 0.6534}, {0.99341, 0.6524099999999999, 0.6524099999999999}, 
+ {0.99342, 0.6514199999999999, 0.6514199999999999}, 
+ {0.99343, 0.65043, 0.65043}, {0.99344, 0.64944, 0.64944}, 
+ {0.9934499999999999, 0.64845, 0.64845}, {0.99346, 0.6474599999999999, 
+  0.6474599999999999}, {0.99347, 0.64647, 0.64647}, 
+ {0.99348, 0.6454799999999999, 0.6454799999999999}, 
+ {0.99349, 0.64449, 0.64449}, {0.9935, 0.6435, 0.6435}, 
+ {0.99351, 0.6425099999999999, 0.6425099999999999}, 
+ {0.99352, 0.6415200000000001, 0.6415200000000001}, 
+ {0.99353, 0.64053, 0.64053}, {0.99354, 0.63954, 0.63954}, 
+ {0.99355, 0.63855, 0.63855}, {0.99356, 0.63756, 0.63756}, 
+ {0.99357, 0.6365700000000001, 0.6365700000000001}, 
+ {0.99358, 0.63558, 0.63558}, {0.99359, 0.63459, 0.63459}, 
+ {0.9936, 0.6335999999999999, 0.6335999999999999}, 
+ {0.99361, 0.63261, 0.63261}, {0.99362, 0.6316200000000001, 
+  0.6316200000000001}, {0.99363, 0.63063, 0.63063}, 
+ {0.99364, 0.62964, 0.62964}, {0.99365, 0.6286499999999999, 
+  0.6286499999999999}, {0.99366, 0.62766, 0.62766}, 
+ {0.9936699999999999, 0.6266700000000001, 0.6266700000000001}, 
+ {0.99368, 0.62568, 0.62568}, {0.99369, 0.62469, 0.62469}, 
+ {0.9937, 0.6236999999999999, 0.6236999999999999}, 
+ {0.99371, 0.62271, 0.62271}, {0.99372, 0.62172, 0.62172}, 
+ {0.99373, 0.62073, 0.62073}, {0.99374, 0.61974, 0.61974}, 
+ {0.99375, 0.61875, 0.61875}, {0.99376, 0.61776, 0.61776}, 
+ {0.99377, 0.61677, 0.61677}, {0.99378, 0.61578, 0.61578}, 
+ {0.99379, 0.61479, 0.61479}, {0.9938, 0.6138, 0.6138}, 
+ {0.99381, 0.61281, 0.61281}, {0.99382, 0.61182, 0.61182}, 
+ {0.99383, 0.61083, 0.61083}, {0.99384, 0.6098399999999999, 
+  0.6098399999999999}, {0.99385, 0.60885, 0.60885}, 
+ {0.99386, 0.6078600000000001, 0.6078600000000001}, 
+ {0.99387, 0.60687, 0.60687}, {0.99388, 0.60588, 0.60588}, 
+ {0.9938899999999999, 0.6048899999999999, 0.6048899999999999}, 
+ {0.9939, 0.6039, 0.6039}, {0.99391, 0.6029100000000001, 0.6029100000000001}, 
+ {0.99392, 0.60192, 0.60192}, {0.99393, 0.60093, 0.60093}, 
+ {0.99394, 0.5999399999999999, 0.5999399999999999}, 
+ {0.99395, 0.59895, 0.59895}, {0.99396, 0.59796, 0.59796}, 
+ {0.99397, 0.59697, 0.59697}, {0.99398, 0.59598, 0.59598}, 
+ {0.99399, 0.5949899999999999, 0.5949899999999999}, {0.994, 0.594, 0.594}, 
+ {0.99401, 0.59301, 0.59301}, {0.99402, 0.59202, 0.59202}, 
+ {0.99403, 0.5910299999999999, 0.5910299999999999}, 
+ {0.99404, 0.5900399999999999, 0.5900399999999999}, 
+ {0.99405, 0.58905, 0.58905}, {0.9940599999999999, 0.58806, 0.58806}, 
+ {0.99407, 0.58707, 0.58707}, {0.99408, 0.5860799999999999, 
+  0.5860799999999999}, {0.99409, 0.5850899999999999, 0.5850899999999999}, 
+ {0.9941, 0.5841, 0.5841}, {0.99411, 0.58311, 0.58311}, 
+ {0.99412, 0.58212, 0.58212}, {0.99413, 0.5811299999999999, 
+  0.5811299999999999}, {0.99414, 0.5801399999999999, 0.5801399999999999}, 
+ {0.99415, 0.5791499999999999, 0.5791499999999999}, 
+ {0.99416, 0.57816, 0.57816}, {0.99417, 0.57717, 0.57717}, 
+ {0.99418, 0.57618, 0.57618}, {0.99419, 0.5751900000000001, 
+  0.5751900000000001}, {0.9942, 0.5742, 0.5742}, {0.99421, 0.57321, 0.57321}, 
+ {0.99422, 0.57222, 0.57222}, {0.99423, 0.57123, 0.57123}, 
+ {0.99424, 0.5702400000000001, 0.5702400000000001}, 
+ {0.99425, 0.56925, 0.56925}, {0.99426, 0.56826, 0.56826}, 
+ {0.99427, 0.5672699999999999, 0.5672699999999999}, 
+ {0.9942799999999999, 0.56628, 0.56628}, {0.99429, 0.5652900000000001, 
+  0.5652900000000001}, {0.9943, 0.5643, 0.5643}, {0.99431, 0.56331, 0.56331}, 
+ {0.99432, 0.5623199999999999, 0.5623199999999999}, 
+ {0.99433, 0.56133, 0.56133}, {0.99434, 0.5603400000000001, 
+  0.5603400000000001}, {0.99435, 0.55935, 0.55935}, 
+ {0.99436, 0.55836, 0.55836}, {0.99437, 0.5573699999999999, 
+  0.5573699999999999}, {0.99438, 0.55638, 0.55638}, 
+ {0.99439, 0.55539, 0.55539}, {0.9944, 0.5544, 0.5544}, 
+ {0.99441, 0.55341, 0.55341}, {0.99442, 0.5524199999999999, 
+  0.5524199999999999}, {0.99443, 0.55143, 0.55143}, 
+ {0.99444, 0.55044, 0.55044}, {0.99445, 0.54945, 0.54945}, 
+ {0.99446, 0.54846, 0.54846}, {0.99447, 0.54747, 0.54747}, 
+ {0.99448, 0.54648, 0.54648}, {0.99449, 0.54549, 0.54549}, 
+ {0.9944999999999999, 0.5445, 0.5445}, {0.99451, 0.5435099999999999, 
+  0.5435099999999999}, {0.99452, 0.54252, 0.54252}, 
+ {0.99453, 0.54153, 0.54153}, {0.99454, 0.54054, 0.54054}, 
+ {0.99455, 0.53955, 0.53955}, {0.99456, 0.5385599999999999, 
+  0.5385599999999999}, {0.99457, 0.53757, 0.53757}, 
+ {0.99458, 0.5365800000000001, 0.5365800000000001}, 
+ {0.99459, 0.53559, 0.53559}, {0.9946, 0.5346, 0.5346}, 
+ {0.99461, 0.5336099999999999, 0.5336099999999999}, 
+ {0.99462, 0.53262, 0.53262}, {0.99463, 0.53163, 0.53163}, 
+ {0.99464, 0.53064, 0.53064}, {0.99465, 0.52965, 0.52965}, 
+ {0.99466, 0.5286599999999999, 0.5286599999999999}, 
+ {0.9946699999999999, 0.52767, 0.52767}, {0.99468, 0.52668, 0.52668}, 
+ {0.99469, 0.52569, 0.52569}, {0.9947, 0.5246999999999999, 
+  0.5246999999999999}, {0.99471, 0.5237099999999999, 0.5237099999999999}, 
+ {0.99472, 0.52272, 0.52272}, {0.99473, 0.52173, 0.52173}, 
+ {0.99474, 0.52074, 0.52074}, {0.99475, 0.5197499999999999, 
+  0.5197499999999999}, {0.99476, 0.5187599999999999, 0.5187599999999999}, 
+ {0.99477, 0.51777, 0.51777}, {0.99478, 0.51678, 0.51678}, 
+ {0.99479, 0.51579, 0.51579}, {0.9948, 0.5148, 0.5148}, 
+ {0.99481, 0.51381, 0.51381}, {0.99482, 0.51282, 0.51282}, 
+ {0.99483, 0.51183, 0.51183}, {0.99484, 0.51084, 0.51084}, 
+ {0.99485, 0.50985, 0.50985}, {0.99486, 0.5088600000000001, 
+  0.5088600000000001}, {0.99487, 0.50787, 0.50787}, 
+ {0.99488, 0.50688, 0.50688}, {0.9948899999999999, 0.50589, 0.50589}, 
+ {0.9949, 0.5049, 0.5049}, {0.99491, 0.5039100000000001, 0.5039100000000001}, 
+ {0.99492, 0.50292, 0.50292}, {0.99493, 0.50193, 0.50193}, 
+ {0.99494, 0.5009399999999999, 0.5009399999999999}, 
+ {0.99495, 0.49995, 0.49995}, {0.99496, 0.49896, 0.49896}, 
+ {0.99497, 0.49797, 0.49797}, {0.99498, 0.49698, 0.49698}, 
+ {0.99499, 0.49599, 0.49599}, {0.995, 0.495, 0.495}, 
+ {0.99501, 0.49401, 0.49401}, {0.99502, 0.49302, 0.49302}, 
+ {0.99503, 0.49202999999999997, 0.49202999999999997}, 
+ {0.99504, 0.49104, 0.49104}, {0.99505, 0.49005, 0.49005}, 
+ {0.99506, 0.48905999999999994, 0.48905999999999994}, 
+ {0.99507, 0.48807, 0.48807}, {0.99508, 0.48707999999999996, 
+  0.48707999999999996}, {0.99509, 0.48609, 0.48609}, 
+ {0.9951, 0.4851, 0.4851}, {0.99511, 0.48411000000000004, 
+  0.48411000000000004}, {0.99512, 0.48312, 0.48312}, 
+ {0.99513, 0.48212999999999995, 0.48212999999999995}, 
+ {0.99514, 0.48114, 0.48114}, {0.99515, 0.48014999999999997, 
+  0.48014999999999997}, {0.99516, 0.47916000000000003, 0.47916000000000003}, 
+ {0.99517, 0.47817, 0.47817}, {0.99518, 0.47717999999999994, 
+  0.47717999999999994}, {0.99519, 0.47619, 0.47619}, 
+ {0.9952, 0.47519999999999996, 0.47519999999999996}, 
+ {0.99521, 0.47421, 0.47421}, {0.99522, 0.47322, 0.47322}, 
+ {0.99523, 0.4722299999999999, 0.4722299999999999}, 
+ {0.99524, 0.47124, 0.47124}, {0.99525, 0.47024999999999995, 
+  0.47024999999999995}, {0.99526, 0.46926, 0.46926}, 
+ {0.99527, 0.46826999999999996, 0.46826999999999996}, 
+ {0.9952799999999999, 0.4672799999999999, 0.4672799999999999}, 
+ {0.99529, 0.46629, 0.46629}, {0.9953, 0.46529999999999994, 
+  0.46529999999999994}, {0.99531, 0.46431, 0.46431}, 
+ {0.99532, 0.46331999999999995, 0.46331999999999995}, 
+ {0.99533, 0.46233, 0.46233}, {0.99534, 0.46134, 0.46134}, 
+ {0.99535, 0.4603499999999999, 0.4603499999999999}, 
+ {0.99536, 0.45936, 0.45936}, {0.99537, 0.45836999999999994, 
+  0.45836999999999994}, {0.99538, 0.45738, 0.45738}, 
+ {0.99539, 0.45638999999999996, 0.45638999999999996}, 
+ {0.9954, 0.4553999999999999, 0.4553999999999999}, 
+ {0.99541, 0.45441, 0.45441}, {0.99542, 0.45341999999999993, 
+  0.45341999999999993}, {0.99543, 0.45243, 0.45243}, 
+ {0.99544, 0.45143999999999995, 0.45143999999999995}, 
+ {0.99545, 0.4504499999999999, 0.4504499999999999}, 
+ {0.99546, 0.44945999999999997, 0.44945999999999997}, 
+ {0.99547, 0.4484699999999999, 0.4484699999999999}, 
+ {0.99548, 0.44748, 0.44748}, {0.99549, 0.44648999999999994, 
+  0.44648999999999994}, {0.9955, 0.4455, 0.4455}, 
+ {0.99551, 0.44450999999999996, 0.44450999999999996}, 
+ {0.99552, 0.4435199999999999, 0.4435199999999999}, 
+ {0.99553, 0.44253, 0.44253}, {0.99554, 0.44153999999999993, 
+  0.44153999999999993}, {0.99555, 0.44055, 0.44055}, 
+ {0.99556, 0.43955999999999995, 0.43955999999999995}, 
+ {0.99557, 0.4385699999999999, 0.4385699999999999}, 
+ {0.99558, 0.43757999999999997, 0.43757999999999997}, 
+ {0.99559, 0.4365899999999999, 0.4365899999999999}, {0.9956, 0.4356, 0.4356}, 
+ {0.99561, 0.43460999999999994, 0.43460999999999994}, 
+ {0.99562, 0.4336199999999999, 0.4336199999999999}, 
+ {0.99563, 0.43262999999999996, 0.43262999999999996}, 
+ {0.99564, 0.4316399999999999, 0.4316399999999999}, 
+ {0.99565, 0.43065, 0.43065}, {0.99566, 0.42965999999999993, 
+  0.42965999999999993}, {0.9956699999999999, 0.4286699999999999, 
+  0.4286699999999999}, {0.99568, 0.42767999999999995, 0.42767999999999995}, 
+ {0.99569, 0.4266899999999999, 0.4266899999999999}, 
+ {0.9957, 0.42569999999999997, 0.42569999999999997}, 
+ {0.99571, 0.4247099999999999, 0.4247099999999999}, 
+ {0.99572, 0.42372, 0.42372}, {0.99573, 0.42272999999999994, 
+  0.42272999999999994}, {0.99574, 0.4217399999999999, 0.4217399999999999}, 
+ {0.99575, 0.42074999999999996, 0.42074999999999996}, 
+ {0.99576, 0.4197599999999999, 0.4197599999999999}, 
+ {0.99577, 0.4187700000000001, 0.4187700000000001}, 
+ {0.99578, 0.41778000000000004, 0.41778000000000004}, 
+ {0.99579, 0.41679, 0.41679}, {0.9958, 0.41580000000000006, 
+  0.41580000000000006}, {0.99581, 0.41481, 0.41481}, 
+ {0.99582, 0.4138200000000001, 0.4138200000000001}, 
+ {0.99583, 0.41283000000000003, 0.41283000000000003}, 
+ {0.99584, 0.41184, 0.41184}, {0.99585, 0.41085000000000005, 
+  0.41085000000000005}, {0.99586, 0.40986, 0.40986}, 
+ {0.99587, 0.40887000000000007, 0.40887000000000007}, 
+ {0.99588, 0.40788, 0.40788}, {0.9958899999999999, 0.40689, 0.40689}, 
+ {0.9959, 0.40590000000000004, 0.40590000000000004}, 
+ {0.99591, 0.40491, 0.40491}, {0.99592, 0.40392000000000006, 
+  0.40392000000000006}, {0.99593, 0.40293, 0.40293}, 
+ {0.99594, 0.4019400000000001, 0.4019400000000001}, 
+ {0.99595, 0.40095000000000003, 0.40095000000000003}, 
+ {0.99596, 0.39996, 0.39996}, {0.99597, 0.39897000000000005, 
+  0.39897000000000005}, {0.99598, 0.39798, 0.39798}, 
+ {0.99599, 0.39699000000000007, 0.39699000000000007}, {0.996, 0.396, 0.396}, 
+ {0.99601, 0.39501, 0.39501}, {0.99602, 0.39402000000000004, 
+  0.39402000000000004}, {0.99603, 0.39303, 0.39303}, 
+ {0.99604, 0.39204000000000006, 0.39204000000000006}, 
+ {0.99605, 0.39105, 0.39105}, {0.99606, 0.39005999999999996, 
+  0.39005999999999996}, {0.99607, 0.38907, 0.38907}, 
+ {0.99608, 0.38808, 0.38808}, {0.99609, 0.38709000000000005, 
+  0.38709000000000005}, {0.9961, 0.3861, 0.3861}, 
+ {0.99611, 0.38511000000000006, 0.38511000000000006}, 
+ {0.99612, 0.38412, 0.38412}, {0.99613, 0.38312999999999997, 
+  0.38312999999999997}, {0.99614, 0.38214000000000004, 0.38214000000000004}, 
+ {0.99615, 0.38115, 0.38115}, {0.99616, 0.38016000000000005, 
+  0.38016000000000005}, {0.99617, 0.37917, 0.37917}, 
+ {0.99618, 0.37817999999999996, 0.37817999999999996}, 
+ {0.99619, 0.37719, 0.37719}, {0.9962, 0.3762, 0.3762}, 
+ {0.99621, 0.37521000000000004, 0.37521000000000004}, 
+ {0.99622, 0.37422, 0.37422}, {0.99623, 0.37322999999999995, 
+  0.37322999999999995}, {0.99624, 0.37224, 0.37224}, 
+ {0.99625, 0.37124999999999997, 0.37124999999999997}, 
+ {0.99626, 0.37026000000000003, 0.37026000000000003}, 
+ {0.99627, 0.36927, 0.36927}, {0.9962799999999999, 0.36827999999999994, 
+  0.36827999999999994}, {0.99629, 0.36729, 0.36729}, 
+ {0.9963, 0.36629999999999996, 0.36629999999999996}, 
+ {0.99631, 0.36531, 0.36531}, {0.99632, 0.36432, 0.36432}, 
+ {0.99633, 0.36333000000000004, 0.36333000000000004}, 
+ {0.99634, 0.36234, 0.36234}, {0.99635, 0.36134999999999995, 
+  0.36134999999999995}, {0.99636, 0.36036, 0.36036}, 
+ {0.99637, 0.35936999999999997, 0.35936999999999997}, 
+ {0.99638, 0.35838000000000003, 0.35838000000000003}, 
+ {0.99639, 0.35739, 0.35739}, {0.9964, 0.35639999999999994, 
+  0.35639999999999994}, {0.99641, 0.35541, 0.35541}, 
+ {0.99642, 0.35441999999999996, 0.35441999999999996}, 
+ {0.99643, 0.35343, 0.35343}, {0.99644, 0.35244, 0.35244}, 
+ {0.99645, 0.35144999999999993, 0.35144999999999993}, 
+ {0.99646, 0.35046, 0.35046}, {0.99647, 0.34946999999999995, 
+  0.34946999999999995}, {0.99648, 0.34848, 0.34848}, 
+ {0.99649, 0.34748999999999997, 0.34748999999999997}, 
+ {0.9964999999999999, 0.34650000000000003, 0.34650000000000003}, 
+ {0.99651, 0.34551, 0.34551}, {0.99652, 0.34451999999999994, 
+  0.34451999999999994}, {0.99653, 0.34353, 0.34353}, 
+ {0.99654, 0.34253999999999996, 0.34253999999999996}, 
+ {0.99655, 0.34155, 0.34155}, {0.99656, 0.34056, 0.34056}, 
+ {0.99657, 0.3395699999999999, 0.3395699999999999}, 
+ {0.99658, 0.33858, 0.33858}, {0.99659, 0.33758999999999995, 
+  0.33758999999999995}, {0.9966, 0.3366, 0.3366}, 
+ {0.99661, 0.33560999999999996, 0.33560999999999996}, 
+ {0.99662, 0.3346199999999999, 0.3346199999999999}, 
+ {0.99663, 0.33363, 0.33363}, {0.99664, 0.33263999999999994, 
+  0.33263999999999994}, {0.99665, 0.33165, 0.33165}, 
+ {0.99666, 0.33065999999999995, 0.33065999999999995}, 
+ {0.99667, 0.3296699999999999, 0.3296699999999999}, 
+ {0.99668, 0.32867999999999997, 0.32867999999999997}, 
+ {0.99669, 0.3276899999999999, 0.3276899999999999}, {0.9967, 0.3267, 0.3267}, 
+ {0.99671, 0.32570999999999994, 0.32570999999999994}, 
+ {0.99672, 0.32472, 0.32472}, {0.99673, 0.32372999999999996, 
+  0.32372999999999996}, {0.99674, 0.3227399999999999, 0.3227399999999999}, 
+ {0.99675, 0.32175, 0.32175}, {0.99676, 0.32075999999999993, 
+  0.32075999999999993}, {0.99677, 0.31977, 0.31977}, 
+ {0.99678, 0.31877999999999995, 0.31877999999999995}, 
+ {0.99679, 0.3177899999999999, 0.3177899999999999}, 
+ {0.9968, 0.31679999999999997, 0.31679999999999997}, 
+ {0.99681, 0.3158099999999999, 0.3158099999999999}, 
+ {0.99682, 0.31482, 0.31482}, {0.99683, 0.31382999999999994, 
+  0.31382999999999994}, {0.99684, 0.3128399999999999, 0.3128399999999999}, 
+ {0.99685, 0.31184999999999996, 0.31184999999999996}, 
+ {0.99686, 0.3108599999999999, 0.3108599999999999}, 
+ {0.99687, 0.30987, 0.30987}, {0.99688, 0.30887999999999993, 
+  0.30887999999999993}, {0.9968899999999999, 0.3078899999999999, 
+  0.3078899999999999}, {0.9969, 0.30689999999999995, 0.30689999999999995}, 
+ {0.99691, 0.3059099999999999, 0.3059099999999999}, 
+ {0.99692, 0.30491999999999997, 0.30491999999999997}, 
+ {0.99693, 0.3039299999999999, 0.3039299999999999}, 
+ {0.99694, 0.30294, 0.30294}, {0.99695, 0.30194999999999994, 
+  0.30194999999999994}, {0.99696, 0.3009599999999999, 0.3009599999999999}, 
+ {0.99697, 0.29996999999999996, 0.29996999999999996}, 
+ {0.99698, 0.2989799999999999, 0.2989799999999999}, 
+ {0.99699, 0.29799, 0.29799}, {0.997, 0.29699999999999993, 
+  0.29699999999999993}, {0.99701, 0.2960099999999999, 0.2960099999999999}, 
+ {0.99702, 0.29501999999999995, 0.29501999999999995}, 
+ {0.99703, 0.2940299999999999, 0.2940299999999999}, 
+ {0.99704, 0.2930400000000001, 0.2930400000000001}, 
+ {0.99705, 0.29205000000000003, 0.29205000000000003}, 
+ {0.99706, 0.29106, 0.29106}, {0.99707, 0.29007000000000005, 
+  0.29007000000000005}, {0.99708, 0.28908, 0.28908}, 
+ {0.99709, 0.28809000000000007, 0.28809000000000007}, 
+ {0.9971, 0.2871, 0.2871}, {0.99711, 0.2861100000000001, 0.2861100000000001}, 
+ {0.99712, 0.28512000000000004, 0.28512000000000004}, 
+ {0.99713, 0.28413, 0.28413}, {0.99714, 0.28314000000000006, 
+  0.28314000000000006}, {0.99715, 0.28215, 0.28215}, 
+ {0.99716, 0.2811600000000001, 0.2811600000000001}, 
+ {0.99717, 0.28017000000000003, 0.28017000000000003}, 
+ {0.99718, 0.27918, 0.27918}, {0.99719, 0.27819000000000005, 
+  0.27819000000000005}, {0.9972, 0.2772, 0.2772}, 
+ {0.99721, 0.27621000000000007, 0.27621000000000007}, 
+ {0.99722, 0.27522, 0.27522}, {0.99723, 0.27423, 0.27423}, 
+ {0.99724, 0.27324000000000004, 0.27324000000000004}, 
+ {0.99725, 0.27225, 0.27225}, {0.99726, 0.27126000000000006, 
+  0.27126000000000006}, {0.99727, 0.27027, 0.27027}, 
+ {0.9972799999999999, 0.26927999999999996, 0.26927999999999996}, 
+ {0.99729, 0.26829000000000003, 0.26829000000000003}, 
+ {0.9973, 0.2673, 0.2673}, {0.99731, 0.26631000000000005, 
+  0.26631000000000005}, {0.99732, 0.26532, 0.26532}, 
+ {0.99733, 0.26433000000000006, 0.26433000000000006}, 
+ {0.99734, 0.26334, 0.26334}, {0.99735, 0.26234999999999997, 
+  0.26234999999999997}, {0.99736, 0.26136000000000004, 0.26136000000000004}, 
+ {0.99737, 0.26037, 0.26037}, {0.99738, 0.25938000000000005, 
+  0.25938000000000005}, {0.99739, 0.25839, 0.25839}, 
+ {0.9974, 0.25739999999999996, 0.25739999999999996}, 
+ {0.99741, 0.25641, 0.25641}, {0.99742, 0.25542, 0.25542}, 
+ {0.99743, 0.25443000000000005, 0.25443000000000005}, 
+ {0.99744, 0.25344, 0.25344}, {0.99745, 0.25244999999999995, 
+  0.25244999999999995}, {0.99746, 0.25146, 0.25146}, 
+ {0.99747, 0.25046999999999997, 0.25046999999999997}, 
+ {0.99748, 0.24948000000000004, 0.24948000000000004}, 
+ {0.99749, 0.24849, 0.24849}, {0.9975, 0.24750000000000005, 
+  0.24750000000000005}, {0.99751, 0.24651, 0.24651}, 
+ {0.99752, 0.24551999999999996, 0.24551999999999996}, 
+ {0.99753, 0.24453000000000003, 0.24453000000000003}, 
+ {0.99754, 0.24353999999999998, 0.24353999999999998}, 
+ {0.99755, 0.24255000000000004, 0.24255000000000004}, 
+ {0.99756, 0.24156, 0.24156}, {0.99757, 0.24056999999999995, 
+  0.24056999999999995}, {0.99758, 0.23958000000000002, 0.23958000000000002}, 
+ {0.99759, 0.23858999999999997, 0.23858999999999997}, 
+ {0.9976, 0.23760000000000003, 0.23760000000000003}, 
+ {0.99761, 0.23661, 0.23661}, {0.99762, 0.23561999999999994, 
+  0.23561999999999994}, {0.99763, 0.23463, 0.23463}, 
+ {0.99764, 0.23363999999999996, 0.23363999999999996}, 
+ {0.99765, 0.23265000000000002, 0.23265000000000002}, 
+ {0.99766, 0.23165999999999998, 0.23165999999999998}, 
+ {0.99767, 0.23066999999999993, 0.23066999999999993}, 
+ {0.99768, 0.22968, 0.22968}, {0.99769, 0.22868999999999995, 
+  0.22868999999999995}, {0.9977, 0.2277, 0.2277}, 
+ {0.99771, 0.22670999999999997, 0.22670999999999997}, 
+ {0.99772, 0.22572000000000003, 0.22572000000000003}, 
+ {0.99773, 0.22472999999999999, 0.22472999999999999}, 
+ {0.99774, 0.22373999999999994, 0.22373999999999994}, 
+ {0.99775, 0.22275, 0.22275}, {0.99776, 0.22175999999999996, 
+  0.22175999999999996}, {0.99777, 0.22077000000000002, 0.22077000000000002}, 
+ {0.99778, 0.21977999999999998, 0.21977999999999998}, 
+ {0.99779, 0.21878999999999993, 0.21878999999999993}, 
+ {0.9978, 0.2178, 0.2178}, {0.99781, 0.21680999999999995, 
+  0.21680999999999995}, {0.99782, 0.21582, 0.21582}, 
+ {0.99783, 0.21482999999999997, 0.21482999999999997}, 
+ {0.99784, 0.21383999999999992, 0.21383999999999992}, 
+ {0.99785, 0.21284999999999998, 0.21284999999999998}, 
+ {0.99786, 0.21185999999999994, 0.21185999999999994}, 
+ {0.99787, 0.21087, 0.21087}, {0.99788, 0.20987999999999996, 
+  0.20987999999999996}, {0.9978899999999999, 0.2088899999999999, 
+  0.2088899999999999}, {0.9979, 0.20789999999999997, 0.20789999999999997}, 
+ {0.99791, 0.20690999999999993, 0.20690999999999993}, 
+ {0.99792, 0.20592, 0.20592}, {0.99793, 0.20492999999999995, 
+  0.20492999999999995}, {0.99794, 0.20394, 0.20394}, 
+ {0.99795, 0.20294999999999996, 0.20294999999999996}, 
+ {0.99796, 0.20195999999999992, 0.20195999999999992}, 
+ {0.99797, 0.20096999999999998, 0.20096999999999998}, 
+ {0.99798, 0.19997999999999994, 0.19997999999999994}, 
+ {0.99799, 0.19899, 0.19899}, {0.998, 0.19799999999999995, 
+  0.19799999999999995}, {0.99801, 0.1970099999999999, 0.1970099999999999}, 
+ {0.99802, 0.19601999999999997, 0.19601999999999997}, 
+ {0.99803, 0.19502999999999993, 0.19502999999999993}, 
+ {0.99804, 0.19404, 0.19404}, {0.99805, 0.19304999999999994, 
+  0.19304999999999994}, {0.99806, 0.1920599999999999, 0.1920599999999999}, 
+ {0.99807, 0.19106999999999996, 0.19106999999999996}, 
+ {0.99808, 0.19007999999999992, 0.19007999999999992}, 
+ {0.99809, 0.18908999999999998, 0.18908999999999998}, 
+ {0.9981, 0.18809999999999993, 0.18809999999999993}, 
+ {0.99811, 0.18711, 0.18711}, {0.99812, 0.18611999999999995, 
+  0.18611999999999995}, {0.99813, 0.1851299999999999, 0.1851299999999999}, 
+ {0.99814, 0.18413999999999997, 0.18413999999999997}, 
+ {0.99815, 0.18314999999999992, 0.18314999999999992}, 
+ {0.99816, 0.18216, 0.18216}, {0.99817, 0.18116999999999994, 
+  0.18116999999999994}, {0.99818, 0.1801799999999999, 0.1801799999999999}, 
+ {0.99819, 0.17918999999999996, 0.17918999999999996}, 
+ {0.9982, 0.17819999999999991, 0.17819999999999991}, 
+ {0.99821, 0.17720999999999998, 0.17720999999999998}, 
+ {0.99822, 0.17621999999999993, 0.17621999999999993}, 
+ {0.99823, 0.17522999999999989, 0.17522999999999989}, 
+ {0.99824, 0.17423999999999995, 0.17423999999999995}, 
+ {0.99825, 0.1732499999999999, 0.1732499999999999}, 
+ {0.99826, 0.17225999999999997, 0.17225999999999997}, 
+ {0.99827, 0.17126999999999992, 0.17126999999999992}, 
+ {0.99828, 0.17027999999999988, 0.17027999999999988}, 
+ {0.99829, 0.16928999999999994, 0.16928999999999994}, 
+ {0.9983, 0.1682999999999999, 0.1682999999999999}, 
+ {0.99831, 0.16730999999999996, 0.16730999999999996}, 
+ {0.99832, 0.1663199999999999, 0.1663199999999999}, 
+ {0.99833, 0.1653300000000001, 0.1653300000000001}, 
+ {0.99834, 0.16434000000000004, 0.16434000000000004}, 
+ {0.99835, 0.16335, 0.16335}, {0.99836, 0.16236000000000006, 
+  0.16236000000000006}, {0.99837, 0.16137, 0.16137}, 
+ {0.99838, 0.16038000000000008, 0.16038000000000008}, 
+ {0.99839, 0.15939000000000003, 0.15939000000000003}, 
+ {0.9984, 0.15839999999999999, 0.15839999999999999}, 
+ {0.99841, 0.15741000000000005, 0.15741000000000005}, 
+ {0.99842, 0.15642, 0.15642}, {0.99843, 0.15543000000000007, 
+  0.15543000000000007}, {0.99844, 0.15444000000000002, 0.15444000000000002}, 
+ {0.99845, 0.15344999999999998, 0.15344999999999998}, 
+ {0.99846, 0.15246000000000004, 0.15246000000000004}, 
+ {0.99847, 0.15147, 0.15147}, {0.99848, 0.15048000000000006, 
+  0.15048000000000006}, {0.99849, 0.14949, 0.14949}, 
+ {0.9984999999999999, 0.14849999999999997, 0.14849999999999997}, 
+ {0.99851, 0.14751000000000003, 0.14751000000000003}, 
+ {0.99852, 0.14651999999999998, 0.14651999999999998}, 
+ {0.99853, 0.14553000000000005, 0.14553000000000005}, 
+ {0.99854, 0.14454, 0.14454}, {0.99855, 0.14355000000000007, 
+  0.14355000000000007}, {0.99856, 0.14256000000000002, 0.14256000000000002}, 
+ {0.99857, 0.14156999999999997, 0.14156999999999997}, 
+ {0.99858, 0.14058000000000004, 0.14058000000000004}, 
+ {0.99859, 0.13959, 0.13959}, {0.9986, 0.13860000000000006, 
+  0.13860000000000006}, {0.99861, 0.13761, 0.13761}, 
+ {0.99862, 0.13661999999999996, 0.13661999999999996}, 
+ {0.99863, 0.13563000000000003, 0.13563000000000003}, 
+ {0.99864, 0.13463999999999998, 0.13463999999999998}, 
+ {0.99865, 0.13365000000000005, 0.13365000000000005}, 
+ {0.99866, 0.13266, 0.13266}, {0.99867, 0.13166999999999995, 
+  0.13166999999999995}, {0.99868, 0.13068000000000002, 0.13068000000000002}, 
+ {0.99869, 0.12968999999999997, 0.12968999999999997}, 
+ {0.9987, 0.12870000000000004, 0.12870000000000004}, 
+ {0.99871, 0.12771, 0.12771}, {0.99872, 0.12672000000000005, 
+  0.12672000000000005}, {0.99873, 0.12573, 0.12573}, 
+ {0.99874, 0.12473999999999996, 0.12473999999999996}, 
+ {0.99875, 0.12375000000000003, 0.12375000000000003}, 
+ {0.99876, 0.12275999999999998, 0.12275999999999998}, 
+ {0.99877, 0.12177000000000004, 0.12177000000000004}, 
+ {0.99878, 0.12078, 0.12078}, {0.99879, 0.11978999999999995, 
+  0.11978999999999995}, {0.9988, 0.11880000000000002, 0.11880000000000002}, 
+ {0.99881, 0.11780999999999997, 0.11780999999999997}, 
+ {0.99882, 0.11682000000000003, 0.11682000000000003}, 
+ {0.99883, 0.11582999999999999, 0.11582999999999999}, 
+ {0.99884, 0.11483999999999994, 0.11483999999999994}, 
+ {0.99885, 0.11385, 0.11385}, {0.99886, 0.11285999999999996, 
+  0.11285999999999996}, {0.99887, 0.11187000000000002, 0.11187000000000002}, 
+ {0.99888, 0.11087999999999998, 0.11087999999999998}, 
+ {0.99889, 0.10988999999999993, 0.10988999999999993}, 
+ {0.9989, 0.1089, 0.1089}, {0.99891, 0.10790999999999995, 
+  0.10790999999999995}, {0.99892, 0.10692000000000002, 0.10692000000000002}, 
+ {0.99893, 0.10592999999999997, 0.10592999999999997}, 
+ {0.99894, 0.10494000000000003, 0.10494000000000003}, 
+ {0.99895, 0.10394999999999999, 0.10394999999999999}, 
+ {0.99896, 0.10295999999999994, 0.10295999999999994}, 
+ {0.99897, 0.10197, 0.10197}, {0.99898, 0.10097999999999996, 
+  0.10097999999999996}, {0.99899, 0.09999000000000002, 0.09999000000000002}, 
+ {0.999, 0.09899999999999998, 0.09899999999999998}, 
+ {0.99901, 0.09800999999999993, 0.09800999999999993}, 
+ {0.99902, 0.09702, 0.09702}, {0.99903, 0.09602999999999995, 
+  0.09602999999999995}, {0.99904, 0.09504000000000001, 0.09504000000000001}, 
+ {0.99905, 0.09404999999999997, 0.09404999999999997}, 
+ {0.99906, 0.09305999999999992, 0.09305999999999992}, 
+ {0.99907, 0.09206999999999999, 0.09206999999999999}, 
+ {0.99908, 0.09107999999999994, 0.09107999999999994}, 
+ {0.99909, 0.09009, 0.09009}, {0.9991, 0.08909999999999996, 
+  0.08909999999999996}, {0.99911, 0.08811000000000002, 0.08811000000000002}, 
+ {0.99912, 0.08711999999999998, 0.08711999999999998}, 
+ {0.99913, 0.08612999999999993, 0.08612999999999993}, 
+ {0.99914, 0.08514, 0.08514}, {0.99915, 0.08414999999999995, 
+  0.08414999999999995}, {0.99916, 0.08316000000000001, 0.08316000000000001}, 
+ {0.99917, 0.08216999999999997, 0.08216999999999997}, 
+ {0.99918, 0.08117999999999992, 0.08117999999999992}, 
+ {0.99919, 0.08018999999999998, 0.08018999999999998}, 
+ {0.9992, 0.07919999999999994, 0.07919999999999994}, 
+ {0.99921, 0.07821, 0.07821}, {0.99922, 0.07721999999999996, 
+  0.07721999999999996}, {0.99923, 0.07622999999999991, 0.07622999999999991}, 
+ {0.99924, 0.07523999999999997, 0.07523999999999997}, 
+ {0.99925, 0.07424999999999993, 0.07424999999999993}, 
+ {0.99926, 0.07325999999999999, 0.07325999999999999}, 
+ {0.99927, 0.07226999999999995, 0.07226999999999995}, 
+ {0.99928, 0.0712799999999999, 0.0712799999999999}, 
+ {0.99929, 0.07028999999999996, 0.07028999999999996}, 
+ {0.9993, 0.06929999999999992, 0.06929999999999992}, 
+ {0.99931, 0.06830999999999998, 0.06830999999999998}, 
+ {0.99932, 0.06731999999999994, 0.06731999999999994}, 
+ {0.99933, 0.06633, 0.06633}, {0.99934, 0.06533999999999995, 
+  0.06533999999999995}, {0.99935, 0.06434999999999991, 0.06434999999999991}, 
+ {0.99936, 0.06335999999999997, 0.06335999999999997}, 
+ {0.99937, 0.062369999999999925, 0.062369999999999925}, 
+ {0.99938, 0.06137999999999999, 0.06137999999999999}, 
+ {0.99939, 0.060389999999999944, 0.060389999999999944}, 
+ {0.9994, 0.0593999999999999, 0.0593999999999999}, 
+ {0.99941, 0.05840999999999996, 0.05840999999999996}, 
+ {0.99942, 0.057419999999999916, 0.057419999999999916}, 
+ {0.99943, 0.05642999999999998, 0.05642999999999998}, 
+ {0.99944, 0.055439999999999934, 0.055439999999999934}, 
+ {0.99945, 0.05444999999999989, 0.05444999999999989}, 
+ {0.99946, 0.05345999999999995, 0.05345999999999995}, 
+ {0.99947, 0.052469999999999906, 0.052469999999999906}, 
+ {0.99948, 0.05147999999999997, 0.05147999999999997}, 
+ {0.99949, 0.050489999999999924, 0.050489999999999924}, 
+ {0.9995, 0.04949999999999999, 0.04949999999999999}, 
+ {0.99951, 0.04850999999999994, 0.04850999999999994}, 
+ {0.99952, 0.047519999999999896, 0.047519999999999896}, 
+ {0.99953, 0.04652999999999996, 0.04652999999999996}, 
+ {0.99954, 0.045539999999999914, 0.045539999999999914}, 
+ {0.99955, 0.04454999999999998, 0.04454999999999998}, 
+ {0.99956, 0.04355999999999993, 0.04355999999999993}, 
+ {0.99957, 0.042569999999999886, 0.042569999999999886}, 
+ {0.99958, 0.04157999999999995, 0.04157999999999995}, 
+ {0.99959, 0.040589999999999904, 0.040589999999999904}, 
+ {0.9996, 0.03960000000000008, 0.03960000000000008}, 
+ {0.99961, 0.03861000000000003, 0.03861000000000003}, 
+ {0.99962, 0.03761999999999999, 0.03761999999999999}, 
+ {0.99963, 0.03663000000000005, 0.03663000000000005}, 
+ {0.99964, 0.035640000000000005, 0.035640000000000005}, 
+ {0.99965, 0.03465000000000007, 0.03465000000000007}, 
+ {0.99966, 0.03366000000000002, 0.03366000000000002}, 
+ {0.99967, 0.03266999999999998, 0.03266999999999998}, 
+ {0.99968, 0.03168000000000004, 0.03168000000000004}, 
+ {0.99969, 0.030689999999999995, 0.030689999999999995}, 
+ {0.9997, 0.02970000000000006, 0.02970000000000006}, 
+ {0.99971, 0.028710000000000013, 0.028710000000000013}, 
+ {0.99972, 0.027720000000000078, 0.027720000000000078}, 
+ {0.99973, 0.02673000000000003, 0.02673000000000003}, 
+ {0.99974, 0.025739999999999985, 0.025739999999999985}, 
+ {0.99975, 0.02475000000000005, 0.02475000000000005}, 
+ {0.99976, 0.023760000000000003, 0.023760000000000003}, 
+ {0.99977, 0.022770000000000068, 0.022770000000000068}, 
+ {0.99978, 0.02178000000000002, 0.02178000000000002}, 
+ {0.99979, 0.020789999999999975, 0.020789999999999975}, 
+ {0.9998, 0.01980000000000004, 0.01980000000000004}, 
+ {0.99981, 0.018809999999999993, 0.018809999999999993}, 
+ {0.99982, 0.017820000000000058, 0.017820000000000058}, 
+ {0.99983, 0.01683000000000001, 0.01683000000000001}, 
+ {0.99984, 0.015839999999999965, 0.015839999999999965}, 
+ {0.99985, 0.01485000000000003, 0.01485000000000003}, 
+ {0.99986, 0.013859999999999983, 0.013859999999999983}, 
+ {0.99987, 0.012870000000000048, 0.012870000000000048}, 
+ {0.99988, 0.011880000000000002, 0.011880000000000002}, 
+ {0.99989, 0.010889999999999955, 0.010889999999999955}, 
+ {0.9999, 0.00990000000000002, 0.00990000000000002}, 
+ {0.99991, 0.008909999999999973, 0.008909999999999973}, 
+ {0.99992, 0.007920000000000038, 0.007920000000000038}, 
+ {0.99993, 0.006929999999999992, 0.006929999999999992}, 
+ {0.99994, 0.005940000000000056, 0.005940000000000056}, 
+ {0.99995, 0.00495000000000001, 0.00495000000000001}, 
+ {0.99996, 0.0039599999999999635, 0.0039599999999999635}, 
+ {0.99997, 0.002970000000000028, 0.002970000000000028}, 
+ {0.99998, 0.0019799999999999818, 0.0019799999999999818}, 
+                                    {0.99999, 0.0009900000000000464, 0.0009900000000000464}, {1., 0., 0.}};
+
+
+
+float palette_white_to_red[1001][3]={{1, 1, 1}, {0.99001, 0.98901, 0.98901}, 
+ {0.99002, 0.98802, 0.98802}, {0.99003, 0.98703, 0.98703}, 
+ {0.99004, 0.98604, 0.98604}, {0.99005, 0.98505, 0.98505}, 
+ {0.9900599999999999, 0.98406, 0.98406}, {0.99007, 0.98307, 0.98307}, 
+ {0.99008, 0.98208, 0.98208}, {0.99009, 0.98109, 0.98109}, 
+ {0.9901, 0.9801, 0.9801}, {0.99011, 0.97911, 0.97911}, 
+ {0.99012, 0.97812, 0.97812}, {0.99013, 0.9771299999999999, 
+  0.9771299999999999}, {0.99014, 0.97614, 0.97614}, 
+ {0.99015, 0.97515, 0.97515}, {0.99016, 0.97416, 0.97416}, 
+ {0.99017, 0.97317, 0.97317}, {0.99018, 0.97218, 0.97218}, 
+ {0.99019, 0.97119, 0.97119}, {0.9902, 0.9702, 0.9702}, 
+ {0.99021, 0.96921, 0.96921}, {0.99022, 0.96822, 0.96822}, 
+ {0.9902299999999999, 0.96723, 0.96723}, {0.99024, 0.96624, 0.96624}, 
+ {0.99025, 0.9652499999999999, 0.9652499999999999}, 
+ {0.99026, 0.96426, 0.96426}, {0.99027, 0.96327, 0.96327}, 
+ {0.9902799999999999, 0.96228, 0.96228}, {0.99029, 0.96129, 0.96129}, 
+ {0.9903, 0.9603, 0.9603}, {0.99031, 0.95931, 0.95931}, 
+ {0.99032, 0.95832, 0.95832}, {0.99033, 0.95733, 0.95733}, 
+ {0.99034, 0.95634, 0.95634}, {0.99035, 0.95535, 0.95535}, 
+ {0.99036, 0.95436, 0.95436}, {0.99037, 0.95337, 0.95337}, 
+ {0.99038, 0.95238, 0.95238}, {0.99039, 0.95139, 0.95139}, 
+ {0.9904, 0.9504, 0.9504}, {0.99041, 0.94941, 0.94941}, 
+ {0.99042, 0.94842, 0.94842}, {0.99043, 0.94743, 0.94743}, 
+ {0.99044, 0.94644, 0.94644}, {0.9904499999999999, 0.94545, 0.94545}, 
+ {0.99046, 0.94446, 0.94446}, {0.99047, 0.94347, 0.94347}, 
+ {0.99048, 0.94248, 0.94248}, {0.99049, 0.9414899999999999, 
+  0.9414899999999999}, {0.9904999999999999, 0.9405, 0.9405}, 
+ {0.99051, 0.93951, 0.93951}, {0.99052, 0.93852, 0.93852}, 
+ {0.99053, 0.93753, 0.93753}, {0.99054, 0.93654, 0.93654}, 
+ {0.99055, 0.93555, 0.93555}, {0.99056, 0.93456, 0.93456}, 
+ {0.99057, 0.93357, 0.93357}, {0.99058, 0.93258, 0.93258}, 
+ {0.99059, 0.93159, 0.93159}, {0.9906, 0.9306, 0.9306}, 
+ {0.99061, 0.92961, 0.92961}, {0.99062, 0.92862, 0.92862}, 
+ {0.99063, 0.92763, 0.92763}, {0.99064, 0.92664, 0.92664}, 
+ {0.99065, 0.92565, 0.92565}, {0.99066, 0.92466, 0.92466}, 
+ {0.9906699999999999, 0.92367, 0.92367}, {0.99068, 0.92268, 0.92268}, 
+ {0.99069, 0.92169, 0.92169}, {0.9907, 0.9207, 0.9207}, 
+ {0.99071, 0.91971, 0.91971}, {0.99072, 0.91872, 0.91872}, 
+ {0.99073, 0.9177299999999999, 0.9177299999999999}, 
+ {0.99074, 0.91674, 0.91674}, {0.99075, 0.91575, 0.91575}, 
+ {0.99076, 0.91476, 0.91476}, {0.99077, 0.91377, 0.91377}, 
+ {0.99078, 0.91278, 0.91278}, {0.99079, 0.91179, 0.91179}, 
+ {0.9908, 0.9107999999999999, 0.9107999999999999}, 
+ {0.99081, 0.90981, 0.90981}, {0.99082, 0.90882, 0.90882}, 
+ {0.99083, 0.90783, 0.90783}, {0.9908399999999999, 0.90684, 0.90684}, 
+ {0.99085, 0.90585, 0.90585}, {0.99086, 0.90486, 0.90486}, 
+ {0.99087, 0.90387, 0.90387}, {0.99088, 0.90288, 0.90288}, 
+ {0.9908899999999999, 0.90189, 0.90189}, {0.9909, 0.9009, 0.9009}, 
+ {0.99091, 0.89991, 0.89991}, {0.99092, 0.8989199999999999, 
+  0.8989199999999999}, {0.99093, 0.89793, 0.89793}, 
+ {0.99094, 0.89694, 0.89694}, {0.99095, 0.89595, 0.89595}, 
+ {0.99096, 0.89496, 0.89496}, {0.99097, 0.8939699999999999, 
+  0.8939699999999999}, {0.99098, 0.89298, 0.89298}, 
+ {0.99099, 0.89199, 0.89199}, {0.991, 0.891, 0.891}, 
+ {0.99101, 0.89001, 0.89001}, {0.99102, 0.88902, 0.88902}, 
+ {0.99103, 0.88803, 0.88803}, {0.99104, 0.8870399999999999, 
+  0.8870399999999999}, {0.99105, 0.88605, 0.88605}, 
+ {0.9910599999999999, 0.88506, 0.88506}, {0.99107, 0.88407, 0.88407}, 
+ {0.99108, 0.88308, 0.88308}, {0.99109, 0.88209, 0.88209}, 
+ {0.9911, 0.8811, 0.8811}, {0.99111, 0.88011, 0.88011}, 
+ {0.99112, 0.87912, 0.87912}, {0.99113, 0.87813, 0.87813}, 
+ {0.99114, 0.87714, 0.87714}, {0.99115, 0.87615, 0.87615}, 
+ {0.99116, 0.8751599999999999, 0.8751599999999999}, 
+ {0.99117, 0.87417, 0.87417}, {0.99118, 0.87318, 0.87318}, 
+ {0.99119, 0.87219, 0.87219}, {0.9912, 0.8712, 0.8712}, 
+ {0.99121, 0.87021, 0.87021}, {0.99122, 0.86922, 0.86922}, 
+ {0.9912299999999999, 0.86823, 0.86823}, {0.99124, 0.86724, 0.86724}, 
+ {0.99125, 0.86625, 0.86625}, {0.99126, 0.86526, 0.86526}, 
+ {0.99127, 0.86427, 0.86427}, {0.9912799999999999, 0.86328, 0.86328}, 
+ {0.99129, 0.86229, 0.86229}, {0.9913, 0.8613, 0.8613}, 
+ {0.99131, 0.86031, 0.86031}, {0.99132, 0.85932, 0.85932}, 
+ {0.99133, 0.85833, 0.85833}, {0.99134, 0.85734, 0.85734}, 
+ {0.99135, 0.85635, 0.85635}, {0.99136, 0.85536, 0.85536}, 
+ {0.99137, 0.85437, 0.85437}, {0.99138, 0.85338, 0.85338}, 
+ {0.99139, 0.85239, 0.85239}, {0.9914, 0.8513999999999999, 
+  0.8513999999999999}, {0.99141, 0.85041, 0.85041}, 
+ {0.99142, 0.84942, 0.84942}, {0.99143, 0.84843, 0.84843}, 
+ {0.99144, 0.84744, 0.84744}, {0.9914499999999999, 0.84645, 0.84645}, 
+ {0.99146, 0.84546, 0.84546}, {0.99147, 0.84447, 0.84447}, 
+ {0.99148, 0.84348, 0.84348}, {0.99149, 0.84249, 0.84249}, 
+ {0.9915, 0.8415, 0.8415}, {0.99151, 0.84051, 0.84051}, 
+ {0.99152, 0.83952, 0.83952}, {0.99153, 0.83853, 0.83853}, 
+ {0.99154, 0.83754, 0.83754}, {0.99155, 0.83655, 0.83655}, 
+ {0.99156, 0.83556, 0.83556}, {0.99157, 0.83457, 0.83457}, 
+ {0.99158, 0.83358, 0.83358}, {0.99159, 0.8325899999999999, 
+  0.8325899999999999}, {0.9916, 0.8316, 0.8316}, {0.99161, 0.83061, 0.83061}, 
+ {0.99162, 0.82962, 0.82962}, {0.99163, 0.82863, 0.82863}, 
+ {0.99164, 0.8276399999999999, 0.8276399999999999}, 
+ {0.99165, 0.82665, 0.82665}, {0.99166, 0.82566, 0.82566}, 
+ {0.9916699999999999, 0.82467, 0.82467}, {0.99168, 0.82368, 0.82368}, 
+ {0.99169, 0.8226899999999999, 0.8226899999999999}, {0.9917, 0.8217, 0.8217}, 
+ {0.99171, 0.8207099999999999, 0.8207099999999999}, 
+ {0.99172, 0.81972, 0.81972}, {0.99173, 0.81873, 0.81873}, 
+ {0.99174, 0.8177399999999999, 0.8177399999999999}, 
+ {0.99175, 0.81675, 0.81675}, {0.99176, 0.81576, 0.81576}, 
+ {0.99177, 0.81477, 0.81477}, {0.99178, 0.81378, 0.81378}, 
+ {0.99179, 0.81279, 0.81279}, {0.9918, 0.8118, 0.8118}, 
+ {0.99181, 0.81081, 0.81081}, {0.99182, 0.80982, 0.80982}, 
+ {0.99183, 0.8088299999999999, 0.8088299999999999}, 
+ {0.9918399999999999, 0.80784, 0.80784}, {0.99185, 0.80685, 0.80685}, 
+ {0.99186, 0.80586, 0.80586}, {0.99187, 0.80487, 0.80487}, 
+ {0.99188, 0.8038799999999999, 0.8038799999999999}, 
+ {0.9918899999999999, 0.80289, 0.80289}, {0.9919, 0.8019000000000001, 
+  0.8019000000000001}, {0.99191, 0.80091, 0.80091}, 
+ {0.99192, 0.79992, 0.79992}, {0.99193, 0.79893, 0.79893}, 
+ {0.99194, 0.79794, 0.79794}, {0.99195, 0.79695, 0.79695}, 
+ {0.99196, 0.79596, 0.79596}, {0.99197, 0.79497, 0.79497}, 
+ {0.99198, 0.79398, 0.79398}, {0.99199, 0.79299, 0.79299}, 
+ {0.992, 0.792, 0.792}, {0.99201, 0.79101, 0.79101}, 
+ {0.99202, 0.79002, 0.79002}, {0.99203, 0.78903, 0.78903}, 
+ {0.99204, 0.78804, 0.78804}, {0.99205, 0.78705, 0.78705}, 
+ {0.9920599999999999, 0.78606, 0.78606}, {0.99207, 0.7850699999999999, 
+  0.7850699999999999}, {0.99208, 0.78408, 0.78408}, 
+ {0.99209, 0.7830900000000001, 0.7830900000000001}, {0.9921, 0.7821, 0.7821}, 
+ {0.99211, 0.78111, 0.78111}, {0.99212, 0.78012, 0.78012}, 
+ {0.99213, 0.77913, 0.77913}, {0.99214, 0.77814, 0.77814}, 
+ {0.99215, 0.77715, 0.77715}, {0.99216, 0.77616, 0.77616}, 
+ {0.99217, 0.77517, 0.77517}, {0.99218, 0.77418, 0.77418}, 
+ {0.99219, 0.77319, 0.77319}, {0.9922, 0.7722, 0.7722}, 
+ {0.99221, 0.77121, 0.77121}, {0.99222, 0.77022, 0.77022}, 
+ {0.99223, 0.76923, 0.76923}, {0.99224, 0.76824, 0.76824}, 
+ {0.99225, 0.76725, 0.76725}, {0.99226, 0.7662599999999999, 
+  0.7662599999999999}, {0.99227, 0.76527, 0.76527}, 
+ {0.9922799999999999, 0.76428, 0.76428}, {0.99229, 0.76329, 0.76329}, 
+ {0.9923, 0.7623, 0.7623}, {0.99231, 0.7613099999999999, 0.7613099999999999}, 
+ {0.99232, 0.76032, 0.76032}, {0.99233, 0.75933, 0.75933}, 
+ {0.99234, 0.75834, 0.75834}, {0.99235, 0.75735, 0.75735}, 
+ {0.99236, 0.7563599999999999, 0.7563599999999999}, 
+ {0.99237, 0.75537, 0.75537}, {0.99238, 0.7543799999999999, 
+  0.7543799999999999}, {0.99239, 0.75339, 0.75339}, {0.9924, 0.7524, 0.7524}, 
+ {0.99241, 0.75141, 0.75141}, {0.99242, 0.75042, 0.75042}, 
+ {0.99243, 0.74943, 0.74943}, {0.99244, 0.74844, 0.74844}, 
+ {0.9924499999999999, 0.74745, 0.74745}, {0.99246, 0.74646, 0.74646}, 
+ {0.99247, 0.74547, 0.74547}, {0.99248, 0.74448, 0.74448}, 
+ {0.99249, 0.74349, 0.74349}, {0.9924999999999999, 0.7424999999999999, 
+  0.7424999999999999}, {0.99251, 0.74151, 0.74151}, 
+ {0.99252, 0.74052, 0.74052}, {0.99253, 0.73953, 0.73953}, 
+ {0.99254, 0.73854, 0.73854}, {0.99255, 0.7375499999999999, 
+  0.7375499999999999}, {0.99256, 0.73656, 0.73656}, 
+ {0.99257, 0.7355700000000001, 0.7355700000000001}, 
+ {0.99258, 0.73458, 0.73458}, {0.99259, 0.73359, 0.73359}, 
+ {0.9926, 0.7325999999999999, 0.7325999999999999}, 
+ {0.99261, 0.73161, 0.73161}, {0.99262, 0.73062, 0.73062}, 
+ {0.99263, 0.72963, 0.72963}, {0.99264, 0.72864, 0.72864}, 
+ {0.99265, 0.7276499999999999, 0.7276499999999999}, 
+ {0.99266, 0.72666, 0.72666}, {0.9926699999999999, 0.72567, 0.72567}, 
+ {0.99268, 0.72468, 0.72468}, {0.99269, 0.7236899999999999, 
+  0.7236899999999999}, {0.9927, 0.7226999999999999, 0.7226999999999999}, 
+ {0.99271, 0.72171, 0.72171}, {0.99272, 0.72072, 0.72072}, 
+ {0.99273, 0.71973, 0.71973}, {0.99274, 0.7187399999999999, 
+  0.7187399999999999}, {0.99275, 0.71775, 0.71775}, 
+ {0.99276, 0.71676, 0.71676}, {0.99277, 0.71577, 0.71577}, 
+ {0.99278, 0.71478, 0.71478}, {0.99279, 0.7137899999999999, 
+  0.7137899999999999}, {0.9928, 0.7128, 0.7128}, 
+ {0.99281, 0.7118099999999999, 0.7118099999999999}, 
+ {0.99282, 0.71082, 0.71082}, {0.99283, 0.70983, 0.70983}, 
+ {0.99284, 0.7088399999999999, 0.7088399999999999}, 
+ {0.99285, 0.70785, 0.70785}, {0.99286, 0.70686, 0.70686}, 
+ {0.99287, 0.70587, 0.70587}, {0.99288, 0.70488, 0.70488}, 
+ {0.9928899999999999, 0.70389, 0.70389}, {0.9929, 0.7029000000000001, 
+  0.7029000000000001}, {0.99291, 0.70191, 0.70191}, 
+ {0.99292, 0.70092, 0.70092}, {0.99293, 0.6999299999999999, 
+  0.6999299999999999}, {0.99294, 0.69894, 0.69894}, 
+ {0.99295, 0.6979500000000001, 0.6979500000000001}, 
+ {0.99296, 0.69696, 0.69696}, {0.99297, 0.69597, 0.69597}, 
+ {0.99298, 0.6949799999999999, 0.6949799999999999}, 
+ {0.99299, 0.69399, 0.69399}, {0.993, 0.6930000000000001, 
+  0.6930000000000001}, {0.99301, 0.69201, 0.69201}, 
+ {0.99302, 0.69102, 0.69102}, {0.99303, 0.6900299999999999, 
+  0.6900299999999999}, {0.99304, 0.68904, 0.68904}, 
+ {0.99305, 0.68805, 0.68805}, {0.9930599999999999, 0.68706, 0.68706}, 
+ {0.99307, 0.68607, 0.68607}, {0.99308, 0.68508, 0.68508}, 
+ {0.99309, 0.68409, 0.68409}, {0.9931, 0.6831, 0.6831}, 
+ {0.99311, 0.68211, 0.68211}, {0.99312, 0.68112, 0.68112}, 
+ {0.99313, 0.68013, 0.68013}, {0.99314, 0.67914, 0.67914}, 
+ {0.99315, 0.67815, 0.67815}, {0.99316, 0.67716, 0.67716}, 
+ {0.99317, 0.6761699999999999, 0.6761699999999999}, 
+ {0.99318, 0.67518, 0.67518}, {0.99319, 0.6741900000000001, 
+  0.6741900000000001}, {0.9932, 0.6732, 0.6732}, {0.99321, 0.67221, 0.67221}, 
+ {0.99322, 0.6712199999999999, 0.6712199999999999}, 
+ {0.99323, 0.67023, 0.67023}, {0.99324, 0.6692400000000001, 
+  0.6692400000000001}, {0.99325, 0.66825, 0.66825}, 
+ {0.99326, 0.66726, 0.66726}, {0.99327, 0.6662699999999999, 
+  0.6662699999999999}, {0.9932799999999999, 0.66528, 0.66528}, 
+ {0.99329, 0.66429, 0.66429}, {0.9933, 0.6633, 0.6633}, 
+ {0.99331, 0.66231, 0.66231}, {0.99332, 0.6613199999999999, 
+  0.6613199999999999}, {0.99333, 0.66033, 0.66033}, 
+ {0.99334, 0.65934, 0.65934}, {0.99335, 0.65835, 0.65835}, 
+ {0.99336, 0.6573599999999999, 0.6573599999999999}, 
+ {0.99337, 0.6563699999999999, 0.6563699999999999}, 
+ {0.99338, 0.65538, 0.65538}, {0.99339, 0.65439, 0.65439}, 
+ {0.9934, 0.6534, 0.6534}, {0.99341, 0.6524099999999999, 0.6524099999999999}, 
+ {0.99342, 0.6514199999999999, 0.6514199999999999}, 
+ {0.99343, 0.65043, 0.65043}, {0.99344, 0.64944, 0.64944}, 
+ {0.9934499999999999, 0.64845, 0.64845}, {0.99346, 0.6474599999999999, 
+  0.6474599999999999}, {0.99347, 0.64647, 0.64647}, 
+ {0.99348, 0.6454799999999999, 0.6454799999999999}, 
+ {0.99349, 0.64449, 0.64449}, {0.9935, 0.6435, 0.6435}, 
+ {0.99351, 0.6425099999999999, 0.6425099999999999}, 
+ {0.99352, 0.6415200000000001, 0.6415200000000001}, 
+ {0.99353, 0.64053, 0.64053}, {0.99354, 0.63954, 0.63954}, 
+ {0.99355, 0.63855, 0.63855}, {0.99356, 0.63756, 0.63756}, 
+ {0.99357, 0.6365700000000001, 0.6365700000000001}, 
+ {0.99358, 0.63558, 0.63558}, {0.99359, 0.63459, 0.63459}, 
+ {0.9936, 0.6335999999999999, 0.6335999999999999}, 
+ {0.99361, 0.63261, 0.63261}, {0.99362, 0.6316200000000001, 
+  0.6316200000000001}, {0.99363, 0.63063, 0.63063}, 
+ {0.99364, 0.62964, 0.62964}, {0.99365, 0.6286499999999999, 
+  0.6286499999999999}, {0.99366, 0.62766, 0.62766}, 
+ {0.9936699999999999, 0.6266700000000001, 0.6266700000000001}, 
+ {0.99368, 0.62568, 0.62568}, {0.99369, 0.62469, 0.62469}, 
+ {0.9937, 0.6236999999999999, 0.6236999999999999}, 
+ {0.99371, 0.62271, 0.62271}, {0.99372, 0.62172, 0.62172}, 
+ {0.99373, 0.62073, 0.62073}, {0.99374, 0.61974, 0.61974}, 
+ {0.99375, 0.61875, 0.61875}, {0.99376, 0.61776, 0.61776}, 
+ {0.99377, 0.61677, 0.61677}, {0.99378, 0.61578, 0.61578}, 
+ {0.99379, 0.61479, 0.61479}, {0.9938, 0.6138, 0.6138}, 
+ {0.99381, 0.61281, 0.61281}, {0.99382, 0.61182, 0.61182}, 
+ {0.99383, 0.61083, 0.61083}, {0.99384, 0.6098399999999999, 
+  0.6098399999999999}, {0.99385, 0.60885, 0.60885}, 
+ {0.99386, 0.6078600000000001, 0.6078600000000001}, 
+ {0.99387, 0.60687, 0.60687}, {0.99388, 0.60588, 0.60588}, 
+ {0.9938899999999999, 0.6048899999999999, 0.6048899999999999}, 
+ {0.9939, 0.6039, 0.6039}, {0.99391, 0.6029100000000001, 0.6029100000000001}, 
+ {0.99392, 0.60192, 0.60192}, {0.99393, 0.60093, 0.60093}, 
+ {0.99394, 0.5999399999999999, 0.5999399999999999}, 
+ {0.99395, 0.59895, 0.59895}, {0.99396, 0.59796, 0.59796}, 
+ {0.99397, 0.59697, 0.59697}, {0.99398, 0.59598, 0.59598}, 
+ {0.99399, 0.5949899999999999, 0.5949899999999999}, {0.994, 0.594, 0.594}, 
+ {0.99401, 0.59301, 0.59301}, {0.99402, 0.59202, 0.59202}, 
+ {0.99403, 0.5910299999999999, 0.5910299999999999}, 
+ {0.99404, 0.5900399999999999, 0.5900399999999999}, 
+ {0.99405, 0.58905, 0.58905}, {0.9940599999999999, 0.58806, 0.58806}, 
+ {0.99407, 0.58707, 0.58707}, {0.99408, 0.5860799999999999, 
+  0.5860799999999999}, {0.99409, 0.5850899999999999, 0.5850899999999999}, 
+ {0.9941, 0.5841, 0.5841}, {0.99411, 0.58311, 0.58311}, 
+ {0.99412, 0.58212, 0.58212}, {0.99413, 0.5811299999999999, 
+  0.5811299999999999}, {0.99414, 0.5801399999999999, 0.5801399999999999}, 
+ {0.99415, 0.5791499999999999, 0.5791499999999999}, 
+ {0.99416, 0.57816, 0.57816}, {0.99417, 0.57717, 0.57717}, 
+ {0.99418, 0.57618, 0.57618}, {0.99419, 0.5751900000000001, 
+  0.5751900000000001}, {0.9942, 0.5742, 0.5742}, {0.99421, 0.57321, 0.57321}, 
+ {0.99422, 0.57222, 0.57222}, {0.99423, 0.57123, 0.57123}, 
+ {0.99424, 0.5702400000000001, 0.5702400000000001}, 
+ {0.99425, 0.56925, 0.56925}, {0.99426, 0.56826, 0.56826}, 
+ {0.99427, 0.5672699999999999, 0.5672699999999999}, 
+ {0.9942799999999999, 0.56628, 0.56628}, {0.99429, 0.5652900000000001, 
+  0.5652900000000001}, {0.9943, 0.5643, 0.5643}, {0.99431, 0.56331, 0.56331}, 
+ {0.99432, 0.5623199999999999, 0.5623199999999999}, 
+ {0.99433, 0.56133, 0.56133}, {0.99434, 0.5603400000000001, 
+  0.5603400000000001}, {0.99435, 0.55935, 0.55935}, 
+ {0.99436, 0.55836, 0.55836}, {0.99437, 0.5573699999999999, 
+  0.5573699999999999}, {0.99438, 0.55638, 0.55638}, 
+ {0.99439, 0.55539, 0.55539}, {0.9944, 0.5544, 0.5544}, 
+ {0.99441, 0.55341, 0.55341}, {0.99442, 0.5524199999999999, 
+  0.5524199999999999}, {0.99443, 0.55143, 0.55143}, 
+ {0.99444, 0.55044, 0.55044}, {0.99445, 0.54945, 0.54945}, 
+ {0.99446, 0.54846, 0.54846}, {0.99447, 0.54747, 0.54747}, 
+ {0.99448, 0.54648, 0.54648}, {0.99449, 0.54549, 0.54549}, 
+ {0.9944999999999999, 0.5445, 0.5445}, {0.99451, 0.5435099999999999, 
+  0.5435099999999999}, {0.99452, 0.54252, 0.54252}, 
+ {0.99453, 0.54153, 0.54153}, {0.99454, 0.54054, 0.54054}, 
+ {0.99455, 0.53955, 0.53955}, {0.99456, 0.5385599999999999, 
+  0.5385599999999999}, {0.99457, 0.53757, 0.53757}, 
+ {0.99458, 0.5365800000000001, 0.5365800000000001}, 
+ {0.99459, 0.53559, 0.53559}, {0.9946, 0.5346, 0.5346}, 
+ {0.99461, 0.5336099999999999, 0.5336099999999999}, 
+ {0.99462, 0.53262, 0.53262}, {0.99463, 0.53163, 0.53163}, 
+ {0.99464, 0.53064, 0.53064}, {0.99465, 0.52965, 0.52965}, 
+ {0.99466, 0.5286599999999999, 0.5286599999999999}, 
+ {0.9946699999999999, 0.52767, 0.52767}, {0.99468, 0.52668, 0.52668}, 
+ {0.99469, 0.52569, 0.52569}, {0.9947, 0.5246999999999999, 
+  0.5246999999999999}, {0.99471, 0.5237099999999999, 0.5237099999999999}, 
+ {0.99472, 0.52272, 0.52272}, {0.99473, 0.52173, 0.52173}, 
+ {0.99474, 0.52074, 0.52074}, {0.99475, 0.5197499999999999, 
+  0.5197499999999999}, {0.99476, 0.5187599999999999, 0.5187599999999999}, 
+ {0.99477, 0.51777, 0.51777}, {0.99478, 0.51678, 0.51678}, 
+ {0.99479, 0.51579, 0.51579}, {0.9948, 0.5148, 0.5148}, 
+ {0.99481, 0.51381, 0.51381}, {0.99482, 0.51282, 0.51282}, 
+ {0.99483, 0.51183, 0.51183}, {0.99484, 0.51084, 0.51084}, 
+ {0.99485, 0.50985, 0.50985}, {0.99486, 0.5088600000000001, 
+  0.5088600000000001}, {0.99487, 0.50787, 0.50787}, 
+ {0.99488, 0.50688, 0.50688}, {0.9948899999999999, 0.50589, 0.50589}, 
+ {0.9949, 0.5049, 0.5049}, {0.99491, 0.5039100000000001, 0.5039100000000001}, 
+ {0.99492, 0.50292, 0.50292}, {0.99493, 0.50193, 0.50193}, 
+ {0.99494, 0.5009399999999999, 0.5009399999999999}, 
+ {0.99495, 0.49995, 0.49995}, {0.99496, 0.49896, 0.49896}, 
+ {0.99497, 0.49797, 0.49797}, {0.99498, 0.49698, 0.49698}, 
+ {0.99499, 0.49599, 0.49599}, {0.995, 0.495, 0.495}, 
+ {0.99501, 0.49401, 0.49401}, {0.99502, 0.49302, 0.49302}, 
+ {0.99503, 0.49202999999999997, 0.49202999999999997}, 
+ {0.99504, 0.49104, 0.49104}, {0.99505, 0.49005, 0.49005}, 
+ {0.99506, 0.48905999999999994, 0.48905999999999994}, 
+ {0.99507, 0.48807, 0.48807}, {0.99508, 0.48707999999999996, 
+  0.48707999999999996}, {0.99509, 0.48609, 0.48609}, 
+ {0.9951, 0.4851, 0.4851}, {0.99511, 0.48411000000000004, 
+  0.48411000000000004}, {0.99512, 0.48312, 0.48312}, 
+ {0.99513, 0.48212999999999995, 0.48212999999999995}, 
+ {0.99514, 0.48114, 0.48114}, {0.99515, 0.48014999999999997, 
+  0.48014999999999997}, {0.99516, 0.47916000000000003, 0.47916000000000003}, 
+ {0.99517, 0.47817, 0.47817}, {0.99518, 0.47717999999999994, 
+  0.47717999999999994}, {0.99519, 0.47619, 0.47619}, 
+ {0.9952, 0.47519999999999996, 0.47519999999999996}, 
+ {0.99521, 0.47421, 0.47421}, {0.99522, 0.47322, 0.47322}, 
+ {0.99523, 0.4722299999999999, 0.4722299999999999}, 
+ {0.99524, 0.47124, 0.47124}, {0.99525, 0.47024999999999995, 
+  0.47024999999999995}, {0.99526, 0.46926, 0.46926}, 
+ {0.99527, 0.46826999999999996, 0.46826999999999996}, 
+ {0.9952799999999999, 0.4672799999999999, 0.4672799999999999}, 
+ {0.99529, 0.46629, 0.46629}, {0.9953, 0.46529999999999994, 
+  0.46529999999999994}, {0.99531, 0.46431, 0.46431}, 
+ {0.99532, 0.46331999999999995, 0.46331999999999995}, 
+ {0.99533, 0.46233, 0.46233}, {0.99534, 0.46134, 0.46134}, 
+ {0.99535, 0.4603499999999999, 0.4603499999999999}, 
+ {0.99536, 0.45936, 0.45936}, {0.99537, 0.45836999999999994, 
+  0.45836999999999994}, {0.99538, 0.45738, 0.45738}, 
+ {0.99539, 0.45638999999999996, 0.45638999999999996}, 
+ {0.9954, 0.4553999999999999, 0.4553999999999999}, 
+ {0.99541, 0.45441, 0.45441}, {0.99542, 0.45341999999999993, 
+  0.45341999999999993}, {0.99543, 0.45243, 0.45243}, 
+ {0.99544, 0.45143999999999995, 0.45143999999999995}, 
+ {0.99545, 0.4504499999999999, 0.4504499999999999}, 
+ {0.99546, 0.44945999999999997, 0.44945999999999997}, 
+ {0.99547, 0.4484699999999999, 0.4484699999999999}, 
+ {0.99548, 0.44748, 0.44748}, {0.99549, 0.44648999999999994, 
+  0.44648999999999994}, {0.9955, 0.4455, 0.4455}, 
+ {0.99551, 0.44450999999999996, 0.44450999999999996}, 
+ {0.99552, 0.4435199999999999, 0.4435199999999999}, 
+ {0.99553, 0.44253, 0.44253}, {0.99554, 0.44153999999999993, 
+  0.44153999999999993}, {0.99555, 0.44055, 0.44055}, 
+ {0.99556, 0.43955999999999995, 0.43955999999999995}, 
+ {0.99557, 0.4385699999999999, 0.4385699999999999}, 
+ {0.99558, 0.43757999999999997, 0.43757999999999997}, 
+ {0.99559, 0.4365899999999999, 0.4365899999999999}, {0.9956, 0.4356, 0.4356}, 
+ {0.99561, 0.43460999999999994, 0.43460999999999994}, 
+ {0.99562, 0.4336199999999999, 0.4336199999999999}, 
+ {0.99563, 0.43262999999999996, 0.43262999999999996}, 
+ {0.99564, 0.4316399999999999, 0.4316399999999999}, 
+ {0.99565, 0.43065, 0.43065}, {0.99566, 0.42965999999999993, 
+  0.42965999999999993}, {0.9956699999999999, 0.4286699999999999, 
+  0.4286699999999999}, {0.99568, 0.42767999999999995, 0.42767999999999995}, 
+ {0.99569, 0.4266899999999999, 0.4266899999999999}, 
+ {0.9957, 0.42569999999999997, 0.42569999999999997}, 
+ {0.99571, 0.4247099999999999, 0.4247099999999999}, 
+ {0.99572, 0.42372, 0.42372}, {0.99573, 0.42272999999999994, 
+  0.42272999999999994}, {0.99574, 0.4217399999999999, 0.4217399999999999}, 
+ {0.99575, 0.42074999999999996, 0.42074999999999996}, 
+ {0.99576, 0.4197599999999999, 0.4197599999999999}, 
+ {0.99577, 0.4187700000000001, 0.4187700000000001}, 
+ {0.99578, 0.41778000000000004, 0.41778000000000004}, 
+ {0.99579, 0.41679, 0.41679}, {0.9958, 0.41580000000000006, 
+  0.41580000000000006}, {0.99581, 0.41481, 0.41481}, 
+ {0.99582, 0.4138200000000001, 0.4138200000000001}, 
+ {0.99583, 0.41283000000000003, 0.41283000000000003}, 
+ {0.99584, 0.41184, 0.41184}, {0.99585, 0.41085000000000005, 
+  0.41085000000000005}, {0.99586, 0.40986, 0.40986}, 
+ {0.99587, 0.40887000000000007, 0.40887000000000007}, 
+ {0.99588, 0.40788, 0.40788}, {0.9958899999999999, 0.40689, 0.40689}, 
+ {0.9959, 0.40590000000000004, 0.40590000000000004}, 
+ {0.99591, 0.40491, 0.40491}, {0.99592, 0.40392000000000006, 
+  0.40392000000000006}, {0.99593, 0.40293, 0.40293}, 
+ {0.99594, 0.4019400000000001, 0.4019400000000001}, 
+ {0.99595, 0.40095000000000003, 0.40095000000000003}, 
+ {0.99596, 0.39996, 0.39996}, {0.99597, 0.39897000000000005, 
+  0.39897000000000005}, {0.99598, 0.39798, 0.39798}, 
+ {0.99599, 0.39699000000000007, 0.39699000000000007}, {0.996, 0.396, 0.396}, 
+ {0.99601, 0.39501, 0.39501}, {0.99602, 0.39402000000000004, 
+  0.39402000000000004}, {0.99603, 0.39303, 0.39303}, 
+ {0.99604, 0.39204000000000006, 0.39204000000000006}, 
+ {0.99605, 0.39105, 0.39105}, {0.99606, 0.39005999999999996, 
+  0.39005999999999996}, {0.99607, 0.38907, 0.38907}, 
+ {0.99608, 0.38808, 0.38808}, {0.99609, 0.38709000000000005, 
+  0.38709000000000005}, {0.9961, 0.3861, 0.3861}, 
+ {0.99611, 0.38511000000000006, 0.38511000000000006}, 
+ {0.99612, 0.38412, 0.38412}, {0.99613, 0.38312999999999997, 
+  0.38312999999999997}, {0.99614, 0.38214000000000004, 0.38214000000000004}, 
+ {0.99615, 0.38115, 0.38115}, {0.99616, 0.38016000000000005, 
+  0.38016000000000005}, {0.99617, 0.37917, 0.37917}, 
+ {0.99618, 0.37817999999999996, 0.37817999999999996}, 
+ {0.99619, 0.37719, 0.37719}, {0.9962, 0.3762, 0.3762}, 
+ {0.99621, 0.37521000000000004, 0.37521000000000004}, 
+ {0.99622, 0.37422, 0.37422}, {0.99623, 0.37322999999999995, 
+  0.37322999999999995}, {0.99624, 0.37224, 0.37224}, 
+ {0.99625, 0.37124999999999997, 0.37124999999999997}, 
+ {0.99626, 0.37026000000000003, 0.37026000000000003}, 
+ {0.99627, 0.36927, 0.36927}, {0.9962799999999999, 0.36827999999999994, 
+  0.36827999999999994}, {0.99629, 0.36729, 0.36729}, 
+ {0.9963, 0.36629999999999996, 0.36629999999999996}, 
+ {0.99631, 0.36531, 0.36531}, {0.99632, 0.36432, 0.36432}, 
+ {0.99633, 0.36333000000000004, 0.36333000000000004}, 
+ {0.99634, 0.36234, 0.36234}, {0.99635, 0.36134999999999995, 
+  0.36134999999999995}, {0.99636, 0.36036, 0.36036}, 
+ {0.99637, 0.35936999999999997, 0.35936999999999997}, 
+ {0.99638, 0.35838000000000003, 0.35838000000000003}, 
+ {0.99639, 0.35739, 0.35739}, {0.9964, 0.35639999999999994, 
+  0.35639999999999994}, {0.99641, 0.35541, 0.35541}, 
+ {0.99642, 0.35441999999999996, 0.35441999999999996}, 
+ {0.99643, 0.35343, 0.35343}, {0.99644, 0.35244, 0.35244}, 
+ {0.99645, 0.35144999999999993, 0.35144999999999993}, 
+ {0.99646, 0.35046, 0.35046}, {0.99647, 0.34946999999999995, 
+  0.34946999999999995}, {0.99648, 0.34848, 0.34848}, 
+ {0.99649, 0.34748999999999997, 0.34748999999999997}, 
+ {0.9964999999999999, 0.34650000000000003, 0.34650000000000003}, 
+ {0.99651, 0.34551, 0.34551}, {0.99652, 0.34451999999999994, 
+  0.34451999999999994}, {0.99653, 0.34353, 0.34353}, 
+ {0.99654, 0.34253999999999996, 0.34253999999999996}, 
+ {0.99655, 0.34155, 0.34155}, {0.99656, 0.34056, 0.34056}, 
+ {0.99657, 0.3395699999999999, 0.3395699999999999}, 
+ {0.99658, 0.33858, 0.33858}, {0.99659, 0.33758999999999995, 
+  0.33758999999999995}, {0.9966, 0.3366, 0.3366}, 
+ {0.99661, 0.33560999999999996, 0.33560999999999996}, 
+ {0.99662, 0.3346199999999999, 0.3346199999999999}, 
+ {0.99663, 0.33363, 0.33363}, {0.99664, 0.33263999999999994, 
+  0.33263999999999994}, {0.99665, 0.33165, 0.33165}, 
+ {0.99666, 0.33065999999999995, 0.33065999999999995}, 
+ {0.99667, 0.3296699999999999, 0.3296699999999999}, 
+ {0.99668, 0.32867999999999997, 0.32867999999999997}, 
+ {0.99669, 0.3276899999999999, 0.3276899999999999}, {0.9967, 0.3267, 0.3267}, 
+ {0.99671, 0.32570999999999994, 0.32570999999999994}, 
+ {0.99672, 0.32472, 0.32472}, {0.99673, 0.32372999999999996, 
+  0.32372999999999996}, {0.99674, 0.3227399999999999, 0.3227399999999999}, 
+ {0.99675, 0.32175, 0.32175}, {0.99676, 0.32075999999999993, 
+  0.32075999999999993}, {0.99677, 0.31977, 0.31977}, 
+ {0.99678, 0.31877999999999995, 0.31877999999999995}, 
+ {0.99679, 0.3177899999999999, 0.3177899999999999}, 
+ {0.9968, 0.31679999999999997, 0.31679999999999997}, 
+ {0.99681, 0.3158099999999999, 0.3158099999999999}, 
+ {0.99682, 0.31482, 0.31482}, {0.99683, 0.31382999999999994, 
+  0.31382999999999994}, {0.99684, 0.3128399999999999, 0.3128399999999999}, 
+ {0.99685, 0.31184999999999996, 0.31184999999999996}, 
+ {0.99686, 0.3108599999999999, 0.3108599999999999}, 
+ {0.99687, 0.30987, 0.30987}, {0.99688, 0.30887999999999993, 
+  0.30887999999999993}, {0.9968899999999999, 0.3078899999999999, 
+  0.3078899999999999}, {0.9969, 0.30689999999999995, 0.30689999999999995}, 
+ {0.99691, 0.3059099999999999, 0.3059099999999999}, 
+ {0.99692, 0.30491999999999997, 0.30491999999999997}, 
+ {0.99693, 0.3039299999999999, 0.3039299999999999}, 
+ {0.99694, 0.30294, 0.30294}, {0.99695, 0.30194999999999994, 
+  0.30194999999999994}, {0.99696, 0.3009599999999999, 0.3009599999999999}, 
+ {0.99697, 0.29996999999999996, 0.29996999999999996}, 
+ {0.99698, 0.2989799999999999, 0.2989799999999999}, 
+ {0.99699, 0.29799, 0.29799}, {0.997, 0.29699999999999993, 
+  0.29699999999999993}, {0.99701, 0.2960099999999999, 0.2960099999999999}, 
+ {0.99702, 0.29501999999999995, 0.29501999999999995}, 
+ {0.99703, 0.2940299999999999, 0.2940299999999999}, 
+ {0.99704, 0.2930400000000001, 0.2930400000000001}, 
+ {0.99705, 0.29205000000000003, 0.29205000000000003}, 
+ {0.99706, 0.29106, 0.29106}, {0.99707, 0.29007000000000005, 
+  0.29007000000000005}, {0.99708, 0.28908, 0.28908}, 
+ {0.99709, 0.28809000000000007, 0.28809000000000007}, 
+ {0.9971, 0.2871, 0.2871}, {0.99711, 0.2861100000000001, 0.2861100000000001}, 
+ {0.99712, 0.28512000000000004, 0.28512000000000004}, 
+ {0.99713, 0.28413, 0.28413}, {0.99714, 0.28314000000000006, 
+  0.28314000000000006}, {0.99715, 0.28215, 0.28215}, 
+ {0.99716, 0.2811600000000001, 0.2811600000000001}, 
+ {0.99717, 0.28017000000000003, 0.28017000000000003}, 
+ {0.99718, 0.27918, 0.27918}, {0.99719, 0.27819000000000005, 
+  0.27819000000000005}, {0.9972, 0.2772, 0.2772}, 
+ {0.99721, 0.27621000000000007, 0.27621000000000007}, 
+ {0.99722, 0.27522, 0.27522}, {0.99723, 0.27423, 0.27423}, 
+ {0.99724, 0.27324000000000004, 0.27324000000000004}, 
+ {0.99725, 0.27225, 0.27225}, {0.99726, 0.27126000000000006, 
+  0.27126000000000006}, {0.99727, 0.27027, 0.27027}, 
+ {0.9972799999999999, 0.26927999999999996, 0.26927999999999996}, 
+ {0.99729, 0.26829000000000003, 0.26829000000000003}, 
+ {0.9973, 0.2673, 0.2673}, {0.99731, 0.26631000000000005, 
+  0.26631000000000005}, {0.99732, 0.26532, 0.26532}, 
+ {0.99733, 0.26433000000000006, 0.26433000000000006}, 
+ {0.99734, 0.26334, 0.26334}, {0.99735, 0.26234999999999997, 
+  0.26234999999999997}, {0.99736, 0.26136000000000004, 0.26136000000000004}, 
+ {0.99737, 0.26037, 0.26037}, {0.99738, 0.25938000000000005, 
+  0.25938000000000005}, {0.99739, 0.25839, 0.25839}, 
+ {0.9974, 0.25739999999999996, 0.25739999999999996}, 
+ {0.99741, 0.25641, 0.25641}, {0.99742, 0.25542, 0.25542}, 
+ {0.99743, 0.25443000000000005, 0.25443000000000005}, 
+ {0.99744, 0.25344, 0.25344}, {0.99745, 0.25244999999999995, 
+  0.25244999999999995}, {0.99746, 0.25146, 0.25146}, 
+ {0.99747, 0.25046999999999997, 0.25046999999999997}, 
+ {0.99748, 0.24948000000000004, 0.24948000000000004}, 
+ {0.99749, 0.24849, 0.24849}, {0.9975, 0.24750000000000005, 
+  0.24750000000000005}, {0.99751, 0.24651, 0.24651}, 
+ {0.99752, 0.24551999999999996, 0.24551999999999996}, 
+ {0.99753, 0.24453000000000003, 0.24453000000000003}, 
+ {0.99754, 0.24353999999999998, 0.24353999999999998}, 
+ {0.99755, 0.24255000000000004, 0.24255000000000004}, 
+ {0.99756, 0.24156, 0.24156}, {0.99757, 0.24056999999999995, 
+  0.24056999999999995}, {0.99758, 0.23958000000000002, 0.23958000000000002}, 
+ {0.99759, 0.23858999999999997, 0.23858999999999997}, 
+ {0.9976, 0.23760000000000003, 0.23760000000000003}, 
+ {0.99761, 0.23661, 0.23661}, {0.99762, 0.23561999999999994, 
+  0.23561999999999994}, {0.99763, 0.23463, 0.23463}, 
+ {0.99764, 0.23363999999999996, 0.23363999999999996}, 
+ {0.99765, 0.23265000000000002, 0.23265000000000002}, 
+ {0.99766, 0.23165999999999998, 0.23165999999999998}, 
+ {0.99767, 0.23066999999999993, 0.23066999999999993}, 
+ {0.99768, 0.22968, 0.22968}, {0.99769, 0.22868999999999995, 
+  0.22868999999999995}, {0.9977, 0.2277, 0.2277}, 
+ {0.99771, 0.22670999999999997, 0.22670999999999997}, 
+ {0.99772, 0.22572000000000003, 0.22572000000000003}, 
+ {0.99773, 0.22472999999999999, 0.22472999999999999}, 
+ {0.99774, 0.22373999999999994, 0.22373999999999994}, 
+ {0.99775, 0.22275, 0.22275}, {0.99776, 0.22175999999999996, 
+  0.22175999999999996}, {0.99777, 0.22077000000000002, 0.22077000000000002}, 
+ {0.99778, 0.21977999999999998, 0.21977999999999998}, 
+ {0.99779, 0.21878999999999993, 0.21878999999999993}, 
+ {0.9978, 0.2178, 0.2178}, {0.99781, 0.21680999999999995, 
+  0.21680999999999995}, {0.99782, 0.21582, 0.21582}, 
+ {0.99783, 0.21482999999999997, 0.21482999999999997}, 
+ {0.99784, 0.21383999999999992, 0.21383999999999992}, 
+ {0.99785, 0.21284999999999998, 0.21284999999999998}, 
+ {0.99786, 0.21185999999999994, 0.21185999999999994}, 
+ {0.99787, 0.21087, 0.21087}, {0.99788, 0.20987999999999996, 
+  0.20987999999999996}, {0.9978899999999999, 0.2088899999999999, 
+  0.2088899999999999}, {0.9979, 0.20789999999999997, 0.20789999999999997}, 
+ {0.99791, 0.20690999999999993, 0.20690999999999993}, 
+ {0.99792, 0.20592, 0.20592}, {0.99793, 0.20492999999999995, 
+  0.20492999999999995}, {0.99794, 0.20394, 0.20394}, 
+ {0.99795, 0.20294999999999996, 0.20294999999999996}, 
+ {0.99796, 0.20195999999999992, 0.20195999999999992}, 
+ {0.99797, 0.20096999999999998, 0.20096999999999998}, 
+ {0.99798, 0.19997999999999994, 0.19997999999999994}, 
+ {0.99799, 0.19899, 0.19899}, {0.998, 0.19799999999999995, 
+  0.19799999999999995}, {0.99801, 0.1970099999999999, 0.1970099999999999}, 
+ {0.99802, 0.19601999999999997, 0.19601999999999997}, 
+ {0.99803, 0.19502999999999993, 0.19502999999999993}, 
+ {0.99804, 0.19404, 0.19404}, {0.99805, 0.19304999999999994, 
+  0.19304999999999994}, {0.99806, 0.1920599999999999, 0.1920599999999999}, 
+ {0.99807, 0.19106999999999996, 0.19106999999999996}, 
+ {0.99808, 0.19007999999999992, 0.19007999999999992}, 
+ {0.99809, 0.18908999999999998, 0.18908999999999998}, 
+ {0.9981, 0.18809999999999993, 0.18809999999999993}, 
+ {0.99811, 0.18711, 0.18711}, {0.99812, 0.18611999999999995, 
+  0.18611999999999995}, {0.99813, 0.1851299999999999, 0.1851299999999999}, 
+ {0.99814, 0.18413999999999997, 0.18413999999999997}, 
+ {0.99815, 0.18314999999999992, 0.18314999999999992}, 
+ {0.99816, 0.18216, 0.18216}, {0.99817, 0.18116999999999994, 
+  0.18116999999999994}, {0.99818, 0.1801799999999999, 0.1801799999999999}, 
+ {0.99819, 0.17918999999999996, 0.17918999999999996}, 
+ {0.9982, 0.17819999999999991, 0.17819999999999991}, 
+ {0.99821, 0.17720999999999998, 0.17720999999999998}, 
+ {0.99822, 0.17621999999999993, 0.17621999999999993}, 
+ {0.99823, 0.17522999999999989, 0.17522999999999989}, 
+ {0.99824, 0.17423999999999995, 0.17423999999999995}, 
+ {0.99825, 0.1732499999999999, 0.1732499999999999}, 
+ {0.99826, 0.17225999999999997, 0.17225999999999997}, 
+ {0.99827, 0.17126999999999992, 0.17126999999999992}, 
+ {0.99828, 0.17027999999999988, 0.17027999999999988}, 
+ {0.99829, 0.16928999999999994, 0.16928999999999994}, 
+ {0.9983, 0.1682999999999999, 0.1682999999999999}, 
+ {0.99831, 0.16730999999999996, 0.16730999999999996}, 
+ {0.99832, 0.1663199999999999, 0.1663199999999999}, 
+ {0.99833, 0.1653300000000001, 0.1653300000000001}, 
+ {0.99834, 0.16434000000000004, 0.16434000000000004}, 
+ {0.99835, 0.16335, 0.16335}, {0.99836, 0.16236000000000006, 
+  0.16236000000000006}, {0.99837, 0.16137, 0.16137}, 
+ {0.99838, 0.16038000000000008, 0.16038000000000008}, 
+ {0.99839, 0.15939000000000003, 0.15939000000000003}, 
+ {0.9984, 0.15839999999999999, 0.15839999999999999}, 
+ {0.99841, 0.15741000000000005, 0.15741000000000005}, 
+ {0.99842, 0.15642, 0.15642}, {0.99843, 0.15543000000000007, 
+  0.15543000000000007}, {0.99844, 0.15444000000000002, 0.15444000000000002}, 
+ {0.99845, 0.15344999999999998, 0.15344999999999998}, 
+ {0.99846, 0.15246000000000004, 0.15246000000000004}, 
+ {0.99847, 0.15147, 0.15147}, {0.99848, 0.15048000000000006, 
+  0.15048000000000006}, {0.99849, 0.14949, 0.14949}, 
+ {0.9984999999999999, 0.14849999999999997, 0.14849999999999997}, 
+ {0.99851, 0.14751000000000003, 0.14751000000000003}, 
+ {0.99852, 0.14651999999999998, 0.14651999999999998}, 
+ {0.99853, 0.14553000000000005, 0.14553000000000005}, 
+ {0.99854, 0.14454, 0.14454}, {0.99855, 0.14355000000000007, 
+  0.14355000000000007}, {0.99856, 0.14256000000000002, 0.14256000000000002}, 
+ {0.99857, 0.14156999999999997, 0.14156999999999997}, 
+ {0.99858, 0.14058000000000004, 0.14058000000000004}, 
+ {0.99859, 0.13959, 0.13959}, {0.9986, 0.13860000000000006, 
+  0.13860000000000006}, {0.99861, 0.13761, 0.13761}, 
+ {0.99862, 0.13661999999999996, 0.13661999999999996}, 
+ {0.99863, 0.13563000000000003, 0.13563000000000003}, 
+ {0.99864, 0.13463999999999998, 0.13463999999999998}, 
+ {0.99865, 0.13365000000000005, 0.13365000000000005}, 
+ {0.99866, 0.13266, 0.13266}, {0.99867, 0.13166999999999995, 
+  0.13166999999999995}, {0.99868, 0.13068000000000002, 0.13068000000000002}, 
+ {0.99869, 0.12968999999999997, 0.12968999999999997}, 
+ {0.9987, 0.12870000000000004, 0.12870000000000004}, 
+ {0.99871, 0.12771, 0.12771}, {0.99872, 0.12672000000000005, 
+  0.12672000000000005}, {0.99873, 0.12573, 0.12573}, 
+ {0.99874, 0.12473999999999996, 0.12473999999999996}, 
+ {0.99875, 0.12375000000000003, 0.12375000000000003}, 
+ {0.99876, 0.12275999999999998, 0.12275999999999998}, 
+ {0.99877, 0.12177000000000004, 0.12177000000000004}, 
+ {0.99878, 0.12078, 0.12078}, {0.99879, 0.11978999999999995, 
+  0.11978999999999995}, {0.9988, 0.11880000000000002, 0.11880000000000002}, 
+ {0.99881, 0.11780999999999997, 0.11780999999999997}, 
+ {0.99882, 0.11682000000000003, 0.11682000000000003}, 
+ {0.99883, 0.11582999999999999, 0.11582999999999999}, 
+ {0.99884, 0.11483999999999994, 0.11483999999999994}, 
+ {0.99885, 0.11385, 0.11385}, {0.99886, 0.11285999999999996, 
+  0.11285999999999996}, {0.99887, 0.11187000000000002, 0.11187000000000002}, 
+ {0.99888, 0.11087999999999998, 0.11087999999999998}, 
+ {0.99889, 0.10988999999999993, 0.10988999999999993}, 
+ {0.9989, 0.1089, 0.1089}, {0.99891, 0.10790999999999995, 
+  0.10790999999999995}, {0.99892, 0.10692000000000002, 0.10692000000000002}, 
+ {0.99893, 0.10592999999999997, 0.10592999999999997}, 
+ {0.99894, 0.10494000000000003, 0.10494000000000003}, 
+ {0.99895, 0.10394999999999999, 0.10394999999999999}, 
+ {0.99896, 0.10295999999999994, 0.10295999999999994}, 
+ {0.99897, 0.10197, 0.10197}, {0.99898, 0.10097999999999996, 
+  0.10097999999999996}, {0.99899, 0.09999000000000002, 0.09999000000000002}, 
+ {0.999, 0.09899999999999998, 0.09899999999999998}, 
+ {0.99901, 0.09800999999999993, 0.09800999999999993}, 
+ {0.99902, 0.09702, 0.09702}, {0.99903, 0.09602999999999995, 
+  0.09602999999999995}, {0.99904, 0.09504000000000001, 0.09504000000000001}, 
+ {0.99905, 0.09404999999999997, 0.09404999999999997}, 
+ {0.99906, 0.09305999999999992, 0.09305999999999992}, 
+ {0.99907, 0.09206999999999999, 0.09206999999999999}, 
+ {0.99908, 0.09107999999999994, 0.09107999999999994}, 
+ {0.99909, 0.09009, 0.09009}, {0.9991, 0.08909999999999996, 
+  0.08909999999999996}, {0.99911, 0.08811000000000002, 0.08811000000000002}, 
+ {0.99912, 0.08711999999999998, 0.08711999999999998}, 
+ {0.99913, 0.08612999999999993, 0.08612999999999993}, 
+ {0.99914, 0.08514, 0.08514}, {0.99915, 0.08414999999999995, 
+  0.08414999999999995}, {0.99916, 0.08316000000000001, 0.08316000000000001}, 
+ {0.99917, 0.08216999999999997, 0.08216999999999997}, 
+ {0.99918, 0.08117999999999992, 0.08117999999999992}, 
+ {0.99919, 0.08018999999999998, 0.08018999999999998}, 
+ {0.9992, 0.07919999999999994, 0.07919999999999994}, 
+ {0.99921, 0.07821, 0.07821}, {0.99922, 0.07721999999999996, 
+  0.07721999999999996}, {0.99923, 0.07622999999999991, 0.07622999999999991}, 
+ {0.99924, 0.07523999999999997, 0.07523999999999997}, 
+ {0.99925, 0.07424999999999993, 0.07424999999999993}, 
+ {0.99926, 0.07325999999999999, 0.07325999999999999}, 
+ {0.99927, 0.07226999999999995, 0.07226999999999995}, 
+ {0.99928, 0.0712799999999999, 0.0712799999999999}, 
+ {0.99929, 0.07028999999999996, 0.07028999999999996}, 
+ {0.9993, 0.06929999999999992, 0.06929999999999992}, 
+ {0.99931, 0.06830999999999998, 0.06830999999999998}, 
+ {0.99932, 0.06731999999999994, 0.06731999999999994}, 
+ {0.99933, 0.06633, 0.06633}, {0.99934, 0.06533999999999995, 
+  0.06533999999999995}, {0.99935, 0.06434999999999991, 0.06434999999999991}, 
+ {0.99936, 0.06335999999999997, 0.06335999999999997}, 
+ {0.99937, 0.062369999999999925, 0.062369999999999925}, 
+ {0.99938, 0.06137999999999999, 0.06137999999999999}, 
+ {0.99939, 0.060389999999999944, 0.060389999999999944}, 
+ {0.9994, 0.0593999999999999, 0.0593999999999999}, 
+ {0.99941, 0.05840999999999996, 0.05840999999999996}, 
+ {0.99942, 0.057419999999999916, 0.057419999999999916}, 
+ {0.99943, 0.05642999999999998, 0.05642999999999998}, 
+ {0.99944, 0.055439999999999934, 0.055439999999999934}, 
+ {0.99945, 0.05444999999999989, 0.05444999999999989}, 
+ {0.99946, 0.05345999999999995, 0.05345999999999995}, 
+ {0.99947, 0.052469999999999906, 0.052469999999999906}, 
+ {0.99948, 0.05147999999999997, 0.05147999999999997}, 
+ {0.99949, 0.050489999999999924, 0.050489999999999924}, 
+ {0.9995, 0.04949999999999999, 0.04949999999999999}, 
+ {0.99951, 0.04850999999999994, 0.04850999999999994}, 
+ {0.99952, 0.047519999999999896, 0.047519999999999896}, 
+ {0.99953, 0.04652999999999996, 0.04652999999999996}, 
+ {0.99954, 0.045539999999999914, 0.045539999999999914}, 
+ {0.99955, 0.04454999999999998, 0.04454999999999998}, 
+ {0.99956, 0.04355999999999993, 0.04355999999999993}, 
+ {0.99957, 0.042569999999999886, 0.042569999999999886}, 
+ {0.99958, 0.04157999999999995, 0.04157999999999995}, 
+ {0.99959, 0.040589999999999904, 0.040589999999999904}, 
+ {0.9996, 0.03960000000000008, 0.03960000000000008}, 
+ {0.99961, 0.03861000000000003, 0.03861000000000003}, 
+ {0.99962, 0.03761999999999999, 0.03761999999999999}, 
+ {0.99963, 0.03663000000000005, 0.03663000000000005}, 
+ {0.99964, 0.035640000000000005, 0.035640000000000005}, 
+ {0.99965, 0.03465000000000007, 0.03465000000000007}, 
+ {0.99966, 0.03366000000000002, 0.03366000000000002}, 
+ {0.99967, 0.03266999999999998, 0.03266999999999998}, 
+ {0.99968, 0.03168000000000004, 0.03168000000000004}, 
+ {0.99969, 0.030689999999999995, 0.030689999999999995}, 
+ {0.9997, 0.02970000000000006, 0.02970000000000006}, 
+ {0.99971, 0.028710000000000013, 0.028710000000000013}, 
+ {0.99972, 0.027720000000000078, 0.027720000000000078}, 
+ {0.99973, 0.02673000000000003, 0.02673000000000003}, 
+ {0.99974, 0.025739999999999985, 0.025739999999999985}, 
+ {0.99975, 0.02475000000000005, 0.02475000000000005}, 
+ {0.99976, 0.023760000000000003, 0.023760000000000003}, 
+ {0.99977, 0.022770000000000068, 0.022770000000000068}, 
+ {0.99978, 0.02178000000000002, 0.02178000000000002}, 
+ {0.99979, 0.020789999999999975, 0.020789999999999975}, 
+ {0.9998, 0.01980000000000004, 0.01980000000000004}, 
+ {0.99981, 0.018809999999999993, 0.018809999999999993}, 
+ {0.99982, 0.017820000000000058, 0.017820000000000058}, 
+ {0.99983, 0.01683000000000001, 0.01683000000000001}, 
+ {0.99984, 0.015839999999999965, 0.015839999999999965}, 
+ {0.99985, 0.01485000000000003, 0.01485000000000003}, 
+ {0.99986, 0.013859999999999983, 0.013859999999999983}, 
+ {0.99987, 0.012870000000000048, 0.012870000000000048}, 
+ {0.99988, 0.011880000000000002, 0.011880000000000002}, 
+ {0.99989, 0.010889999999999955, 0.010889999999999955}, 
+ {0.9999, 0.00990000000000002, 0.00990000000000002}, 
+ {0.99991, 0.008909999999999973, 0.008909999999999973}, 
+ {0.99992, 0.007920000000000038, 0.007920000000000038}, 
+ {0.99993, 0.006929999999999992, 0.006929999999999992}, 
+ {0.99994, 0.005940000000000056, 0.005940000000000056}, 
+ {0.99995, 0.00495000000000001, 0.00495000000000001}, 
+ {0.99996, 0.0039599999999999635, 0.0039599999999999635}, 
+ {0.99997, 0.002970000000000028, 0.002970000000000028}, 
+ {0.99998, 0.0019799999999999818, 0.0019799999999999818}, 
+                                    {0.99999, 0.0009900000000000464, 0.0009900000000000464}, {1., 0., 0.}};
+float palette_grey[1001][3]={{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, 
+{0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 
+0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 
+    0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}, {0.99, 0.99, 0.99}};
+
+/*11 class divergin */
+float palette_primary[1001][3]={{0.6196078431372549, 0.00392156862745098, 0.2588235294117647},
+{0.621764705882353, 0.006313725490196077, 0.2593333333333333},
+{0.623921568627451, 0.008705882352941174, 0.25984313725490193},
+{0.626078431372549, 0.011098039215686273, 0.26035294117647056},
+{0.6282352941176471, 0.01349019607843137, 0.2608627450980392},
+{0.6303921568627451, 0.01588235294117647, 0.2613725490196078},
+{0.6325490196078432, 0.018274509803921566, 0.26188235294117646},
+{0.6347058823529412, 0.020666666666666663, 0.2623921568627451},
+{0.6368627450980392, 0.02305882352941176, 0.2629019607843137},
+{0.6390196078431373, 0.025450980392156857, 0.26341176470588235},
+{0.6411764705882353, 0.027843137254901958, 0.263921568627451},
+{0.6433333333333333, 0.03023529411764705, 0.2644313725490196},
+{0.6454901960784314, 0.03262745098039215, 0.26494117647058824},
+{0.6476470588235295, 0.03501960784313725, 0.2654509803921568},
+{0.6498039215686274, 0.037411764705882346, 0.26596078431372544},
+{0.6519607843137255, 0.03980392156862744, 0.26647058823529407},
+{0.6541176470588236, 0.04219607843137254, 0.2669803921568627},
+{0.6562745098039215, 0.044588235294117644, 0.26749019607843133},
+{0.6584313725490196, 0.046980392156862734, 0.26799999999999996},
+{0.6605882352941177, 0.04937254901960783, 0.2685098039215686},
+{0.6627450980392157, 0.051764705882352935, 0.2690196078431372},
+{0.6649019607843137, 0.05415686274509803, 0.26952941176470585},
+{0.6670588235294118, 0.05654901960784312, 0.2700392156862745},
+{0.6692156862745098, 0.058941176470588226, 0.2705490196078431},
+{0.6713725490196079, 0.06133333333333332, 0.27105882352941174},
+{0.6735294117647059, 0.06372549019607843, 0.27156862745098037},
+{0.6756862745098039, 0.0661176470588235, 0.272078431372549},
+{0.677843137254902, 0.06850980392156861, 0.27258823529411763},
+{0.68, 0.07090196078431371, 0.27309803921568626},
+{0.682156862745098, 0.07329411764705882, 0.2736078431372549},
+{0.6843137254901961, 0.0756862745098039, 0.2741176470588235},
+{0.6864705882352942, 0.07807843137254901, 0.27462745098039215},
+{0.6886274509803921, 0.0804705882352941, 0.2751372549019608},
+{0.6907843137254902, 0.0828627450980392, 0.2756470588235294},
+{0.6929411764705883, 0.08525490196078431, 0.27615686274509804},
+{0.6950980392156862, 0.0876470588235294, 0.27666666666666667},
+{0.6972549019607843, 0.09003921568627449, 0.2771764705882353},
+{0.6994117647058824, 0.09243137254901959, 0.2776862745098039},
+{0.7015686274509804, 0.09482352941176468, 0.2781960784313725},
+{0.7037254901960784, 0.09721568627450979, 0.27870588235294114},
+{0.7058823529411765, 0.09960784313725489, 0.27921568627450977},
+{0.7080392156862745, 0.10199999999999998, 0.2797254901960784},
+{0.7101960784313726, 0.10439215686274508, 0.280235294117647},
+{0.7123529411764706, 0.10678431372549016, 0.28074509803921566},
+{0.7145098039215686, 0.10917647058823526, 0.2812549019607843},
+{0.7166666666666667, 0.11156862745098037, 0.2817647058823529},
+{0.7188235294117648, 0.11396078431372547, 0.28227450980392155},
+{0.7209803921568627, 0.11635294117647056, 0.2827843137254902},
+{0.7231372549019608, 0.11874509803921567, 0.2832941176470588},
+{0.7252941176470589, 0.12113725490196077, 0.28380392156862744},
+{0.7274509803921569, 0.12352941176470586, 0.28431372549019607},
+{0.7296078431372549, 0.12592156862745096, 0.2848235294117647},
+{0.731764705882353, 0.12831372549019604, 0.2853333333333333},
+{0.733921568627451, 0.13070588235294117, 0.28584313725490196},
+{0.736078431372549, 0.13309803921568625, 0.2863529411764706},
+{0.7382352941176471, 0.13549019607843132, 0.2868627450980392},
+{0.7403921568627451, 0.13788235294117646, 0.28737254901960785},
+{0.7425490196078431, 0.14027450980392153, 0.2878823529411765},
+{0.7447058823529412, 0.14266666666666666, 0.2883921568627451},
+{0.7468627450980392, 0.14505882352941174, 0.28890196078431374},
+{0.7490196078431373, 0.14745098039215682, 0.28941176470588237},
+{0.7511764705882353, 0.14984313725490195, 0.289921568627451},
+{0.7533333333333334, 0.15223529411764702, 0.29043137254901963},
+{0.7554901960784314, 0.1546274509803921, 0.29094117647058826},
+{0.7576470588235295, 0.15701960784313723, 0.2914509803921569},
+{0.7598039215686274, 0.1594117647058823, 0.29196078431372546},
+{0.7619607843137255, 0.16180392156862744, 0.2924705882352941},
+{0.7641176470588236, 0.16419607843137252, 0.2929803921568627},
+{0.7662745098039216, 0.16658823529411765, 0.29349019607843135},
+{0.7684313725490196, 0.16898039215686272, 0.294},
+{0.7705882352941177, 0.1713725490196078, 0.2945098039215686},
+{0.7727450980392156, 0.17376470588235288, 0.29501960784313724},
+{0.7749019607843137, 0.176156862745098, 0.2955294117647059},
+{0.7770588235294118, 0.17854901960784308, 0.2960392156862745},
+{0.7792156862745098, 0.18094117647058822, 0.29654901960784313},
+{0.7813725490196078, 0.1833333333333333, 0.29705882352941176},
+{0.7835294117647059, 0.18572549019607837, 0.2975686274509804},
+{0.7856862745098039, 0.1881176470588235, 0.298078431372549},
+{0.787843137254902, 0.19050980392156858, 0.29858823529411765},
+{0.79, 0.1929019607843137, 0.2990980392156863},
+{0.7921568627450981, 0.19529411764705878, 0.2996078431372549},
+{0.7943137254901961, 0.19768627450980386, 0.30011764705882354},
+{0.7964705882352942, 0.200078431372549, 0.3006274509803922},
+{0.7986274509803921, 0.20247058823529407, 0.3011372549019608},
+{0.8007843137254902, 0.2048627450980392, 0.30164705882352943},
+{0.8029411764705883, 0.20725490196078428, 0.30215686274509806},
+{0.8050980392156862, 0.20964705882352935, 0.30266666666666664},
+{0.8072549019607843, 0.21203921568627443, 0.30317647058823527},
+{0.8094117647058824, 0.21443137254901956, 0.3036862745098039},
+{0.8115686274509804, 0.21682352941176464, 0.30419607843137253},
+{0.8137254901960784, 0.21921568627450977, 0.30470588235294116},
+{0.8158823529411765, 0.22160784313725485, 0.3052156862745098},
+{0.8180392156862746, 0.22399999999999998, 0.3057254901960784},
+{0.8201960784313725, 0.22639215686274505, 0.30623529411764705},
+{0.8223529411764706, 0.22878431372549013, 0.3067450980392157},
+{0.8245098039215686, 0.23117647058823526, 0.3072549019607843},
+{0.8266666666666667, 0.23356862745098034, 0.30776470588235294},
+{0.8288235294117647, 0.23596078431372547, 0.30827450980392157},
+{0.8309803921568628, 0.23835294117647055, 0.3087843137254902},
+{0.8331372549019608, 0.24074509803921562, 0.30929411764705883},
+{0.8352941176470589, 0.24313725490196078, 0.30980392156862746},
+{0.8365098039215687, 0.24498039215686274, 0.30933333333333335},
+{0.8377254901960784, 0.2468235294117647, 0.30886274509803924},
+{0.8389411764705883, 0.24866666666666667, 0.3083921568627451},
+{0.840156862745098, 0.25050980392156863, 0.307921568627451},
+{0.8413725490196079, 0.25235294117647056, 0.30745098039215685},
+{0.8425882352941176, 0.25419607843137254, 0.30698039215686274},
+{0.8438039215686275, 0.2560392156862745, 0.3065098039215686},
+{0.8450196078431372, 0.25788235294117645, 0.3060392156862745},
+{0.8462352941176471, 0.25972549019607843, 0.3055686274509804},
+{0.8474509803921568, 0.26156862745098036, 0.3050980392156863},
+{0.8486666666666667, 0.26341176470588235, 0.3046274509803922},
+{0.8498823529411765, 0.26525490196078433, 0.30415686274509807},
+{0.8510980392156863, 0.26709803921568626, 0.30368627450980396},
+{0.8523137254901961, 0.26894117647058824, 0.3032156862745098},
+{0.8535294117647059, 0.27078431372549017, 0.3027450980392157},
+{0.8547450980392157, 0.27262745098039215, 0.30227450980392156},
+{0.8559607843137255, 0.27447058823529413, 0.30180392156862745},
+{0.8571764705882353, 0.27631372549019606, 0.30133333333333334},
+{0.8583921568627451, 0.27815686274509804, 0.30086274509803923},
+{0.8596078431372549, 0.27999999999999997, 0.3003921568627451},
+{0.8608235294117648, 0.28184313725490195, 0.299921568627451},
+{0.8620392156862745, 0.2836862745098039, 0.2994509803921569},
+{0.8632549019607844, 0.28552941176470586, 0.29898039215686273},
+{0.8644705882352941, 0.28737254901960785, 0.2985098039215686},
+{0.865686274509804, 0.2892156862745098, 0.2980392156862745},
+{0.8669019607843137, 0.29105882352941176, 0.2975686274509804},
+{0.8681176470588235, 0.29290196078431374, 0.2970980392156863},
+{0.8693333333333333, 0.29474509803921567, 0.29662745098039217},
+{0.8705490196078431, 0.29658823529411765, 0.29615686274509806},
+{0.871764705882353, 0.2984313725490196, 0.29568627450980395},
+{0.8729803921568627, 0.30027450980392156, 0.29521568627450984},
+{0.8741960784313726, 0.3021176470588235, 0.29474509803921567},
+{0.8754117647058823, 0.3039607843137255, 0.29427450980392156},
+{0.8766274509803922, 0.30580392156862746, 0.29380392156862745},
+{0.8778431372549019, 0.3076470588235294, 0.29333333333333333},
+{0.8790588235294118, 0.30949019607843137, 0.2928627450980392},
+{0.8802745098039215, 0.3113333333333333, 0.2923921568627451},
+{0.8814901960784314, 0.3131764705882353, 0.291921568627451},
+{0.8827058823529411, 0.3150196078431372, 0.2914509803921569},
+{0.883921568627451, 0.3168627450980392, 0.2909803921568628},
+{0.8851372549019608, 0.31870588235294117, 0.29050980392156867},
+{0.8863529411764706, 0.3205490196078431, 0.2900392156862745},
+{0.8875686274509804, 0.3223921568627451, 0.2895686274509804},
+{0.8887843137254902, 0.32423529411764707, 0.2890980392156863},
+{0.89, 0.326078431372549, 0.28862745098039216},
+{0.8912156862745098, 0.327921568627451, 0.28815686274509805},
+{0.8924313725490196, 0.3297647058823529, 0.28768627450980394},
+{0.8936470588235293, 0.3316078431372549, 0.28721568627450983},
+{0.8948627450980392, 0.3334509803921568, 0.2867450980392157},
+{0.896078431372549, 0.3352941176470588, 0.28627450980392155},
+{0.8972941176470588, 0.3371372549019608, 0.28580392156862744},
+{0.8985098039215687, 0.3389803921568627, 0.2853333333333333},
+{0.8997254901960784, 0.3408235294117647, 0.2848627450980392},
+{0.9009411764705882, 0.3426666666666667, 0.2843921568627451},
+{0.902156862745098, 0.3445098039215686, 0.283921568627451},
+{0.9033725490196078, 0.3463529411764706, 0.2834509803921569},
+{0.9045882352941176, 0.3481960784313725, 0.28298039215686277},
+{0.9058039215686274, 0.3500392156862745, 0.28250980392156866},
+{0.9070196078431372, 0.3518823529411764, 0.28203921568627455},
+{0.908235294117647, 0.3537254901960784, 0.2815686274509804},
+{0.9094509803921569, 0.3555686274509804, 0.28109803921568627},
+{0.9106666666666666, 0.3574117647058823, 0.28062745098039216},
+{0.9118823529411765, 0.3592549019607843, 0.28015686274509805},
+{0.9130980392156862, 0.3610980392156863, 0.27968627450980393},
+{0.9143137254901961, 0.3629411764705882, 0.2792156862745098},
+{0.9155294117647058, 0.3647843137254902, 0.2787450980392157},
+{0.9167450980392157, 0.3666274509803921, 0.2782745098039216},
+{0.9179607843137254, 0.3684705882352941, 0.27780392156862743},
+{0.9191764705882353, 0.37031372549019603, 0.2773333333333333},
+{0.9203921568627451, 0.372156862745098, 0.2768627450980392},
+{0.9216078431372549, 0.374, 0.2763921568627451},
+{0.9228235294117646, 0.3758431372549019, 0.275921568627451},
+{0.9240392156862745, 0.37768627450980385, 0.2754509803921569},
+{0.9252549019607843, 0.37952941176470584, 0.27498039215686276},
+{0.926470588235294, 0.3813725490196078, 0.27450980392156865},
+{0.9276862745098039, 0.38321568627450975, 0.27403921568627454},
+{0.9289019607843136, 0.38505882352941173, 0.27356862745098043},
+{0.9301176470588235, 0.3869019607843137, 0.27309803921568626},
+{0.9313333333333333, 0.38874509803921564, 0.27262745098039215},
+{0.9325490196078431, 0.3905882352941176, 0.27215686274509804},
+{0.9337647058823529, 0.3924313725490196, 0.2716862745098039},
+{0.9349803921568627, 0.39427450980392154, 0.2712156862745098},
+{0.9361960784313725, 0.3961176470588235, 0.2707450980392157},
+{0.9374117647058823, 0.3979607843137255, 0.2702745098039216},
+{0.9386274509803921, 0.39980392156862743, 0.2698039215686275},
+{0.9398431372549019, 0.40164705882352936, 0.26933333333333337},
+{0.9410588235294117, 0.40349019607843134, 0.2688627450980392},
+{0.9422745098039215, 0.4053333333333333, 0.2683921568627451},
+{0.9434901960784313, 0.40717647058823525, 0.267921568627451},
+{0.9447058823529411, 0.4090196078431372, 0.26745098039215687},
+{0.9459215686274509, 0.4108627450980392, 0.26698039215686276},
+{0.9471372549019608, 0.41270588235294114, 0.26650980392156864},
+{0.9483529411764705, 0.41454901960784307, 0.26603921568627453},
+{0.9495686274509804, 0.41639215686274506, 0.2655686274509804},
+{0.9507843137254901, 0.41823529411764704, 0.2650980392156863},
+{0.952, 0.42007843137254897, 0.26462745098039214},
+{0.9532156862745097, 0.42192156862745095, 0.26415686274509803},
+{0.9544313725490196, 0.42376470588235293, 0.2636862745098039},
+{0.9556470588235293, 0.42560784313725486, 0.2632156862745098},
+{0.9568627450980391, 0.42745098039215684, 0.2627450980392157},
+{0.9572156862745097, 0.43, 0.263921568627451},
+{0.9575686274509804, 0.43254901960784314, 0.2650980392156863},
+{0.9579215686274509, 0.43509803921568624, 0.2662745098039216},
+{0.9582745098039215, 0.4376470588235294, 0.26745098039215687},
+{0.958627450980392, 0.44019607843137254, 0.26862745098039215},
+{0.9589803921568627, 0.4427450980392157, 0.2698039215686275},
+{0.9593333333333333, 0.4452941176470588, 0.27098039215686276},
+{0.9596862745098038, 0.44784313725490194, 0.27215686274509804},
+{0.9600392156862745, 0.4503921568627451, 0.2733333333333333},
+{0.960392156862745, 0.45294117647058824, 0.27450980392156865},
+{0.9607450980392156, 0.45549019607843133, 0.27568627450980393},
+{0.9610980392156863, 0.4580392156862745, 0.2768627450980392},
+{0.9614509803921568, 0.46058823529411763, 0.2780392156862745},
+{0.9618039215686274, 0.4631372549019608, 0.2792156862745098},
+{0.962156862745098, 0.46568627450980393, 0.2803921568627451},
+{0.9625098039215686, 0.468235294117647, 0.2815686274509804},
+{0.9628627450980392, 0.4707843137254902, 0.2827450980392157},
+{0.9632156862745097, 0.47333333333333333, 0.283921568627451},
+{0.9635686274509804, 0.4758823529411765, 0.28509803921568627},
+{0.9639215686274509, 0.4784313725490196, 0.28627450980392155},
+{0.9642745098039215, 0.4809803921568627, 0.2874509803921569},
+{0.9646274509803922, 0.4835294117647059, 0.28862745098039216},
+{0.9649803921568627, 0.486078431372549, 0.28980392156862744},
+{0.9653333333333333, 0.4886274509803922, 0.2909803921568627},
+{0.9656862745098038, 0.49117647058823527, 0.29215686274509806},
+{0.9660392156862745, 0.4937254901960784, 0.29333333333333333},
+{0.966392156862745, 0.49627450980392157, 0.2945098039215686},
+{0.9667450980392156, 0.49882352941176467, 0.2956862745098039},
+{0.9670980392156863, 0.5013725490196078, 0.2968627450980392},
+{0.9674509803921568, 0.503921568627451, 0.2980392156862745},
+{0.9678039215686274, 0.5064705882352941, 0.2992156862745098},
+{0.968156862745098, 0.5090196078431373, 0.3003921568627451},
+{0.9685098039215686, 0.5115686274509804, 0.3015686274509804},
+{0.9688627450980392, 0.5141176470588236, 0.3027450980392157},
+{0.9692156862745098, 0.5166666666666666, 0.303921568627451},
+{0.9695686274509804, 0.5192156862745098, 0.3050980392156863},
+{0.9699215686274509, 0.5217647058823529, 0.30627450980392157},
+{0.9702745098039215, 0.5243137254901961, 0.30745098039215685},
+{0.9706274509803922, 0.5268627450980392, 0.3086274509803921},
+{0.9709803921568627, 0.5294117647058824, 0.30980392156862746},
+{0.9713333333333333, 0.5319607843137255, 0.31098039215686274},
+{0.9716862745098039, 0.5345098039215687, 0.312156862745098},
+{0.9720392156862745, 0.5370588235294117, 0.31333333333333335},
+{0.972392156862745, 0.5396078431372549, 0.31450980392156863},
+{0.9727450980392156, 0.542156862745098, 0.3156862745098039},
+{0.9730980392156863, 0.5447058823529412, 0.3168627450980392},
+{0.9734509803921568, 0.5472549019607843, 0.3180392156862745},
+{0.9738039215686274, 0.5498039215686275, 0.3192156862745098},
+{0.974156862745098, 0.5523529411764706, 0.3203921568627451},
+{0.9745098039215686, 0.5549019607843138, 0.32156862745098036},
+{0.9748627450980392, 0.5574509803921568, 0.3227450980392157},
+{0.9752156862745098, 0.56, 0.323921568627451},
+{0.9755686274509804, 0.5625490196078431, 0.32509803921568625},
+{0.9759215686274509, 0.5650980392156862, 0.3262745098039216},
+{0.9762745098039216, 0.5676470588235294, 0.32745098039215687},
+{0.9766274509803922, 0.5701960784313725, 0.32862745098039214},
+{0.9769803921568627, 0.5727450980392157, 0.3298039215686274},
+{0.9773333333333333, 0.5752941176470588, 0.3309803921568627},
+{0.9776862745098039, 0.577843137254902, 0.33215686274509804},
+{0.9780392156862745, 0.580392156862745, 0.3333333333333333},
+{0.978392156862745, 0.5829411764705883, 0.3345098039215686},
+{0.9787450980392157, 0.5854901960784313, 0.33568627450980393},
+{0.9790980392156863, 0.5880392156862745, 0.3368627450980392},
+{0.9794509803921568, 0.5905882352941176, 0.3380392156862745},
+{0.9798039215686274, 0.5931372549019608, 0.3392156862745098},
+{0.9801568627450981, 0.5956862745098039, 0.3403921568627451},
+{0.9805098039215686, 0.5982352941176471, 0.3415686274509804},
+{0.9808627450980392, 0.6007843137254902, 0.34274509803921566},
+{0.9812156862745098, 0.6033333333333334, 0.34392156862745094},
+{0.9815686274509804, 0.6058823529411765, 0.34509803921568627},
+{0.981921568627451, 0.6084313725490196, 0.34627450980392155},
+{0.9822745098039216, 0.6109803921568627, 0.3474509803921568},
+{0.9826274509803922, 0.6135294117647059, 0.34862745098039216},
+{0.9829803921568627, 0.616078431372549, 0.34980392156862744},
+{0.9833333333333334, 0.6186274509803922, 0.3509803921568627},
+{0.983686274509804, 0.6211764705882353, 0.352156862745098},
+{0.9840392156862745, 0.6237254901960785, 0.3533333333333333},
+{0.9843921568627451, 0.6262745098039215, 0.3545098039215686},
+{0.9847450980392157, 0.6288235294117647, 0.3556862745098039},
+{0.9850980392156863, 0.6313725490196078, 0.35686274509803917},
+{0.9854509803921568, 0.633921568627451, 0.3580392156862745},
+{0.9858039215686275, 0.6364705882352941, 0.3592156862745098},
+{0.9861568627450981, 0.6390196078431373, 0.36039215686274506},
+{0.9865098039215686, 0.6415686274509804, 0.3615686274509804},
+{0.9868627450980393, 0.6441176470588236, 0.3627450980392157},
+{0.9872156862745098, 0.6466666666666666, 0.36392156862745095},
+{0.9875686274509804, 0.6492156862745098, 0.36509803921568623},
+{0.987921568627451, 0.6517647058823529, 0.3662745098039215},
+{0.9882745098039216, 0.6543137254901961, 0.36745098039215685},
+{0.9886274509803922, 0.6568627450980392, 0.3686274509803921},
+{0.9889803921568627, 0.6594117647058824, 0.3698039215686274},
+{0.9893333333333334, 0.6619607843137255, 0.37098039215686274},
+{0.989686274509804, 0.6645098039215687, 0.372156862745098},
+{0.9900392156862745, 0.6670588235294117, 0.3733333333333333},
+{0.9903921568627452, 0.669607843137255, 0.37450980392156863},
+{0.9907450980392157, 0.672156862745098, 0.3756862745098039},
+{0.9910980392156863, 0.6747058823529412, 0.3768627450980392},
+{0.9914509803921568, 0.6772549019607843, 0.37803921568627447},
+{0.9918039215686275, 0.6798039215686275, 0.3792156862745098},
+{0.9921568627450981, 0.6823529411764706, 0.3803921568627451},
+{0.9921960784313726, 0.6843137254901961, 0.38203921568627447},
+{0.9922352941176471, 0.6862745098039216, 0.3836862745098039},
+{0.9922745098039216, 0.6882352941176471, 0.3853333333333333},
+{0.9923137254901961, 0.6901960784313725, 0.38698039215686275},
+{0.9923529411764707, 0.692156862745098, 0.38862745098039214},
+{0.9923921568627452, 0.6941176470588235, 0.39027450980392153},
+{0.9924313725490196, 0.696078431372549, 0.391921568627451},
+{0.9924705882352941, 0.6980392156862745, 0.39356862745098037},
+{0.9925098039215686, 0.7000000000000001, 0.39521568627450976},
+{0.9925490196078431, 0.7019607843137255, 0.3968627450980392},
+{0.9925882352941177, 0.703921568627451, 0.3985098039215686},
+{0.9926274509803922, 0.7058823529411765, 0.40015686274509804},
+{0.9926666666666667, 0.707843137254902, 0.40180392156862743},
+{0.9927058823529412, 0.7098039215686275, 0.4034509803921568},
+{0.9927450980392157, 0.711764705882353, 0.40509803921568627},
+{0.9927843137254903, 0.7137254901960784, 0.40674509803921566},
+{0.9928235294117648, 0.7156862745098039, 0.4083921568627451},
+{0.9928627450980393, 0.7176470588235294, 0.4100392156862745},
+{0.9929019607843137, 0.7196078431372549, 0.4116862745098039},
+{0.9929411764705882, 0.7215686274509804, 0.41333333333333333},
+{0.9929803921568627, 0.7235294117647059, 0.4149803921568627},
+{0.9930196078431373, 0.7254901960784313, 0.4166274509803921},
+{0.9930588235294118, 0.7274509803921568, 0.41827450980392156},
+{0.9930980392156863, 0.7294117647058823, 0.41992156862745095},
+{0.9931372549019608, 0.7313725490196079, 0.42156862745098034},
+{0.9931764705882353, 0.7333333333333334, 0.4232156862745098},
+{0.9932156862745098, 0.7352941176470589, 0.4248627450980392},
+{0.9932549019607844, 0.7372549019607844, 0.4265098039215686},
+{0.9932941176470589, 0.7392156862745098, 0.428156862745098},
+{0.9933333333333334, 0.7411764705882353, 0.4298039215686274},
+{0.9933725490196079, 0.7431372549019608, 0.43145098039215685},
+{0.9934117647058823, 0.7450980392156863, 0.43309803921568624},
+{0.9934509803921568, 0.7470588235294118, 0.4347450980392157},
+{0.9934901960784314, 0.7490196078431373, 0.4363921568627451},
+{0.9935294117647059, 0.7509803921568627, 0.43803921568627446},
+{0.9935686274509804, 0.7529411764705882, 0.4396862745098039},
+{0.9936078431372549, 0.7549019607843137, 0.4413333333333333},
+{0.9936470588235294, 0.7568627450980392, 0.4429803921568627},
+{0.993686274509804, 0.7588235294117647, 0.44462745098039214},
+{0.9937254901960785, 0.7607843137254902, 0.4462745098039215},
+{0.993764705882353, 0.7627450980392156, 0.44792156862745097},
+{0.9938039215686275, 0.7647058823529412, 0.44956862745098036},
+{0.993843137254902, 0.7666666666666666, 0.45121568627450975},
+{0.9938823529411764, 0.7686274509803922, 0.4528627450980392},
+{0.993921568627451, 0.7705882352941177, 0.4545098039215686},
+{0.9939607843137255, 0.7725490196078432, 0.45615686274509804},
+{0.994, 0.7745098039215687, 0.4578039215686274},
+{0.9940392156862745, 0.7764705882352941, 0.4594509803921568},
+{0.994078431372549, 0.7784313725490196, 0.46109803921568626},
+{0.9941176470588236, 0.7803921568627451, 0.46274509803921565},
+{0.9941568627450981, 0.7823529411764706, 0.46439215686274504},
+{0.9941960784313726, 0.7843137254901961, 0.4660392156862745},
+{0.9942352941176471, 0.7862745098039216, 0.4676862745098039},
+{0.9942745098039216, 0.788235294117647, 0.46933333333333327},
+{0.9943137254901961, 0.7901960784313725, 0.4709803921568627},
+{0.9943529411764707, 0.792156862745098, 0.4726274509803921},
+{0.9943921568627451, 0.7941176470588236, 0.47427450980392155},
+{0.9944313725490196, 0.7960784313725491, 0.47592156862745094},
+{0.9944705882352941, 0.7980392156862746, 0.47756862745098033},
+{0.9945098039215686, 0.8, 0.4792156862745098},
+{0.9945490196078431, 0.8019607843137255, 0.48086274509803917},
+{0.9945882352941177, 0.803921568627451, 0.4825098039215686},
+{0.9946274509803922, 0.8058823529411765, 0.484156862745098},
+{0.9946666666666667, 0.807843137254902, 0.4858039215686274},
+{0.9947058823529412, 0.8098039215686275, 0.48745098039215684},
+{0.9947450980392157, 0.8117647058823529, 0.48909803921568623},
+{0.9947843137254903, 0.8137254901960784, 0.4907450980392156},
+{0.9948235294117648, 0.8156862745098039, 0.49239215686274507},
+{0.9948627450980392, 0.8176470588235294, 0.4940392156862745},
+{0.9949019607843137, 0.8196078431372549, 0.4956862745098039},
+{0.9949411764705882, 0.8215686274509804, 0.4973333333333333},
+{0.9949803921568627, 0.8235294117647058, 0.4989803921568627},
+{0.9950196078431373, 0.8254901960784313, 0.5006274509803921},
+{0.9950588235294118, 0.8274509803921568, 0.5022745098039215},
+{0.9950980392156863, 0.8294117647058823, 0.503921568627451},
+{0.9951372549019608, 0.8313725490196078, 0.5055686274509803},
+{0.9951764705882353, 0.8333333333333333, 0.5072156862745097},
+{0.9952156862745098, 0.8352941176470589, 0.5088627450980392},
+{0.9952549019607844, 0.8372549019607843, 0.5105098039215685},
+{0.9952941176470589, 0.8392156862745098, 0.512156862745098},
+{0.9953333333333334, 0.8411764705882353, 0.5138039215686274},
+{0.9953725490196078, 0.8431372549019608, 0.5154509803921569},
+{0.9954117647058823, 0.8450980392156863, 0.5170980392156862},
+{0.9954509803921568, 0.8470588235294118, 0.5187450980392156},
+{0.9954901960784314, 0.8490196078431372, 0.5203921568627451},
+{0.9955294117647059, 0.8509803921568627, 0.5220392156862744},
+{0.9955686274509804, 0.8529411764705882, 0.5236862745098039},
+{0.9956078431372549, 0.8549019607843137, 0.5253333333333333},
+{0.9956470588235294, 0.8568627450980392, 0.5269803921568627},
+{0.995686274509804, 0.8588235294117647, 0.5286274509803921},
+{0.9957254901960785, 0.8607843137254902, 0.5302745098039215},
+{0.995764705882353, 0.8627450980392157, 0.531921568627451},
+{0.9958039215686275, 0.8647058823529412, 0.5335686274509803},
+{0.9958431372549019, 0.8666666666666667, 0.5352156862745098},
+{0.9958823529411764, 0.8686274509803922, 0.5368627450980392},
+{0.995921568627451, 0.8705882352941177, 0.5385098039215686},
+{0.9959607843137255, 0.8725490196078431, 0.540156862745098},
+{0.996, 0.8745098039215686, 0.5418039215686274},
+{0.9960392156862745, 0.8764705882352941, 0.5434509803921568},
+{0.996078431372549, 0.8784313725490196, 0.5450980392156862},
+{0.9961176470588236, 0.8796470588235294, 0.5471372549019607},
+{0.9961568627450981, 0.8808627450980392, 0.5491764705882353},
+{0.9961960784313726, 0.882078431372549, 0.5512156862745098},
+{0.9962352941176471, 0.8832941176470588, 0.5532549019607843},
+{0.9962745098039216, 0.8845098039215686, 0.5552941176470588},
+{0.9963137254901961, 0.8857254901960784, 0.5573333333333332},
+{0.9963529411764706, 0.8869411764705882, 0.5593725490196078},
+{0.9963921568627451, 0.888156862745098, 0.5614117647058823},
+{0.9964313725490196, 0.8893725490196078, 0.5634509803921568},
+{0.9964705882352941, 0.8905882352941177, 0.5654901960784313},
+{0.9965098039215686, 0.8918039215686274, 0.5675294117647058},
+{0.9965490196078431, 0.8930196078431373, 0.5695686274509804},
+{0.9965882352941177, 0.894235294117647, 0.5716078431372549},
+{0.9966274509803922, 0.8954509803921569, 0.5736470588235294},
+{0.9966666666666667, 0.8966666666666666, 0.5756862745098039},
+{0.9967058823529412, 0.8978823529411765, 0.5777254901960784},
+{0.9967450980392157, 0.8990980392156863, 0.5797647058823528},
+{0.9967843137254903, 0.9003137254901961, 0.5818039215686274},
+{0.9968235294117647, 0.9015294117647059, 0.5838431372549019},
+{0.9968627450980392, 0.9027450980392157, 0.5858823529411764},
+{0.9969019607843137, 0.9039607843137255, 0.5879215686274509},
+{0.9969411764705882, 0.9051764705882352, 0.5899607843137255},
+{0.9969803921568627, 0.9063921568627451, 0.592},
+{0.9970196078431373, 0.9076078431372548, 0.5940392156862745},
+{0.9970588235294118, 0.9088235294117647, 0.596078431372549},
+{0.9970980392156863, 0.9100392156862745, 0.5981176470588235},
+{0.9971372549019608, 0.9112549019607843, 0.6001568627450979},
+{0.9971764705882353, 0.9124705882352941, 0.6021960784313725},
+{0.9972156862745098, 0.9136862745098039, 0.604235294117647},
+{0.9972549019607844, 0.9149019607843137, 0.6062745098039215},
+{0.9972941176470589, 0.9161176470588235, 0.608313725490196},
+{0.9973333333333333, 0.9173333333333333, 0.6103529411764705},
+{0.9973725490196078, 0.9185490196078432, 0.6123921568627451},
+{0.9974117647058823, 0.9197647058823529, 0.6144313725490196},
+{0.9974509803921568, 0.9209803921568628, 0.6164705882352941},
+{0.9974901960784314, 0.9221960784313725, 0.6185098039215686},
+{0.9975294117647059, 0.9234117647058824, 0.6205490196078431},
+{0.9975686274509804, 0.9246274509803921, 0.6225882352941177},
+{0.9976078431372549, 0.925843137254902, 0.6246274509803921},
+{0.9976470588235294, 0.9270588235294117, 0.6266666666666666},
+{0.997686274509804, 0.9282745098039216, 0.6287058823529411},
+{0.9977254901960785, 0.9294901960784314, 0.6307450980392156},
+{0.997764705882353, 0.9307058823529412, 0.6327843137254902},
+{0.9978039215686274, 0.931921568627451, 0.6348235294117647},
+{0.9978431372549019, 0.9331372549019608, 0.6368627450980392},
+{0.9978823529411764, 0.9343529411764706, 0.6389019607843137},
+{0.997921568627451, 0.9355686274509804, 0.6409411764705882},
+{0.9979607843137255, 0.9367843137254902, 0.6429803921568628},
+{0.998, 0.938, 0.6450196078431372},
+{0.9980392156862745, 0.9392156862745098, 0.6470588235294117},
+{0.998078431372549, 0.9404313725490197, 0.6490980392156862},
+{0.9981176470588236, 0.9416470588235294, 0.6511372549019607},
+{0.9981568627450981, 0.9428627450980392, 0.6531764705882352},
+{0.9981960784313726, 0.944078431372549, 0.6552156862745098},
+{0.9982352941176471, 0.9452941176470588, 0.6572549019607843},
+{0.9982745098039216, 0.9465098039215686, 0.6592941176470588},
+{0.998313725490196, 0.9477254901960784, 0.6613333333333333},
+{0.9983529411764706, 0.9489411764705882, 0.6633725490196078},
+{0.9983921568627451, 0.950156862745098, 0.6654117647058824},
+{0.9984313725490196, 0.9513725490196079, 0.6674509803921569},
+{0.9984705882352941, 0.9525882352941176, 0.6694901960784313},
+{0.9985098039215686, 0.9538039215686275, 0.6715294117647058},
+{0.9985490196078431, 0.9550196078431372, 0.6735686274509803},
+{0.9985882352941177, 0.9562352941176471, 0.6756078431372549},
+{0.9986274509803922, 0.9574509803921568, 0.6776470588235294},
+{0.9986666666666667, 0.9586666666666667, 0.6796862745098039},
+{0.9987058823529412, 0.9598823529411765, 0.6817254901960784},
+{0.9987450980392157, 0.9610980392156863, 0.6837647058823529},
+{0.9987843137254901, 0.9623137254901961, 0.6858039215686275},
+{0.9988235294117647, 0.9635294117647059, 0.687843137254902},
+{0.9988627450980392, 0.9647450980392157, 0.6898823529411764},
+{0.9989019607843137, 0.9659607843137255, 0.6919215686274509},
+{0.9989411764705882, 0.9671764705882353, 0.6939607843137254},
+{0.9989803921568627, 0.968392156862745, 0.696},
+{0.9990196078431373, 0.9696078431372549, 0.6980392156862745},
+{0.9990588235294118, 0.9708235294117646, 0.700078431372549},
+{0.9990980392156863, 0.9720392156862745, 0.7021176470588235},
+{0.9991372549019608, 0.9732549019607843, 0.704156862745098},
+{0.9991764705882353, 0.9744705882352941, 0.7061960784313726},
+{0.9992156862745099, 0.9756862745098039, 0.7082352941176471},
+{0.9992549019607844, 0.9769019607843137, 0.7102745098039216},
+{0.9992941176470588, 0.9781176470588235, 0.7123137254901961},
+{0.9993333333333333, 0.9793333333333334, 0.7143529411764706},
+{0.9993725490196078, 0.9805490196078431, 0.716392156862745},
+{0.9994117647058823, 0.981764705882353, 0.7184313725490196},
+{0.9994509803921569, 0.9829803921568627, 0.7204705882352941},
+{0.9994901960784314, 0.9841960784313726, 0.7225098039215686},
+{0.9995294117647059, 0.9854117647058823, 0.7245490196078431},
+{0.9995686274509804, 0.9866274509803922, 0.7265882352941176},
+{0.9996078431372549, 0.9878431372549019, 0.7286274509803922},
+{0.9996470588235294, 0.9890588235294118, 0.7306666666666666},
+{0.999686274509804, 0.9902745098039216, 0.7327058823529411},
+{0.9997254901960785, 0.9914901960784314, 0.7347450980392156},
+{0.9997647058823529, 0.9927058823529412, 0.7367843137254901},
+{0.9998039215686274, 0.993921568627451, 0.7388235294117647},
+{0.9998431372549019, 0.9951372549019608, 0.7408627450980392},
+{0.9998823529411764, 0.9963529411764706, 0.7429019607843137},
+{0.999921568627451, 0.9975686274509804, 0.7449411764705882},
+{0.9999607843137255, 0.9987843137254901, 0.7469803921568627},
+{1., 1., 0.7490196078431373},
+{0.9990196078431373, 0.9996078431372549, 0.7474901960784314},
+{0.9980392156862745, 0.9992156862745099, 0.7459607843137255},
+{0.9970588235294118, 0.9988235294117647, 0.7444313725490196},
+{0.996078431372549, 0.9984313725490196, 0.7429019607843137},
+{0.9950980392156863, 0.9980392156862745, 0.7413725490196078},
+{0.9941176470588236, 0.9976470588235294, 0.7398431372549019},
+{0.9931372549019608, 0.9972549019607844, 0.738313725490196},
+{0.9921568627450981, 0.9968627450980392, 0.7367843137254902},
+{0.9911764705882353, 0.9964705882352941, 0.7352549019607844},
+{0.9901960784313726, 0.996078431372549, 0.7337254901960785},
+{0.9892156862745098, 0.995686274509804, 0.7321960784313726},
+{0.9882352941176471, 0.9952941176470588, 0.7306666666666667},
+{0.9872549019607844, 0.9949019607843137, 0.7291372549019608},
+{0.9862745098039216, 0.9945098039215686, 0.7276078431372549},
+{0.9852941176470589, 0.9941176470588236, 0.726078431372549},
+{0.9843137254901961, 0.9937254901960785, 0.7245490196078431},
+{0.9833333333333333, 0.9933333333333333, 0.7230196078431372},
+{0.9823529411764705, 0.9929411764705882, 0.7214901960784313},
+{0.9813725490196078, 0.9925490196078431, 0.7199607843137255},
+{0.9803921568627451, 0.9921568627450981, 0.7184313725490196},
+{0.9794117647058823, 0.991764705882353, 0.7169019607843137},
+{0.9784313725490196, 0.9913725490196078, 0.7153725490196079},
+{0.9774509803921568, 0.9909803921568627, 0.713843137254902},
+{0.9764705882352941, 0.9905882352941177, 0.7123137254901961},
+{0.9754901960784313, 0.9901960784313726, 0.7107843137254902},
+{0.9745098039215686, 0.9898039215686275, 0.7092549019607843},
+{0.9735294117647059, 0.9894117647058823, 0.7077254901960784},
+{0.9725490196078431, 0.9890196078431372, 0.7061960784313726},
+{0.9715686274509804, 0.9886274509803922, 0.7046666666666667},
+{0.9705882352941176, 0.9882352941176471, 0.7031372549019608},
+{0.9696078431372549, 0.9878431372549019, 0.7016078431372549},
+{0.9686274509803922, 0.9874509803921568, 0.700078431372549},
+{0.9676470588235294, 0.9870588235294118, 0.6985490196078431},
+{0.9666666666666667, 0.9866666666666667, 0.6970196078431372},
+{0.9656862745098039, 0.9862745098039216, 0.6954901960784313},
+{0.9647058823529412, 0.9858823529411764, 0.6939607843137255},
+{0.9637254901960784, 0.9854901960784314, 0.6924313725490197},
+{0.9627450980392157, 0.9850980392156863, 0.6909019607843138},
+{0.961764705882353, 0.9847058823529412, 0.6893725490196079},
+{0.9607843137254902, 0.9843137254901961, 0.687843137254902},
+{0.9598039215686275, 0.983921568627451, 0.6863137254901961},
+{0.9588235294117647, 0.9835294117647059, 0.6847843137254902},
+{0.957843137254902, 0.9831372549019608, 0.6832549019607843},
+{0.9568627450980393, 0.9827450980392157, 0.6817254901960784},
+{0.9558823529411765, 0.9823529411764707, 0.6801960784313725},
+{0.9549019607843138, 0.9819607843137255, 0.6786666666666666},
+{0.953921568627451, 0.9815686274509804, 0.6771372549019608},
+{0.9529411764705883, 0.9811764705882353, 0.6756078431372549},
+{0.9519607843137254, 0.9807843137254902, 0.674078431372549},
+{0.9509803921568627, 0.9803921568627452, 0.6725490196078432},
+{0.95, 0.98, 0.6710196078431373},
+{0.9490196078431372, 0.9796078431372549, 0.6694901960784314},
+{0.9480392156862745, 0.9792156862745098, 0.6679607843137255},
+{0.9470588235294117, 0.9788235294117648, 0.6664313725490196},
+{0.946078431372549, 0.9784313725490196, 0.6649019607843137},
+{0.9450980392156862, 0.9780392156862745, 0.6633725490196078},
+{0.9441176470588235, 0.9776470588235294, 0.661843137254902},
+{0.9431372549019608, 0.9772549019607844, 0.6603137254901961},
+{0.942156862745098, 0.9768627450980393, 0.6587843137254902},
+{0.9411764705882353, 0.9764705882352941, 0.6572549019607843},
+{0.9401960784313725, 0.976078431372549, 0.6557254901960784},
+{0.9392156862745098, 0.9756862745098039, 0.6541960784313725},
+{0.9382352941176471, 0.9752941176470589, 0.6526666666666666},
+{0.9372549019607843, 0.9749019607843138, 0.6511372549019607},
+{0.9362745098039216, 0.9745098039215686, 0.649607843137255},
+{0.9352941176470588, 0.9741176470588235, 0.6480784313725491},
+{0.9343137254901961, 0.9737254901960785, 0.6465490196078432},
+{0.9333333333333333, 0.9733333333333334, 0.6450196078431373},
+{0.9323529411764706, 0.9729411764705882, 0.6434901960784314},
+{0.9313725490196079, 0.9725490196078431, 0.6419607843137255},
+{0.9303921568627451, 0.972156862745098, 0.6404313725490196},
+{0.9294117647058824, 0.971764705882353, 0.6389019607843137},
+{0.9284313725490196, 0.9713725490196079, 0.6373725490196078},
+{0.9274509803921569, 0.9709803921568627, 0.6358431372549019},
+{0.9264705882352942, 0.9705882352941176, 0.634313725490196},
+{0.9254901960784314, 0.9701960784313726, 0.6327843137254902},
+{0.9245098039215687, 0.9698039215686275, 0.6312549019607843},
+{0.9235294117647059, 0.9694117647058824, 0.6297254901960785},
+{0.9225490196078432, 0.9690196078431372, 0.6281960784313725},
+{0.9215686274509804, 0.9686274509803922, 0.6266666666666667},
+{0.9205882352941177, 0.9682352941176471, 0.6251372549019608},
+{0.919607843137255, 0.967843137254902, 0.6236078431372549},
+{0.9186274509803922, 0.9674509803921569, 0.622078431372549},
+{0.9176470588235294, 0.9670588235294117, 0.6205490196078431},
+{0.9166666666666666, 0.9666666666666667, 0.6190196078431373},
+{0.915686274509804, 0.9662745098039216, 0.6174901960784314},
+{0.9147058823529413, 0.9658823529411765, 0.6159607843137255},
+{0.9137254901960784, 0.9654901960784315, 0.6144313725490196},
+{0.9127450980392157, 0.9650980392156863, 0.6129019607843137},
+{0.9117647058823529, 0.9647058823529412, 0.6113725490196078},
+{0.9107843137254902, 0.9643137254901961, 0.609843137254902},
+{0.9098039215686274, 0.963921568627451, 0.608313725490196},
+{0.9088235294117647, 0.963529411764706, 0.6067843137254902},
+{0.907843137254902, 0.9631372549019608, 0.6052549019607842},
+{0.9068627450980392, 0.9627450980392157, 0.6037254901960785},
+{0.9058823529411765, 0.9623529411764706, 0.6021960784313726},
+{0.9049019607843137, 0.9619607843137256, 0.6006666666666667},
+{0.903921568627451, 0.9615686274509804, 0.5991372549019608},
+{0.9029411764705882, 0.9611764705882353, 0.5976078431372549},
+{0.9019607843137255, 0.9607843137254902, 0.596078431372549},
+{0.8996470588235295, 0.959843137254902, 0.5965490196078431},
+{0.8973333333333333, 0.9589019607843138, 0.5970196078431372},
+{0.8950196078431373, 0.9579607843137256, 0.5974901960784313},
+{0.8927058823529412, 0.9570196078431373, 0.5979607843137255},
+{0.8903921568627451, 0.956078431372549, 0.5984313725490196},
+{0.888078431372549, 0.9551372549019608, 0.5989019607843137},
+{0.8857647058823529, 0.9541960784313726, 0.5993725490196078},
+{0.8834509803921569, 0.9532549019607843, 0.5998431372549019},
+{0.8811372549019608, 0.9523137254901961, 0.600313725490196},
+{0.8788235294117647, 0.9513725490196079, 0.6007843137254902},
+{0.8765098039215686, 0.9504313725490197, 0.6012549019607843},
+{0.8741960784313726, 0.9494901960784314, 0.6017254901960785},
+{0.8718823529411764, 0.9485490196078432, 0.6021960784313726},
+{0.8695686274509804, 0.9476078431372549, 0.6026666666666667},
+{0.8672549019607844, 0.9466666666666667, 0.6031372549019608},
+{0.8649411764705882, 0.9457254901960784, 0.6036078431372549},
+{0.8626274509803922, 0.9447843137254902, 0.604078431372549},
+{0.8603137254901961, 0.943843137254902, 0.6045490196078431},
+{0.858, 0.9429019607843138, 0.6050196078431372},
+{0.855686274509804, 0.9419607843137255, 0.6054901960784314},
+{0.8533725490196078, 0.9410196078431373, 0.6059607843137255},
+{0.8510588235294118, 0.9400784313725491, 0.6064313725490196},
+{0.8487450980392157, 0.9391372549019608, 0.6069019607843137},
+{0.8464313725490196, 0.9381960784313725, 0.6073725490196078},
+{0.8441176470588235, 0.9372549019607843, 0.6078431372549019},
+{0.8418039215686275, 0.9363137254901961, 0.608313725490196},
+{0.8394901960784313, 0.9353725490196079, 0.6087843137254901},
+{0.8371764705882353, 0.9344313725490196, 0.6092549019607842},
+{0.8348627450980393, 0.9334901960784314, 0.6097254901960784},
+{0.8325490196078431, 0.9325490196078432, 0.6101960784313725},
+{0.8302352941176471, 0.931607843137255, 0.6106666666666667},
+{0.827921568627451, 0.9306666666666666, 0.6111372549019608},
+{0.8256078431372549, 0.9297254901960784, 0.6116078431372549},
+{0.8232941176470588, 0.9287843137254902, 0.612078431372549},
+{0.8209803921568627, 0.927843137254902, 0.6125490196078431},
+{0.8186666666666667, 0.9269019607843137, 0.6130196078431372},
+{0.8163529411764706, 0.9259607843137255, 0.6134901960784314},
+{0.8140392156862745, 0.9250196078431373, 0.6139607843137255},
+{0.8117254901960784, 0.9240784313725491, 0.6144313725490196},
+{0.8094117647058824, 0.9231372549019609, 0.6149019607843137},
+{0.8070980392156862, 0.9221960784313725, 0.6153725490196078},
+{0.8047843137254902, 0.9212549019607843, 0.6158431372549019},
+{0.8024705882352942, 0.9203137254901961, 0.616313725490196},
+{0.800156862745098, 0.9193725490196079, 0.6167843137254901},
+{0.797843137254902, 0.9184313725490196, 0.6172549019607843},
+{0.7955294117647058, 0.9174901960784314, 0.6177254901960784},
+{0.7932156862745098, 0.9165490196078432, 0.6181960784313725},
+{0.7909019607843137, 0.915607843137255, 0.6186666666666666},
+{0.7885882352941176, 0.9146666666666667, 0.6191372549019607},
+{0.7862745098039216, 0.9137254901960785, 0.6196078431372549},
+{0.7839607843137255, 0.9127843137254902, 0.620078431372549},
+{0.7816470588235294, 0.911843137254902, 0.6205490196078431},
+{0.7793333333333333, 0.9109019607843137, 0.6210196078431373},
+{0.7770196078431373, 0.9099607843137255, 0.6214901960784314},
+{0.7747058823529411, 0.9090196078431373, 0.6219607843137255},
+{0.7723921568627451, 0.9080784313725491, 0.6224313725490196},
+{0.770078431372549, 0.9071372549019608, 0.6229019607843137},
+{0.7677647058823529, 0.9061960784313726, 0.6233725490196078},
+{0.7654509803921569, 0.9052549019607844, 0.6238431372549019},
+{0.7631372549019608, 0.9043137254901961, 0.624313725490196},
+{0.7608235294117647, 0.9033725490196078, 0.6247843137254901},
+{0.7585098039215686, 0.9024313725490196, 0.6252549019607843},
+{0.7561960784313725, 0.9014901960784314, 0.6257254901960784},
+{0.7538823529411764, 0.9005490196078432, 0.6261960784313725},
+{0.7515686274509803, 0.899607843137255, 0.6266666666666666},
+{0.7492549019607843, 0.8986666666666667, 0.6271372549019607},
+{0.7469411764705882, 0.8977254901960785, 0.6276078431372548},
+{0.7446274509803921, 0.8967843137254903, 0.6280784313725489},
+{0.742313725490196, 0.8958431372549019, 0.6285490196078432},
+{0.74, 0.8949019607843137, 0.6290196078431372},
+{0.7376862745098038, 0.8939607843137255, 0.6294901960784314},
+{0.7353725490196078, 0.8930196078431373, 0.6299607843137255},
+{0.7330588235294118, 0.892078431372549, 0.6304313725490196},
+{0.7307450980392156, 0.8911372549019608, 0.6309019607843137},
+{0.7284313725490196, 0.8901960784313726, 0.6313725490196078},
+{0.7261176470588235, 0.8892549019607844, 0.6318431372549019},
+{0.7238039215686274, 0.888313725490196, 0.632313725490196},
+{0.7214901960784313, 0.8873725490196078, 0.6327843137254902},
+{0.7191764705882353, 0.8864313725490196, 0.6332549019607843},
+{0.7168627450980392, 0.8854901960784314, 0.6337254901960784},
+{0.7145490196078431, 0.8845490196078432, 0.6341960784313725},
+{0.7122352941176471, 0.8836078431372549, 0.6346666666666666},
+{0.7099215686274509, 0.8826666666666667, 0.6351372549019607},
+{0.7076078431372549, 0.8817254901960785, 0.6356078431372548},
+{0.7052941176470587, 0.8807843137254903, 0.6360784313725489},
+{0.7029803921568627, 0.879843137254902, 0.636549019607843},
+{0.7006666666666667, 0.8789019607843138, 0.6370196078431372},
+{0.6983529411764706, 0.8779607843137255, 0.6374901960784313},
+{0.6960392156862745, 0.8770196078431373, 0.6379607843137254},
+{0.6937254901960784, 0.876078431372549, 0.6384313725490196},
+{0.6914117647058823, 0.8751372549019608, 0.6389019607843137},
+{0.6890980392156862, 0.8741960784313726, 0.6393725490196078},
+{0.6867843137254901, 0.8732549019607844, 0.6398431372549019},
+{0.684470588235294, 0.8723137254901961, 0.640313725490196},
+{0.682156862745098, 0.8713725490196078, 0.6407843137254902},
+{0.6798431372549019, 0.8704313725490196, 0.6412549019607843},
+{0.6775294117647058, 0.8694901960784314, 0.6417254901960784},
+{0.6752156862745098, 0.8685490196078431, 0.6421960784313725},
+{0.6729019607843136, 0.8676078431372549, 0.6426666666666666},
+{0.6705882352941176, 0.8666666666666667, 0.6431372549019607},
+{0.6678823529411764, 0.8656078431372549, 0.6431764705882352},
+{0.6651764705882353, 0.8645490196078431, 0.6432156862745098},
+{0.662470588235294, 0.8634901960784314, 0.6432549019607843},
+{0.6597647058823529, 0.8624313725490196, 0.6432941176470588},
+{0.6570588235294117, 0.8613725490196079, 0.6433333333333333},
+{0.6543529411764706, 0.8603137254901961, 0.6433725490196078},
+{0.6516470588235294, 0.8592549019607844, 0.6434117647058823},
+{0.6489411764705882, 0.8581960784313726, 0.6434509803921568},
+{0.646235294117647, 0.8571372549019608, 0.6434901960784313},
+{0.6435294117647058, 0.856078431372549, 0.6435294117647058},
+{0.6408235294117647, 0.8550196078431372, 0.6435686274509803},
+{0.6381176470588235, 0.8539607843137255, 0.6436078431372548},
+{0.6354117647058823, 0.8529019607843138, 0.6436470588235293},
+{0.6327058823529411, 0.851843137254902, 0.6436862745098039},
+{0.63, 0.8507843137254902, 0.6437254901960784},
+{0.6272941176470588, 0.8497254901960785, 0.6437647058823529},
+{0.6245882352941176, 0.8486666666666667, 0.6438039215686274},
+{0.6218823529411764, 0.8476078431372549, 0.6438431372549019},
+{0.6191764705882352, 0.8465490196078431, 0.6438823529411765},
+{0.6164705882352941, 0.8454901960784313, 0.643921568627451},
+{0.6137647058823529, 0.8444313725490196, 0.6439607843137255},
+{0.6110588235294118, 0.8433725490196079, 0.6439999999999999},
+{0.6083529411764705, 0.8423137254901961, 0.6440392156862744},
+{0.6056470588235294, 0.8412549019607843, 0.6440784313725489},
+{0.6029411764705882, 0.8401960784313726, 0.6441176470588235},
+{0.600235294117647, 0.8391372549019608, 0.644156862745098},
+{0.5975294117647059, 0.838078431372549, 0.6441960784313725},
+{0.5948235294117646, 0.8370196078431372, 0.644235294117647},
+{0.5921176470588235, 0.8359607843137254, 0.6442745098039215},
+{0.5894117647058823, 0.8349019607843138, 0.644313725490196},
+{0.5867058823529412, 0.833843137254902, 0.6443529411764706},
+{0.584, 0.8327843137254902, 0.6443921568627451},
+{0.5812941176470587, 0.8317254901960784, 0.6444313725490196},
+{0.5785882352941176, 0.8306666666666667, 0.6444705882352941},
+{0.5758823529411764, 0.8296078431372549, 0.6445098039215686},
+{0.5731764705882353, 0.8285490196078431, 0.644549019607843},
+{0.5704705882352941, 0.8274901960784313, 0.6445882352941176},
+{0.567764705882353, 0.8264313725490197, 0.6446274509803921},
+{0.5650588235294117, 0.8253725490196079, 0.6446666666666666},
+{0.5623529411764706, 0.8243137254901961, 0.6447058823529411},
+{0.5596470588235294, 0.8232549019607843, 0.6447450980392156},
+{0.5569411764705882, 0.8221960784313725, 0.6447843137254902},
+{0.554235294117647, 0.8211372549019608, 0.6448235294117647},
+{0.5515294117647058, 0.820078431372549, 0.6448627450980392},
+{0.5488235294117647, 0.8190196078431372, 0.6449019607843137},
+{0.5461176470588235, 0.8179607843137255, 0.6449411764705882},
+{0.5434117647058824, 0.8169019607843138, 0.6449803921568628},
+{0.5407058823529411, 0.815843137254902, 0.6450196078431373},
+{0.538, 0.8147843137254902, 0.6450588235294118},
+{0.5352941176470588, 0.8137254901960784, 0.6450980392156862},
+{0.5325882352941176, 0.8126666666666666, 0.6451372549019607},
+{0.5298823529411765, 0.8116078431372549, 0.6451764705882352},
+{0.5271764705882352, 0.8105490196078431, 0.6452156862745098},
+{0.5244705882352941, 0.8094901960784313, 0.6452549019607843},
+{0.5217647058823529, 0.8084313725490196, 0.6452941176470588},
+{0.5190588235294118, 0.8073725490196079, 0.6453333333333333},
+{0.5163529411764706, 0.8063137254901961, 0.6453725490196078},
+{0.5136470588235293, 0.8052549019607843, 0.6454117647058824},
+{0.5109411764705882, 0.8041960784313725, 0.6454509803921569},
+{0.5082352941176471, 0.8031372549019608, 0.6454901960784314},
+{0.5055294117647059, 0.802078431372549, 0.6455294117647059},
+{0.5028235294117647, 0.8010196078431373, 0.6455686274509804},
+{0.5001176470588236, 0.7999607843137255, 0.6456078431372549},
+{0.49741176470588233, 0.7989019607843137, 0.6456470588235295},
+{0.49470588235294116, 0.797843137254902, 0.6456862745098039},
+{0.492, 0.7967843137254902, 0.6457254901960784},
+{0.4892941176470588, 0.7957254901960784, 0.6457647058823529},
+{0.48658823529411765, 0.7946666666666666, 0.6458039215686274},
+{0.48388235294117643, 0.7936078431372549, 0.6458431372549019},
+{0.4811764705882353, 0.7925490196078431, 0.6458823529411765},
+{0.47847058823529415, 0.7914901960784314, 0.645921568627451},
+{0.475764705882353, 0.7904313725490196, 0.6459607843137255},
+{0.47305882352941175, 0.7893725490196078, 0.646},
+{0.47035294117647064, 0.7883137254901961, 0.6460392156862745},
+{0.4676470588235294, 0.7872549019607843, 0.6460784313725491},
+{0.46494117647058825, 0.7861960784313725, 0.6461176470588236},
+{0.4622352941176471, 0.7851372549019607, 0.6461568627450981},
+{0.45952941176470585, 0.784078431372549, 0.6461960784313726},
+{0.45682352941176474, 0.7830196078431373, 0.646235294117647},
+{0.4541176470588235, 0.7819607843137255, 0.6462745098039215},
+{0.45141176470588235, 0.7809019607843137, 0.6463137254901961},
+{0.4487058823529412, 0.779843137254902, 0.6463529411764706},
+{0.446, 0.7787843137254902, 0.6463921568627451},
+{0.44329411764705884, 0.7777254901960784, 0.6464313725490196},
+{0.4405882352941176, 0.7766666666666666, 0.6464705882352941},
+{0.4378823529411765, 0.7756078431372548, 0.6465098039215686},
+{0.43517647058823533, 0.7745490196078431, 0.6465490196078432},
+{0.43247058823529416, 0.7734901960784314, 0.6465882352941177},
+{0.42976470588235294, 0.7724313725490196, 0.6466274509803922},
+{0.4270588235294118, 0.7713725490196078, 0.6466666666666667},
+{0.4243529411764706, 0.770313725490196, 0.6467058823529412},
+{0.42164705882352943, 0.7692549019607843, 0.6467450980392158},
+{0.41894117647058826, 0.7681960784313725, 0.6467843137254902},
+{0.4162352941176471, 0.7671372549019607, 0.6468235294117647},
+{0.4135294117647059, 0.7660784313725489, 0.6468627450980392},
+{0.4108235294117647, 0.7650196078431373, 0.6469019607843137},
+{0.40811764705882353, 0.7639607843137255, 0.6469411764705882},
+{0.40541176470588236, 0.7629019607843137, 0.6469803921568628},
+{0.4027058823529412, 0.7618431372549019, 0.6470196078431373},
+{0.4, 0.7607843137254902, 0.6470588235294118},
+{0.3979607843137255, 0.7585098039215686, 0.648},
+{0.395921568627451, 0.756235294117647, 0.6489411764705882},
+{0.3938823529411765, 0.7539607843137255, 0.6498823529411765},
+{0.391843137254902, 0.7516862745098039, 0.6508235294117647},
+{0.3898039215686275, 0.7494117647058823, 0.651764705882353},
+{0.38776470588235296, 0.7471372549019607, 0.6527058823529412},
+{0.38572549019607844, 0.7448627450980392, 0.6536470588235295},
+{0.3836862745098039, 0.7425882352941177, 0.6545882352941177},
+{0.38164705882352945, 0.740313725490196, 0.6555294117647059},
+{0.37960784313725493, 0.7380392156862745, 0.6564705882352941},
+{0.3775686274509804, 0.7357647058823529, 0.6574117647058824},
+{0.3755294117647059, 0.7334901960784314, 0.6583529411764706},
+{0.37349019607843137, 0.7312156862745097, 0.6592941176470588},
+{0.3714509803921569, 0.7289411764705882, 0.6602352941176471},
+{0.3694117647058824, 0.7266666666666667, 0.6611764705882354},
+{0.36737254901960786, 0.724392156862745, 0.6621176470588236},
+{0.36533333333333334, 0.7221176470588235, 0.6630588235294118},
+{0.3632941176470588, 0.7198431372549019, 0.664},
+{0.36125490196078436, 0.7175686274509804, 0.6649411764705883},
+{0.35921568627450984, 0.7152941176470587, 0.6658823529411765},
+{0.3571764705882353, 0.7130196078431372, 0.6668235294117647},
+{0.3551372549019608, 0.7107450980392157, 0.6677647058823529},
+{0.3530980392156863, 0.7084705882352941, 0.6687058823529413},
+{0.35105882352941176, 0.7061960784313726, 0.6696470588235295},
+{0.34901960784313724, 0.7039215686274509, 0.6705882352941177},
+{0.34698039215686277, 0.7016470588235294, 0.6715294117647059},
+{0.34494117647058825, 0.6993725490196078, 0.6724705882352942},
+{0.34290196078431373, 0.6970980392156862, 0.6734117647058824},
+{0.3408627450980392, 0.6948235294117646, 0.6743529411764706},
+{0.33882352941176475, 0.6925490196078431, 0.6752941176470588},
+{0.3367843137254902, 0.6902745098039216, 0.676235294117647},
+{0.3347450980392157, 0.688, 0.6771764705882354},
+{0.3327058823529412, 0.6857254901960784, 0.6781176470588236},
+{0.33066666666666666, 0.6834509803921568, 0.6790588235294118},
+{0.32862745098039214, 0.6811764705882353, 0.68},
+{0.3265882352941177, 0.6789019607843138, 0.6809411764705883},
+{0.32454901960784316, 0.6766274509803921, 0.6818823529411765},
+{0.32250980392156864, 0.6743529411764706, 0.6828235294117647},
+{0.3204705882352941, 0.672078431372549, 0.6837647058823529},
+{0.3184313725490196, 0.6698039215686274, 0.6847058823529412},
+{0.31639215686274513, 0.6675294117647058, 0.6856470588235295},
+{0.3143529411764706, 0.6652549019607843, 0.6865882352941177},
+{0.3123137254901961, 0.6629803921568628, 0.6875294117647059},
+{0.31027450980392157, 0.6607058823529411, 0.6884705882352942},
+{0.30823529411764705, 0.6584313725490196, 0.6894117647058824},
+{0.30619607843137253, 0.656156862745098, 0.6903529411764706},
+{0.30415686274509807, 0.6538823529411765, 0.6912941176470588},
+{0.30211764705882355, 0.6516078431372548, 0.6922352941176471},
+{0.300078431372549, 0.6493333333333333, 0.6931764705882353},
+{0.2980392156862745, 0.6470588235294117, 0.6941176470588235},
+{0.29600000000000004, 0.6447843137254902, 0.6950588235294118},
+{0.2939607843137255, 0.6425098039215686, 0.6960000000000001},
+{0.291921568627451, 0.640235294117647, 0.6969411764705883},
+{0.2898823529411765, 0.6379607843137255, 0.6978823529411765},
+{0.28784313725490196, 0.635686274509804, 0.6988235294117647},
+{0.28580392156862744, 0.6334117647058823, 0.699764705882353},
+{0.2837647058823529, 0.6311372549019607, 0.7007058823529412},
+{0.2817254901960784, 0.6288627450980392, 0.7016470588235294},
+{0.27968627450980393, 0.6265882352941177, 0.7025882352941176},
+{0.2776470588235294, 0.624313725490196, 0.703529411764706},
+{0.2756078431372549, 0.6220392156862745, 0.7044705882352942},
+{0.27356862745098043, 0.619764705882353, 0.7054117647058824},
+{0.2715294117647059, 0.6174901960784314, 0.7063529411764706},
+{0.2694901960784314, 0.6152156862745097, 0.7072941176470589},
+{0.26745098039215687, 0.6129411764705882, 0.7082352941176471},
+{0.26541176470588235, 0.6106666666666667, 0.7091764705882353},
+{0.2633725490196078, 0.6083921568627451, 0.7101176470588235},
+{0.2613333333333333, 0.6061176470588235, 0.7110588235294117},
+{0.2592941176470588, 0.6038431372549019, 0.7120000000000001},
+{0.25725490196078427, 0.6015686274509804, 0.7129411764705883},
+{0.25521568627450986, 0.5992941176470589, 0.7138823529411765},
+{0.25317647058823534, 0.5970196078431372, 0.7148235294117647},
+{0.2511372549019608, 0.5947450980392157, 0.715764705882353},
+{0.2490980392156863, 0.5924705882352941, 0.7167058823529412},
+{0.24705882352941178, 0.5901960784313726, 0.7176470588235294},
+{0.24501960784313725, 0.587921568627451, 0.7185882352941176},
+{0.24298039215686273, 0.5856470588235294, 0.719529411764706},
+{0.24094117647058824, 0.5833725490196078, 0.7204705882352942},
+{0.23890196078431372, 0.5810980392156863, 0.7214117647058824},
+{0.2368627450980392, 0.5788235294117647, 0.7223529411764706},
+{0.2348235294117647, 0.5765490196078431, 0.7232941176470589},
+{0.2327843137254902, 0.5742745098039216, 0.7242352941176471},
+{0.23074509803921567, 0.5720000000000001, 0.7251764705882353},
+{0.22870588235294118, 0.5697254901960784, 0.7261176470588235},
+{0.22666666666666666, 0.5674509803921568, 0.7270588235294118},
+{0.22462745098039216, 0.5651764705882353, 0.728},
+{0.22258823529411764, 0.5629019607843138, 0.7289411764705882},
+{0.22054901960784315, 0.5606274509803921, 0.7298823529411765},
+{0.21850980392156863, 0.5583529411764706, 0.7308235294117648},
+{0.2164705882352941, 0.5560784313725491, 0.731764705882353},
+{0.21443137254901962, 0.5538039215686275, 0.7327058823529412},
+{0.2123921568627451, 0.5515294117647059, 0.7336470588235294},
+{0.21035294117647058, 0.5492549019607843, 0.7345882352941177},
+{0.20831372549019608, 0.5469803921568628, 0.7355294117647059},
+{0.20627450980392156, 0.5447058823529412, 0.7364705882352942},
+{0.20423529411764704, 0.5424313725490196, 0.7374117647058824},
+{0.20219607843137252, 0.5401568627450981, 0.7383529411764707},
+{0.20015686274509803, 0.5378823529411765, 0.7392941176470589},
+{0.1981176470588235, 0.5356078431372548, 0.7402352941176471},
+{0.19607843137254902, 0.5333333333333333, 0.7411764705882353},
+{0.19780392156862744, 0.5310980392156862, 0.7401176470588235},
+{0.19952941176470587, 0.5288627450980392, 0.7390588235294118},
+{0.2012549019607843, 0.5266274509803921, 0.738},
+{0.20298039215686275, 0.5243921568627451, 0.7369411764705882},
+{0.20470588235294118, 0.522156862745098, 0.7358823529411765},
+{0.2064313725490196, 0.519921568627451, 0.7348235294117648},
+{0.20815686274509804, 0.5176862745098039, 0.733764705882353},
+{0.20988235294117646, 0.5154509803921569, 0.7327058823529412},
+{0.2116078431372549, 0.5132156862745098, 0.7316470588235294},
+{0.21333333333333332, 0.5109803921568628, 0.7305882352941176},
+{0.21505882352941175, 0.5087450980392156, 0.7295294117647059},
+{0.2167843137254902, 0.5065098039215686, 0.7284705882352941},
+{0.21850980392156863, 0.5042745098039215, 0.7274117647058824},
+{0.22023529411764706, 0.5020392156862745, 0.7263529411764706},
+{0.22196078431372548, 0.49980392156862746, 0.7252941176470589},
+{0.2236862745098039, 0.4975686274509804, 0.7242352941176471},
+{0.22541176470588237, 0.49533333333333335, 0.7231764705882353},
+{0.2271372549019608, 0.4930980392156863, 0.7221176470588235},
+{0.22886274509803922, 0.49086274509803923, 0.7210588235294118},
+{0.23058823529411765, 0.4886274509803922, 0.72},
+{0.23231372549019608, 0.4863921568627451, 0.7189411764705882},
+{0.2340392156862745, 0.48415686274509806, 0.7178823529411765},
+{0.23576470588235293, 0.481921568627451, 0.7168235294117647},
+{0.23749019607843136, 0.47968627450980394, 0.715764705882353},
+{0.23921568627450981, 0.47745098039215683, 0.7147058823529412},
+{0.24094117647058824, 0.47521568627450983, 0.7136470588235294},
+{0.24266666666666667, 0.4729803921568628, 0.7125882352941176},
+{0.2443921568627451, 0.4707450980392157, 0.7115294117647059},
+{0.24611764705882352, 0.4685098039215686, 0.7104705882352941},
+{0.24784313725490195, 0.4662745098039216, 0.7094117647058824},
+{0.2495686274509804, 0.4640392156862745, 0.7083529411764706},
+{0.25129411764705883, 0.4618039215686275, 0.7072941176470589},
+{0.25301960784313726, 0.45956862745098037, 0.7062352941176471},
+{0.2547450980392157, 0.4573333333333333, 0.7051764705882353},
+{0.2564705882352941, 0.45509803921568626, 0.7041176470588235},
+{0.25819607843137254, 0.45286274509803925, 0.7030588235294117},
+{0.25992156862745097, 0.45062745098039214, 0.702},
+{0.2616470588235294, 0.44839215686274514, 0.7009411764705883},
+{0.2633725490196078, 0.446156862745098, 0.6998823529411765},
+{0.2650980392156863, 0.44392156862745097, 0.6988235294117647},
+{0.2668235294117647, 0.4416862745098039, 0.697764705882353},
+{0.26854901960784316, 0.43945098039215685, 0.6967058823529412},
+{0.27027450980392154, 0.4372156862745098, 0.6956470588235294},
+{0.272, 0.4349803921568628, 0.6945882352941176},
+{0.27372549019607845, 0.4327450980392157, 0.6935294117647058},
+{0.2754509803921569, 0.4305098039215686, 0.6924705882352942},
+{0.2771764705882353, 0.42827450980392157, 0.6914117647058824},
+{0.27890196078431373, 0.4260392156862745, 0.6903529411764706},
+{0.28062745098039216, 0.42380392156862745, 0.6892941176470588},
+{0.2823529411764706, 0.4215686274509804, 0.6882352941176471},
+{0.284078431372549, 0.41933333333333334, 0.6871764705882353},
+{0.28580392156862744, 0.4170980392156863, 0.6861176470588235},
+{0.28752941176470587, 0.4148627450980392, 0.6850588235294117},
+{0.2892549019607843, 0.41262745098039216, 0.6839999999999999},
+{0.2909803921568628, 0.4103921568627451, 0.6829411764705883},
+{0.29270588235294115, 0.40815686274509805, 0.6818823529411765},
+{0.29443137254901963, 0.405921568627451, 0.6808235294117647},
+{0.29615686274509806, 0.40368627450980393, 0.6797647058823529},
+{0.2978823529411765, 0.4014509803921569, 0.6787058823529412},
+{0.2996078431372549, 0.3992156862745098, 0.6776470588235294},
+{0.30133333333333334, 0.39698039215686276, 0.6765882352941176},
+{0.30305882352941177, 0.3947450980392157, 0.6755294117647059},
+{0.3047843137254902, 0.39250980392156865, 0.6744705882352942},
+{0.3065098039215686, 0.3902745098039216, 0.6734117647058824},
+{0.30823529411764705, 0.38803921568627453, 0.6723529411764706},
+{0.3099607843137255, 0.3858039215686275, 0.6712941176470588},
+{0.3116862745098039, 0.3835686274509804, 0.670235294117647},
+{0.3134117647058824, 0.3813333333333333, 0.6691764705882353},
+{0.3151372549019608, 0.3790980392156863, 0.6681176470588235},
+{0.31686274509803924, 0.3768627450980392, 0.6670588235294117},
+{0.3185882352941176, 0.3746274509803922, 0.666},
+{0.3203137254901961, 0.3723921568627451, 0.6649411764705883},
+{0.32203921568627447, 0.37015686274509807, 0.6638823529411765},
+{0.32376470588235295, 0.367921568627451, 0.6628235294117647},
+{0.3254901960784314, 0.36568627450980395, 0.6617647058823529},
+{0.3272156862745098, 0.3634509803921569, 0.6607058823529411},
+{0.32894117647058824, 0.36121568627450984, 0.6596470588235294},
+{0.33066666666666666, 0.3589803921568628, 0.6585882352941176},
+{0.3323921568627451, 0.3567450980392157, 0.6575294117647059},
+{0.3341176470588235, 0.3545098039215686, 0.6564705882352941},
+{0.335843137254902, 0.3522745098039216, 0.6554117647058824},
+{0.3375686274509804, 0.3500392156862745, 0.6543529411764706},
+{0.33929411764705886, 0.3478039215686275, 0.6532941176470588},
+{0.34101960784313723, 0.3455686274509804, 0.652235294117647},
+{0.3427450980392157, 0.3433333333333334, 0.6511764705882352},
+{0.3444705882352941, 0.3410980392156863, 0.6501176470588235},
+{0.34619607843137257, 0.33886274509803926, 0.6490588235294117},
+{0.34792156862745094, 0.3366274509803922, 0.648},
+{0.3496470588235294, 0.33439215686274515, 0.6469411764705882},
+{0.35137254901960785, 0.33215686274509804, 0.6458823529411765},
+{0.3530980392156863, 0.32992156862745103, 0.6448235294117647},
+{0.3548235294117647, 0.3276862745098039, 0.6437647058823529},
+{0.35654901960784313, 0.3254509803921569, 0.6427058823529411},
+{0.3582745098039216, 0.3232156862745098, 0.6416470588235293},
+{0.36, 0.3209803921568628, 0.6405882352941176},
+{0.36172549019607847, 0.3187450980392157, 0.6395294117647059},
+{0.36345098039215684, 0.3165098039215687, 0.6384705882352941},
+{0.3651764705882353, 0.3142745098039216, 0.6374117647058823},
+{0.36690196078431375, 0.3120392156862745, 0.6363529411764706},
+{0.3686274509803922, 0.30980392156862746, 0.6352941176470588}};
+
+/*(Table[Blend[
+     Map[(RGBColor @@ # &), ({{255, 245, 240}, {254, 224, 210}, {252, 
+          187, 161}, {252, 146, 114}, {251, 106, 74}, {239, 59, 
+          44}, {203, 24, 29}, {165, 15, 21}, {103, 0, 13}}/255), {1}],
+         x/1000], {x, 0, 1000, 1.}] /. RGBColor -> List) >> /tmp/1*/
+
+float palette_sequential_singlehue_red[1001][3]={{1., 0.9607843137254902, 0.9411764705882353}, 
+ {0.9999686274509804, 0.9601254901960785, 0.9402352941176471}, 
+ {0.9999372549019608, 0.9594666666666667, 0.9392941176470588}, 
+ {0.9999058823529412, 0.958807843137255, 0.9383529411764706}, 
+ {0.9998745098039216, 0.9581490196078432, 0.9374117647058824}, 
+ {0.9998431372549019, 0.9574901960784314, 0.936470588235294}, 
+ {0.9998117647058824, 0.9568313725490196, 0.9355294117647058}, 
+ {0.9997803921568628, 0.9561725490196079, 0.9345882352941176}, 
+ {0.9997490196078431, 0.9555137254901961, 0.9336470588235294}, 
+ {0.9997176470588235, 0.9548549019607844, 0.9327058823529412}, 
+ {0.999686274509804, 0.9541960784313726, 0.9317647058823529}, 
+ {0.9996549019607843, 0.9535372549019608, 0.9308235294117647}, 
+ {0.9996235294117647, 0.952878431372549, 0.9298823529411765}, 
+ {0.999592156862745, 0.9522196078431373, 0.9289411764705883}, 
+ {0.9995607843137255, 0.9515607843137255, 0.9279999999999999}, 
+ {0.9995294117647059, 0.9509019607843138, 0.9270588235294117}, 
+ {0.9994980392156863, 0.950243137254902, 0.9261176470588235}, 
+ {0.9994666666666666, 0.9495843137254902, 0.9251764705882353}, 
+ {0.9994352941176471, 0.9489254901960784, 0.924235294117647}, 
+ {0.9994039215686275, 0.9482666666666667, 0.9232941176470588}, 
+ {0.9993725490196078, 0.9476078431372549, 0.9223529411764706}, 
+ {0.9993411764705883, 0.9469490196078432, 0.9214117647058824}, 
+ {0.9993098039215687, 0.9462901960784313, 0.9204705882352942}, 
+ {0.999278431372549, 0.9456313725490196, 0.9195294117647058}, 
+ {0.9992470588235294, 0.9449725490196078, 0.9185882352941176}, 
+ {0.9992156862745099, 0.9443137254901961, 0.9176470588235294}, 
+ {0.9991843137254902, 0.9436549019607843, 0.9167058823529411}, 
+ {0.9991529411764706, 0.9429960784313726, 0.9157647058823529}, 
+ {0.9991215686274509, 0.9423372549019609, 0.9148235294117647}, 
+ {0.9990901960784314, 0.941678431372549, 0.9138823529411765}, 
+ {0.9990588235294118, 0.9410196078431373, 0.9129411764705883}, 
+ {0.9990274509803921, 0.9403607843137255, 0.912}, 
+ {0.9989960784313725, 0.9397019607843138, 0.9110588235294117}, 
+ {0.998964705882353, 0.939043137254902, 0.9101176470588235}, 
+ {0.9989333333333333, 0.9383843137254902, 0.9091764705882353}, 
+ {0.9989019607843137, 0.9377254901960784, 0.908235294117647}, 
+ {0.9988705882352942, 0.9370666666666667, 0.9072941176470588}, 
+ {0.9988392156862745, 0.9364078431372549, 0.9063529411764706}, 
+ {0.9988078431372549, 0.9357490196078432, 0.9054117647058824}, 
+ {0.9987764705882353, 0.9350901960784314, 0.9044705882352941}, 
+ {0.9987450980392157, 0.9344313725490196, 0.9035294117647059}, 
+ {0.9987137254901961, 0.9337725490196078, 0.9025882352941176}, 
+ {0.9986823529411765, 0.9331137254901961, 0.9016470588235294}, 
+ {0.9986509803921568, 0.9324549019607843, 0.9007058823529411}, 
+ {0.9986196078431373, 0.9317960784313726, 0.8997647058823529}, 
+ {0.9985882352941177, 0.9311372549019608, 0.8988235294117647}, 
+ {0.998556862745098, 0.930478431372549, 0.8978823529411765}, 
+ {0.9985254901960784, 0.9298196078431372, 0.8969411764705882}, 
+ {0.9984941176470589, 0.9291607843137255, 0.896}, 
+ {0.9984627450980392, 0.9285019607843137, 0.8950588235294117}, 
+ {0.9984313725490196, 0.927843137254902, 0.8941176470588235}, 
+ {0.9984, 0.9271843137254903, 0.8931764705882352}, 
+ {0.9983686274509804, 0.9265254901960784, 0.892235294117647}, 
+ {0.9983372549019608, 0.9258666666666667, 0.8912941176470588}, 
+ {0.9983058823529412, 0.9252078431372549, 0.8903529411764706}, 
+ {0.9982745098039216, 0.9245490196078432, 0.8894117647058823}, 
+ {0.998243137254902, 0.9238901960784314, 0.8884705882352941}, 
+ {0.9982117647058824, 0.9232313725490197, 0.8875294117647059}, 
+ {0.9981803921568627, 0.9225725490196078, 0.8865882352941177}, 
+ {0.9981490196078432, 0.9219137254901961, 0.8856470588235293}, 
+ {0.9981176470588236, 0.9212549019607843, 0.8847058823529411}, 
+ {0.9980862745098039, 0.9205960784313726, 0.8837647058823529}, 
+ {0.9980549019607843, 0.9199372549019608, 0.8828235294117647}, 
+ {0.9980235294117648, 0.919278431372549, 0.8818823529411765}, 
+ {0.9979921568627451, 0.9186196078431372, 0.8809411764705882}, 
+ {0.9979607843137255, 0.9179607843137255, 0.88}, 
+ {0.9979294117647058, 0.9173019607843137, 0.8790588235294118}, 
+ {0.9978980392156863, 0.916643137254902, 0.8781176470588234}, 
+ {0.9978666666666667, 0.9159843137254902, 0.8771764705882352}, 
+ {0.997835294117647, 0.9153254901960785, 0.876235294117647}, 
+ {0.9978039215686274, 0.9146666666666666, 0.8752941176470588}, 
+ {0.9977725490196079, 0.9140078431372549, 0.8743529411764706}, 
+ {0.9977411764705882, 0.9133490196078431, 0.8734117647058823}, 
+ {0.9977098039215686, 0.9126901960784314, 0.8724705882352941}, 
+ {0.9976784313725491, 0.9120313725490197, 0.8715294117647059}, 
+ {0.9976470588235294, 0.9113725490196078, 0.8705882352941177}, 
+ {0.9976156862745098, 0.910713725490196, 0.8696470588235294}, 
+ {0.9975843137254902, 0.9100549019607843, 0.8687058823529411}, 
+ {0.9975529411764706, 0.9093960784313726, 0.8677647058823529}, 
+ {0.997521568627451, 0.9087372549019608, 0.8668235294117647}, 
+ {0.9974901960784314, 0.9080784313725491, 0.8658823529411764}, 
+ {0.9974588235294117, 0.9074196078431372, 0.8649411764705882}, 
+ {0.9974274509803922, 0.9067607843137255, 0.864}, 
+ {0.9973960784313726, 0.9061019607843137, 0.8630588235294118}, 
+ {0.9973647058823529, 0.905443137254902, 0.8621176470588234}, 
+ {0.9973333333333333, 0.9047843137254902, 0.8611764705882352}, 
+ {0.9973019607843138, 0.9041254901960785, 0.860235294117647}, 
+ {0.9972705882352941, 0.9034666666666666, 0.8592941176470588}, 
+ {0.9972392156862745, 0.9028078431372549, 0.8583529411764705}, 
+ {0.9972078431372549, 0.9021490196078431, 0.8574117647058823}, 
+ {0.9971764705882353, 0.9014901960784314, 0.8564705882352941}, 
+ {0.9971450980392157, 0.9008313725490196, 0.8555294117647059}, 
+ {0.9971137254901961, 0.9001725490196079, 0.8545882352941176}, 
+ {0.9970823529411765, 0.899513725490196, 0.8536470588235294}, 
+ {0.9970509803921569, 0.8988549019607843, 0.8527058823529412}, 
+ {0.9970196078431373, 0.8981960784313725, 0.8517647058823529}, 
+ {0.9969882352941176, 0.8975372549019608, 0.8508235294117646}, 
+ {0.9969568627450981, 0.896878431372549, 0.8498823529411764}, 
+ {0.9969254901960785, 0.8962196078431373, 0.8489411764705882}, 
+ {0.9968941176470588, 0.8955607843137254, 0.848}, 
+ {0.9968627450980392, 0.8949019607843137, 0.8470588235294118}, 
+ {0.9968313725490197, 0.894243137254902, 0.8461176470588235}, 
+ {0.9968, 0.8935843137254902, 0.8451764705882352}, 
+ {0.9967686274509804, 0.8929254901960784, 0.844235294117647}, 
+ {0.9967372549019607, 0.8922666666666667, 0.8432941176470587}, 
+ {0.9967058823529412, 0.8916078431372549, 0.8423529411764705}, 
+ {0.9966745098039216, 0.8909490196078431, 0.8414117647058823}, 
+ {0.996643137254902, 0.8902901960784314, 0.8404705882352941}, 
+ {0.9966117647058824, 0.8896313725490196, 0.8395294117647059}, 
+ {0.9965803921568628, 0.8889725490196079, 0.8385882352941176}, 
+ {0.9965490196078431, 0.888313725490196, 0.8376470588235294}, 
+ {0.9965176470588235, 0.8876549019607843, 0.8367058823529412}, 
+ {0.996486274509804, 0.8869960784313725, 0.8357647058823529}, 
+ {0.9964549019607843, 0.8863372549019608, 0.8348235294117646}, 
+ {0.9964235294117647, 0.885678431372549, 0.8338823529411764}, 
+ {0.9963921568627451, 0.8850196078431373, 0.8329411764705882}, 
+ {0.9963607843137255, 0.8843607843137254, 0.832}, 
+ {0.9963294117647059, 0.8837019607843137, 0.8310588235294117}, 
+ {0.9962980392156863, 0.8830431372549019, 0.8301176470588235}, 
+ {0.9962666666666666, 0.8823843137254902, 0.8291764705882353}, 
+ {0.9962352941176471, 0.8817254901960784, 0.8282352941176471}, 
+ {0.9962039215686275, 0.8810666666666667, 0.8272941176470587}, 
+ {0.9961725490196078, 0.8804078431372548, 0.8263529411764705}, 
+ {0.9961411764705882, 0.8797490196078431, 0.8254117647058823}, 
+ {0.9961098039215687, 0.8790901960784314, 0.8244705882352941}, 
+ {0.996078431372549, 0.8784313725490196, 0.8235294117647058}, 
+ {0.9960156862745099, 0.8772705882352941, 0.8219921568627451}, 
+ {0.9959529411764706, 0.8761098039215686, 0.8204549019607843}, 
+ {0.9958901960784314, 0.8749490196078431, 0.8189176470588235}, 
+ {0.9958274509803922, 0.8737882352941176, 0.8173803921568628}, 
+ {0.995764705882353, 0.8726274509803922, 0.8158431372549019}, 
+ {0.9957019607843137, 0.8714666666666666, 0.8143058823529411}, 
+ {0.9956392156862746, 0.8703058823529412, 0.8127686274509803}, 
+ {0.9955764705882353, 0.8691450980392157, 0.8112313725490196}, 
+ {0.9955137254901961, 0.8679843137254901, 0.8096941176470588}, 
+ {0.9954509803921568, 0.8668235294117647, 0.808156862745098}, 
+ {0.9953882352941177, 0.8656627450980392, 0.8066196078431372}, 
+ {0.9953254901960784, 0.8645019607843137, 0.8050823529411764}, 
+ {0.9952627450980392, 0.8633411764705882, 0.8035450980392156}, 
+ {0.9952, 0.8621803921568627, 0.8020078431372548}, 
+ {0.9951372549019608, 0.8610196078431372, 0.800470588235294}, 
+ {0.9950745098039215, 0.8598588235294118, 0.7989333333333333}, 
+ {0.9950117647058824, 0.8586980392156862, 0.7973960784313725}, 
+ {0.9949490196078431, 0.8575372549019608, 0.7958588235294117}, 
+ {0.9948862745098039, 0.8563764705882353, 0.794321568627451}, 
+ {0.9948235294117648, 0.8552156862745098, 0.7927843137254902}, 
+ {0.9947607843137255, 0.8540549019607843, 0.7912470588235294}, 
+ {0.9946980392156863, 0.8528941176470588, 0.7897098039215686}, 
+ {0.9946352941176471, 0.8517333333333333, 0.7881725490196079}, 
+ {0.9945725490196079, 0.8505725490196079, 0.786635294117647}, 
+ {0.9945098039215686, 0.8494117647058823, 0.7850980392156862}, 
+ {0.9944470588235295, 0.8482509803921569, 0.7835607843137254}, 
+ {0.9943843137254902, 0.8470901960784314, 0.7820235294117647}, 
+ {0.994321568627451, 0.8459294117647058, 0.7804862745098039}, 
+ {0.9942588235294118, 0.8447686274509804, 0.7789490196078431}, 
+ {0.9941960784313726, 0.8436078431372549, 0.7774117647058824}, 
+ {0.9941333333333333, 0.8424470588235294, 0.7758745098039215}, 
+ {0.9940705882352942, 0.8412862745098039, 0.7743372549019607}, 
+ {0.9940078431372549, 0.8401254901960784, 0.7727999999999999}, 
+ {0.9939450980392157, 0.838964705882353, 0.7712627450980392}, 
+ {0.9938823529411764, 0.8378039215686274, 0.7697254901960784}, 
+ {0.9938196078431373, 0.8366431372549019, 0.7681882352941176}, 
+ {0.9937568627450981, 0.8354823529411765, 0.7666509803921568}, 
+ {0.9936941176470588, 0.834321568627451, 0.7651137254901961}, 
+ {0.9936313725490197, 0.8331607843137254, 0.7635764705882353}, 
+ {0.9935686274509804, 0.832, 0.7620392156862744}, 
+ {0.9935058823529412, 0.8308392156862745, 0.7605019607843136}, 
+ {0.993443137254902, 0.8296784313725489, 0.7589647058823529}, 
+ {0.9933803921568628, 0.8285176470588235, 0.7574274509803921}, 
+ {0.9933176470588235, 0.827356862745098, 0.7558901960784313}, 
+ {0.9932549019607844, 0.8261960784313725, 0.7543529411764706}, 
+ {0.9931921568627451, 0.825035294117647, 0.7528156862745098}, 
+ {0.9931294117647059, 0.8238745098039215, 0.7512784313725489}, 
+ {0.9930666666666667, 0.8227137254901961, 0.7497411764705881}, 
+ {0.9930039215686275, 0.8215529411764706, 0.7482039215686274}, 
+ {0.9929411764705882, 0.820392156862745, 0.7466666666666666}, 
+ {0.992878431372549, 0.8192313725490196, 0.7451294117647058}, 
+ {0.9928156862745098, 0.8180705882352941, 0.743592156862745}, 
+ {0.9927529411764706, 0.8169098039215686, 0.7420549019607843}, 
+ {0.9926901960784315, 0.8157490196078431, 0.7405176470588235}, 
+ {0.9926274509803922, 0.8145882352941176, 0.7389803921568627}, 
+ {0.992564705882353, 0.8134274509803922, 0.737443137254902}, 
+ {0.9925019607843137, 0.8122666666666667, 0.7359058823529412}, 
+ {0.9924392156862746, 0.8111058823529411, 0.7343686274509804}, 
+ {0.9923764705882353, 0.8099450980392157, 0.7328313725490195}, 
+ {0.9923137254901961, 0.8087843137254902, 0.7312941176470588}, 
+ {0.9922509803921569, 0.8076235294117646, 0.729756862745098}, 
+ {0.9921882352941177, 0.8064627450980392, 0.7282196078431372}, 
+ {0.9921254901960784, 0.8053019607843137, 0.7266823529411764}, 
+ {0.9920627450980393, 0.8041411764705882, 0.7251450980392157}, 
+ {0.992, 0.8029803921568627, 0.7236078431372549}, 
+ {0.9919372549019608, 0.8018196078431372, 0.7220705882352941}, 
+ {0.9918745098039216, 0.8006588235294118, 0.7205333333333332}, 
+ {0.9918117647058824, 0.7994980392156863, 0.7189960784313725}, 
+ {0.9917490196078431, 0.7983372549019607, 0.7174588235294117}, 
+ {0.991686274509804, 0.7971764705882353, 0.7159215686274509}, 
+ {0.9916235294117647, 0.7960156862745098, 0.7143843137254902}, 
+ {0.9915607843137255, 0.7948549019607842, 0.7128470588235294}, 
+ {0.9914980392156864, 0.7936941176470588, 0.7113098039215686}, 
+ {0.9914352941176471, 0.7925333333333333, 0.7097725490196078}, 
+ {0.9913725490196079, 0.7913725490196077, 0.7082352941176471}, 
+ {0.9913098039215686, 0.7902117647058823, 0.7066980392156862}, 
+ {0.9912470588235295, 0.7890509803921568, 0.7051607843137254}, 
+ {0.9911843137254902, 0.7878901960784314, 0.7036235294117646}, 
+ {0.991121568627451, 0.7867294117647058, 0.7020862745098039}, 
+ {0.9910588235294118, 0.7855686274509803, 0.7005490196078431}, 
+ {0.9909960784313726, 0.7844078431372549, 0.6990117647058823}, 
+ {0.9909333333333333, 0.7832470588235294, 0.6974745098039214}, 
+ {0.9908705882352942, 0.7820862745098038, 0.6959372549019607}, 
+ {0.9908078431372549, 0.7809254901960784, 0.6944}, 
+ {0.9907450980392157, 0.7797647058823529, 0.6928627450980391}, 
+ {0.9906823529411765, 0.7786039215686275, 0.6913254901960784}, 
+ {0.9906196078431373, 0.7774431372549019, 0.6897882352941176}, 
+ {0.990556862745098, 0.7762823529411764, 0.6882509803921568}, 
+ {0.9904941176470589, 0.775121568627451, 0.686713725490196}, 
+ {0.9904313725490197, 0.7739607843137255, 0.6851764705882353}, 
+ {0.9903686274509804, 0.7727999999999999, 0.6836392156862745}, 
+ {0.9903058823529413, 0.7716392156862745, 0.6821019607843137}, 
+ {0.990243137254902, 0.770478431372549, 0.680564705882353}, 
+ {0.9901803921568628, 0.7693176470588234, 0.6790274509803922}, 
+ {0.9901176470588235, 0.768156862745098, 0.6774901960784313}, 
+ {0.9900549019607844, 0.7669960784313725, 0.6759529411764705}, 
+ {0.9899921568627451, 0.7658352941176471, 0.6744156862745098}, 
+ {0.989929411764706, 0.7646745098039215, 0.672878431372549}, 
+ {0.9898666666666667, 0.763513725490196, 0.6713411764705882}, 
+ {0.9898039215686275, 0.7623529411764706, 0.6698039215686274}, 
+ {0.9897411764705882, 0.7611921568627451, 0.6682666666666666}, 
+ {0.9896784313725491, 0.7600313725490195, 0.6667294117647058}, 
+ {0.9896156862745098, 0.7588705882352941, 0.665192156862745}, 
+ {0.9895529411764706, 0.7577098039215686, 0.6636549019607842}, 
+ {0.9894901960784314, 0.756549019607843, 0.6621176470588235}, 
+ {0.9894274509803922, 0.7553882352941176, 0.6605803921568627}, 
+ {0.9893647058823529, 0.7542274509803921, 0.6590431372549019}, 
+ {0.9893019607843138, 0.7530666666666666, 0.6575058823529412}, 
+ {0.9892392156862746, 0.7519058823529411, 0.6559686274509804}, 
+ {0.9891764705882353, 0.7507450980392156, 0.6544313725490196}, 
+ {0.9891137254901962, 0.7495843137254902, 0.6528941176470587}, 
+ {0.9890509803921569, 0.7484235294117646, 0.651356862745098}, 
+ {0.9889882352941177, 0.7472627450980391, 0.6498196078431372}, 
+ {0.9889254901960784, 0.7461019607843137, 0.6482823529411764}, 
+ {0.9888627450980393, 0.7449411764705882, 0.6467450980392156}, 
+ {0.9888, 0.7437803921568626, 0.6452078431372549}, 
+ {0.9887372549019608, 0.7426196078431372, 0.6436705882352941}, 
+ {0.9886745098039216, 0.7414588235294117, 0.6421333333333333}, 
+ {0.9886117647058824, 0.7402980392156863, 0.6405960784313726}, 
+ {0.9885490196078431, 0.7391372549019608, 0.6390588235294117}, 
+ {0.988486274509804, 0.7379764705882352, 0.6375215686274509}, 
+ {0.9884235294117647, 0.7368156862745098, 0.6359843137254901}, 
+ {0.9883607843137255, 0.7356549019607843, 0.6344470588235294}, 
+ {0.9882980392156863, 0.7344941176470587, 0.6329098039215686}, 
+ {0.9882352941176471, 0.7333333333333333, 0.6313725490196078}, 
+ {0.9882352941176471, 0.7320470588235294, 0.6298980392156862}, 
+ {0.9882352941176471, 0.7307607843137255, 0.6284235294117647}, 
+ {0.9882352941176471, 0.7294745098039215, 0.6269490196078431}, 
+ {0.9882352941176471, 0.7281882352941176, 0.6254745098039215}, 
+ {0.9882352941176471, 0.7269019607843137, 0.624}, 
+ {0.9882352941176471, 0.7256156862745098, 0.6225254901960784}, 
+ {0.9882352941176471, 0.7243294117647058, 0.6210509803921568}, 
+ {0.9882352941176471, 0.7230431372549019, 0.6195764705882353}, 
+ {0.9882352941176471, 0.721756862745098, 0.6181019607843137}, 
+ {0.9882352941176471, 0.7204705882352941, 0.6166274509803922}, 
+ {0.9882352941176471, 0.7191843137254902, 0.6151529411764706}, 
+ {0.9882352941176471, 0.7178980392156862, 0.613678431372549}, 
+ {0.9882352941176471, 0.7166117647058823, 0.6122039215686275}, 
+ {0.9882352941176471, 0.7153254901960784, 0.6107294117647059}, 
+ {0.9882352941176471, 0.7140392156862745, 0.6092549019607842}, 
+ {0.9882352941176471, 0.7127529411764705, 0.6077803921568627}, 
+ {0.9882352941176471, 0.7114666666666666, 0.6063058823529411}, 
+ {0.9882352941176471, 0.7101803921568627, 0.6048313725490195}, 
+ {0.9882352941176471, 0.7088941176470588, 0.603356862745098}, 
+ {0.9882352941176471, 0.7076078431372548, 0.6018823529411764}, 
+ {0.9882352941176471, 0.7063215686274509, 0.6004078431372548}, 
+ {0.9882352941176471, 0.705035294117647, 0.5989333333333333}, 
+ {0.9882352941176471, 0.7037490196078431, 0.5974588235294117}, 
+ {0.9882352941176471, 0.7024627450980392, 0.5959843137254901}, 
+ {0.9882352941176471, 0.7011764705882352, 0.5945098039215686}, 
+ {0.9882352941176471, 0.6998901960784313, 0.593035294117647}, 
+ {0.9882352941176471, 0.6986039215686274, 0.5915607843137254}, 
+ {0.9882352941176471, 0.6973176470588235, 0.5900862745098039}, 
+ {0.9882352941176471, 0.6960313725490195, 0.5886117647058823}, 
+ {0.9882352941176471, 0.6947450980392156, 0.5871372549019608}, 
+ {0.9882352941176471, 0.6934588235294117, 0.5856627450980392}, 
+ {0.9882352941176471, 0.6921725490196078, 0.5841882352941176}, 
+ {0.9882352941176471, 0.6908862745098039, 0.5827137254901961}, 
+ {0.9882352941176471, 0.6895999999999999, 0.5812392156862745}, 
+ {0.9882352941176471, 0.688313725490196, 0.5797647058823528}, 
+ {0.9882352941176471, 0.6870274509803921, 0.5782901960784314}, 
+ {0.9882352941176471, 0.6857411764705882, 0.5768156862745097}, 
+ {0.9882352941176471, 0.6844549019607842, 0.5753411764705881}, 
+ {0.9882352941176471, 0.6831686274509804, 0.5738666666666667}, 
+ {0.9882352941176471, 0.6818823529411765, 0.5723921568627451}, 
+ {0.9882352941176471, 0.6805960784313725, 0.5709176470588235}, 
+ {0.9882352941176471, 0.6793098039215686, 0.569443137254902}, 
+ {0.9882352941176471, 0.6780235294117647, 0.5679686274509804}, 
+ {0.9882352941176471, 0.6767372549019608, 0.5664941176470588}, 
+ {0.9882352941176471, 0.6754509803921568, 0.5650196078431373}, 
+ {0.9882352941176471, 0.6741647058823529, 0.5635450980392157}, 
+ {0.9882352941176471, 0.672878431372549, 0.5620705882352941}, 
+ {0.9882352941176471, 0.6715921568627451, 0.5605960784313726}, 
+ {0.9882352941176471, 0.6703058823529411, 0.559121568627451}, 
+ {0.9882352941176471, 0.6690196078431372, 0.5576470588235294}, 
+ {0.9882352941176471, 0.6677333333333333, 0.5561725490196079}, 
+ {0.9882352941176471, 0.6664470588235294, 0.5546980392156863}, 
+ {0.9882352941176471, 0.6651607843137255, 0.5532235294117647}, 
+ {0.9882352941176471, 0.6638745098039215, 0.5517490196078432}, 
+ {0.9882352941176471, 0.6625882352941176, 0.5502745098039216}, 
+ {0.9882352941176471, 0.6613019607843137, 0.5488}, 
+ {0.9882352941176471, 0.6600156862745098, 0.5473254901960785}, 
+ {0.9882352941176471, 0.6587294117647058, 0.5458509803921568}, 
+ {0.9882352941176471, 0.6574431372549019, 0.5443764705882352}, 
+ {0.9882352941176471, 0.656156862745098, 0.5429019607843137}, 
+ {0.9882352941176471, 0.6548705882352941, 0.5414274509803921}, 
+ {0.9882352941176471, 0.6535843137254902, 0.5399529411764706}, 
+ {0.9882352941176471, 0.6522980392156862, 0.538478431372549}, 
+ {0.9882352941176471, 0.6510117647058823, 0.5370039215686274}, 
+ {0.9882352941176471, 0.6497254901960784, 0.5355294117647059}, 
+ {0.9882352941176471, 0.6484392156862745, 0.5340549019607843}, 
+ {0.9882352941176471, 0.6471529411764705, 0.5325803921568627}, 
+ {0.9882352941176471, 0.6458666666666666, 0.5311058823529412}, 
+ {0.9882352941176471, 0.6445803921568627, 0.5296313725490196}, 
+ {0.9882352941176471, 0.6432941176470588, 0.528156862745098}, 
+ {0.9882352941176471, 0.6420078431372549, 0.5266823529411765}, 
+ {0.9882352941176471, 0.6407215686274509, 0.5252078431372549}, 
+ {0.9882352941176471, 0.639435294117647, 0.5237333333333334}, 
+ {0.9882352941176471, 0.6381490196078431, 0.5222588235294118}, 
+ {0.9882352941176471, 0.6368627450980392, 0.5207843137254902}, 
+ {0.9882352941176471, 0.6355764705882352, 0.5193098039215687}, 
+ {0.9882352941176471, 0.6342901960784313, 0.5178352941176471}, 
+ {0.9882352941176471, 0.6330039215686274, 0.5163607843137255}, 
+ {0.9882352941176471, 0.6317176470588235, 0.514886274509804}, 
+ {0.9882352941176471, 0.6304313725490196, 0.5134117647058823}, 
+ {0.9882352941176471, 0.6291450980392156, 0.5119372549019607}, 
+ {0.9882352941176471, 0.6278588235294117, 0.5104627450980392}, 
+ {0.9882352941176471, 0.6265725490196078, 0.5089882352941176}, 
+ {0.9882352941176471, 0.6252862745098039, 0.507513725490196}, 
+ {0.9882352941176471, 0.6239999999999999, 0.5060392156862745}, 
+ {0.9882352941176471, 0.622713725490196, 0.5045647058823529}, 
+ {0.9882352941176471, 0.6214274509803921, 0.5030901960784313}, 
+ {0.9882352941176471, 0.6201411764705882, 0.5016156862745098}, 
+ {0.9882352941176471, 0.6188549019607843, 0.5001411764705882}, 
+ {0.9882352941176471, 0.6175686274509803, 0.49866666666666665}, 
+ {0.9882352941176471, 0.6162823529411764, 0.4971921568627451}, 
+ {0.9882352941176471, 0.6149960784313725, 0.4957176470588235}, 
+ {0.9882352941176471, 0.6137098039215686, 0.49424313725490193}, 
+ {0.9882352941176471, 0.6124235294117646, 0.4927686274509804}, 
+ {0.9882352941176471, 0.6111372549019607, 0.49129411764705877}, 
+ {0.9882352941176471, 0.6098509803921568, 0.4898196078431372}, 
+ {0.9882352941176471, 0.6085647058823529, 0.48834509803921566}, 
+ {0.9882352941176471, 0.607278431372549, 0.48687058823529406}, 
+ {0.9882352941176471, 0.605992156862745, 0.4853960784313725}, 
+ {0.9882352941176471, 0.6047058823529411, 0.48392156862745095}, 
+ {0.9882352941176471, 0.6034196078431372, 0.48244705882352934}, 
+ {0.9882352941176471, 0.6021333333333333, 0.4809725490196079}, 
+ {0.9882352941176471, 0.6008470588235294, 0.47949803921568634}, 
+ {0.9882352941176471, 0.5995607843137255, 0.47802352941176474}, 
+ {0.9882352941176471, 0.5982745098039215, 0.4765490196078432}, 
+ {0.9882352941176471, 0.5969882352941176, 0.47507450980392163}, 
+ {0.9882352941176471, 0.5957019607843137, 0.4736}, 
+ {0.9882352941176471, 0.5944156862745098, 0.47212549019607847}, 
+ {0.9882352941176471, 0.5931294117647059, 0.4706509803921569}, 
+ {0.9882352941176471, 0.591843137254902, 0.4691764705882353}, 
+ {0.9882352941176471, 0.590556862745098, 0.46770196078431375}, 
+ {0.9882352941176471, 0.5892705882352941, 0.4662274509803922}, 
+ {0.9882352941176471, 0.5879843137254902, 0.4647529411764706}, 
+ {0.9882352941176471, 0.5866980392156862, 0.4632784313725491}, 
+ {0.9882352941176471, 0.5854117647058823, 0.4618039215686275}, 
+ {0.9882352941176471, 0.5841254901960784, 0.4603294117647059}, 
+ {0.9882352941176471, 0.5828392156862745, 0.4588549019607844}, 
+ {0.9882352941176471, 0.5815529411764706, 0.45738039215686277}, 
+ {0.9882352941176471, 0.5802666666666666, 0.4559058823529412}, 
+ {0.9882352941176471, 0.5789803921568627, 0.45443137254901966}, 
+ {0.9882352941176471, 0.5776941176470588, 0.45295686274509805}, 
+ {0.9882352941176471, 0.5764078431372549, 0.4514823529411765}, 
+ {0.9882352941176471, 0.5751215686274509, 0.45000784313725495}, 
+ {0.9882352941176471, 0.573835294117647, 0.44853333333333334}, 
+ {0.9882352941176471, 0.5725490196078431, 0.4470588235294118}, 
+ {0.9882039215686275, 0.5712941176470588, 0.44580392156862747}, 
+ {0.9881725490196079, 0.5700392156862745, 0.44454901960784315}, 
+ {0.9881411764705883, 0.5687843137254902, 0.44329411764705884}, 
+ {0.9881098039215687, 0.5675294117647058, 0.4420392156862745}, 
+ {0.988078431372549, 0.5662745098039216, 0.4407843137254902}, 
+ {0.9880470588235295, 0.5650196078431372, 0.4395294117647059}, 
+ {0.9880156862745099, 0.563764705882353, 0.4382745098039216}, 
+ {0.9879843137254902, 0.5625098039215686, 0.43701960784313726}, 
+ {0.9879529411764706, 0.5612549019607843, 0.43576470588235294}, 
+ {0.9879215686274511, 0.5599999999999999, 0.4345098039215686}, 
+ {0.9878901960784314, 0.5587450980392157, 0.4332549019607843}, 
+ {0.9878588235294118, 0.5574901960784313, 0.432}, 
+ {0.9878274509803922, 0.556235294117647, 0.4307450980392157}, 
+ {0.9877960784313726, 0.5549803921568627, 0.42949019607843136}, 
+ {0.987764705882353, 0.5537254901960784, 0.42823529411764705}, 
+ {0.9877333333333334, 0.552470588235294, 0.42698039215686273}, 
+ {0.9877019607843137, 0.5512156862745098, 0.4257254901960784}, 
+ {0.9876705882352942, 0.5499607843137254, 0.4244705882352941}, 
+ {0.9876392156862746, 0.5487058823529412, 0.4232156862745098}, 
+ {0.9876078431372549, 0.5474509803921568, 0.42196078431372547}, 
+ {0.9875764705882353, 0.5461960784313725, 0.42070588235294115}, 
+ {0.9875450980392158, 0.5449411764705882, 0.41945098039215684}, 
+ {0.9875137254901961, 0.5436862745098039, 0.4181960784313725}, 
+ {0.9874823529411765, 0.5424313725490195, 0.41694117647058826}, 
+ {0.9874509803921568, 0.5411764705882353, 0.4156862745098039}, 
+ {0.9874196078431373, 0.5399215686274509, 0.4144313725490196}, 
+ {0.9873882352941177, 0.5386666666666666, 0.41317647058823526}, 
+ {0.987356862745098, 0.5374117647058823, 0.411921568627451}, 
+ {0.9873254901960784, 0.536156862745098, 0.4106666666666667}, 
+ {0.9872941176470589, 0.5349019607843136, 0.40941176470588236}, 
+ {0.9872627450980392, 0.5336470588235294, 0.40815686274509805}, 
+ {0.9872313725490196, 0.532392156862745, 0.40690196078431373}, 
+ {0.9872, 0.5311372549019607, 0.4056470588235294}, 
+ {0.9871686274509804, 0.5298823529411765, 0.4043921568627451}, 
+ {0.9871372549019608, 0.5286274509803921, 0.4031372549019608}, 
+ {0.9871058823529412, 0.5273725490196077, 0.40188235294117647}, 
+ {0.9870745098039215, 0.5261176470588235, 0.40062745098039215}, 
+ {0.987043137254902, 0.5248627450980392, 0.39937254901960784}, 
+ {0.9870117647058824, 0.5236078431372548, 0.3981176470588235}, 
+ {0.9869803921568627, 0.5223529411764706, 0.3968627450980392}, 
+ {0.9869490196078431, 0.5210980392156862, 0.3956078431372549}, 
+ {0.9869176470588236, 0.5198431372549019, 0.39435294117647063}, 
+ {0.9868862745098039, 0.5185882352941177, 0.3930980392156863}, 
+ {0.9868549019607843, 0.5173333333333333, 0.391843137254902}, 
+ {0.9868235294117648, 0.516078431372549, 0.3905882352941177}, 
+ {0.9867921568627451, 0.5148235294117647, 0.38933333333333336}, 
+ {0.9867607843137255, 0.5135686274509804, 0.38807843137254905}, 
+ {0.9867294117647059, 0.512313725490196, 0.38682352941176473}, 
+ {0.9866980392156863, 0.5110588235294118, 0.3855686274509804}, 
+ {0.9866666666666667, 0.5098039215686274, 0.3843137254901961}, 
+ {0.986635294117647, 0.5085490196078432, 0.3830588235294118}, 
+ {0.9866039215686274, 0.5072941176470588, 0.38180392156862747}, 
+ {0.9865725490196079, 0.5060392156862745, 0.38054901960784315}, 
+ {0.9865411764705883, 0.5047843137254902, 0.37929411764705884}, 
+ {0.9865098039215686, 0.5035294117647059, 0.3780392156862745}, 
+ {0.986478431372549, 0.5022745098039215, 0.3767843137254902}, 
+ {0.9864470588235295, 0.5010196078431373, 0.3755294117647059}, 
+ {0.9864156862745098, 0.49976470588235294, 0.37427450980392163}, 
+ {0.9863843137254902, 0.49850980392156863, 0.37301960784313726}, 
+ {0.9863529411764705, 0.4972549019607843, 0.371764705882353}, 
+ {0.986321568627451, 0.496, 0.3705098039215686}, 
+ {0.9862901960784314, 0.4947450980392157, 0.36925490196078437}, 
+ {0.9862588235294117, 0.49349019607843136, 0.368}, 
+ {0.9862274509803921, 0.49223529411764705, 0.36674509803921573}, 
+ {0.9861960784313726, 0.49098039215686273, 0.36549019607843136}, 
+ {0.9861647058823529, 0.4897254901960784, 0.3642352941176471}, 
+ {0.9861333333333333, 0.4884705882352941, 0.36298039215686273}, 
+ {0.9861019607843137, 0.4872156862745098, 0.36172549019607847}, 
+ {0.9860705882352941, 0.48596078431372547, 0.36047058823529415}, 
+ {0.9860392156862745, 0.48470588235294115, 0.35921568627450984}, 
+ {0.9860078431372549, 0.48345098039215684, 0.3579607843137255}, 
+ {0.9859764705882352, 0.4821960784313725, 0.3567058823529412}, 
+ {0.9859450980392157, 0.4809411764705882, 0.3554509803921569}, 
+ {0.9859137254901961, 0.4796862745098039, 0.3541960784313726}, 
+ {0.9858823529411764, 0.4784313725490196, 0.35294117647058826}, 
+ {0.9858509803921568, 0.4771764705882353, 0.35168627450980394}, 
+ {0.9858196078431373, 0.47592156862745094, 0.3504313725490196}, 
+ {0.9857882352941176, 0.4746666666666667, 0.3491764705882353}, 
+ {0.985756862745098, 0.4734117647058823, 0.347921568627451}, 
+ {0.9857254901960784, 0.47215686274509805, 0.3466666666666667}, 
+ {0.9856941176470588, 0.4709019607843137, 0.34541176470588236}, 
+ {0.9856627450980392, 0.4696470588235294, 0.34415686274509805}, 
+ {0.9856313725490196, 0.46839215686274505, 0.34290196078431373}, 
+ {0.9856, 0.4671372549019608, 0.3416470588235294}, 
+ {0.9855686274509804, 0.46588235294117647, 0.3403921568627451}, 
+ {0.9855372549019608, 0.46462745098039215, 0.3391372549019608}, 
+ {0.9855058823529411, 0.46337254901960784, 0.33788235294117647}, 
+ {0.9854745098039216, 0.4621176470588235, 0.33662745098039215}, 
+ {0.985443137254902, 0.4608627450980392, 0.33537254901960784}, 
+ {0.9854117647058823, 0.4596078431372549, 0.3341176470588235}, 
+ {0.9853803921568627, 0.4583529411764706, 0.3328627450980392}, 
+ {0.9853490196078432, 0.45709803921568626, 0.3316078431372549}, 
+ {0.9853176470588235, 0.45584313725490194, 0.33035294117647057}, 
+ {0.9852862745098039, 0.4545882352941176, 0.32909803921568626}, 
+ {0.9852549019607842, 0.4533333333333333, 0.32784313725490194}, 
+ {0.9852235294117647, 0.452078431372549, 0.3265882352941176}, 
+ {0.9851921568627451, 0.4508235294117647, 0.3253333333333333}, 
+ {0.9851607843137254, 0.44956862745098036, 0.324078431372549}, 
+ {0.9851294117647058, 0.44831372549019605, 0.3228235294117647}, 
+ {0.9850980392156863, 0.44705882352941173, 0.32156862745098036}, 
+ {0.9850666666666666, 0.4458039215686274, 0.3203137254901961}, 
+ {0.985035294117647, 0.4445490196078431, 0.31905882352941173}, 
+ {0.9850039215686274, 0.4432941176470588, 0.31780392156862747}, 
+ {0.9849725490196078, 0.44203921568627447, 0.3165490196078431}, 
+ {0.9849411764705882, 0.4407843137254902, 0.31529411764705884}, 
+ {0.9849098039215686, 0.43952941176470595, 0.3140392156862746}, 
+ {0.9848784313725489, 0.4382745098039216, 0.3127843137254902}, 
+ {0.9848470588235294, 0.4370196078431373, 0.31152941176470594}, 
+ {0.9848156862745098, 0.43576470588235294, 0.31027450980392157}, 
+ {0.9847843137254901, 0.4345098039215687, 0.3090196078431373}, 
+ {0.9847529411764705, 0.4332549019607843, 0.30776470588235294}, 
+ {0.984721568627451, 0.43200000000000005, 0.3065098039215687}, 
+ {0.9846901960784313, 0.4307450980392157, 0.30525490196078436}, 
+ {0.9846588235294117, 0.4294901960784314, 0.30400000000000005}, 
+ {0.9846274509803921, 0.42823529411764705, 0.30274509803921573}, 
+ {0.9845960784313725, 0.4269803921568628, 0.3014901960784314}, 
+ {0.9845647058823529, 0.42572549019607847, 0.3002352941176471}, 
+ {0.9845333333333333, 0.42447058823529416, 0.2989803921568628}, 
+ {0.9845019607843136, 0.42321568627450984, 0.29772549019607847}, 
+ {0.9844705882352941, 0.4219607843137255, 0.29647058823529415}, 
+ {0.9844392156862745, 0.4207058823529412, 0.29521568627450984}, 
+ {0.9844078431372548, 0.4194509803921569, 0.2939607843137255}, 
+ {0.9843764705882352, 0.4181960784313726, 0.2927058823529412}, 
+ {0.9843450980392157, 0.41694117647058826, 0.2914509803921569}, 
+ {0.984313725490196, 0.41568627450980394, 0.2901960784313726}, 
+ {0.9839372549019607, 0.4142117647058824, 0.28925490196078435}, 
+ {0.9835607843137254, 0.4127372549019608, 0.2883137254901961}, 
+ {0.9831843137254901, 0.41126274509803923, 0.28737254901960785}, 
+ {0.9828078431372549, 0.4097882352941177, 0.2864313725490196}, 
+ {0.9824313725490196, 0.40831372549019607, 0.2854901960784314}, 
+ {0.9820549019607843, 0.4068392156862745, 0.2845490196078432}, 
+ {0.981678431372549, 0.40536470588235296, 0.2836078431372549}, 
+ {0.9813019607843136, 0.4038901960784314, 0.2826666666666667}, 
+ {0.9809254901960783, 0.4024156862745098, 0.28172549019607845}, 
+ {0.9805490196078431, 0.40094117647058825, 0.28078431372549023}, 
+ {0.9801725490196078, 0.3994666666666667, 0.27984313725490195}, 
+ {0.9797960784313725, 0.3979921568627451, 0.27890196078431373}, 
+ {0.9794196078431372, 0.39651764705882353, 0.2779607843137255}, 
+ {0.9790431372549019, 0.395043137254902, 0.2770196078431373}, 
+ {0.9786666666666666, 0.39356862745098037, 0.276078431372549}, 
+ {0.9782901960784314, 0.3920941176470588, 0.2751372549019608}, 
+ {0.9779137254901961, 0.39061960784313726, 0.27419607843137256}, 
+ {0.9775372549019608, 0.3891450980392157, 0.27325490196078434}, 
+ {0.9771607843137254, 0.3876705882352941, 0.27231372549019606}, 
+ {0.9767843137254901, 0.38619607843137255, 0.27137254901960783}, 
+ {0.9764078431372548, 0.384721568627451, 0.2704313725490196}, 
+ {0.9760313725490195, 0.3832470588235294, 0.2694901960784314}, 
+ {0.9756549019607843, 0.38177254901960783, 0.26854901960784316}, 
+ {0.975278431372549, 0.3802980392156863, 0.2676078431372549}, 
+ {0.9749019607843137, 0.37882352941176467, 0.26666666666666666}, 
+ {0.9745254901960784, 0.3773490196078431, 0.26572549019607844}, 
+ {0.9741490196078431, 0.37587450980392156, 0.2647843137254902}, 
+ {0.9737725490196077, 0.37439999999999996, 0.26384313725490194}, 
+ {0.9733960784313725, 0.3729254901960784, 0.2629019607843137}, 
+ {0.9730196078431372, 0.37145098039215685, 0.2619607843137255}, 
+ {0.9726431372549019, 0.3699764705882353, 0.26101960784313727}, 
+ {0.9722666666666666, 0.3685019607843137, 0.260078431372549}, 
+ {0.9718901960784313, 0.36702745098039213, 0.25913725490196077}, 
+ {0.971513725490196, 0.3655529411764706, 0.25819607843137254}, 
+ {0.9711372549019608, 0.36407843137254897, 0.2572549019607843}, 
+ {0.9707607843137255, 0.3626039215686274, 0.25631372549019604}, 
+ {0.9703843137254902, 0.36112941176470587, 0.2553725490196078}, 
+ {0.9700078431372549, 0.3596549019607843, 0.2544313725490196}, 
+ {0.9696313725490195, 0.3581803921568627, 0.2534901960784314}, 
+ {0.9692549019607842, 0.35670588235294115, 0.25254901960784315}, 
+ {0.9688784313725489, 0.3552313725490196, 0.25160784313725487}, 
+ {0.9685019607843137, 0.353756862745098, 0.25066666666666665}, 
+ {0.9681254901960784, 0.35228235294117644, 0.24972549019607843}, 
+ {0.9677490196078431, 0.3508078431372549, 0.24878431372549017}, 
+ {0.9673725490196078, 0.3493333333333333, 0.24784313725490192}, 
+ {0.9669960784313725, 0.3478588235294117, 0.2469019607843137}, 
+ {0.9666196078431372, 0.34638431372549017, 0.24596078431372548}, 
+ {0.966243137254902, 0.34490980392156856, 0.24501960784313723}, 
+ {0.9658666666666667, 0.343435294117647, 0.24407843137254898}, 
+ {0.9654901960784313, 0.34196078431372545, 0.24313725490196075}, 
+ {0.965113725490196, 0.34048627450980384, 0.24219607843137253}, 
+ {0.9647372549019607, 0.3390117647058823, 0.24125490196078428}, 
+ {0.9643607843137254, 0.33753725490196074, 0.24031372549019606}, 
+ {0.9639843137254901, 0.33606274509803913, 0.2393725490196078}, 
+ {0.9636078431372549, 0.3345882352941176, 0.23843137254901958}, 
+ {0.9632313725490196, 0.333113725490196, 0.23749019607843133}, 
+ {0.9628549019607843, 0.33163921568627447, 0.2365490196078431}, 
+ {0.962478431372549, 0.3301647058823529, 0.23560784313725486}, 
+ {0.9621019607843136, 0.3286901960784313, 0.23466666666666663}, 
+ {0.9617254901960783, 0.32721568627450975, 0.23372549019607838}, 
+ {0.9613490196078431, 0.3257411764705882, 0.23278431372549016}, 
+ {0.9609725490196078, 0.3242666666666666, 0.2318431372549019}, 
+ {0.9605960784313725, 0.32279215686274504, 0.2309019607843137}, 
+ {0.9602196078431372, 0.3213176470588235, 0.22996078431372546}, 
+ {0.9598431372549019, 0.3198431372549019, 0.2290196078431372}, 
+ {0.9594666666666666, 0.3183686274509803, 0.22807843137254896}, 
+ {0.9590901960784314, 0.31689411764705877, 0.22713725490196074}, 
+ {0.9587137254901961, 0.31541960784313716, 0.22619607843137252}, 
+ {0.9583372549019608, 0.3139450980392156, 0.22525490196078427}, 
+ {0.9579607843137254, 0.31247058823529406, 0.22431372549019601}, 
+ {0.9575843137254901, 0.31099607843137245, 0.2233725490196078}, 
+ {0.9572078431372548, 0.3095215686274509, 0.22243137254901957}, 
+ {0.9568313725490195, 0.30804705882352934, 0.22149019607843132}, 
+ {0.9564549019607843, 0.30657254901960773, 0.22054901960784307}, 
+ {0.956078431372549, 0.3050980392156862, 0.21960784313725484}, 
+ {0.9557019607843137, 0.3036235294117646, 0.21866666666666662}, 
+ {0.9553254901960784, 0.30214901960784324, 0.21772549019607848}, 
+ {0.9549490196078432, 0.30067450980392163, 0.21678431372549023}, 
+ {0.9545725490196079, 0.2992000000000001, 0.215843137254902}, 
+ {0.9541960784313726, 0.2977254901960785, 0.21490196078431378}, 
+ {0.9538196078431372, 0.2962509803921569, 0.21396078431372553}, 
+ {0.9534431372549019, 0.29477647058823536, 0.21301960784313728}, 
+ {0.9530666666666666, 0.2933019607843138, 0.21207843137254906}, 
+ {0.9526901960784314, 0.2918274509803922, 0.21113725490196084}, 
+ {0.9523137254901961, 0.29035294117647065, 0.21019607843137258}, 
+ {0.9519372549019608, 0.2888784313725491, 0.20925490196078433}, 
+ {0.9515607843137255, 0.2874039215686275, 0.2083137254901961}, 
+ {0.9511843137254902, 0.28592941176470593, 0.2073725490196079}, 
+ {0.9508078431372549, 0.2844549019607844, 0.20643137254901964}, 
+ {0.9504313725490197, 0.28298039215686277, 0.2054901960784314}, 
+ {0.9500549019607843, 0.2815058823529413, 0.20454901960784316}, 
+ {0.949678431372549, 0.28003137254901966, 0.20360784313725494}, 
+ {0.9493019607843137, 0.27855686274509806, 0.20266666666666672}, 
+ {0.9489254901960784, 0.27708235294117656, 0.20172549019607847}, 
+ {0.9485490196078431, 0.27560784313725495, 0.20078431372549022}, 
+ {0.9481725490196078, 0.2741333333333334, 0.199843137254902}, 
+ {0.9477960784313726, 0.27265882352941184, 0.19890196078431377}, 
+ {0.9474196078431373, 0.27118431372549023, 0.19796078431372552}, 
+ {0.947043137254902, 0.2697098039215687, 0.19701960784313727}, 
+ {0.9466666666666667, 0.2682352941176471, 0.19607843137254904}, 
+ {0.9462901960784313, 0.2667607843137255, 0.19513725490196082}, 
+ {0.945913725490196, 0.26528627450980397, 0.19419607843137257}, 
+ {0.9455372549019608, 0.2638117647058824, 0.19325490196078432}, 
+ {0.9451607843137255, 0.2623372549019608, 0.1923137254901961}, 
+ {0.9447843137254902, 0.26086274509803925, 0.19137254901960787}, 
+ {0.9444078431372549, 0.2593882352941177, 0.19043137254901962}, 
+ {0.9440313725490196, 0.2579137254901961, 0.18949019607843137}, 
+ {0.9436549019607843, 0.25643921568627454, 0.18854901960784315}, 
+ {0.9432784313725491, 0.254964705882353, 0.18760784313725493}, 
+ {0.9429019607843138, 0.2534901960784314, 0.18666666666666668}, 
+ {0.9425254901960785, 0.2520156862745099, 0.18572549019607842}, 
+ {0.9421490196078431, 0.25054117647058827, 0.1847843137254902}, 
+ {0.9417725490196078, 0.2490666666666667, 0.18384313725490198}, 
+ {0.9413960784313725, 0.24759215686274513, 0.18290196078431376}, 
+ {0.9410196078431372, 0.24611764705882355, 0.1819607843137255}, 
+ {0.940643137254902, 0.24464313725490197, 0.18101960784313725}, 
+ {0.9402666666666667, 0.24316862745098042, 0.18007843137254903}, 
+ {0.9398901960784314, 0.24169411764705884, 0.1791372549019608}, 
+ {0.9395137254901961, 0.24021960784313728, 0.17819607843137256}, 
+ {0.9391372549019608, 0.2387450980392157, 0.1772549019607843}, 
+ {0.9387607843137254, 0.23727058823529412, 0.17631372549019608}, 
+ {0.9383843137254901, 0.23579607843137257, 0.17537254901960786}, 
+ {0.9380078431372549, 0.234321568627451, 0.1744313725490196}, 
+ {0.9376313725490196, 0.23284705882352943, 0.17349019607843136}, 
+ {0.9372549019607843, 0.23137254901960785, 0.17254901960784313}, 
+ {0.9361254901960784, 0.23027450980392158, 0.17207843137254902}, 
+ {0.9349960784313726, 0.22917647058823531, 0.1716078431372549}, 
+ {0.9338666666666666, 0.22807843137254902, 0.17113725490196077}, 
+ {0.9327372549019608, 0.22698039215686275, 0.17066666666666666}, 
+ {0.9316078431372549, 0.22588235294117648, 0.17019607843137255}, 
+ {0.930478431372549, 0.2247843137254902, 0.16972549019607844}, 
+ {0.9293490196078431, 0.2236862745098039, 0.1692549019607843}, 
+ {0.9282196078431373, 0.22258823529411764, 0.1687843137254902}, 
+ {0.9270901960784314, 0.22149019607843137, 0.16831372549019608}, 
+ {0.9259607843137255, 0.2203921568627451, 0.16784313725490196}, 
+ {0.9248313725490196, 0.21929411764705883, 0.16737254901960782}, 
+ {0.9237019607843137, 0.21819607843137254, 0.1669019607843137}, 
+ {0.9225725490196078, 0.21709803921568627, 0.1664313725490196}, 
+ {0.9214431372549019, 0.216, 0.1659607843137255}, 
+ {0.9203137254901961, 0.21490196078431373, 0.16549019607843135}, 
+ {0.9191843137254901, 0.21380392156862743, 0.16501960784313724}, 
+ {0.9180549019607843, 0.21270588235294116, 0.16454901960784313}, 
+ {0.9169254901960784, 0.2116078431372549, 0.16407843137254902}, 
+ {0.9157960784313726, 0.21050980392156862, 0.1636078431372549}, 
+ {0.9146666666666666, 0.20941176470588235, 0.16313725490196077}, 
+ {0.9135372549019608, 0.20831372549019606, 0.16266666666666665}, 
+ {0.9124078431372549, 0.20721568627450979, 0.16219607843137254}, 
+ {0.9112784313725489, 0.20611764705882352, 0.16172549019607843}, 
+ {0.9101490196078431, 0.20501960784313725, 0.1612549019607843}, 
+ {0.9090196078431372, 0.20392156862745098, 0.16078431372549018}, 
+ {0.9078901960784314, 0.20282352941176468, 0.16031372549019607}, 
+ {0.9067607843137254, 0.2017254901960784, 0.15984313725490196}, 
+ {0.9056313725490196, 0.20062745098039214, 0.15937254901960782}, 
+ {0.9045019607843137, 0.19952941176470587, 0.1589019607843137}, 
+ {0.9033725490196078, 0.1984313725490196, 0.1584313725490196}, 
+ {0.9022431372549019, 0.1973333333333333, 0.15796078431372548}, 
+ {0.9011137254901961, 0.19623529411764704, 0.15749019607843134}, 
+ {0.8999843137254901, 0.19513725490196077, 0.15701960784313723}, 
+ {0.8988549019607843, 0.19403921568627447, 0.15654901960784312}, 
+ {0.8977254901960784, 0.1929411764705882, 0.156078431372549}, 
+ {0.8965960784313725, 0.19184313725490193, 0.1556078431372549}, 
+ {0.8954666666666666, 0.19074509803921566, 0.15513725490196076}, 
+ {0.8943372549019607, 0.1896470588235294, 0.15466666666666665}, 
+ {0.8932078431372549, 0.1885490196078431, 0.15419607843137254}, 
+ {0.8920784313725489, 0.18745098039215682, 0.15372549019607842}, 
+ {0.8909490196078431, 0.18635294117647055, 0.15325490196078428}, 
+ {0.8898196078431372, 0.18525490196078429, 0.15278431372549017}, 
+ {0.8886901960784314, 0.18415686274509802, 0.15231372549019606}, 
+ {0.8875607843137254, 0.18305882352941172, 0.15184313725490195}, 
+ {0.8864313725490196, 0.18196078431372545, 0.1513725490196078}, 
+ {0.8853019607843137, 0.18086274509803918, 0.1509019607843137}, 
+ {0.8841725490196077, 0.1797647058823529, 0.1504313725490196}, 
+ {0.8830431372549019, 0.17866666666666664, 0.14996078431372548}, 
+ {0.881913725490196, 0.17756862745098034, 0.14949019607843134}, 
+ {0.8807843137254902, 0.17647058823529407, 0.14901960784313723}, 
+ {0.8796549019607842, 0.1753725490196078, 0.1485490196078431}, 
+ {0.8785254901960784, 0.1742745098039215, 0.148078431372549}, 
+ {0.8773960784313725, 0.17317647058823527, 0.1476078431372549}, 
+ {0.8762666666666666, 0.17207843137254897, 0.14713725490196075}, 
+ {0.8751372549019607, 0.1709803921568627, 0.14666666666666664}, 
+ {0.8740078431372549, 0.16988235294117643, 0.14619607843137253}, 
+ {0.872878431372549, 0.16878431372549013, 0.14572549019607842}, 
+ {0.871749019607843, 0.1676862745098039, 0.14525490196078428}, 
+ {0.8706196078431372, 0.1665882352941176, 0.14478431372549017}, 
+ {0.8694901960784313, 0.16549019607843132, 0.14431372549019605}, 
+ {0.8683607843137254, 0.16439215686274505, 0.14384313725490194}, 
+ {0.8672313725490195, 0.16329411764705876, 0.1433725490196078}, 
+ {0.8661019607843137, 0.1621960784313725, 0.1429019607843137}, 
+ {0.8649725490196077, 0.16109803921568622, 0.14243137254901958}, 
+ {0.8638431372549019, 0.15999999999999995, 0.14196078431372547}, 
+ {0.862713725490196, 0.15890196078431368, 0.14149019607843133}, 
+ {0.8615843137254902, 0.15780392156862738, 0.14101960784313722}, 
+ {0.8604549019607842, 0.1567058823529411, 0.1405490196078431}, 
+ {0.8593254901960783, 0.15560784313725484, 0.140078431372549}, 
+ {0.8581960784313725, 0.15450980392156854, 0.13960784313725488}, 
+ {0.8570666666666665, 0.1534117647058823, 0.13913725490196074}, 
+ {0.8559372549019607, 0.152313725490196, 0.13866666666666663}, 
+ {0.8548078431372548, 0.15121568627450974, 0.13819607843137252}, 
+ {0.853678431372549, 0.15011764705882347, 0.13772549019607838}, 
+ {0.852549019607843, 0.14901960784313717, 0.13725490196078427}, 
+ {0.8514196078431372, 0.14792156862745093, 0.13678431372549016}, 
+ {0.8502901960784313, 0.14682352941176463, 0.13631372549019605}, 
+ {0.8491607843137254, 0.14572549019607836, 0.13584313725490194}, 
+ {0.8480313725490196, 0.1446274509803922, 0.13537254901960785}, 
+ {0.8469019607843138, 0.14352941176470593, 0.13490196078431374}, 
+ {0.8457725490196079, 0.14243137254901966, 0.13443137254901963}, 
+ {0.8446431372549019, 0.14133333333333337, 0.1339607843137255}, 
+ {0.8435137254901961, 0.1402352941176471, 0.13349019607843138}, 
+ {0.8423843137254902, 0.13913725490196083, 0.13301960784313727}, 
+ {0.8412549019607843, 0.13803921568627456, 0.13254901960784315}, 
+ {0.8401254901960784, 0.1369411764705883, 0.13207843137254904}, 
+ {0.8389960784313726, 0.135843137254902, 0.13160784313725493}, 
+ {0.8378666666666666, 0.13474509803921572, 0.1311372549019608}, 
+ {0.8367372549019608, 0.13364705882352945, 0.13066666666666668}, 
+ {0.8356078431372549, 0.13254901960784315, 0.13019607843137257}, 
+ {0.8344784313725491, 0.1314509803921569, 0.12972549019607843}, 
+ {0.8333490196078431, 0.13035294117647062, 0.12925490196078432}, 
+ {0.8322196078431372, 0.12925490196078435, 0.1287843137254902}, 
+ {0.8310901960784314, 0.12815686274509808, 0.1283137254901961}, 
+ {0.8299607843137254, 0.12705882352941178, 0.12784313725490198}, 
+ {0.8288313725490196, 0.12596078431372554, 0.12737254901960784}, 
+ {0.8277019607843137, 0.12486274509803924, 0.12690196078431373}, 
+ {0.8265725490196079, 0.12376470588235297, 0.12643137254901962}, 
+ {0.8254431372549019, 0.12266666666666669, 0.12596078431372548}, 
+ {0.8243137254901961, 0.12156862745098042, 0.12549019607843137}, 
+ {0.8231843137254902, 0.12047058823529415, 0.12501960784313726}, 
+ {0.8220549019607843, 0.11937254901960787, 0.12454901960784315}, 
+ {0.8209254901960784, 0.1182745098039216, 0.12407843137254904}, 
+ {0.8197960784313725, 0.11717647058823531, 0.12360784313725491}, 
+ {0.8186666666666667, 0.11607843137254904, 0.12313725490196079}, 
+ {0.8175372549019607, 0.11498039215686276, 0.12266666666666667}, 
+ {0.8164078431372549, 0.11388235294117649, 0.12219607843137256}, 
+ {0.815278431372549, 0.1127843137254902, 0.12172549019607844}, 
+ {0.8141490196078431, 0.11168627450980394, 0.12125490196078431}, 
+ {0.8130196078431372, 0.11058823529411767, 0.1207843137254902}, 
+ {0.8118901960784314, 0.10949019607843138, 0.12031372549019609}, 
+ {0.8107607843137254, 0.10839215686274511, 0.11984313725490196}, 
+ {0.8096313725490196, 0.10729411764705883, 0.11937254901960784}, 
+ {0.8085019607843137, 0.10619607843137255, 0.11890196078431373}, 
+ {0.8073725490196078, 0.10509803921568628, 0.11843137254901961}, 
+ {0.8062431372549019, 0.10400000000000001, 0.11796078431372549}, 
+ {0.805113725490196, 0.10290196078431374, 0.11749019607843138}, 
+ {0.8039843137254902, 0.10180392156862747, 0.11701960784313725}, 
+ {0.8028549019607842, 0.10070588235294117, 0.11654901960784314}, 
+ {0.8017254901960784, 0.0996078431372549, 0.11607843137254903}, 
+ {0.8005960784313725, 0.09850980392156863, 0.1156078431372549}, 
+ {0.7994666666666667, 0.09741176470588236, 0.11513725490196078}, 
+ {0.7983372549019607, 0.09631372549019607, 0.11466666666666667}, 
+ {0.7972078431372549, 0.0952156862745098, 0.11419607843137256}, 
+ {0.796078431372549, 0.09411764705882353, 0.11372549019607843}, 
+ {0.7948862745098039, 0.09383529411764706, 0.11347450980392157}, 
+ {0.7936941176470588, 0.09355294117647059, 0.11322352941176471}, 
+ {0.7925019607843137, 0.09327058823529412, 0.11297254901960783}, 
+ {0.7913098039215686, 0.09298823529411765, 0.11272156862745097}, 
+ {0.7901176470588235, 0.09270588235294118, 0.11247058823529411}, 
+ {0.7889254901960784, 0.09242352941176471, 0.11221960784313725}, 
+ {0.7877333333333333, 0.09214117647058823, 0.11196862745098039}, 
+ {0.7865411764705882, 0.09185882352941176, 0.11171764705882353}, 
+ {0.7853490196078431, 0.09157647058823529, 0.11146666666666666}, 
+ {0.784156862745098, 0.09129411764705882, 0.1112156862745098}, 
+ {0.7829647058823529, 0.09101176470588235, 0.11096470588235294}, 
+ {0.7817725490196078, 0.09072941176470588, 0.11071372549019608}, 
+ {0.7805803921568627, 0.09044705882352941, 0.11046274509803922}, 
+ {0.7793882352941176, 0.09016470588235294, 0.11021176470588234}, 
+ {0.7781960784313725, 0.08988235294117647, 0.10996078431372548}, 
+ {0.7770039215686274, 0.0896, 0.10970980392156862}, 
+ {0.7758117647058823, 0.08931764705882353, 0.10945882352941176}, 
+ {0.7746196078431372, 0.08903529411764705, 0.1092078431372549}, 
+ {0.7734274509803921, 0.08875294117647058, 0.10895686274509803}, 
+ {0.772235294117647, 0.0884705882352941, 0.10870588235294117}, 
+ {0.7710431372549019, 0.08818823529411764, 0.1084549019607843}, 
+ {0.7698509803921568, 0.08790588235294117, 0.10820392156862745}, 
+ {0.7686588235294117, 0.0876235294117647, 0.10795294117647058}, 
+ {0.7674666666666666, 0.08734117647058823, 0.10770196078431372}, 
+ {0.7662745098039215, 0.08705882352941176, 0.10745098039215685}, 
+ {0.7650823529411764, 0.08677647058823529, 0.10719999999999999}, 
+ {0.7638901960784313, 0.08649411764705882, 0.10694901960784313}, 
+ {0.7626980392156862, 0.08621176470588235, 0.10669803921568627}, 
+ {0.7615058823529411, 0.08592941176470588, 0.10644705882352941}, 
+ {0.760313725490196, 0.08564705882352941, 0.10619607843137255}, 
+ {0.759121568627451, 0.08536470588235293, 0.10594509803921567}, 
+ {0.7579294117647059, 0.08508235294117646, 0.10569411764705881}, 
+ {0.7567372549019608, 0.08479999999999999, 0.10544313725490195}, 
+ {0.7555450980392157, 0.08451764705882352, 0.10519215686274509}, 
+ {0.7543529411764706, 0.08423529411764705, 0.10494117647058823}, 
+ {0.7531607843137255, 0.08395294117647058, 0.10469019607843136}, 
+ {0.7519686274509804, 0.08367058823529411, 0.1044392156862745}, 
+ {0.7507764705882353, 0.08338823529411764, 0.10418823529411764}, 
+ {0.7495843137254902, 0.08310588235294117, 0.10393725490196078}, 
+ {0.7483921568627451, 0.0828235294117647, 0.10368627450980392}, 
+ {0.7472, 0.08254117647058823, 0.10343529411764704}, 
+ {0.7460078431372549, 0.08225882352941175, 0.10318431372549018}, 
+ {0.7448156862745098, 0.08197647058823529, 0.10293333333333332}, 
+ {0.7436235294117647, 0.0816941176470588, 0.10268235294117646}, 
+ {0.7424313725490196, 0.08141176470588234, 0.1024313725490196}, 
+ {0.7412392156862745, 0.08112941176470587, 0.10218039215686273}, 
+ {0.7400470588235294, 0.0808470588235294, 0.10192941176470587}, 
+ {0.7388549019607843, 0.08056470588235293, 0.101678431372549}, 
+ {0.7376627450980392, 0.08028235294117646, 0.10142745098039214}, 
+ {0.736470588235294, 0.07999999999999999, 0.10117647058823528}, 
+ {0.7352784313725489, 0.07971764705882352, 0.10092549019607842}, 
+ {0.7340862745098038, 0.07943529411764705, 0.10067450980392155}, 
+ {0.7328941176470587, 0.07915294117647058, 0.10042352941176469}, 
+ {0.7317019607843136, 0.07887058823529411, 0.10017254901960783}, 
+ {0.7305098039215685, 0.07858823529411763, 0.09992156862745097}, 
+ {0.7293176470588234, 0.07830588235294117, 0.09967058823529411}, 
+ {0.7281254901960783, 0.07802352941176469, 0.09941960784313725}, 
+ {0.7269333333333332, 0.07774117647058822, 0.09916862745098037}, 
+ {0.7257411764705881, 0.07745882352941175, 0.09891764705882351}, 
+ {0.724549019607843, 0.07717647058823528, 0.09866666666666665}, 
+ {0.7233568627450979, 0.07689411764705881, 0.09841568627450979}, 
+ {0.7221647058823528, 0.07661176470588234, 0.09816470588235293}, 
+ {0.7209725490196077, 0.07632941176470587, 0.09791372549019606}, 
+ {0.7197803921568626, 0.0760470588235294, 0.0976627450980392}, 
+ {0.7185882352941175, 0.07576470588235293, 0.09741176470588234}, 
+ {0.7173960784313724, 0.07548235294117644, 0.09716078431372548}, 
+ {0.7162039215686273, 0.07519999999999999, 0.09690980392156862}, 
+ {0.7150117647058822, 0.0749176470588235, 0.09665882352941174}, 
+ {0.7138196078431371, 0.07463529411764704, 0.09640784313725488}, 
+ {0.712627450980392, 0.07435294117647057, 0.09615686274509802}, 
+ {0.7114352941176469, 0.0740705882352941, 0.09590588235294116}, 
+ {0.7102431372549018, 0.07378823529411763, 0.0956549019607843}, 
+ {0.7090509803921567, 0.07350588235294116, 0.09540392156862743}, 
+ {0.7078588235294117, 0.07322352941176469, 0.09515294117647058}, 
+ {0.7066666666666666, 0.07294117647058822, 0.0949019607843137}, 
+ {0.7054745098039215, 0.07265882352941175, 0.09465098039215684}, 
+ {0.7042823529411764, 0.07237647058823528, 0.09439999999999998}, 
+ {0.7030901960784313, 0.07209411764705881, 0.09414901960784312}, 
+ {0.7018980392156862, 0.07181176470588232, 0.09389803921568626}, 
+ {0.7007058823529411, 0.07152941176470587, 0.09364705882352939}, 
+ {0.699513725490196, 0.07124705882352939, 0.09339607843137253}, 
+ {0.6983215686274509, 0.07096470588235292, 0.09314509803921567}, 
+ {0.6971294117647059, 0.07068235294117647, 0.09289411764705884}, 
+ {0.6959372549019608, 0.0704, 0.09264313725490197}, 
+ {0.6947450980392157, 0.07011764705882353, 0.0923921568627451}, 
+ {0.6935529411764706, 0.06983529411764706, 0.09214117647058824}, 
+ {0.6923607843137255, 0.0695529411764706, 0.09189019607843138}, 
+ {0.6911686274509804, 0.06927058823529413, 0.09163921568627452}, 
+ {0.6899764705882353, 0.06898823529411766, 0.09138823529411766}, 
+ {0.6887843137254902, 0.06870588235294119, 0.09113725490196078}, 
+ {0.6875921568627451, 0.06842352941176472, 0.09088627450980392}, 
+ {0.6864, 0.06814117647058825, 0.09063529411764706}, 
+ {0.6852078431372549, 0.06785882352941178, 0.0903843137254902}, 
+ {0.6840156862745098, 0.0675764705882353, 0.09013333333333334}, 
+ {0.6828235294117647, 0.06729411764705884, 0.08988235294117647}, 
+ {0.6816313725490196, 0.06701176470588235, 0.08963137254901961}, 
+ {0.6804392156862745, 0.06672941176470588, 0.08938039215686275}, 
+ {0.6792470588235294, 0.06644705882352941, 0.08912941176470589}, 
+ {0.6780549019607843, 0.06616470588235294, 0.08887843137254903}, 
+ {0.6768627450980392, 0.06588235294117648, 0.08862745098039215}, 
+ {0.6756705882352941, 0.0656, 0.0883764705882353}, 
+ {0.674478431372549, 0.06531764705882354, 0.08812549019607843}, 
+ {0.6732862745098039, 0.06503529411764707, 0.08787450980392157}, 
+ {0.6720941176470588, 0.0647529411764706, 0.08762352941176471}, 
+ {0.6709019607843137, 0.06447058823529413, 0.08737254901960785}, 
+ {0.6697098039215686, 0.06418823529411766, 0.08712156862745099}, 
+ {0.6685176470588235, 0.06390588235294117, 0.08687058823529412}, 
+ {0.6673254901960785, 0.06362352941176472, 0.08661960784313726}, 
+ {0.6661333333333334, 0.06334117647058823, 0.0863686274509804}, 
+ {0.6649411764705883, 0.06305882352941176, 0.08611764705882353}, 
+ {0.6637490196078432, 0.0627764705882353, 0.08586666666666667}, 
+ {0.6625568627450981, 0.062494117647058825, 0.0856156862745098}, 
+ {0.661364705882353, 0.062211764705882355, 0.08536470588235294}, 
+ {0.6601725490196079, 0.061929411764705886, 0.08511372549019608}, 
+ {0.6589803921568628, 0.061647058823529416, 0.08486274509803922}, 
+ {0.6577882352941177, 0.06136470588235294, 0.08461176470588236}, 
+ {0.6565960784313726, 0.06108235294117647, 0.08436078431372548}, 
+ {0.6554039215686275, 0.0608, 0.08410980392156862}, 
+ {0.6542117647058824, 0.06051764705882353, 0.08385882352941176}, 
+ {0.6530196078431373, 0.06023529411764706, 0.0836078431372549}, 
+ {0.6518274509803922, 0.05995294117647059, 0.08335686274509804}, 
+ {0.6506352941176471, 0.059670588235294114, 0.08310588235294117}, 
+ {0.649443137254902, 0.059388235294117644, 0.08285490196078431}, 
+ {0.6482509803921569, 0.059105882352941175, 0.08260392156862745}, 
+ {0.6470588235294118, 0.058823529411764705, 0.08235294117647059}, 
+ {0.6451137254901961, 0.05835294117647059, 0.08210196078431373}, 
+ {0.6431686274509805, 0.05788235294117647, 0.08185098039215687}, 
+ {0.6412235294117647, 0.05741176470588235, 0.08159999999999999}, 
+ {0.639278431372549, 0.05694117647058823, 0.08134901960784313}, 
+ {0.6373333333333333, 0.05647058823529411, 0.08109803921568627}, 
+ {0.6353882352941177, 0.055999999999999994, 0.08084705882352941}, 
+ {0.633443137254902, 0.055529411764705876, 0.08059607843137255}, 
+ {0.6314980392156863, 0.05505882352941176, 0.08034509803921569}, 
+ {0.6295529411764706, 0.054588235294117646, 0.08009411764705882}, 
+ {0.6276078431372549, 0.05411764705882353, 0.07984313725490196}, 
+ {0.6256627450980392, 0.05364705882352941, 0.0795921568627451}, 
+ {0.6237176470588235, 0.05317647058823529, 0.07934117647058823}, 
+ {0.6217725490196079, 0.05270588235294117, 0.07909019607843137}, 
+ {0.6198274509803922, 0.05223529411764705, 0.0788392156862745}, 
+ {0.6178823529411764, 0.051764705882352935, 0.07858823529411764}, 
+ {0.6159372549019608, 0.051294117647058816, 0.07833725490196078}, 
+ {0.6139921568627451, 0.0508235294117647, 0.07808627450980392}, 
+ {0.6120470588235294, 0.05035294117647058, 0.07783529411764706}, 
+ {0.6101019607843137, 0.04988235294117646, 0.07758431372549018}, 
+ {0.6081568627450981, 0.04941176470588234, 0.07733333333333332}, 
+ {0.6062117647058823, 0.048941176470588224, 0.07708235294117646}, 
+ {0.6042666666666666, 0.048470588235294106, 0.0768313725490196}, 
+ {0.602321568627451, 0.04799999999999999, 0.07658039215686274}, 
+ {0.6003764705882353, 0.047529411764705876, 0.07632941176470588}, 
+ {0.5984313725490196, 0.04705882352941175, 0.07607843137254901}, 
+ {0.5964862745098038, 0.04658823529411764, 0.07582745098039215}, 
+ {0.5945411764705882, 0.04611764705882351, 0.07557647058823529}, 
+ {0.5925960784313725, 0.0456470588235294, 0.07532549019607843}, 
+ {0.5906509803921568, 0.04517647058823528, 0.07507450980392157}, 
+ {0.5887058823529412, 0.044705882352941165, 0.0748235294117647}, 
+ {0.5867607843137255, 0.044235294117647046, 0.07457254901960783}, 
+ {0.5848156862745097, 0.04376470588235293, 0.07432156862745097}, 
+ {0.582870588235294, 0.04329411764705881, 0.07407058823529411}, 
+ {0.5809254901960784, 0.04282352941176469, 0.07381960784313725}, 
+ {0.5789803921568627, 0.04235294117647057, 0.07356862745098039}, 
+ {0.577035294117647, 0.041882352941176454, 0.07331764705882352}, 
+ {0.5750901960784314, 0.041411764705882335, 0.07306666666666665}, 
+ {0.5731450980392157, 0.04094117647058822, 0.0728156862745098}, 
+ {0.5711999999999999, 0.040470588235294105, 0.07256470588235293}, 
+ {0.5692549019607842, 0.03999999999999998, 0.07231372549019607}, 
+ {0.5673098039215686, 0.03952941176470587, 0.0720627450980392}, 
+ {0.5653647058823529, 0.03905882352941174, 0.07181176470588234}, 
+ {0.5634196078431372, 0.03858823529411763, 0.07156078431372548}, 
+ {0.5614745098039216, 0.038117647058823506, 0.07130980392156862}, 
+ {0.5595294117647058, 0.037647058823529395, 0.07105882352941176}, 
+ {0.5575843137254901, 0.03717647058823527, 0.07080784313725488}, 
+ {0.5556392156862744, 0.03670588235294116, 0.07055686274509802}, 
+ {0.5536941176470588, 0.03623529411764704, 0.07030588235294116}, 
+ {0.5517490196078431, 0.03576470588235292, 0.0700549019607843}, 
+ {0.5498039215686273, 0.0352941176470588, 0.06980392156862744}, 
+ {0.5478588235294117, 0.034823529411764684, 0.06955294117647058}, 
+ {0.545913725490196, 0.034352941176470565, 0.06930196078431371}, 
+ {0.5439686274509803, 0.03388235294117645, 0.06905098039215685}, 
+ {0.5420235294117647, 0.03341176470588233, 0.06879999999999999}, 
+ {0.540078431372549, 0.03294117647058821, 0.06854901960784313}, 
+ {0.5381333333333332, 0.0324705882352941, 0.06829803921568627}, 
+ {0.5361882352941176, 0.03199999999999997, 0.0680470588235294}, 
+ {0.5342431372549019, 0.03152941176470586, 0.06779607843137253}, 
+ {0.5322980392156862, 0.03105882352941174, 0.06754509803921567}, 
+ {0.5303529411764705, 0.03058823529411762, 0.06729411764705881}, 
+ {0.5284078431372549, 0.030117647058823502, 0.06704313725490195}, 
+ {0.5264627450980391, 0.029647058823529384, 0.06679215686274509}, 
+ {0.5245176470588234, 0.02917647058823527, 0.06654117647058821}, 
+ {0.5225725490196078, 0.02870588235294115, 0.06629019607843135}, 
+ {0.5206274509803921, 0.028235294117647032, 0.0660392156862745}, 
+ {0.5186823529411764, 0.027764705882352914, 0.06578823529411763}, 
+ {0.5167372549019607, 0.027294117647058795, 0.06553725490196077}, 
+ {0.5147921568627449, 0.026823529411764677, 0.0652862745098039}, 
+ {0.5128470588235293, 0.026352941176470558, 0.06503529411764704}, 
+ {0.5109019607843136, 0.02588235294117644, 0.06478431372549018}, 
+ {0.508956862745098, 0.02541176470588232, 0.06453333333333332}, 
+ {0.5070117647058823, 0.024941176470588203, 0.06428235294117646}, 
+ {0.5050666666666666, 0.024470588235294084, 0.06403137254901958}, 
+ {0.5031215686274508, 0.023999999999999966, 0.06378039215686274}, 
+ {0.5011764705882352, 0.023529411764705847, 0.06352941176470586}, 
+ {0.4992313725490195, 0.023058823529411736, 0.063278431372549}, 
+ {0.4972862745098038, 0.022588235294117617, 0.06302745098039214}, 
+ {0.4953411764705881, 0.0221176470588235, 0.06277647058823528}, 
+ {0.49339607843137245, 0.02164705882352938, 0.06252549019607842}, 
+ {0.49145098039215673, 0.021176470588235262, 0.062274509803921546}, 
+ {0.489505882352941, 0.020705882352941143, 0.062023529411764686}, 
+ {0.4875607843137254, 0.020235294117647025, 0.061772549019607825}, 
+ {0.4856156862745097, 0.019764705882352906, 0.061521568627450965}, 
+ {0.48367058823529396, 0.019294117647058788, 0.0612705882352941}, 
+ {0.4817254901960785, 0.018823529411764725, 0.06101960784313726}, 
+ {0.47978039215686286, 0.018352941176470607, 0.0607686274509804}, 
+ {0.47783529411764714, 0.017882352941176488, 0.06051764705882354}, 
+ {0.4758901960784314, 0.01741176470588237, 0.06026666666666668}, 
+ {0.47394509803921575, 0.01694117647058825, 0.060015686274509816}, 
+ {0.4720000000000001, 0.016470588235294133, 0.05976470588235295}, 
+ {0.47005490196078437, 0.016000000000000014, 0.05951372549019608}, 
+ {0.4681098039215687, 0.015529411764705896, 0.05926274509803922}, 
+ {0.46616470588235304, 0.015058823529411777, 0.05901176470588236}, 
+ {0.4642196078431373, 0.014588235294117659, 0.0587607843137255}, 
+ {0.4622745098039216, 0.01411764705882354, 0.05850980392156863}, 
+ {0.460329411764706, 0.013647058823529422, 0.058258823529411766}, 
+ {0.45838431372549027, 0.013176470588235303, 0.058007843137254905}, 
+ {0.45643921568627455, 0.012705882352941185, 0.057756862745098045}, 
+ {0.4544941176470589, 0.012235294117647066, 0.057505882352941184}, 
+ {0.4525490196078432, 0.011764705882352955, 0.05725490196078432}, 
+ {0.4506039215686275, 0.011294117647058836, 0.05700392156862746}, 
+ {0.4486588235294118, 0.010823529411764718, 0.05675294117647059}, 
+ {0.44671372549019617, 0.0103529411764706, 0.05650196078431373}, 
+ {0.44476862745098045, 0.009882352941176481, 0.05625098039215687}, 
+ {0.4428235294117647, 0.009411764705882363, 0.05600000000000001}, 
+ {0.44087843137254906, 0.008941176470588244, 0.05574901960784314}, 
+ {0.4389333333333334, 0.008470588235294126, 0.05549803921568627}, 
+ {0.4369882352941177, 0.008000000000000007, 0.05524705882352941}, 
+ {0.435043137254902, 0.007529411764705889, 0.05499607843137255}, 
+ {0.43309803921568635, 0.00705882352941177, 0.05474509803921569}, 
+ {0.4311529411764706, 0.006588235294117652, 0.054494117647058825}, 
+ {0.4292078431372549, 0.006117647058823533, 0.054243137254901964}, 
+ {0.42726274509803924, 0.005647058823529415, 0.0539921568627451}, 
+ {0.4253176470588236, 0.005176470588235296, 0.05374117647058824}, 
+ {0.42337254901960786, 0.004705882352941178, 0.053490196078431376}, 
+ {0.4214274509803922, 0.004235294117647059, 0.053239215686274516}, 
+ {0.41948235294117653, 0.003764705882352948, 0.05298823529411765}, 
+ {0.4175372549019608, 0.0032941176470588293, 0.05273725490196078}, 
+ {0.4155921568627451, 0.002823529411764711, 0.05248627450980392}, 
+ {0.4136470588235294, 0.0023529411764705924, 0.05223529411764706}, 
+ {0.41170196078431376, 0.001882352941176474, 0.0519843137254902}, 
+ {0.40975686274509804, 0.0014117647058823554, 0.05173333333333333}, 
+ {0.4078117647058824, 0.000941176470588237, 0.051482352941176465}, 
+ {0.4058666666666667, 0.0004705882352941185, 0.051231372549019605}, 
+                                            {0.403921568627451, 0., 0.050980392156862744}};
+
+/*(Table[Blend[
+            Map[(RGBColor @@ # &), ({{255, 245, 240}, {254, 224, 210}, {252, 
+                                                          187, 161}, {252, 146, 114}, {251, 106, 74}}/255), {1}], 
+            x/1000], {x, 0, 1000, 1.}] /. RGBColor -> List) >> /tmp/1
+*/
+float palette_sequential_singlehue_red_lighter[1001][3]={{1., 0.9607843137254902, 0.9411764705882353}, 
+ {0.9999843137254902, 0.9604549019607843, 0.9407058823529412}, 
+ {0.9999686274509804, 0.9601254901960785, 0.9402352941176471}, 
+ {0.9999529411764706, 0.9597960784313726, 0.939764705882353}, 
+ {0.9999372549019608, 0.9594666666666667, 0.9392941176470588}, 
+ {0.999921568627451, 0.9591372549019608, 0.9388235294117647}, 
+ {0.9999058823529412, 0.958807843137255, 0.9383529411764706}, 
+ {0.9998901960784313, 0.9584784313725491, 0.9378823529411765}, 
+ {0.9998745098039216, 0.9581490196078432, 0.9374117647058824}, 
+ {0.9998588235294118, 0.9578196078431372, 0.9369411764705882}, 
+ {0.9998431372549019, 0.9574901960784314, 0.936470588235294}, 
+ {0.9998274509803922, 0.9571607843137255, 0.9359999999999999}, 
+ {0.9998117647058824, 0.9568313725490196, 0.9355294117647058}, 
+ {0.9997960784313725, 0.9565019607843137, 0.9350588235294117}, 
+ {0.9997803921568628, 0.9561725490196079, 0.9345882352941176}, 
+ {0.9997647058823529, 0.955843137254902, 0.9341176470588235}, 
+ {0.9997490196078431, 0.9555137254901961, 0.9336470588235294}, 
+ {0.9997333333333334, 0.9551843137254902, 0.9331764705882353}, 
+ {0.9997176470588235, 0.9548549019607844, 0.9327058823529412}, 
+ {0.9997019607843137, 0.9545254901960785, 0.932235294117647}, 
+ {0.999686274509804, 0.9541960784313726, 0.9317647058823529}, 
+ {0.9996705882352941, 0.9538666666666666, 0.9312941176470588}, 
+ {0.9996549019607843, 0.9535372549019608, 0.9308235294117647}, 
+ {0.9996392156862746, 0.9532078431372549, 0.9303529411764706}, 
+ {0.9996235294117647, 0.952878431372549, 0.9298823529411765}, 
+ {0.9996078431372549, 0.9525490196078432, 0.9294117647058824}, 
+ {0.999592156862745, 0.9522196078431373, 0.9289411764705883}, 
+ {0.9995764705882353, 0.9518901960784314, 0.928470588235294}, 
+ {0.9995607843137255, 0.9515607843137255, 0.9279999999999999}, 
+ {0.9995450980392157, 0.9512313725490197, 0.9275294117647058}, 
+ {0.9995294117647059, 0.9509019607843138, 0.9270588235294117}, 
+ {0.9995137254901961, 0.9505725490196079, 0.9265882352941176}, 
+ {0.9994980392156863, 0.950243137254902, 0.9261176470588235}, 
+ {0.9994823529411765, 0.9499137254901961, 0.9256470588235294}, 
+ {0.9994666666666666, 0.9495843137254902, 0.9251764705882353}, 
+ {0.9994509803921569, 0.9492549019607843, 0.9247058823529412}, 
+ {0.9994352941176471, 0.9489254901960784, 0.924235294117647}, 
+ {0.9994196078431372, 0.9485960784313726, 0.9237647058823529}, 
+ {0.9994039215686275, 0.9482666666666667, 0.9232941176470588}, 
+ {0.9993882352941177, 0.9479372549019608, 0.9228235294117647}, 
+ {0.9993725490196078, 0.9476078431372549, 0.9223529411764706}, 
+ {0.999356862745098, 0.9472784313725491, 0.9218823529411765}, 
+ {0.9993411764705883, 0.9469490196078432, 0.9214117647058824}, 
+ {0.9993254901960784, 0.9466196078431373, 0.9209411764705883}, 
+ {0.9993098039215687, 0.9462901960784313, 0.9204705882352942}, 
+ {0.9992941176470588, 0.9459607843137255, 0.9199999999999999}, 
+ {0.999278431372549, 0.9456313725490196, 0.9195294117647058}, 
+ {0.9992627450980393, 0.9453019607843137, 0.9190588235294117}, 
+ {0.9992470588235294, 0.9449725490196078, 0.9185882352941176}, 
+ {0.9992313725490196, 0.944643137254902, 0.9181176470588235}, 
+ {0.9992156862745099, 0.9443137254901961, 0.9176470588235294}, 
+ {0.9992, 0.9439843137254902, 0.9171764705882353}, 
+ {0.9991843137254902, 0.9436549019607843, 0.9167058823529411}, 
+ {0.9991686274509803, 0.9433254901960785, 0.916235294117647}, 
+ {0.9991529411764706, 0.9429960784313726, 0.9157647058823529}, 
+ {0.9991372549019608, 0.9426666666666667, 0.9152941176470588}, 
+ {0.9991215686274509, 0.9423372549019609, 0.9148235294117647}, 
+ {0.9991058823529412, 0.9420078431372549, 0.9143529411764706}, 
+ {0.9990901960784314, 0.941678431372549, 0.9138823529411765}, 
+ {0.9990745098039215, 0.9413490196078431, 0.9134117647058824}, 
+ {0.9990588235294118, 0.9410196078431373, 0.9129411764705883}, 
+ {0.999043137254902, 0.9406901960784314, 0.9124705882352941}, 
+ {0.9990274509803921, 0.9403607843137255, 0.912}, 
+ {0.9990117647058824, 0.9400313725490196, 0.9115294117647058}, 
+ {0.9989960784313725, 0.9397019607843138, 0.9110588235294117}, 
+ {0.9989803921568627, 0.9393725490196079, 0.9105882352941176}, 
+ {0.998964705882353, 0.939043137254902, 0.9101176470588235}, 
+ {0.9989490196078431, 0.938713725490196, 0.9096470588235294}, 
+ {0.9989333333333333, 0.9383843137254902, 0.9091764705882353}, 
+ {0.9989176470588236, 0.9380549019607843, 0.9087058823529411}, 
+ {0.9989019607843137, 0.9377254901960784, 0.908235294117647}, 
+ {0.9988862745098039, 0.9373960784313725, 0.9077647058823529}, 
+ {0.9988705882352942, 0.9370666666666667, 0.9072941176470588}, 
+ {0.9988549019607843, 0.9367372549019608, 0.9068235294117647}, 
+ {0.9988392156862745, 0.9364078431372549, 0.9063529411764706}, 
+ {0.9988235294117647, 0.936078431372549, 0.9058823529411765}, 
+ {0.9988078431372549, 0.9357490196078432, 0.9054117647058824}, 
+ {0.9987921568627451, 0.9354196078431373, 0.9049411764705882}, 
+ {0.9987764705882353, 0.9350901960784314, 0.9044705882352941}, 
+ {0.9987607843137255, 0.9347607843137256, 0.904}, 
+ {0.9987450980392157, 0.9344313725490196, 0.9035294117647059}, 
+ {0.9987294117647059, 0.9341019607843137, 0.9030588235294117}, 
+ {0.9987137254901961, 0.9337725490196078, 0.9025882352941176}, 
+ {0.9986980392156862, 0.933443137254902, 0.9021176470588235}, 
+ {0.9986823529411765, 0.9331137254901961, 0.9016470588235294}, 
+ {0.9986666666666667, 0.9327843137254902, 0.9011764705882352}, 
+ {0.9986509803921568, 0.9324549019607843, 0.9007058823529411}, 
+ {0.9986352941176471, 0.9321254901960785, 0.900235294117647}, 
+ {0.9986196078431373, 0.9317960784313726, 0.8997647058823529}, 
+ {0.9986039215686274, 0.9314666666666667, 0.8992941176470588}, 
+ {0.9985882352941177, 0.9311372549019608, 0.8988235294117647}, 
+ {0.9985725490196079, 0.930807843137255, 0.8983529411764706}, 
+ {0.998556862745098, 0.930478431372549, 0.8978823529411765}, 
+ {0.9985411764705883, 0.9301490196078431, 0.8974117647058824}, 
+ {0.9985254901960784, 0.9298196078431372, 0.8969411764705882}, 
+ {0.9985098039215686, 0.9294901960784314, 0.8964705882352941}, 
+ {0.9984941176470589, 0.9291607843137255, 0.896}, 
+ {0.998478431372549, 0.9288313725490196, 0.8955294117647059}, 
+ {0.9984627450980392, 0.9285019607843137, 0.8950588235294117}, 
+ {0.9984470588235295, 0.9281725490196079, 0.8945882352941176}, 
+ {0.9984313725490196, 0.927843137254902, 0.8941176470588235}, 
+ {0.9984156862745098, 0.9275137254901961, 0.8936470588235293}, 
+ {0.9984, 0.9271843137254903, 0.8931764705882352}, 
+ {0.9983843137254902, 0.9268549019607843, 0.8927058823529411}, 
+ {0.9983686274509804, 0.9265254901960784, 0.892235294117647}, 
+ {0.9983529411764706, 0.9261960784313725, 0.8917647058823529}, 
+ {0.9983372549019608, 0.9258666666666667, 0.8912941176470588}, 
+ {0.998321568627451, 0.9255372549019608, 0.8908235294117647}, 
+ {0.9983058823529412, 0.9252078431372549, 0.8903529411764706}, 
+ {0.9982901960784314, 0.924878431372549, 0.8898823529411765}, 
+ {0.9982745098039216, 0.9245490196078432, 0.8894117647058823}, 
+ {0.9982588235294118, 0.9242196078431373, 0.8889411764705882}, 
+ {0.998243137254902, 0.9238901960784314, 0.8884705882352941}, 
+ {0.9982274509803921, 0.9235607843137255, 0.888}, 
+ {0.9982117647058824, 0.9232313725490197, 0.8875294117647059}, 
+ {0.9981960784313726, 0.9229019607843137, 0.8870588235294118}, 
+ {0.9981803921568627, 0.9225725490196078, 0.8865882352941177}, 
+ {0.998164705882353, 0.9222431372549019, 0.8861176470588235}, 
+ {0.9981490196078432, 0.9219137254901961, 0.8856470588235293}, 
+ {0.9981333333333333, 0.9215843137254902, 0.8851764705882352}, 
+ {0.9981176470588236, 0.9212549019607843, 0.8847058823529411}, 
+ {0.9981019607843137, 0.9209254901960784, 0.884235294117647}, 
+ {0.9980862745098039, 0.9205960784313726, 0.8837647058823529}, 
+ {0.9980705882352942, 0.9202666666666667, 0.8832941176470588}, 
+ {0.9980549019607843, 0.9199372549019608, 0.8828235294117647}, 
+ {0.9980392156862745, 0.919607843137255, 0.8823529411764706}, 
+ {0.9980235294117648, 0.919278431372549, 0.8818823529411765}, 
+ {0.9980078431372549, 0.9189490196078431, 0.8814117647058823}, 
+ {0.9979921568627451, 0.9186196078431372, 0.8809411764705882}, 
+ {0.9979764705882354, 0.9182901960784313, 0.8804705882352941}, 
+ {0.9979607843137255, 0.9179607843137255, 0.88}, 
+ {0.9979450980392157, 0.9176313725490196, 0.8795294117647059}, 
+ {0.9979294117647058, 0.9173019607843137, 0.8790588235294118}, 
+ {0.9979137254901961, 0.9169725490196079, 0.8785882352941177}, 
+ {0.9978980392156863, 0.916643137254902, 0.8781176470588234}, 
+ {0.9978823529411764, 0.9163137254901961, 0.8776470588235293}, 
+ {0.9978666666666667, 0.9159843137254902, 0.8771764705882352}, 
+ {0.9978509803921569, 0.9156549019607844, 0.8767058823529411}, 
+ {0.997835294117647, 0.9153254901960785, 0.876235294117647}, 
+ {0.9978196078431373, 0.9149960784313725, 0.8757647058823529}, 
+ {0.9978039215686274, 0.9146666666666666, 0.8752941176470588}, 
+ {0.9977882352941176, 0.9143372549019608, 0.8748235294117647}, 
+ {0.9977725490196079, 0.9140078431372549, 0.8743529411764706}, 
+ {0.997756862745098, 0.913678431372549, 0.8738823529411764}, 
+ {0.9977411764705882, 0.9133490196078431, 0.8734117647058823}, 
+ {0.9977254901960785, 0.9130196078431373, 0.8729411764705882}, 
+ {0.9977098039215686, 0.9126901960784314, 0.8724705882352941}, 
+ {0.9976941176470588, 0.9123607843137255, 0.872}, 
+ {0.9976784313725491, 0.9120313725490197, 0.8715294117647059}, 
+ {0.9976627450980392, 0.9117019607843138, 0.8710588235294118}, 
+ {0.9976470588235294, 0.9113725490196078, 0.8705882352941177}, 
+ {0.9976313725490196, 0.9110431372549019, 0.8701176470588236}, 
+ {0.9976156862745098, 0.910713725490196, 0.8696470588235294}, 
+ {0.9976, 0.9103843137254902, 0.8691764705882352}, 
+ {0.9975843137254902, 0.9100549019607843, 0.8687058823529411}, 
+ {0.9975686274509804, 0.9097254901960784, 0.868235294117647}, 
+ {0.9975529411764706, 0.9093960784313726, 0.8677647058823529}, 
+ {0.9975372549019608, 0.9090666666666667, 0.8672941176470588}, 
+ {0.997521568627451, 0.9087372549019608, 0.8668235294117647}, 
+ {0.9975058823529411, 0.9084078431372549, 0.8663529411764705}, 
+ {0.9974901960784314, 0.9080784313725491, 0.8658823529411764}, 
+ {0.9974745098039216, 0.9077490196078432, 0.8654117647058823}, 
+ {0.9974588235294117, 0.9074196078431372, 0.8649411764705882}, 
+ {0.997443137254902, 0.9070901960784313, 0.8644705882352941}, 
+ {0.9974274509803922, 0.9067607843137255, 0.864}, 
+ {0.9974117647058823, 0.9064313725490196, 0.8635294117647059}, 
+ {0.9973960784313726, 0.9061019607843137, 0.8630588235294118}, 
+ {0.9973803921568628, 0.9057725490196078, 0.8625882352941177}, 
+ {0.9973647058823529, 0.905443137254902, 0.8621176470588234}, 
+ {0.9973490196078432, 0.9051137254901961, 0.8616470588235294}, 
+ {0.9973333333333333, 0.9047843137254902, 0.8611764705882352}, 
+ {0.9973176470588235, 0.9044549019607843, 0.8607058823529411}, 
+ {0.9973019607843138, 0.9041254901960785, 0.860235294117647}, 
+ {0.9972862745098039, 0.9037960784313726, 0.8597647058823529}, 
+ {0.9972705882352941, 0.9034666666666666, 0.8592941176470588}, 
+ {0.9972549019607844, 0.9031372549019607, 0.8588235294117647}, 
+ {0.9972392156862745, 0.9028078431372549, 0.8583529411764705}, 
+ {0.9972235294117647, 0.902478431372549, 0.8578823529411764}, 
+ {0.9972078431372549, 0.9021490196078431, 0.8574117647058823}, 
+ {0.9971921568627451, 0.9018196078431373, 0.8569411764705882}, 
+ {0.9971764705882353, 0.9014901960784314, 0.8564705882352941}, 
+ {0.9971607843137255, 0.9011607843137255, 0.856}, 
+ {0.9971450980392157, 0.9008313725490196, 0.8555294117647059}, 
+ {0.9971294117647059, 0.9005019607843138, 0.8550588235294118}, 
+ {0.9971137254901961, 0.9001725490196079, 0.8545882352941176}, 
+ {0.9970980392156863, 0.899843137254902, 0.8541176470588235}, 
+ {0.9970823529411765, 0.899513725490196, 0.8536470588235294}, 
+ {0.9970666666666667, 0.8991843137254902, 0.8531764705882352}, 
+ {0.9970509803921569, 0.8988549019607843, 0.8527058823529412}, 
+ {0.997035294117647, 0.8985254901960784, 0.852235294117647}, 
+ {0.9970196078431373, 0.8981960784313725, 0.8517647058823529}, 
+ {0.9970039215686275, 0.8978666666666667, 0.8512941176470588}, 
+ {0.9969882352941176, 0.8975372549019608, 0.8508235294117646}, 
+ {0.9969725490196079, 0.8972078431372549, 0.8503529411764705}, 
+ {0.9969568627450981, 0.896878431372549, 0.8498823529411764}, 
+ {0.9969411764705882, 0.8965490196078432, 0.8494117647058823}, 
+ {0.9969254901960785, 0.8962196078431373, 0.8489411764705882}, 
+ {0.9969098039215687, 0.8958901960784313, 0.8484705882352941}, 
+ {0.9968941176470588, 0.8955607843137254, 0.848}, 
+ {0.9968784313725491, 0.8952313725490196, 0.8475294117647059}, 
+ {0.9968627450980392, 0.8949019607843137, 0.8470588235294118}, 
+ {0.9968470588235294, 0.8945725490196078, 0.8465882352941176}, 
+ {0.9968313725490197, 0.894243137254902, 0.8461176470588235}, 
+ {0.9968156862745098, 0.8939137254901961, 0.8456470588235294}, 
+ {0.9968, 0.8935843137254902, 0.8451764705882352}, 
+ {0.9967843137254903, 0.8932549019607843, 0.8447058823529412}, 
+ {0.9967686274509804, 0.8929254901960784, 0.844235294117647}, 
+ {0.9967529411764706, 0.8925960784313726, 0.8437647058823529}, 
+ {0.9967372549019607, 0.8922666666666667, 0.8432941176470587}, 
+ {0.996721568627451, 0.8919372549019607, 0.8428235294117646}, 
+ {0.9967058823529412, 0.8916078431372549, 0.8423529411764705}, 
+ {0.9966901960784313, 0.891278431372549, 0.8418823529411764}, 
+ {0.9966745098039216, 0.8909490196078431, 0.8414117647058823}, 
+ {0.9966588235294118, 0.8906196078431372, 0.8409411764705882}, 
+ {0.996643137254902, 0.8902901960784314, 0.8404705882352941}, 
+ {0.9966274509803922, 0.8899607843137255, 0.84}, 
+ {0.9966117647058824, 0.8896313725490196, 0.8395294117647059}, 
+ {0.9965960784313725, 0.8893019607843137, 0.8390588235294117}, 
+ {0.9965803921568628, 0.8889725490196079, 0.8385882352941176}, 
+ {0.9965647058823529, 0.888643137254902, 0.8381176470588235}, 
+ {0.9965490196078431, 0.888313725490196, 0.8376470588235294}, 
+ {0.9965333333333334, 0.8879843137254901, 0.8371764705882353}, 
+ {0.9965176470588235, 0.8876549019607843, 0.8367058823529412}, 
+ {0.9965019607843137, 0.8873254901960784, 0.836235294117647}, 
+ {0.996486274509804, 0.8869960784313725, 0.8357647058823529}, 
+ {0.9964705882352941, 0.8866666666666667, 0.8352941176470587}, 
+ {0.9964549019607843, 0.8863372549019608, 0.8348235294117646}, 
+ {0.9964392156862745, 0.8860078431372549, 0.8343529411764705}, 
+ {0.9964235294117647, 0.885678431372549, 0.8338823529411764}, 
+ {0.996407843137255, 0.8853490196078431, 0.8334117647058823}, 
+ {0.9963921568627451, 0.8850196078431373, 0.8329411764705882}, 
+ {0.9963764705882353, 0.8846901960784314, 0.8324705882352941}, 
+ {0.9963607843137255, 0.8843607843137254, 0.832}, 
+ {0.9963450980392157, 0.8840313725490196, 0.8315294117647059}, 
+ {0.9963294117647059, 0.8837019607843137, 0.8310588235294117}, 
+ {0.9963137254901961, 0.8833725490196078, 0.8305882352941176}, 
+ {0.9962980392156863, 0.8830431372549019, 0.8301176470588235}, 
+ {0.9962823529411765, 0.8827137254901961, 0.8296470588235294}, 
+ {0.9962666666666666, 0.8823843137254902, 0.8291764705882353}, 
+ {0.9962509803921569, 0.8820549019607843, 0.8287058823529412}, 
+ {0.9962352941176471, 0.8817254901960784, 0.8282352941176471}, 
+ {0.9962196078431372, 0.8813960784313726, 0.827764705882353}, 
+ {0.9962039215686275, 0.8810666666666667, 0.8272941176470587}, 
+ {0.9961882352941177, 0.8807372549019608, 0.8268235294117646}, 
+ {0.9961725490196078, 0.8804078431372548, 0.8263529411764705}, 
+ {0.9961568627450981, 0.880078431372549, 0.8258823529411764}, 
+ {0.9961411764705882, 0.8797490196078431, 0.8254117647058823}, 
+ {0.9961254901960784, 0.8794196078431372, 0.8249411764705882}, 
+ {0.9961098039215687, 0.8790901960784314, 0.8244705882352941}, 
+ {0.9960941176470588, 0.8787607843137255, 0.824}, 
+ {0.996078431372549, 0.8784313725490196, 0.8235294117647058}, 
+ {0.9960470588235294, 0.8778509803921568, 0.8227607843137255}, 
+ {0.9960156862745099, 0.8772705882352941, 0.8219921568627451}, 
+ {0.9959843137254902, 0.8766901960784313, 0.8212235294117647}, 
+ {0.9959529411764706, 0.8761098039215686, 0.8204549019607843}, 
+ {0.995921568627451, 0.8755294117647059, 0.8196862745098039}, 
+ {0.9958901960784314, 0.8749490196078431, 0.8189176470588235}, 
+ {0.9958588235294118, 0.8743686274509804, 0.8181490196078431}, 
+ {0.9958274509803922, 0.8737882352941176, 0.8173803921568628}, 
+ {0.9957960784313725, 0.8732078431372549, 0.8166117647058823}, 
+ {0.995764705882353, 0.8726274509803922, 0.8158431372549019}, 
+ {0.9957333333333334, 0.8720470588235294, 0.8150745098039215}, 
+ {0.9957019607843137, 0.8714666666666666, 0.8143058823529411}, 
+ {0.9956705882352941, 0.8708862745098039, 0.8135372549019607}, 
+ {0.9956392156862746, 0.8703058823529412, 0.8127686274509803}, 
+ {0.9956078431372549, 0.8697254901960784, 0.8119999999999999}, 
+ {0.9955764705882353, 0.8691450980392157, 0.8112313725490196}, 
+ {0.9955450980392156, 0.8685647058823529, 0.8104627450980392}, 
+ {0.9955137254901961, 0.8679843137254901, 0.8096941176470588}, 
+ {0.9954823529411765, 0.8674039215686274, 0.8089254901960784}, 
+ {0.9954509803921568, 0.8668235294117647, 0.808156862745098}, 
+ {0.9954196078431373, 0.866243137254902, 0.8073882352941176}, 
+ {0.9953882352941177, 0.8656627450980392, 0.8066196078431372}, 
+ {0.995356862745098, 0.8650823529411764, 0.8058509803921569}, 
+ {0.9953254901960784, 0.8645019607843137, 0.8050823529411764}, 
+ {0.9952941176470589, 0.863921568627451, 0.804313725490196}, 
+ {0.9952627450980392, 0.8633411764705882, 0.8035450980392156}, 
+ {0.9952313725490196, 0.8627607843137255, 0.8027764705882352}, 
+ {0.9952, 0.8621803921568627, 0.8020078431372548}, 
+ {0.9951686274509804, 0.8615999999999999, 0.8012392156862744}, 
+ {0.9951372549019608, 0.8610196078431372, 0.800470588235294}, 
+ {0.9951058823529412, 0.8604392156862745, 0.7997019607843137}, 
+ {0.9950745098039215, 0.8598588235294118, 0.7989333333333333}, 
+ {0.995043137254902, 0.859278431372549, 0.7981647058823529}, 
+ {0.9950117647058824, 0.8586980392156862, 0.7973960784313725}, 
+ {0.9949803921568627, 0.8581176470588235, 0.7966274509803921}, 
+ {0.9949490196078431, 0.8575372549019608, 0.7958588235294117}, 
+ {0.9949176470588236, 0.856956862745098, 0.7950901960784313}, 
+ {0.9948862745098039, 0.8563764705882353, 0.794321568627451}, 
+ {0.9948549019607843, 0.8557960784313725, 0.7935529411764706}, 
+ {0.9948235294117648, 0.8552156862745098, 0.7927843137254902}, 
+ {0.9947921568627451, 0.854635294117647, 0.7920156862745098}, 
+ {0.9947607843137255, 0.8540549019607843, 0.7912470588235294}, 
+ {0.9947294117647059, 0.8534745098039216, 0.790478431372549}, 
+ {0.9946980392156863, 0.8528941176470588, 0.7897098039215686}, 
+ {0.9946666666666667, 0.852313725490196, 0.7889411764705883}, 
+ {0.9946352941176471, 0.8517333333333333, 0.7881725490196079}, 
+ {0.9946039215686274, 0.8511529411764706, 0.7874039215686274}, 
+ {0.9945725490196079, 0.8505725490196079, 0.786635294117647}, 
+ {0.9945411764705883, 0.8499921568627451, 0.7858666666666666}, 
+ {0.9945098039215686, 0.8494117647058823, 0.7850980392156862}, 
+ {0.994478431372549, 0.8488313725490196, 0.7843294117647058}, 
+ {0.9944470588235295, 0.8482509803921569, 0.7835607843137254}, 
+ {0.9944156862745098, 0.8476705882352941, 0.7827921568627451}, 
+ {0.9943843137254902, 0.8470901960784314, 0.7820235294117647}, 
+ {0.9943529411764707, 0.8465098039215686, 0.7812549019607843}, 
+ {0.994321568627451, 0.8459294117647058, 0.7804862745098039}, 
+ {0.9942901960784314, 0.8453490196078431, 0.7797176470588235}, 
+ {0.9942588235294118, 0.8447686274509804, 0.7789490196078431}, 
+ {0.9942274509803922, 0.8441882352941177, 0.7781803921568627}, 
+ {0.9941960784313726, 0.8436078431372549, 0.7774117647058824}, 
+ {0.994164705882353, 0.8430274509803921, 0.776643137254902}, 
+ {0.9941333333333333, 0.8424470588235294, 0.7758745098039215}, 
+ {0.9941019607843138, 0.8418666666666667, 0.7751058823529411}, 
+ {0.9940705882352942, 0.8412862745098039, 0.7743372549019607}, 
+ {0.9940392156862745, 0.8407058823529412, 0.7735686274509803}, 
+ {0.9940078431372549, 0.8401254901960784, 0.7727999999999999}, 
+ {0.9939764705882354, 0.8395450980392156, 0.7720313725490195}, 
+ {0.9939450980392157, 0.838964705882353, 0.7712627450980392}, 
+ {0.9939137254901961, 0.8383843137254902, 0.7704941176470588}, 
+ {0.9938823529411764, 0.8378039215686274, 0.7697254901960784}, 
+ {0.9938509803921569, 0.8372235294117647, 0.768956862745098}, 
+ {0.9938196078431373, 0.8366431372549019, 0.7681882352941176}, 
+ {0.9937882352941176, 0.8360627450980391, 0.7674196078431372}, 
+ {0.9937568627450981, 0.8354823529411765, 0.7666509803921568}, 
+ {0.9937254901960785, 0.8349019607843137, 0.7658823529411765}, 
+ {0.9936941176470588, 0.834321568627451, 0.7651137254901961}, 
+ {0.9936627450980392, 0.8337411764705882, 0.7643450980392157}, 
+ {0.9936313725490197, 0.8331607843137254, 0.7635764705882353}, 
+ {0.9936, 0.8325803921568627, 0.7628078431372549}, 
+ {0.9935686274509804, 0.832, 0.7620392156862744}, 
+ {0.9935372549019608, 0.8314196078431372, 0.761270588235294}, 
+ {0.9935058823529412, 0.8308392156862745, 0.7605019607843136}, 
+ {0.9934745098039216, 0.8302588235294117, 0.7597333333333333}, 
+ {0.993443137254902, 0.8296784313725489, 0.7589647058823529}, 
+ {0.9934117647058823, 0.8290980392156863, 0.7581960784313725}, 
+ {0.9933803921568628, 0.8285176470588235, 0.7574274509803921}, 
+ {0.9933490196078432, 0.8279372549019608, 0.7566588235294117}, 
+ {0.9933176470588235, 0.827356862745098, 0.7558901960784313}, 
+ {0.9932862745098039, 0.8267764705882352, 0.755121568627451}, 
+ {0.9932549019607844, 0.8261960784313725, 0.7543529411764706}, 
+ {0.9932235294117647, 0.8256156862745098, 0.7535843137254902}, 
+ {0.9931921568627451, 0.825035294117647, 0.7528156862745098}, 
+ {0.9931607843137256, 0.8244549019607843, 0.7520470588235294}, 
+ {0.9931294117647059, 0.8238745098039215, 0.7512784313725489}, 
+ {0.9930980392156863, 0.8232941176470587, 0.7505098039215685}, 
+ {0.9930666666666667, 0.8227137254901961, 0.7497411764705881}, 
+ {0.9930352941176471, 0.8221333333333333, 0.7489725490196077}, 
+ {0.9930039215686275, 0.8215529411764706, 0.7482039215686274}, 
+ {0.9929725490196079, 0.8209725490196078, 0.747435294117647}, 
+ {0.9929411764705882, 0.820392156862745, 0.7466666666666666}, 
+ {0.9929098039215687, 0.8198117647058824, 0.7458980392156862}, 
+ {0.992878431372549, 0.8192313725490196, 0.7451294117647058}, 
+ {0.9928470588235294, 0.8186509803921569, 0.7443607843137254}, 
+ {0.9928156862745098, 0.8180705882352941, 0.743592156862745}, 
+ {0.9927843137254903, 0.8174901960784313, 0.7428235294117647}, 
+ {0.9927529411764706, 0.8169098039215686, 0.7420549019607843}, 
+ {0.992721568627451, 0.8163294117647059, 0.7412862745098039}, 
+ {0.9926901960784315, 0.8157490196078431, 0.7405176470588235}, 
+ {0.9926588235294118, 0.8151686274509804, 0.7397490196078431}, 
+ {0.9926274509803922, 0.8145882352941176, 0.7389803921568627}, 
+ {0.9925960784313725, 0.8140078431372548, 0.7382117647058823}, 
+ {0.992564705882353, 0.8134274509803922, 0.737443137254902}, 
+ {0.9925333333333334, 0.8128470588235294, 0.7366745098039216}, 
+ {0.9925019607843137, 0.8122666666666667, 0.7359058823529412}, 
+ {0.9924705882352941, 0.8116862745098039, 0.7351372549019608}, 
+ {0.9924392156862746, 0.8111058823529411, 0.7343686274509804}, 
+ {0.9924078431372549, 0.8105254901960784, 0.7336}, 
+ {0.9923764705882353, 0.8099450980392157, 0.7328313725490195}, 
+ {0.9923450980392157, 0.8093647058823529, 0.7320627450980391}, 
+ {0.9923137254901961, 0.8087843137254902, 0.7312941176470588}, 
+ {0.9922823529411765, 0.8082039215686274, 0.7305254901960784}, 
+ {0.9922509803921569, 0.8076235294117646, 0.729756862745098}, 
+ {0.9922196078431372, 0.807043137254902, 0.7289882352941176}, 
+ {0.9921882352941177, 0.8064627450980392, 0.7282196078431372}, 
+ {0.9921568627450981, 0.8058823529411765, 0.7274509803921568}, 
+ {0.9921254901960784, 0.8053019607843137, 0.7266823529411764}, 
+ {0.9920941176470589, 0.8047215686274509, 0.7259137254901961}, 
+ {0.9920627450980393, 0.8041411764705882, 0.7251450980392157}, 
+ {0.9920313725490196, 0.8035607843137255, 0.7243764705882353}, 
+ {0.992, 0.8029803921568627, 0.7236078431372549}, 
+ {0.9919686274509805, 0.8024, 0.7228392156862745}, 
+ {0.9919372549019608, 0.8018196078431372, 0.7220705882352941}, 
+ {0.9919058823529412, 0.8012392156862744, 0.7213019607843136}, 
+ {0.9918745098039216, 0.8006588235294118, 0.7205333333333332}, 
+ {0.991843137254902, 0.800078431372549, 0.7197647058823529}, 
+ {0.9918117647058824, 0.7994980392156863, 0.7189960784313725}, 
+ {0.9917803921568628, 0.7989176470588235, 0.7182274509803921}, 
+ {0.9917490196078431, 0.7983372549019607, 0.7174588235294117}, 
+ {0.9917176470588236, 0.7977568627450979, 0.7166901960784313}, 
+ {0.991686274509804, 0.7971764705882353, 0.7159215686274509}, 
+ {0.9916549019607843, 0.7965960784313725, 0.7151529411764705}, 
+ {0.9916235294117647, 0.7960156862745098, 0.7143843137254902}, 
+ {0.9915921568627452, 0.795435294117647, 0.7136156862745098}, 
+ {0.9915607843137255, 0.7948549019607842, 0.7128470588235294}, 
+ {0.9915294117647059, 0.7942745098039216, 0.712078431372549}, 
+ {0.9914980392156864, 0.7936941176470588, 0.7113098039215686}, 
+ {0.9914666666666667, 0.793113725490196, 0.7105411764705882}, 
+ {0.9914352941176471, 0.7925333333333333, 0.7097725490196078}, 
+ {0.9914039215686274, 0.7919529411764705, 0.7090039215686275}, 
+ {0.9913725490196079, 0.7913725490196077, 0.7082352941176471}, 
+ {0.9913411764705883, 0.7907921568627451, 0.7074666666666666}, 
+ {0.9913098039215686, 0.7902117647058823, 0.7066980392156862}, 
+ {0.991278431372549, 0.7896313725490196, 0.7059294117647058}, 
+ {0.9912470588235295, 0.7890509803921568, 0.7051607843137254}, 
+ {0.9912156862745098, 0.788470588235294, 0.704392156862745}, 
+ {0.9911843137254902, 0.7878901960784314, 0.7036235294117646}, 
+ {0.9911529411764706, 0.7873098039215686, 0.7028549019607843}, 
+ {0.991121568627451, 0.7867294117647058, 0.7020862745098039}, 
+ {0.9910901960784314, 0.7861490196078431, 0.7013176470588235}, 
+ {0.9910588235294118, 0.7855686274509803, 0.7005490196078431}, 
+ {0.9910274509803921, 0.7849882352941175, 0.6997803921568627}, 
+ {0.9909960784313726, 0.7844078431372549, 0.6990117647058823}, 
+ {0.990964705882353, 0.7838274509803921, 0.698243137254902}, 
+ {0.9909333333333333, 0.7832470588235294, 0.6974745098039214}, 
+ {0.9909019607843138, 0.7826666666666666, 0.6967058823529411}, 
+ {0.9908705882352942, 0.7820862745098038, 0.6959372549019607}, 
+ {0.9908392156862745, 0.7815058823529412, 0.6951686274509804}, 
+ {0.9908078431372549, 0.7809254901960784, 0.6944}, 
+ {0.9907764705882354, 0.7803450980392157, 0.6936313725490196}, 
+ {0.9907450980392157, 0.7797647058823529, 0.6928627450980391}, 
+ {0.9907137254901961, 0.7791843137254901, 0.6920941176470587}, 
+ {0.9906823529411765, 0.7786039215686275, 0.6913254901960784}, 
+ {0.9906509803921569, 0.7780235294117647, 0.690556862745098}, 
+ {0.9906196078431373, 0.7774431372549019, 0.6897882352941176}, 
+ {0.9905882352941177, 0.7768627450980392, 0.6890196078431372}, 
+ {0.990556862745098, 0.7762823529411764, 0.6882509803921568}, 
+ {0.9905254901960785, 0.7757019607843136, 0.6874823529411764}, 
+ {0.9904941176470589, 0.775121568627451, 0.686713725490196}, 
+ {0.9904627450980392, 0.7745411764705882, 0.6859450980392157}, 
+ {0.9904313725490197, 0.7739607843137255, 0.6851764705882353}, 
+ {0.9904000000000001, 0.7733803921568627, 0.6844078431372549}, 
+ {0.9903686274509804, 0.7727999999999999, 0.6836392156862745}, 
+ {0.9903372549019608, 0.7722196078431373, 0.6828705882352941}, 
+ {0.9903058823529413, 0.7716392156862745, 0.6821019607843137}, 
+ {0.9902745098039216, 0.7710588235294117, 0.6813333333333333}, 
+ {0.990243137254902, 0.770478431372549, 0.680564705882353}, 
+ {0.9902117647058823, 0.7698980392156862, 0.6797960784313726}, 
+ {0.9901803921568628, 0.7693176470588234, 0.6790274509803922}, 
+ {0.9901490196078432, 0.7687372549019608, 0.6782588235294118}, 
+ {0.9901176470588235, 0.768156862745098, 0.6774901960784313}, 
+ {0.9900862745098039, 0.7675764705882353, 0.6767215686274509}, 
+ {0.9900549019607844, 0.7669960784313725, 0.6759529411764705}, 
+ {0.9900235294117647, 0.7664156862745097, 0.6751843137254901}, 
+ {0.9899921568627451, 0.7658352941176471, 0.6744156862745098}, 
+ {0.9899607843137255, 0.7652549019607843, 0.6736470588235294}, 
+ {0.989929411764706, 0.7646745098039215, 0.672878431372549}, 
+ {0.9898980392156863, 0.7640941176470588, 0.6721098039215686}, 
+ {0.9898666666666667, 0.763513725490196, 0.6713411764705882}, 
+ {0.9898352941176471, 0.7629333333333332, 0.6705725490196078}, 
+ {0.9898039215686275, 0.7623529411764706, 0.6698039215686274}, 
+ {0.9897725490196079, 0.7617725490196078, 0.6690352941176471}, 
+ {0.9897411764705882, 0.7611921568627451, 0.6682666666666666}, 
+ {0.9897098039215687, 0.7606117647058823, 0.6674980392156862}, 
+ {0.9896784313725491, 0.7600313725490195, 0.6667294117647058}, 
+ {0.9896470588235294, 0.7594509803921567, 0.6659607843137254}, 
+ {0.9896156862745098, 0.7588705882352941, 0.665192156862745}, 
+ {0.9895843137254903, 0.7582901960784313, 0.6644235294117646}, 
+ {0.9895529411764706, 0.7577098039215686, 0.6636549019607842}, 
+ {0.989521568627451, 0.7571294117647058, 0.6628862745098039}, 
+ {0.9894901960784314, 0.756549019607843, 0.6621176470588235}, 
+ {0.9894588235294118, 0.7559686274509804, 0.6613490196078431}, 
+ {0.9894274509803922, 0.7553882352941176, 0.6605803921568627}, 
+ {0.9893960784313726, 0.7548078431372548, 0.6598117647058823}, 
+ {0.9893647058823529, 0.7542274509803921, 0.6590431372549019}, 
+ {0.9893333333333334, 0.7536470588235293, 0.6582745098039215}, 
+ {0.9893019607843138, 0.7530666666666666, 0.6575058823529412}, 
+ {0.9892705882352941, 0.7524862745098039, 0.6567372549019608}, 
+ {0.9892392156862746, 0.7519058823529411, 0.6559686274509804}, 
+ {0.989207843137255, 0.7513254901960784, 0.6552}, 
+ {0.9891764705882353, 0.7507450980392156, 0.6544313725490196}, 
+ {0.9891450980392157, 0.7501647058823528, 0.6536627450980392}, 
+ {0.9891137254901962, 0.7495843137254902, 0.6528941176470587}, 
+ {0.9890823529411765, 0.7490039215686274, 0.6521254901960784}, 
+ {0.9890509803921569, 0.7484235294117646, 0.651356862745098}, 
+ {0.9890196078431372, 0.7478431372549019, 0.6505882352941176}, 
+ {0.9889882352941177, 0.7472627450980391, 0.6498196078431372}, 
+ {0.9889568627450981, 0.7466823529411764, 0.6490509803921568}, 
+ {0.9889254901960784, 0.7461019607843137, 0.6482823529411764}, 
+ {0.9888941176470588, 0.7455215686274509, 0.647513725490196}, 
+ {0.9888627450980393, 0.7449411764705882, 0.6467450980392156}, 
+ {0.9888313725490196, 0.7443607843137254, 0.6459764705882353}, 
+ {0.9888, 0.7437803921568626, 0.6452078431372549}, 
+ {0.9887686274509805, 0.7432, 0.6444392156862745}, 
+ {0.9887372549019608, 0.7426196078431372, 0.6436705882352941}, 
+ {0.9887058823529412, 0.7420392156862745, 0.6429019607843137}, 
+ {0.9886745098039216, 0.7414588235294117, 0.6421333333333333}, 
+ {0.988643137254902, 0.7408784313725489, 0.641364705882353}, 
+ {0.9886117647058824, 0.7402980392156863, 0.6405960784313726}, 
+ {0.9885803921568628, 0.7397176470588235, 0.6398274509803922}, 
+ {0.9885490196078431, 0.7391372549019608, 0.6390588235294117}, 
+ {0.9885176470588236, 0.738556862745098, 0.6382901960784313}, 
+ {0.988486274509804, 0.7379764705882352, 0.6375215686274509}, 
+ {0.9884549019607843, 0.7373960784313724, 0.6367529411764705}, 
+ {0.9884235294117647, 0.7368156862745098, 0.6359843137254901}, 
+ {0.9883921568627452, 0.736235294117647, 0.6352156862745097}, 
+ {0.9883607843137255, 0.7356549019607843, 0.6344470588235294}, 
+ {0.9883294117647059, 0.7350745098039215, 0.633678431372549}, 
+ {0.9882980392156863, 0.7344941176470587, 0.6329098039215686}, 
+ {0.9882666666666667, 0.7339137254901961, 0.6321411764705882}, 
+ {0.9882352941176471, 0.7333333333333333, 0.6313725490196078}, 
+ {0.9882352941176471, 0.7326901960784313, 0.6306352941176471}, 
+ {0.9882352941176471, 0.7320470588235294, 0.6298980392156862}, 
+ {0.9882352941176471, 0.7314039215686274, 0.6291607843137255}, 
+ {0.9882352941176471, 0.7307607843137255, 0.6284235294117647}, 
+ {0.9882352941176471, 0.7301176470588234, 0.6276862745098039}, 
+ {0.9882352941176471, 0.7294745098039215, 0.6269490196078431}, 
+ {0.9882352941176471, 0.7288313725490195, 0.6262117647058824}, 
+ {0.9882352941176471, 0.7281882352941176, 0.6254745098039215}, 
+ {0.9882352941176471, 0.7275450980392156, 0.6247372549019607}, 
+ {0.9882352941176471, 0.7269019607843137, 0.624}, 
+ {0.9882352941176471, 0.7262588235294117, 0.6232627450980391}, 
+ {0.9882352941176471, 0.7256156862745098, 0.6225254901960784}, 
+ {0.9882352941176471, 0.7249725490196078, 0.6217882352941176}, 
+ {0.9882352941176471, 0.7243294117647058, 0.6210509803921568}, 
+ {0.9882352941176471, 0.7236862745098038, 0.620313725490196}, 
+ {0.9882352941176471, 0.7230431372549019, 0.6195764705882353}, 
+ {0.9882352941176471, 0.7223999999999999, 0.6188392156862745}, 
+ {0.9882352941176471, 0.721756862745098, 0.6181019607843137}, 
+ {0.9882352941176471, 0.721113725490196, 0.6173647058823529}, 
+ {0.9882352941176471, 0.7204705882352941, 0.6166274509803922}, 
+ {0.9882352941176471, 0.7198274509803921, 0.6158901960784313}, 
+ {0.9882352941176471, 0.7191843137254902, 0.6151529411764706}, 
+ {0.9882352941176471, 0.7185411764705881, 0.6144156862745098}, 
+ {0.9882352941176471, 0.7178980392156862, 0.613678431372549}, 
+ {0.9882352941176471, 0.7172549019607842, 0.6129411764705882}, 
+ {0.9882352941176471, 0.7166117647058823, 0.6122039215686275}, 
+ {0.9882352941176471, 0.7159686274509803, 0.6114666666666666}, 
+ {0.9882352941176471, 0.7153254901960784, 0.6107294117647059}, 
+ {0.9882352941176471, 0.7146823529411764, 0.6099921568627451}, 
+ {0.9882352941176471, 0.7140392156862745, 0.6092549019607842}, 
+ {0.9882352941176471, 0.7133960784313724, 0.6085176470588235}, 
+ {0.9882352941176471, 0.7127529411764705, 0.6077803921568627}, 
+ {0.9882352941176471, 0.7121098039215685, 0.6070431372549019}, 
+ {0.9882352941176471, 0.7114666666666666, 0.6063058823529411}, 
+ {0.9882352941176471, 0.7108235294117646, 0.6055686274509804}, 
+ {0.9882352941176471, 0.7101803921568627, 0.6048313725490195}, 
+ {0.9882352941176471, 0.7095372549019607, 0.6040941176470588}, 
+ {0.9882352941176471, 0.7088941176470588, 0.603356862745098}, 
+ {0.9882352941176471, 0.7082509803921568, 0.6026196078431372}, 
+ {0.9882352941176471, 0.7076078431372548, 0.6018823529411764}, 
+ {0.9882352941176471, 0.7069647058823528, 0.6011450980392157}, 
+ {0.9882352941176471, 0.7063215686274509, 0.6004078431372548}, 
+ {0.9882352941176471, 0.7056784313725489, 0.5996705882352941}, 
+ {0.9882352941176471, 0.705035294117647, 0.5989333333333333}, 
+ {0.9882352941176471, 0.704392156862745, 0.5981960784313725}, 
+ {0.9882352941176471, 0.7037490196078431, 0.5974588235294117}, 
+ {0.9882352941176471, 0.7031058823529411, 0.596721568627451}, 
+ {0.9882352941176471, 0.7024627450980392, 0.5959843137254901}, 
+ {0.9882352941176471, 0.7018196078431371, 0.5952470588235294}, 
+ {0.9882352941176471, 0.7011764705882352, 0.5945098039215686}, 
+ {0.9882352941176471, 0.7005333333333332, 0.5937725490196077}, 
+ {0.9882352941176471, 0.6998901960784313, 0.593035294117647}, 
+ {0.9882352941176471, 0.6992470588235293, 0.5922980392156862}, 
+ {0.9882352941176471, 0.6986039215686274, 0.5915607843137254}, 
+ {0.9882352941176471, 0.6979607843137254, 0.5908235294117646}, 
+ {0.9882352941176471, 0.6973176470588235, 0.5900862745098039}, 
+ {0.9882352941176471, 0.6966745098039215, 0.5893490196078431}, 
+ {0.9882352941176471, 0.6960313725490195, 0.5886117647058823}, 
+ {0.9882352941176471, 0.6953882352941175, 0.5878745098039215}, 
+ {0.9882352941176471, 0.6947450980392156, 0.5871372549019608}, 
+ {0.9882352941176471, 0.6941019607843136, 0.5863999999999999}, 
+ {0.9882352941176471, 0.6934588235294117, 0.5856627450980392}, 
+ {0.9882352941176471, 0.6928156862745097, 0.5849254901960784}, 
+ {0.9882352941176471, 0.6921725490196078, 0.5841882352941176}, 
+ {0.9882352941176471, 0.6915294117647058, 0.5834509803921568}, 
+ {0.9882352941176471, 0.6908862745098039, 0.5827137254901961}, 
+ {0.9882352941176471, 0.6902431372549018, 0.5819764705882352}, 
+ {0.9882352941176471, 0.6895999999999999, 0.5812392156862745}, 
+ {0.9882352941176471, 0.6889568627450979, 0.5805019607843137}, 
+ {0.9882352941176471, 0.688313725490196, 0.5797647058823528}, 
+ {0.9882352941176471, 0.687670588235294, 0.5790274509803921}, 
+ {0.9882352941176471, 0.6870274509803921, 0.5782901960784314}, 
+ {0.9882352941176471, 0.6863843137254901, 0.5775529411764705}, 
+ {0.9882352941176471, 0.6857411764705882, 0.5768156862745097}, 
+ {0.9882352941176471, 0.6850980392156862, 0.576078431372549}, 
+ {0.9882352941176471, 0.6844549019607842, 0.5753411764705881}, 
+ {0.9882352941176471, 0.6838117647058823, 0.5746039215686275}, 
+ {0.9882352941176471, 0.6831686274509804, 0.5738666666666667}, 
+ {0.9882352941176471, 0.6825254901960784, 0.5731294117647059}, 
+ {0.9882352941176471, 0.6818823529411765, 0.5723921568627451}, 
+ {0.9882352941176471, 0.6812392156862745, 0.5716549019607844}, 
+ {0.9882352941176471, 0.6805960784313725, 0.5709176470588235}, 
+ {0.9882352941176471, 0.6799529411764705, 0.5701803921568628}, 
+ {0.9882352941176471, 0.6793098039215686, 0.569443137254902}, 
+ {0.9882352941176471, 0.6786666666666666, 0.5687058823529412}, 
+ {0.9882352941176471, 0.6780235294117647, 0.5679686274509804}, 
+ {0.9882352941176471, 0.6773803921568627, 0.5672313725490197}, 
+ {0.9882352941176471, 0.6767372549019608, 0.5664941176470588}, 
+ {0.9882352941176471, 0.6760941176470588, 0.5657568627450981}, 
+ {0.9882352941176471, 0.6754509803921568, 0.5650196078431373}, 
+ {0.9882352941176471, 0.6748078431372548, 0.5642823529411765}, 
+ {0.9882352941176471, 0.6741647058823529, 0.5635450980392157}, 
+ {0.9882352941176471, 0.6735215686274509, 0.562807843137255}, 
+ {0.9882352941176471, 0.672878431372549, 0.5620705882352941}, 
+ {0.9882352941176471, 0.672235294117647, 0.5613333333333334}, 
+ {0.9882352941176471, 0.6715921568627451, 0.5605960784313726}, 
+ {0.9882352941176471, 0.6709490196078431, 0.5598588235294117}, 
+ {0.9882352941176471, 0.6703058823529411, 0.559121568627451}, 
+ {0.9882352941176471, 0.6696627450980392, 0.5583843137254902}, 
+ {0.9882352941176471, 0.6690196078431372, 0.5576470588235294}, 
+ {0.9882352941176471, 0.6683764705882352, 0.5569098039215686}, 
+ {0.9882352941176471, 0.6677333333333333, 0.5561725490196079}, 
+ {0.9882352941176471, 0.6670901960784313, 0.555435294117647}, 
+ {0.9882352941176471, 0.6664470588235294, 0.5546980392156863}, 
+ {0.9882352941176471, 0.6658039215686274, 0.5539607843137255}, 
+ {0.9882352941176471, 0.6651607843137255, 0.5532235294117647}, 
+ {0.9882352941176471, 0.6645176470588234, 0.5524862745098039}, 
+ {0.9882352941176471, 0.6638745098039215, 0.5517490196078432}, 
+ {0.9882352941176471, 0.6632313725490195, 0.5510117647058823}, 
+ {0.9882352941176471, 0.6625882352941176, 0.5502745098039216}, 
+ {0.9882352941176471, 0.6619450980392156, 0.5495372549019608}, 
+ {0.9882352941176471, 0.6613019607843137, 0.5488}, 
+ {0.9882352941176471, 0.6606588235294117, 0.5480627450980392}, 
+ {0.9882352941176471, 0.6600156862745098, 0.5473254901960785}, 
+ {0.9882352941176471, 0.6593725490196078, 0.5465882352941176}, 
+ {0.9882352941176471, 0.6587294117647058, 0.5458509803921568}, 
+ {0.9882352941176471, 0.6580862745098038, 0.5451137254901961}, 
+ {0.9882352941176471, 0.6574431372549019, 0.5443764705882352}, 
+ {0.9882352941176471, 0.6567999999999999, 0.5436392156862745}, 
+ {0.9882352941176471, 0.656156862745098, 0.5429019607843137}, 
+ {0.9882352941176471, 0.655513725490196, 0.5421647058823529}, 
+ {0.9882352941176471, 0.6548705882352941, 0.5414274509803921}, 
+ {0.9882352941176471, 0.6542274509803921, 0.5406901960784314}, 
+ {0.9882352941176471, 0.6535843137254902, 0.5399529411764706}, 
+ {0.9882352941176471, 0.6529411764705881, 0.5392156862745098}, 
+ {0.9882352941176471, 0.6522980392156862, 0.538478431372549}, 
+ {0.9882352941176471, 0.6516549019607842, 0.5377411764705883}, 
+ {0.9882352941176471, 0.6510117647058823, 0.5370039215686274}, 
+ {0.9882352941176471, 0.6503686274509803, 0.5362666666666667}, 
+ {0.9882352941176471, 0.6497254901960784, 0.5355294117647059}, 
+ {0.9882352941176471, 0.6490823529411764, 0.5347921568627451}, 
+ {0.9882352941176471, 0.6484392156862745, 0.5340549019607843}, 
+ {0.9882352941176471, 0.6477960784313725, 0.5333176470588236}, 
+ {0.9882352941176471, 0.6471529411764705, 0.5325803921568627}, 
+ {0.9882352941176471, 0.6465098039215685, 0.531843137254902}, 
+ {0.9882352941176471, 0.6458666666666666, 0.5311058823529412}, 
+ {0.9882352941176471, 0.6452235294117646, 0.5303686274509803}, 
+ {0.9882352941176471, 0.6445803921568627, 0.5296313725490196}, 
+ {0.9882352941176471, 0.6439372549019607, 0.5288941176470588}, 
+ {0.9882352941176471, 0.6432941176470588, 0.528156862745098}, 
+ {0.9882352941176471, 0.6426509803921568, 0.5274196078431372}, 
+ {0.9882352941176471, 0.6420078431372549, 0.5266823529411765}, 
+ {0.9882352941176471, 0.6413647058823528, 0.5259450980392156}, 
+ {0.9882352941176471, 0.6407215686274509, 0.5252078431372549}, 
+ {0.9882352941176471, 0.6400784313725489, 0.5244705882352941}, 
+ {0.9882352941176471, 0.639435294117647, 0.5237333333333334}, 
+ {0.9882352941176471, 0.638792156862745, 0.5229960784313725}, 
+ {0.9882352941176471, 0.6381490196078431, 0.5222588235294118}, 
+ {0.9882352941176471, 0.6375058823529411, 0.521521568627451}, 
+ {0.9882352941176471, 0.6368627450980392, 0.5207843137254902}, 
+ {0.9882352941176471, 0.6362196078431372, 0.5200470588235294}, 
+ {0.9882352941176471, 0.6355764705882352, 0.5193098039215687}, 
+ {0.9882352941176471, 0.6349333333333332, 0.5185725490196078}, 
+ {0.9882352941176471, 0.6342901960784313, 0.5178352941176471}, 
+ {0.9882352941176471, 0.6336470588235293, 0.5170980392156863}, 
+ {0.9882352941176471, 0.6330039215686274, 0.5163607843137255}, 
+ {0.9882352941176471, 0.6323607843137254, 0.5156235294117647}, 
+ {0.9882352941176471, 0.6317176470588235, 0.514886274509804}, 
+ {0.9882352941176471, 0.6310745098039215, 0.5141490196078431}, 
+ {0.9882352941176471, 0.6304313725490196, 0.5134117647058823}, 
+ {0.9882352941176471, 0.6297882352941175, 0.5126745098039216}, 
+ {0.9882352941176471, 0.6291450980392156, 0.5119372549019607}, 
+ {0.9882352941176471, 0.6285019607843136, 0.5112}, 
+ {0.9882352941176471, 0.6278588235294117, 0.5104627450980392}, 
+ {0.9882352941176471, 0.6272156862745097, 0.5097254901960784}, 
+ {0.9882352941176471, 0.6265725490196078, 0.5089882352941176}, 
+ {0.9882352941176471, 0.6259294117647058, 0.5082509803921569}, 
+ {0.9882352941176471, 0.6252862745098039, 0.507513725490196}, 
+ {0.9882352941176471, 0.624643137254902, 0.5067764705882353}, 
+ {0.9882352941176471, 0.6239999999999999, 0.5060392156862745}, 
+ {0.9882352941176471, 0.6233568627450979, 0.5053019607843137}, 
+ {0.9882352941176471, 0.622713725490196, 0.5045647058823529}, 
+ {0.9882352941176471, 0.622070588235294, 0.5038274509803922}, 
+ {0.9882352941176471, 0.6214274509803921, 0.5030901960784313}, 
+ {0.9882352941176471, 0.6207843137254901, 0.5023529411764706}, 
+ {0.9882352941176471, 0.6201411764705882, 0.5016156862745098}, 
+ {0.9882352941176471, 0.6194980392156862, 0.500878431372549}, 
+ {0.9882352941176471, 0.6188549019607843, 0.5001411764705882}, 
+ {0.9882352941176471, 0.6182117647058822, 0.49940392156862745}, 
+ {0.9882352941176471, 0.6175686274509803, 0.49866666666666665}, 
+ {0.9882352941176471, 0.6169254901960783, 0.49792941176470584}, 
+ {0.9882352941176471, 0.6162823529411764, 0.4971921568627451}, 
+ {0.9882352941176471, 0.6156392156862744, 0.4964549019607843}, 
+ {0.9882352941176471, 0.6149960784313725, 0.4957176470588235}, 
+ {0.9882352941176471, 0.6143529411764705, 0.49498039215686274}, 
+ {0.9882352941176471, 0.6137098039215686, 0.49424313725490193}, 
+ {0.9882352941176471, 0.6130666666666666, 0.4935058823529411}, 
+ {0.9882352941176471, 0.6124235294117646, 0.4927686274509804}, 
+ {0.9882352941176471, 0.6117803921568626, 0.4920313725490196}, 
+ {0.9882352941176471, 0.6111372549019607, 0.49129411764705877}, 
+ {0.9882352941176471, 0.6104941176470587, 0.490556862745098}, 
+ {0.9882352941176471, 0.6098509803921568, 0.4898196078431372}, 
+ {0.9882352941176471, 0.6092078431372548, 0.4890823529411764}, 
+ {0.9882352941176471, 0.6085647058823529, 0.48834509803921566}, 
+ {0.9882352941176471, 0.6079215686274508, 0.48760784313725486}, 
+ {0.9882352941176471, 0.607278431372549, 0.48687058823529406}, 
+ {0.9882352941176471, 0.6066352941176469, 0.4861333333333333}, 
+ {0.9882352941176471, 0.605992156862745, 0.4853960784313725}, 
+ {0.9882352941176471, 0.605349019607843, 0.4846588235294117}, 
+ {0.9882352941176471, 0.6047058823529411, 0.48392156862745095}, 
+ {0.9882352941176471, 0.6040627450980391, 0.4831843137254902}, 
+ {0.9882352941176471, 0.6034196078431372, 0.48244705882352934}, 
+ {0.9882352941176471, 0.6027764705882352, 0.4817098039215686}, 
+ {0.9882352941176471, 0.6021333333333333, 0.4809725490196079}, 
+ {0.9882352941176471, 0.6014901960784313, 0.4802352941176471}, 
+ {0.9882352941176471, 0.6008470588235294, 0.47949803921568634}, 
+ {0.9882352941176471, 0.6002039215686275, 0.47876078431372554}, 
+ {0.9882352941176471, 0.5995607843137255, 0.47802352941176474}, 
+ {0.9882352941176471, 0.5989176470588236, 0.477286274509804}, 
+ {0.9882352941176471, 0.5982745098039215, 0.4765490196078432}, 
+ {0.9882352941176471, 0.5976313725490197, 0.4758117647058824}, 
+ {0.9882352941176471, 0.5969882352941176, 0.47507450980392163}, 
+ {0.9882352941176471, 0.5963450980392156, 0.4743372549019608}, 
+ {0.9882352941176471, 0.5957019607843137, 0.4736}, 
+ {0.9882352941176471, 0.5950588235294118, 0.47286274509803927}, 
+ {0.9882352941176471, 0.5944156862745098, 0.47212549019607847}, 
+ {0.9882352941176471, 0.5937725490196079, 0.47138823529411766}, 
+ {0.9882352941176471, 0.5931294117647059, 0.4706509803921569}, 
+ {0.9882352941176471, 0.5924862745098038, 0.4699137254901961}, 
+ {0.9882352941176471, 0.591843137254902, 0.4691764705882353}, 
+ {0.9882352941176471, 0.5912, 0.46843921568627456}, 
+ {0.9882352941176471, 0.590556862745098, 0.46770196078431375}, 
+ {0.9882352941176471, 0.589913725490196, 0.46696470588235295}, 
+ {0.9882352941176471, 0.5892705882352941, 0.4662274509803922}, 
+ {0.9882352941176471, 0.5886274509803922, 0.4654901960784314}, 
+ {0.9882352941176471, 0.5879843137254902, 0.4647529411764706}, 
+ {0.9882352941176471, 0.5873411764705883, 0.46401568627450984}, 
+ {0.9882352941176471, 0.5866980392156862, 0.4632784313725491}, 
+ {0.9882352941176471, 0.5860549019607844, 0.46254117647058823}, 
+ {0.9882352941176471, 0.5854117647058823, 0.4618039215686275}, 
+ {0.9882352941176471, 0.5847686274509803, 0.46106666666666674}, 
+ {0.9882352941176471, 0.5841254901960784, 0.4603294117647059}, 
+ {0.9882352941176471, 0.5834823529411765, 0.4595921568627451}, 
+ {0.9882352941176471, 0.5828392156862745, 0.4588549019607844}, 
+ {0.9882352941176471, 0.5821960784313726, 0.4581176470588235}, 
+ {0.9882352941176471, 0.5815529411764706, 0.45738039215686277}, 
+ {0.9882352941176471, 0.5809098039215685, 0.456643137254902}, 
+ {0.9882352941176471, 0.5802666666666666, 0.4559058823529412}, 
+ {0.9882352941176471, 0.5796235294117646, 0.4551686274509804}, 
+ {0.9882352941176471, 0.5789803921568627, 0.45443137254901966}, 
+ {0.9882352941176471, 0.5783372549019608, 0.45369411764705886}, 
+ {0.9882352941176471, 0.5776941176470588, 0.45295686274509805}, 
+ {0.9882352941176471, 0.5770509803921569, 0.4522196078431373}, 
+ {0.9882352941176471, 0.5764078431372549, 0.4514823529411765}, 
+ {0.9882352941176471, 0.575764705882353, 0.4507450980392157}, 
+ {0.9882352941176471, 0.5751215686274509, 0.45000784313725495}, 
+ {0.9882352941176471, 0.574478431372549, 0.44927058823529414}, 
+ {0.9882352941176471, 0.573835294117647, 0.44853333333333334}, 
+ {0.9882352941176471, 0.573192156862745, 0.4477960784313726}, 
+ {0.9882352941176471, 0.5725490196078431, 0.4470588235294118}, 
+ {0.9882196078431373, 0.5719215686274509, 0.44643137254901966}, 
+ {0.9882039215686275, 0.5712941176470588, 0.44580392156862747}, 
+ {0.9881882352941177, 0.5706666666666667, 0.44517647058823534}, 
+ {0.9881725490196079, 0.5700392156862745, 0.44454901960784315}, 
+ {0.9881568627450981, 0.5694117647058823, 0.443921568627451}, 
+ {0.9881411764705883, 0.5687843137254902, 0.44329411764705884}, 
+ {0.9881254901960784, 0.568156862745098, 0.4426666666666667}, 
+ {0.9881098039215687, 0.5675294117647058, 0.4420392156862745}, 
+ {0.9880941176470589, 0.5669019607843137, 0.4414117647058824}, 
+ {0.988078431372549, 0.5662745098039216, 0.4407843137254902}, 
+ {0.9880627450980393, 0.5656470588235294, 0.4401568627450981}, 
+ {0.9880470588235295, 0.5650196078431372, 0.4395294117647059}, 
+ {0.9880313725490196, 0.564392156862745, 0.43890196078431376}, 
+ {0.9880156862745099, 0.563764705882353, 0.4382745098039216}, 
+ {0.988, 0.5631372549019608, 0.43764705882352944}, 
+ {0.9879843137254902, 0.5625098039215686, 0.43701960784313726}, 
+ {0.9879686274509805, 0.5618823529411764, 0.43639215686274513}, 
+ {0.9879529411764706, 0.5612549019607843, 0.43576470588235294}, 
+ {0.9879372549019608, 0.5606274509803921, 0.4351372549019608}, 
+ {0.9879215686274511, 0.5599999999999999, 0.4345098039215686}, 
+ {0.9879058823529412, 0.5593725490196078, 0.4338823529411765}, 
+ {0.9878901960784314, 0.5587450980392157, 0.4332549019607843}, 
+ {0.9878745098039216, 0.5581176470588235, 0.4326274509803922}, 
+ {0.9878588235294118, 0.5574901960784313, 0.432}, 
+ {0.987843137254902, 0.5568627450980391, 0.43137254901960786}, 
+ {0.9878274509803922, 0.556235294117647, 0.4307450980392157}, 
+ {0.9878117647058824, 0.5556078431372549, 0.43011764705882355}, 
+ {0.9877960784313726, 0.5549803921568627, 0.42949019607843136}, 
+ {0.9877803921568628, 0.5543529411764705, 0.42886274509803923}, 
+ {0.987764705882353, 0.5537254901960784, 0.42823529411764705}, 
+ {0.9877490196078431, 0.5530980392156862, 0.4276078431372549}, 
+ {0.9877333333333334, 0.552470588235294, 0.42698039215686273}, 
+ {0.9877176470588236, 0.5518431372549019, 0.4263529411764706}, 
+ {0.9877019607843137, 0.5512156862745098, 0.4257254901960784}, 
+ {0.987686274509804, 0.5505882352941176, 0.4250980392156863}, 
+ {0.9876705882352942, 0.5499607843137254, 0.4244705882352941}, 
+ {0.9876549019607843, 0.5493333333333332, 0.42384313725490197}, 
+ {0.9876392156862746, 0.5487058823529412, 0.4232156862745098}, 
+ {0.9876235294117647, 0.548078431372549, 0.42258823529411765}, 
+ {0.9876078431372549, 0.5474509803921568, 0.42196078431372547}, 
+ {0.9875921568627452, 0.5468235294117647, 0.42133333333333334}, 
+ {0.9875764705882353, 0.5461960784313725, 0.42070588235294115}, 
+ {0.9875607843137255, 0.5455686274509803, 0.420078431372549}, 
+ {0.9875450980392158, 0.5449411764705882, 0.41945098039215684}, 
+ {0.9875294117647059, 0.5443137254901961, 0.4188235294117647}, 
+ {0.9875137254901961, 0.5436862745098039, 0.4181960784313725}, 
+ {0.9874980392156864, 0.5430588235294117, 0.4175686274509804}, 
+ {0.9874823529411765, 0.5424313725490195, 0.41694117647058826}, 
+ {0.9874666666666667, 0.5418039215686274, 0.4163137254901961}, 
+ {0.9874509803921568, 0.5411764705882353, 0.4156862745098039}, 
+ {0.9874352941176471, 0.5405490196078431, 0.41505882352941176}, 
+ {0.9874196078431373, 0.5399215686274509, 0.4144313725490196}, 
+ {0.9874039215686274, 0.5392941176470588, 0.41380392156862744}, 
+ {0.9873882352941177, 0.5386666666666666, 0.41317647058823526}, 
+ {0.9873725490196079, 0.5380392156862744, 0.4125490196078431}, 
+ {0.987356862745098, 0.5374117647058823, 0.411921568627451}, 
+ {0.9873411764705883, 0.5367843137254902, 0.4112941176470588}, 
+ {0.9873254901960784, 0.536156862745098, 0.4106666666666667}, 
+ {0.9873098039215686, 0.5355294117647058, 0.4100392156862745}, 
+ {0.9872941176470589, 0.5349019607843136, 0.40941176470588236}, 
+ {0.987278431372549, 0.5342745098039215, 0.4087843137254902}, 
+ {0.9872627450980392, 0.5336470588235294, 0.40815686274509805}, 
+ {0.9872470588235295, 0.5330196078431372, 0.40752941176470586}, 
+ {0.9872313725490196, 0.532392156862745, 0.40690196078431373}, 
+ {0.9872156862745098, 0.5317647058823529, 0.40627450980392155}, 
+ {0.9872, 0.5311372549019607, 0.4056470588235294}, 
+ {0.9871843137254902, 0.5305098039215685, 0.40501960784313723}, 
+ {0.9871686274509804, 0.5298823529411765, 0.4043921568627451}, 
+ {0.9871529411764706, 0.5292549019607843, 0.4037647058823529}, 
+ {0.9871372549019608, 0.5286274509803921, 0.4031372549019608}, 
+ {0.987121568627451, 0.5279999999999999, 0.4025098039215686}, 
+ {0.9871058823529412, 0.5273725490196077, 0.40188235294117647}, 
+ {0.9870901960784314, 0.5267450980392157, 0.4012549019607843}, 
+ {0.9870745098039215, 0.5261176470588235, 0.40062745098039215}, 
+ {0.9870588235294118, 0.5254901960784313, 0.39999999999999997}, 
+ {0.987043137254902, 0.5248627450980392, 0.39937254901960784}, 
+ {0.9870274509803921, 0.524235294117647, 0.39874509803921565}, 
+ {0.9870117647058824, 0.5236078431372548, 0.3981176470588235}, 
+ {0.9869960784313726, 0.5229803921568627, 0.39749019607843133}, 
+ {0.9869803921568627, 0.5223529411764706, 0.3968627450980392}, 
+ {0.986964705882353, 0.5217254901960784, 0.396235294117647}, 
+ {0.9869490196078431, 0.5210980392156862, 0.3956078431372549}, 
+ {0.9869333333333333, 0.5204705882352941, 0.3949803921568628}, 
+ {0.9869176470588236, 0.5198431372549019, 0.39435294117647063}, 
+ {0.9869019607843137, 0.5192156862745099, 0.3937254901960785}, 
+ {0.9868862745098039, 0.5185882352941177, 0.3930980392156863}, 
+ {0.9868705882352942, 0.5179607843137255, 0.3924705882352942}, 
+ {0.9868549019607843, 0.5173333333333333, 0.391843137254902}, 
+ {0.9868392156862745, 0.5167058823529411, 0.39121568627450987}, 
+ {0.9868235294117648, 0.516078431372549, 0.3905882352941177}, 
+ {0.9868078431372549, 0.5154509803921569, 0.38996078431372555}, 
+ {0.9867921568627451, 0.5148235294117647, 0.38933333333333336}, 
+ {0.9867764705882353, 0.5141960784313726, 0.38870588235294123}, 
+ {0.9867607843137255, 0.5135686274509804, 0.38807843137254905}, 
+ {0.9867450980392157, 0.5129411764705882, 0.3874509803921569}, 
+ {0.9867294117647059, 0.512313725490196, 0.38682352941176473}, 
+ {0.9867137254901961, 0.511686274509804, 0.3861960784313726}, 
+ {0.9866980392156863, 0.5110588235294118, 0.3855686274509804}, 
+ {0.9866823529411765, 0.5104313725490196, 0.3849411764705883}, 
+ {0.9866666666666667, 0.5098039215686274, 0.3843137254901961}, 
+ {0.9866509803921568, 0.5091764705882353, 0.38368627450980397}, 
+ {0.986635294117647, 0.5085490196078432, 0.3830588235294118}, 
+ {0.9866196078431373, 0.507921568627451, 0.38243137254901965}, 
+ {0.9866039215686274, 0.5072941176470588, 0.38180392156862747}, 
+ {0.9865882352941177, 0.5066666666666667, 0.38117647058823534}, 
+ {0.9865725490196079, 0.5060392156862745, 0.38054901960784315}, 
+ {0.986556862745098, 0.5054117647058823, 0.379921568627451}, 
+ {0.9865411764705883, 0.5047843137254902, 0.37929411764705884}, 
+ {0.9865254901960784, 0.5041568627450981, 0.3786666666666667}, 
+ {0.9865098039215686, 0.5035294117647059, 0.3780392156862745}, 
+ {0.9864941176470589, 0.5029019607843137, 0.3774117647058824}, 
+ {0.986478431372549, 0.5022745098039215, 0.3767843137254902}, 
+ {0.9864627450980392, 0.5016470588235294, 0.3761568627450981}, 
+ {0.9864470588235295, 0.5010196078431373, 0.3755294117647059}, 
+ {0.9864313725490196, 0.5003921568627451, 0.37490196078431376}, 
+ {0.9864156862745098, 0.49976470588235294, 0.37427450980392163}, 
+ {0.9863999999999999, 0.4991372549019608, 0.37364705882352944}, 
+ {0.9863843137254902, 0.49850980392156863, 0.37301960784313726}, 
+ {0.9863686274509804, 0.49788235294117644, 0.3723921568627451}, 
+ {0.9863529411764705, 0.4972549019607843, 0.371764705882353}, 
+ {0.9863372549019608, 0.4966274509803922, 0.3711372549019608}, 
+ {0.986321568627451, 0.496, 0.3705098039215686}, 
+ {0.9863058823529411, 0.4953725490196078, 0.3698823529411765}, 
+ {0.9862901960784314, 0.4947450980392157, 0.36925490196078437}, 
+ {0.9862745098039216, 0.49411764705882355, 0.3686274509803922}, 
+ {0.9862588235294117, 0.49349019607843136, 0.368}, 
+ {0.986243137254902, 0.4928627450980392, 0.36737254901960786}, 
+ {0.9862274509803921, 0.49223529411764705, 0.36674509803921573}, 
+ {0.9862117647058823, 0.4916078431372549, 0.36611764705882355}, 
+ {0.9861960784313726, 0.49098039215686273, 0.36549019607843136}, 
+ {0.9861803921568627, 0.49035294117647055, 0.36486274509803923}, 
+ {0.9861647058823529, 0.4897254901960784, 0.3642352941176471}, 
+ {0.9861490196078432, 0.4890980392156863, 0.3636078431372549}, 
+ {0.9861333333333333, 0.4884705882352941, 0.36298039215686273}, 
+ {0.9861176470588235, 0.48784313725490197, 0.3623529411764706}, 
+ {0.9861019607843137, 0.4872156862745098, 0.36172549019607847}, 
+ {0.9860862745098039, 0.48658823529411765, 0.3610980392156863}, 
+ {0.9860705882352941, 0.48596078431372547, 0.36047058823529415}, 
+ {0.9860549019607843, 0.48533333333333334, 0.35984313725490197}, 
+ {0.9860392156862745, 0.48470588235294115, 0.35921568627450984}, 
+ {0.9860235294117647, 0.484078431372549, 0.35858823529411765}, 
+ {0.9860078431372549, 0.48345098039215684, 0.3579607843137255}, 
+ {0.9859921568627451, 0.4828235294117647, 0.35733333333333334}, 
+ {0.9859764705882352, 0.4821960784313725, 0.3567058823529412}, 
+ {0.9859607843137255, 0.4815686274509804, 0.356078431372549}, 
+ {0.9859450980392157, 0.4809411764705882, 0.3554509803921569}, 
+ {0.9859294117647058, 0.4803137254901961, 0.3548235294117647}, 
+ {0.9859137254901961, 0.4796862745098039, 0.3541960784313726}, 
+ {0.9858980392156863, 0.47905882352941176, 0.3535686274509804}, 
+ {0.9858823529411764, 0.4784313725490196, 0.35294117647058826}, 
+ {0.9858666666666667, 0.47780392156862744, 0.3523137254901961}, 
+ {0.9858509803921568, 0.4771764705882353, 0.35168627450980394}, 
+ {0.985835294117647, 0.4765490196078431, 0.35105882352941176}, 
+ {0.9858196078431373, 0.47592156862745094, 0.3504313725490196}, 
+ {0.9858039215686274, 0.4752941176470588, 0.34980392156862744}, 
+ {0.9857882352941176, 0.4746666666666667, 0.3491764705882353}, 
+ {0.9857725490196079, 0.4740392156862745, 0.3485490196078431}, 
+ {0.985756862745098, 0.4734117647058823, 0.347921568627451}, 
+ {0.9857411764705882, 0.4727843137254902, 0.3472941176470588}, 
+ {0.9857254901960784, 0.47215686274509805, 0.3466666666666667}, 
+ {0.9857098039215686, 0.47152941176470586, 0.3460392156862745}, 
+ {0.9856941176470588, 0.4709019607843137, 0.34541176470588236}, 
+ {0.985678431372549, 0.47027450980392155, 0.34478431372549023}, 
+ {0.9856627450980392, 0.4696470588235294, 0.34415686274509805}, 
+ {0.9856470588235294, 0.46901960784313723, 0.34352941176470586}, 
+ {0.9856313725490196, 0.46839215686274505, 0.34290196078431373}, 
+ {0.9856156862745098, 0.4677647058823529, 0.3422745098039216}, 
+ {0.9856, 0.4671372549019608, 0.3416470588235294}, 
+ {0.9855843137254902, 0.4665098039215686, 0.34101960784313723}, 
+ {0.9855686274509804, 0.46588235294117647, 0.3403921568627451}, 
+ {0.9855529411764705, 0.4652549019607843, 0.33976470588235297}, 
+ {0.9855372549019608, 0.46462745098039215, 0.3391372549019608}, 
+ {0.985521568627451, 0.46399999999999997, 0.3385098039215686}, 
+ {0.9855058823529411, 0.46337254901960784, 0.33788235294117647}, 
+ {0.9854901960784314, 0.46274509803921565, 0.33725490196078434}, 
+ {0.9854745098039216, 0.4621176470588235, 0.33662745098039215}, 
+ {0.9854588235294117, 0.46149019607843134, 0.33599999999999997}, 
+ {0.985443137254902, 0.4608627450980392, 0.33537254901960784}, 
+ {0.9854274509803921, 0.460235294117647, 0.3347450980392157}, 
+ {0.9854117647058823, 0.4596078431372549, 0.3341176470588235}, 
+ {0.9853960784313726, 0.4589803921568627, 0.33349019607843133}, 
+ {0.9853803921568627, 0.4583529411764706, 0.3328627450980392}, 
+ {0.9853647058823529, 0.4577254901960784, 0.3322352941176471}, 
+ {0.9853490196078432, 0.45709803921568626, 0.3316078431372549}, 
+ {0.9853333333333333, 0.4564705882352941, 0.3309803921568627}, 
+ {0.9853176470588235, 0.45584313725490194, 0.33035294117647057}, 
+ {0.9853019607843136, 0.45521568627450976, 0.32972549019607844}, 
+ {0.9852862745098039, 0.4545882352941176, 0.32909803921568626}, 
+ {0.9852705882352941, 0.45396078431372544, 0.3284705882352941}, 
+ {0.9852549019607842, 0.4533333333333333, 0.32784313725490194}, 
+ {0.9852392156862745, 0.4527058823529412, 0.3272156862745098}, 
+ {0.9852235294117647, 0.452078431372549, 0.3265882352941176}, 
+ {0.9852078431372548, 0.4514509803921568, 0.3259607843137255}, 
+ {0.9851921568627451, 0.4508235294117647, 0.3253333333333333}, 
+ {0.9851764705882352, 0.45019607843137255, 0.3247058823529412}, 
+ {0.9851607843137254, 0.44956862745098036, 0.324078431372549}, 
+ {0.9851450980392157, 0.4489411764705882, 0.32345098039215686}, 
+ {0.9851294117647058, 0.44831372549019605, 0.3228235294117647}, 
+ {0.985113725490196, 0.4476862745098039, 0.32219607843137255}, 
+ {0.9850980392156863, 0.44705882352941173, 0.32156862745098036}, 
+ {0.9850823529411764, 0.44643137254901955, 0.32094117647058823}, 
+ {0.9850666666666666, 0.4458039215686274, 0.3203137254901961}, 
+ {0.9850509803921568, 0.4451764705882353, 0.3196862745098039}, 
+ {0.985035294117647, 0.4445490196078431, 0.31905882352941173}, 
+ {0.9850196078431372, 0.4439215686274509, 0.3184313725490196}, 
+ {0.9850039215686274, 0.4432941176470588, 0.31780392156862747}, 
+ {0.9849882352941176, 0.44266666666666665, 0.3171764705882353}, 
+ {0.9849725490196078, 0.44203921568627447, 0.3165490196078431}, 
+ {0.984956862745098, 0.4414117647058823, 0.31592156862745097}, 
+ {0.9849411764705882, 0.4407843137254902, 0.31529411764705884}, 
+ {0.9849254901960784, 0.4401568627450981, 0.3146666666666667}, 
+ {0.9849098039215686, 0.43952941176470595, 0.3140392156862746}, 
+ {0.9848941176470588, 0.43890196078431376, 0.3134117647058824}, 
+ {0.9848784313725489, 0.4382745098039216, 0.3127843137254902}, 
+ {0.9848627450980392, 0.43764705882352944, 0.3121568627450981}, 
+ {0.9848470588235294, 0.4370196078431373, 0.31152941176470594}, 
+ {0.9848313725490195, 0.43639215686274513, 0.31090196078431376}, 
+ {0.9848156862745098, 0.43576470588235294, 0.31027450980392157}, 
+ {0.9848, 0.4351372549019608, 0.30964705882352944}, 
+ {0.9847843137254901, 0.4345098039215687, 0.3090196078431373}, 
+ {0.9847686274509804, 0.4338823529411765, 0.3083921568627451}, 
+ {0.9847529411764705, 0.4332549019607843, 0.30776470588235294}, 
+ {0.9847372549019607, 0.4326274509803922, 0.3071372549019608}, 
+ {0.984721568627451, 0.43200000000000005, 0.3065098039215687}, 
+ {0.9847058823529411, 0.43137254901960786, 0.3058823529411765}, 
+ {0.9846901960784313, 0.4307450980392157, 0.30525490196078436}, 
+ {0.9846745098039216, 0.43011764705882355, 0.30462745098039223}, 
+ {0.9846588235294117, 0.4294901960784314, 0.30400000000000005}, 
+ {0.9846431372549019, 0.42886274509803923, 0.30337254901960786}, 
+ {0.9846274509803921, 0.42823529411764705, 0.30274509803921573}, 
+ {0.9846117647058823, 0.4276078431372549, 0.3021176470588236}, 
+ {0.9845960784313725, 0.4269803921568628, 0.3014901960784314}, 
+ {0.9845803921568627, 0.4263529411764706, 0.30086274509803923}, 
+ {0.9845647058823529, 0.42572549019607847, 0.3002352941176471}, 
+ {0.9845490196078431, 0.42509803921568634, 0.29960784313725497}, 
+ {0.9845333333333333, 0.42447058823529416, 0.2989803921568628}, 
+ {0.9845176470588235, 0.42384313725490197, 0.2983529411764706}, 
+ {0.9845019607843136, 0.42321568627450984, 0.29772549019607847}, 
+ {0.9844862745098039, 0.4225882352941177, 0.29709803921568634}, 
+ {0.9844705882352941, 0.4219607843137255, 0.29647058823529415}, 
+ {0.9844549019607842, 0.42133333333333334, 0.29584313725490197}, 
+ {0.9844392156862745, 0.4207058823529412, 0.29521568627450984}, 
+ {0.9844235294117647, 0.4200784313725491, 0.2945882352941177}, 
+ {0.9844078431372548, 0.4194509803921569, 0.2939607843137255}, 
+ {0.9843921568627451, 0.4188235294117647, 0.29333333333333333}, 
+ {0.9843764705882352, 0.4181960784313726, 0.2927058823529412}, 
+ {0.9843607843137254, 0.41756862745098045, 0.2920784313725491}, 
+ {0.9843450980392157, 0.41694117647058826, 0.2914509803921569}, 
+ {0.9843294117647058, 0.4163137254901961, 0.2908235294117647}, 
+                                                    {0.984313725490196, 0.41568627450980394, 0.2901960784313726}};
+
+#endif
diff --git a/cmd/gvmap/colorutil.c b/cmd/gvmap/colorutil.c
new file mode 100644 (file)
index 0000000..4cf5d9a
--- /dev/null
@@ -0,0 +1,95 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#include "general.h"
+#include "colorutil.h"
+
+static void r2hex(float r, char *h){
+  /* convert a number in [0,1] to 0 to 255 then to a hex */
+  static char hex[] = "0123456789abcdef";
+  int i = (int)(255*r+0.5);
+  int j = i%16;
+  int k = i/16;
+  h[0] = hex[k];
+  h[1] = hex[j];
+}
+
+void rgb2hex(float r, float g, float b, char *cstring){
+  cstring[0] = '#';
+  r2hex(r, &(cstring[1]));
+  r2hex(g, &(cstring[3]));
+  r2hex(b, &(cstring[5]));
+  //set to semitransparent for multiple sets vis
+  //cstring[7] = cstring[8] = '3';
+  //cstring[9]='\0';
+  cstring[7] = '\0';
+}
+
+real Hue2RGB(real v1, real v2, real H) {
+  if(H < 0.0) H += 1.0;
+  if(H > 1.0) H -= 1.0;
+  if((6.0*H) < 1.0) return (v1 + (v2 - v1) * 6.0 * H);
+  if((2.0*H) < 1.0) return v2;
+  if((3.0*H) < 2.0) return (v1 + (v2 - v1) * ((2.0/3.0) - H) * 6.0);
+  return v1;
+}
+
+char *hex[16]={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
+
+char * hue2rgb(real hue, char *color){
+  real v1, v2, lightness = .5, saturation = 1;
+  int red, blue, green;
+
+  if(lightness < 0.5) 
+    v2 = lightness * (1.0 + saturation);
+  else
+    v2 = (lightness + saturation) - (saturation * lightness);
+
+  v1 = 2.0 * lightness - v2;
+
+  red =   (int)(255.0 * Hue2RGB(v1, v2, hue + (1.0/3.0)) + 0.5);
+  green = (int)(255.0 * Hue2RGB(v1, v2, hue) + 0.5);
+  blue =  (int)(255.0 * Hue2RGB(v1, v2, hue - (1.0/3.0)) + 0.5);
+  color[0] = '#';
+  sprintf(color+1,"%s",hex[red/16]);
+  sprintf(color+2,"%s",hex[red%16]);
+  sprintf(color+3,"%s",hex[green/16]);
+  sprintf(color+4,"%s",hex[green%16]);
+  sprintf(color+5,"%s",hex[blue/16]);
+  sprintf(color+6,"%s",hex[blue%16]);
+  color[7] = '\0';
+  return color;
+}
+
+
+void hue2rgb_real(real hue, real *color){
+  real v1, v2, lightness = .5, saturation = 1;
+  int red, blue, green;
+
+  if(lightness < 0.5) 
+    v2 = lightness * (1.0 + saturation);
+  else
+    v2 = (lightness + saturation) - (saturation * lightness);
+
+  v1 = 2.0 * lightness - v2;
+
+  red =   (int)(255.0 * Hue2RGB(v1, v2, hue + (1.0/3.0)) + 0.5);
+  green = (int)(255.0 * Hue2RGB(v1, v2, hue) + 0.5);
+  blue =  (int)(255.0 * Hue2RGB(v1, v2, hue - (1.0/3.0)) + 0.5);
+
+
+  color[0] = red/255.;
+  color[1] = green/255.;
+  color[2] = blue/255.;
+                 
+}
diff --git a/cmd/gvmap/colorutil.h b/cmd/gvmap/colorutil.h
new file mode 100644 (file)
index 0000000..e3a7daa
--- /dev/null
@@ -0,0 +1,25 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef COLORUTIL_H
+#define COLORUTIL_H
+
+#include <color.h>
+
+extern int colorxlate(char *str, gvcolor_t * color, color_type_t target_type);
+
+void rgb2hex(float r, float g, float b, char *cstring);/* dimension of cstring must be >=7 */
+char* hue2rgb(real hue, char *color);
+void hue2rgb_real(real hue, real *color);
+
+#endif
diff --git a/cmd/gvmap/country_graph_coloring.c b/cmd/gvmap/country_graph_coloring.c
new file mode 100644 (file)
index 0000000..9aadeae
--- /dev/null
@@ -0,0 +1,120 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#define STANDALONE
+#include "SparseMatrix.h"
+#include "country_graph_coloring.h"
+#include "power.h"
+
+static void get_local_12_norm(int n, int i, int *ia, int *ja, int *p, real *norm){
+  int j;
+  norm[0] = n; norm[1] = 0;
+  for (j = ia[i]; j < ia[i+1]; j++){
+    if (ja[j] == i) continue;
+    norm[0] = MIN(norm[0], ABS(p[i] - p[ja[j]]));
+    norm[1] += ABS(p[i] - p[ja[j]]);
+  }
+}
+static void get_12_norm(int n, int *ia, int *ja, int *p, real *norm){
+  int i, j;
+  norm[0] = n; norm[1] = 0;
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      if (ja[j] == i) continue;
+      norm[0] = MIN(norm[0], ABS(p[i] - p[ja[j]]));
+      norm[1] += ABS(p[i] - p[ja[j]]);
+    }
+  }
+}
+
+void country_graph_coloring(int seed, SparseMatrix A, int **p, real *norm_1){
+  int n = A->m, i, j, jj;
+  SparseMatrix L, A2;
+  int *ia = A->ia, *ja = A->ja;
+  int a = -1.;
+  real nrow;
+  real *v = NULL;
+  real norm1[2], norm2[2], norm11[2], norm22[2], norm = n;
+  real pi, pj;
+  int improved = TRUE;
+
+
+  assert(A->m == A->n);
+  A2 = SparseMatrix_symmetrize(A, TRUE);
+  ia = A2->ia; ja = A2->ja;
+
+  /* Laplacian */
+  L = SparseMatrix_new(n, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD);
+  for (i = 0; i < n; i++){
+    nrow = 0.;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj != i){
+       nrow ++;
+       L = SparseMatrix_coordinate_form_add_entries(L, 1, &i, &jj, &a);
+      }
+    }
+    L = SparseMatrix_coordinate_form_add_entries(L, 1, &i, &i, &nrow);
+  }
+  L = SparseMatrix_from_coordinate_format(L);
+
+  /* largest eigen vector */
+  {
+    int maxit = 100;
+    real tol = 0.00001;
+    power_method(L, seed, maxit, tol, &v);
+  }
+
+  vector_ordering(n, v, p, TRUE);
+
+  /* swapping */
+  while (improved){
+    improved = FALSE; norm = n;
+    for (i = 0; i < n; i++){
+      get_local_12_norm(n, i, ia, ja, *p, norm1);
+      for (j = 0; j < n; j++){
+       if (j == i) continue;
+       get_local_12_norm(n, j, ia, ja, *p, norm2);
+       norm = MIN(norm, norm2[0]);
+       pi = (*p)[i]; pj = (*p)[j];
+       (*p)[i] = pj;
+       (*p)[j] = pi;
+       get_local_12_norm(n, i, ia, ja, *p, norm11);
+       get_local_12_norm(n, j, ia, ja, *p, norm22);
+       if (MIN(norm11[0],norm22[0]) > MIN(norm1[0],norm2[0])){
+         //        ||
+         //(MIN(norm11[0],norm22[0]) == MIN(norm1[0],norm2[0]) && norm11[1]+norm22[1] > norm1[1]+norm2[1])) {
+         improved = TRUE;
+         norm1[0] = norm11[0];
+         norm1[1] = norm11[1];
+         continue;
+       }
+       (*p)[i] = pi;
+       (*p)[j] = pj;
+      }
+    }
+    if (Verbose) {
+      get_12_norm(n, ia, ja, *p, norm1);
+      fprintf(stderr, "norm = %f", norm);
+      fprintf(stderr, "norm1 = %f, norm2 = %f\n", norm1[0], norm1[1]);
+    }
+  }
+  get_12_norm(n, ia, ja, *p, norm1);
+
+  *norm_1 = norm1[0];
+  if (A2 != A) SparseMatrix_delete(A2);
+  SparseMatrix_delete(L);
+}
+
+
+
diff --git a/cmd/gvmap/country_graph_coloring.h b/cmd/gvmap/country_graph_coloring.h
new file mode 100644 (file)
index 0000000..9e90dfd
--- /dev/null
@@ -0,0 +1,19 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef COUNTRY_GRAPH_CLUSTERING_H
+#define COUNTRY_GRAPH_CLUSTERING_H
+
+void country_graph_coloring(int seed, SparseMatrix A, int **p, real *norm_1);
+
+#endif
diff --git a/cmd/gvmap/gvmap.1 b/cmd/gvmap/gvmap.1
new file mode 100644 (file)
index 0000000..4c12770
--- /dev/null
@@ -0,0 +1,32 @@
+.de TQ
+.  br
+.  ns
+.  TP \\$1
+..
+.TH GVMAP 1 "3 March 2011"
+.SH NAME
+gvmap \- geographical map create from graphs
+.SH SYNOPSIS
+.B gvmap
+[\fB\-ekov?\fP]
+[
+.I options
+]
+[
+.BI \-o
+.I outfile
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B gvmap
+takes as input a graph in DOT format with node position and size
+information, and produces a rendering of the graph as a geographic-style map.
+.SH AUTHOR
+Yifan Hu <yifanhu@research.att.com>
+.SH "SEE ALSO"
+.PP
+sfdp(1), neato(1), gvpr(1)
+.PP
+E. R. Gansner, Y. Hu, S. G. Kobourov, "GMap: Visualizing graphs and clusters as maps," Proc. Pacific Vis. 2010, pp. 201\(hy208.
diff --git a/cmd/gvmap/gvmap.c b/cmd/gvmap/gvmap.c
new file mode 100644 (file)
index 0000000..cda47aa
--- /dev/null
@@ -0,0 +1,788 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#define STANDALONE
+#include "general.h"
+#include "QuadTree.h"
+#include <time.h>
+#include "SparseMatrix.h"
+#include <getopt.h>
+#include "string.h"
+#include "make_map.h"
+#include "spring_electrical.h"
+#include "post_process.h"
+#include "overlap.h"
+#include "clustering.h"
+#include "ingraphs.h"
+#include "DotIO.h"
+#include "colorutil.h"
+
+int Verbose;
+enum {POINTS_ALL = 1, POINTS_LABEL, POINTS_RANDOM};
+enum {maxlen = 10000000};
+enum {MAX_GRPS = 10000};
+static char swork[maxlen];
+#if 0
+void *gmalloc(size_t nbytes)
+{
+    char *rv;
+    if (nbytes == 0)
+        return NULL;
+    rv = malloc(nbytes);
+    if (rv == NULL) {
+        fprintf(stderr, "out of memory\n");
+        abort();
+    }
+    return rv;
+}
+
+void *grealloc(void *ptr, size_t size)
+{
+    void *p = realloc(ptr, size);
+    if (p == NULL && size) {
+        fprintf(stderr, "out of memory\n");
+        abort();
+    }
+    return p;
+}
+
+#endif
+
+typedef struct {
+    char* cmd;
+    char **infiles; 
+    FILE* outfile;
+    int dim;
+    int rawData;
+    real shore_depth_tol;
+    int nrandom; 
+    int show_points; 
+    real bbox_margin[2]; 
+    int whatout;
+    int plotedges;
+    int color_scheme;
+    real line_width;
+    char *plot_label;
+    real *bg_color;
+    int improve_contiguity_n;
+    int nart;
+    int color_optimize;
+    int maxcluster;
+    int nedgep;
+    char *line_color;
+    int include_OK_points;
+    int highlight_cluster;
+    int seed;      /* seed used to calculate Fiedler vector */
+} params_t;
+
+int string_split(char *s, char sp, char ***ss0, int *ntokens0){
+  /* give a string s ending with a \0, split into an array of strings using separater sp, 
+     with \0 inserted. Return 0 if successful, 1 if length of string exceed buffer size */
+  int ntokens = 0, len = 0;
+
+  int i;
+  char **ss;
+  char *swork1 = swork;
+  if (strlen(s) > maxlen) {
+    swork1 = MALLOC(sizeof(char)*maxlen);
+  }
+
+  for (i = 0; i < strlen(s); i++){
+    if (s[i] == sp){
+      ntokens++;
+    } else if (s[i] == '\n' || s[i]== EOF){
+      ntokens++;
+      break;
+    }
+  }
+
+  ss = malloc(sizeof(char*)*(ntokens+1));
+  ntokens = 0;
+  for (i = 0; i < strlen(s); i++){
+    if (s[i] == sp){
+      swork1[len++] = '\0';
+      ss[ntokens] = malloc(sizeof(char)*(len+1));
+      strcpy(ss[ntokens], swork1);
+      len = 0;
+      ntokens++;
+      continue;
+    } else if (s[i] == '\n' || s[i] == EOF){
+      swork1[len++] = '\0';
+      ss[ntokens] = malloc(sizeof(char)*(len+1));
+      strcpy(ss[ntokens], swork1);
+      len = 0;
+      ntokens++;
+      break;
+    }
+    swork1[len++] = s[i];
+  }
+
+  *ntokens0 = ntokens;
+
+  *ss0 = ss;
+
+  if (swork1 != swork) FREE(swork1);
+  return 0;
+
+}
+
+static char* usestr =
+"    -a k - average number of artificial points added along the bounding box of the labels. (10)\n\
+    -b v - polygon line width, with v < 0 for no line. (0)\n\
+    -c v - polygon color scheme (1)\n\
+       0 : no polygons\n\
+       1 : pastel\n\
+       2 : blue to yellow\n\
+       3 : white to red\n\
+       4 : light grey to red\n\
+       5 : primary colors\n\
+       6 : sequential single hue red \n\
+       7 : sequential single hue lighter red \n\
+       8 : light grey\n\
+    -d s - seed used to calculate Fielder vector for optimal coloring\n\
+    -C k - generate at most k clusters. (0)\n\
+    -e   - show edges\n\
+    -g c - bounding box color. If not specified, bounding box is not drawn.\n\
+    -k   - increase randonesss of boundary\n\
+    -l s - specify label\n\
+    -m v - bounding box margin. If 0, auto assigned (0)\n\
+    -h k - number of artificial points added maintain bridge between endpoints (0)\n\
+    -o <file> - put output in <file> (stdout)\n\
+    -p k - show points. (0)\n\
+       0 : no points\n\
+       1 : all points\n\
+       2 : label points\n\
+       3 : random/artificial points\n\
+    -r v - number of points. If 0, auto assigned. (0)\n\
+    -s d - depth of the shore in points. If 0, auto assigned. (0)\n\
+    -t n - improve contiguity up to n times. (0)\n\
+    -O   - do NOT to optimize color differences\n\
+    -v   - verbose\n\
+    -z c - polygon line color (black)\n";
+
+/*
+    -q f - output format (3)\n\
+       0 : Mathematica\n\
+       1 : PostScript\n\
+       2 : country map\n\
+       3 : dot format\n\
+*/
+    /* e.g., 
+       1 [cluster=10, clustercolor="#ff0000"]
+       2 [cluster=10]
+       (and no ther nodes are in cluster10)
+
+       then since we can only use 1 color for the cluster 10, both 1 and 2 will be colored based on the color of node 2. However if you have
+
+       2 [cluster=10]
+       1 [cluster=10, clustercolor="#ff0000"]
+
+       then you get both colored red.
+       
+    */
+
+static void usage(char* cmd, int eval)
+{
+    fprintf(stderr, "Usage: %s <options> graphfile\n", cmd);
+    fputs (usestr, stderr);
+    exit(eval);
+}
+
+static FILE *openFile(char *name, char *mode, char* cmd)
+{
+    FILE *fp;
+    char *modestr;
+
+    fp = fopen(name, mode);
+    if (!fp) {
+       if (*mode == 'r')
+           modestr = "reading";
+       else
+           modestr = "writing";
+       fprintf(stderr, "%s: could not open file %s for %s\n",
+               cmd, name, modestr);
+       exit(-1);
+    }
+    return (fp);
+}
+
+#define HLPFX "ighlight="
+#define N_HLPFX (sizeof(HLPFX)-1)
+
+static void 
+init(int argc, char **argv, params_t* pm)
+{
+  char* cmd = argv[0];
+  unsigned int c;
+  real s;
+  int v, r;
+
+  pm->outfile = NULL;
+  pm->nrandom = -1;
+  pm->dim = 2;
+  pm->rawData = 0;
+  pm->shore_depth_tol = 0;
+  pm->highlight_cluster = 0;
+  pm->plotedges = 0;
+  pm->whatout = 0;
+  pm->show_points = 0;
+  pm->color_scheme = COLOR_SCHEME_PASTEL; 
+  pm->line_width = 0;
+  pm->plot_label = NULL;
+  pm->bg_color = NULL;
+  pm->improve_contiguity_n = 0;
+  pm->whatout = OUT_DOT;
+  pm->nart = 10;
+  pm->color_optimize = 1;
+  pm->maxcluster = 0;
+  pm->nedgep = 0;
+
+  pm->cmd = cmd;
+  pm->infiles = NULL;
+  pm->line_color = N_NEW(10,char);
+  strcpy(pm->line_color,"#000000");
+  pm->include_OK_points = FALSE;
+  pm->seed = 123;
+
+  /*  bbox_margin[0] =  bbox_margin[1] = -0.2;*/
+  pm->bbox_margin[0] =  pm->bbox_margin[1] = 0;
+
+  while ((c = getopt(argc, argv, ":efvOko:m:s:r:p:c:C:l:b:g:t:a:h:z:d:")) != -1) {
+    switch (c) {
+    case 'm':
+      if ((sscanf(optarg,"%lf",&s) > 0) && (s != 0)){
+           pm->bbox_margin[0] =  pm->bbox_margin[1] = s;
+      } else {
+        usage(cmd, 1);
+      }
+      break;
+#if 0
+    case 'q':
+      if ((sscanf(optarg,"%d",&r) > 0) && r >=0 && r <=OUT_PROCESSING){
+        pm->whatout = r;
+      } else {
+        usage(cmd,1);
+      }
+      break;
+#endif
+    case 's':
+      if ((sscanf(optarg,"%lf",&s) > 0)){
+        pm->shore_depth_tol = s;
+      } else {
+        usage(cmd,1);
+      }
+      break;
+    case 'h':
+      if ((sscanf(optarg,"%d",&v) > 0)){
+        pm->nedgep = MAX(0, v);
+      } else if (!strncmp(optarg, HLPFX, N_HLPFX) && (sscanf(optarg+N_HLPFX,"%d",&v) > 0)) {
+        pm->highlight_cluster = MAX(0, v);
+      } else {
+        usage(cmd,1);
+      }
+      break;
+     case 'f':
+        pm->rawData = 1;
+      break;
+     case 'r':
+      if ((sscanf(optarg,"%d",&r) > 0)){
+        pm->nrandom = r;
+      }
+      break;
+    case 't':
+      if ((sscanf(optarg,"%d",&r) > 0) && r > 0){
+        pm->improve_contiguity_n = r;
+      }
+      break;
+    case 'p':
+      pm->show_points = 1;
+      if ((sscanf(optarg,"%d",&r) > 0)){
+        pm->show_points = MIN(3, r);
+      }
+      break;
+    case 'k':
+      pm->include_OK_points = TRUE;
+      break;
+    case 'v':
+      Verbose = 1;
+      break;
+    case 'e':
+      pm->plotedges = 1;
+      break;
+    case 'o':
+         pm->outfile = openFile(optarg, "w", pm->cmd);
+      break;
+    case 'O':
+      pm->color_optimize = 0;
+      break;
+    case 'a':
+      if ((sscanf(optarg,"%d",&r) > 0) && r >= 0){
+           pm->nart = r;
+      } else {
+           usage(cmd,1);
+      }
+      break;
+    case 'c':
+      if ((sscanf(optarg,"%d",&r) > 0) && r >= COLOR_SCHEME_NONE && r <= COLOR_SCHEME_GREY){
+        pm->color_scheme = r;
+      } else {
+        usage(cmd,1);
+      }
+      break;
+    case 'd':
+      if (sscanf(optarg,"%d",&v) <= 0){
+        usage(cmd,1);
+      }
+      else
+        pm->seed = v;
+      break;
+    case 'C':
+      if (!((sscanf(optarg,"%d",&v) > 0) && v >= 0)){
+        usage(cmd,1);
+      }
+      else
+        pm->maxcluster = v;
+      break;
+    case 'g': {
+      gvcolor_t color;
+      if (colorxlate(optarg, &color, RGBA_DOUBLE) == COLOR_OK) {
+        if (!pm->bg_color) pm->bg_color = N_NEW(3,real);
+        pm->bg_color[0] = color.u.RGBA[0];
+        pm->bg_color[1] = color.u.RGBA[1];
+        pm->bg_color[2] = color.u.RGBA[2];
+      }
+      break;
+    }
+    case 'z': {
+      FREE (pm->line_color);
+      pm->line_color = strdup (optarg);
+      break;
+    }
+    case 'b':
+      if (sscanf(optarg,"%lf",&s) > 0) {
+        pm->line_width = s;
+      } else {
+        fprintf (stderr, "%s: unexpected argument \"%s\" for -b flag\n", cmd, optarg);
+      }
+      break;
+    case 'l':
+      if (pm->plot_label) free (pm->plot_label);
+      pm->plot_label = strdup (optarg);
+      break;
+    case '?':
+      if (optopt == '?')
+        usage(cmd, 0);
+      else {
+        fprintf(stderr, " option -%c unrecognized - ignored\n", optopt);
+        usage(cmd, 0);
+      }
+      break;
+    }
+  }
+
+  argv += optind;
+  argc -= optind;
+  if (argc)
+    pm->infiles = argv;
+  if (!pm->outfile)
+    pm->outfile = stdout;
+}
+
+static void add_return(char *s){
+  /* replace "\\n" by "\n" (return) */
+  int i, j, len =strlen(s);
+  for (i = 0; i < strlen(s); i++){
+    if (s[i] == '\\' && i < len - 1 && s[i+1] == 'n'){
+      s[i] = '\n';
+      for (j = i+1; j < len - 1; j++) s[j] = s[j+1];
+      s[len - 1] = '\0'; len--;
+    }
+  }
+}
+
+static int read_data(int n, int dim, int k, FILE *fp, real *x, real *width, int *grouping, char **labels, float *fsz,
+         float *rgb_r, float *rgb_g, float *rgb_b){
+  char **fields;
+  int nfields;
+  char buf[100000];
+  int i, nz = 0, len;
+  char s;
+
+  /* x|y|width|height|group|label|fontsize|rgbcolor|*/
+
+  for (i = 0; i < n; i++){
+    while ((s = buf[nz++] = fgetc(fp)) != '\n' && s != EOF);
+    buf[nz] = '\0';
+    if (nz < 1) break;
+
+    if (string_split(buf, '|', &fields, &nfields)) return 1;
+    assert(nfields >= k);
+
+    sscanf(fields[0], "%lf", &(x[i*dim]));
+    sscanf(fields[1], "%lf", &(x[i*dim+1]));
+    sscanf(fields[2], "%lf", &(width[i*dim]));
+    sscanf(fields[3], "%lf", &(width[i*dim+1]));
+    sscanf(fields[4], "%d", &(grouping[i]));
+    labels[i] = MALLOC(sizeof(char*)*(strlen(fields[5])+1));
+    strcpy(labels[i], fields[5]);
+    add_return(labels[i]);
+
+    sscanf(fields[6], "%f", &(fsz[i]));
+    /*fields[7] is of the form RGBColor[x, y, z]*/
+    len = strlen(fields[7]);
+    fields[7][len-1] = ',';
+    if (len < 10) {
+      fprintf(stderr,"line %d is funny, check you data! I am assign black color\n", i+2);
+      rgb_r[grouping[i]]=rgb_g[grouping[i]]=rgb_b[grouping[i]] = 0.;
+    } else {
+      strcpy(buf, fields[7]+9);
+      if (string_split(buf, ',', &fields, &nfields)) return 1;
+      
+      sscanf(fields[0], "%f", &(rgb_r[grouping[i]]));
+      sscanf(fields[1], "%f", &(rgb_g[grouping[i]]));
+      sscanf(fields[2], "%f", &(rgb_b[grouping[i]]));
+    }
+    if (s == EOF){
+      break;
+    }
+    nz = 0;
+  }
+
+  
+  return 0;
+}
+
+#if 0
+static void get_graph_node_attribute(Agraph_t* g, char *tag, char *format, size_t len, void *x_default_val, int *nn, void *x, int *flag){
+  /* read a node attribute. Example
+     {real x0[2];
+     real *x = NULL;
+
+     x0[0] = x0[1] = 0.;
+     get_graph_node_attribute(g, "pos", "%lf,%lf", sizeof(real)*2, x0, &n, &x, &flag)
+
+     or, do not supply x0 if you want error flagged when pos tag is not available:
+
+     get_graph_node_attribute(g, "pos", "%lf,%lf", sizeof(real)*2, NULL, &n, x, &flag);
+
+     assert(!flag);
+     FREE(x);
+     }
+  */
+  Agnode_t* n;
+  int nnodes;
+
+
+  *flag = 0;
+
+  if (!g) {
+    *flag = -1;
+    return;
+  }
+
+  nnodes = agnnodes (g);
+  *nn = nnodes;
+  for (n = agfstnode (g); n; n = agnxtnode (g, n)) {
+    if (agget(n, tag)){
+      if (strcmp(format,"%s") == 0){
+       strcpy(x, agget(n, tag));
+      } else {
+       sscanf(agget(n, tag), format, x);
+      }
+
+    } else if (x_default_val){
+      memcpy(x, x_default_val, len);
+    } else {
+      *flag = -1;
+      return;
+    }
+    x += len;
+  }
+
+}
+#endif
+
+static void 
+makeMap (SparseMatrix graph, int n, real* x, real* width, int* grouping, 
+  char** labels, float* fsz, float* rgb_r, float* rgb_g, float* rgb_b, params_t* pm, Agraph_t* g )
+{
+  int dim = pm->dim;
+  int i, flag = 0;
+  SparseMatrix poly_lines, polys, poly_point_map;
+  real edge_bridge_tol = 0.;
+  int npolys, nverts, *polys_groups, exclude_random;
+  real *x_poly, *xcombined;
+  enum {max_string_length = 1000};
+  enum {MAX_GRPS = 10000};
+  SparseMatrix country_graph;
+  int improve_contiguity_n = pm->improve_contiguity_n;
+#ifdef TIME
+  clock_t  cpu;
+#endif
+  int nr0, nart0;
+  int nart, nrandom;
+
+  exclude_random = TRUE;
+#if 0
+  if (argc >= 2) {
+    fp = fopen(argv[1],"r");
+    graph = SparseMatrix_import_matrix_market(fp, FORMAT_CSR);
+  }
+
+  if (whatout == OUT_M){
+    printf("Show[{");
+  }
+#endif
+
+
+#ifdef TIME
+  cpu = clock();
+#endif
+  nr0 = nrandom = pm->nrandom; nart0 = nart = pm->nart;
+  make_map_from_rectangle_groups(exclude_random, pm->include_OK_points,
+                                n, dim, x, width, grouping, graph, pm->bbox_margin, &nrandom, &nart, pm->nedgep, 
+                                pm->shore_depth_tol, edge_bridge_tol, &xcombined, &nverts, &x_poly, &npolys, &poly_lines, 
+                                &polys, &polys_groups, &poly_point_map, &country_graph, pm->highlight_cluster, &flag);
+
+  /* compute a good color permutation */
+  if (pm->color_optimize && country_graph && rgb_r && rgb_g && rgb_b) 
+    map_optimal_coloring(pm->seed, country_graph, rgb_r,  rgb_g, rgb_b);
+
+#ifdef TIME
+  fprintf(stderr, "map making time = %f\n",((real) (clock() - cpu)) / CLOCKS_PER_SEC);
+#endif
+
+
+  /* now we check to see if all points in the same group are also in the same polygon, if not, the map is not very
+     contiguous so we move point positions to improve contiguity */
+  if (graph && improve_contiguity_n) {
+    for (i = 0; i < improve_contiguity_n; i++){
+      improve_contiguity(n, dim, grouping, poly_point_map, x, graph, width);
+      nart = nart0;
+      nrandom = nr0;
+      make_map_from_rectangle_groups(exclude_random, pm->include_OK_points,
+                                    n, dim, x, width, grouping, graph, pm->bbox_margin, &nrandom, &nart, pm->nedgep, 
+                                    pm->shore_depth_tol, edge_bridge_tol, &xcombined, &nverts, &x_poly, &npolys, &poly_lines, 
+                                    &polys, &polys_groups, &poly_point_map, &country_graph, pm->highlight_cluster, &flag);
+    }
+    assert(!flag);    
+    {
+      SparseMatrix D;
+      D = SparseMatrix_get_real_adjacency_matrix_symmetrized(graph);
+      remove_overlap(dim, D, x, width, 1000, 5000.,
+                    ELSCHEME_NONE, 0, NULL, NULL, &flag);
+      
+      nart = nart0;
+      nrandom = nr0;
+      make_map_from_rectangle_groups(exclude_random, pm->include_OK_points,
+                                    n, dim, x, width, grouping, graph, pm->bbox_margin, &nrandom, &nart, pm->nedgep, 
+                                    pm->shore_depth_tol, edge_bridge_tol, &xcombined, &nverts, &x_poly, &npolys, &poly_lines, 
+                                    &polys, &polys_groups, &poly_point_map, &country_graph, pm->highlight_cluster, &flag);
+    }
+    assert(!flag);
+    
+  }
+
+#if 0
+  if (whatout == OUT_DOT){
+#endif
+    Dot_SetClusterColor(g, rgb_r,  rgb_g,  rgb_b, grouping);
+    plot_dot_map(g, n, dim, x, polys, poly_lines, pm->line_width, pm->line_color, x_poly, polys_groups, labels, width, fsz, rgb_r, rgb_g, rgb_b, pm->plot_label, pm->bg_color, (pm->plotedges?graph:NULL), pm->outfile);
+#if 0
+    }
+    goto RETURN;
+  }
+
+  if (whatout == OUT_PROCESSING){
+    if (plotedges){
+      plot_processing_map(g, n, dim, x, polys, poly_lines, line_width, nverts, x_poly, polys_groups, labels, width, fsz, rgb_r, rgb_g, rgb_b, plot_label, bg_color, graph);
+    } else {
+      plot_processing_map(g, n, dim, x, polys, poly_lines, line_width, nverts, x_poly, polys_groups, labels, width, fsz, rgb_r, rgb_g, rgb_b, plot_label, bg_color, NULL);
+    }
+
+    goto RETURN;
+  }
+
+  if (whatout == OUT_PS){
+    if (plotedges){
+      plot_ps_map(n, dim, x, polys, poly_lines, line_width, x_poly, polys_groups, labels, width, fsz, rgb_r, rgb_g, rgb_b, plot_label, bg_color, graph);
+    } else {
+      plot_ps_map(n, dim, x, polys, poly_lines, line_width, x_poly, polys_groups, labels, width, fsz, rgb_r, rgb_g, rgb_b, plot_label, bg_color, NULL);
+    }
+
+    goto RETURN;
+  }
+
+
+  if (whatout == OUT_M_COUNTRY_GRAPH){
+    SparseMatrix_print("(*country graph=*)",country_graph);
+    goto RETURN;
+    
+  }
+
+  
+  /*plot_polys(FALSE, polys, x_poly, polys_groups, rgb_r, rgb_g, rgb_b);*/
+  if (whatout == OUT_M){
+    plot_polys(FALSE, polys, x_poly, polys_groups, NULL, NULL, NULL);
+    printf(",");
+
+    plot_polys(TRUE, poly_lines, x_poly, polys_groups, NULL, NULL, NULL);
+    if (show_points){
+      if (show_points == POINTS_ALL){
+       printf(",");
+       plot_points(n + nart + nrandom - 4, dim, xcombined);
+      } else if (show_points == POINTS_LABEL){
+       printf(",");
+       plot_points(n + nart - 4, dim, xcombined);
+      } else if (show_points == POINTS_RANDOM){
+       printf(",");
+       plot_points(MAX(1,nrandom - 4), dim, xcombined+dim*(n+nart));
+      } else {
+       assert(0);
+      }
+    }
+    if (plotedges){
+      printf(",");
+      plot_edges(n, dim, x, graph);
+    }
+    
+    if (labels){
+      printf(",");
+      plot_labels(n, dim, xcombined, labels);
+    }
+    
+    printf("}]\n");
+  }
+
+ RETURN:
+#endif
+  SparseMatrix_delete(polys);
+  SparseMatrix_delete(poly_lines);
+  SparseMatrix_delete(poly_point_map);
+  FREE(xcombined);
+  FREE(x_poly);
+  FREE(polys_groups);
+}
+
+static void doRawData (FILE* fp, params_t* pm)
+{
+  real* x;
+  real* width;
+  int dim = pm->dim;
+  char** labels = NULL;
+  int* grouping;
+  float* rgb_r;
+  float* rgb_g;
+  float* rgb_b;
+  float* fsz;
+  int ierr, n, nentries;
+
+  ierr = fscanf(fp, "%d\t%d\n",&n, &nentries);
+  if (nentries == 8) {
+    /* x|y|width|height|group|label|fontsize|rgbcolor|*/
+    labels = MALLOC(sizeof(char*)*n);
+  }
+  x = N_NEW(dim*n, real);
+  width = N_NEW(dim*n, real);
+  grouping = N_NEW(n,int);
+  rgb_r = N_NEW(MAX_GRPS,float);
+  rgb_g = N_NEW(MAX_GRPS,float);
+  rgb_b = N_NEW(MAX_GRPS,float);
+  fsz = N_NEW(n,float);
+    
+  read_data(n, dim, nentries, fp, x, width, grouping, labels, fsz, rgb_r, rgb_g, rgb_b);
+
+  makeMap (NULL, n, x, width, grouping, labels, fsz, rgb_r, rgb_g, rgb_b, pm, NULL);
+
+  free (x);
+  free (width);
+  free (grouping);
+  free (rgb_r);
+  free (rgb_g);
+  free (rgb_b);
+  free (fsz);
+  if (labels) free (labels);
+      
+}
+
+static void mapFromRaw (params_t* pm)
+{
+  char* fname;
+  FILE* fp;
+    
+  if (pm->infiles[0] == NULL)
+    doRawData (stdin, pm);
+  else {
+    int i = 0;
+    while ((fname = pm->infiles[i])) { 
+      fp = fopen(fname, "r");
+      if (!fp) {
+        fprintf (stderr, "%s: could not open %s for reading\n", pm->cmd, fname);
+      }
+      else {
+        doRawData (fp, pm);
+        fclose(fp);
+      }
+      i++;
+    }
+  }
+}
+
+static void mapFromGraph (Agraph_t* g, params_t* pm)
+{
+  int n;
+  real* width = NULL;
+  real* x;
+  char** labels = NULL;
+  int* grouping;
+  float* rgb_r;
+  float* rgb_g;
+  float* rgb_b;
+  float* fsz;
+
+  initDotIO(g);
+  SparseMatrix graph = Import_coord_clusters_from_dot(g, pm->maxcluster, pm->dim, &n, &width, NULL, &x, &grouping, 
+                                          &rgb_r,  &rgb_g,  &rgb_b,  &fsz, &labels, pm->color_scheme, CLUSTERING_MODULARITY);
+  makeMap (graph, n, x, width, grouping, labels, fsz, rgb_r, rgb_g, rgb_b, pm, g);
+}
+
+static Agraph_t *gread(FILE * fp)
+{
+    return agread(fp, (Agdisc_t *) 0);
+}
+
+int main(int argc, char *argv[])
+{
+  params_t pm;
+  Agraph_t* g;
+  Agraph_t* prevg = NULL;
+  ingraph_state ig;
+
+  init(argc, argv, &pm);
+
+  if (pm.rawData) 
+    mapFromRaw (&pm);
+  else {
+    newIngraph (&ig, pm.infiles, gread);
+    while ((g = nextGraph (&ig)) != 0) {
+      if (prevg) agclose (prevg);
+      mapFromGraph (g, &pm);
+      prevg = g;
+    }
+  }
+
+  return 0; 
+}
diff --git a/cmd/gvmap/make_map.c b/cmd/gvmap/make_map.c
new file mode 100644 (file)
index 0000000..bc21805
--- /dev/null
@@ -0,0 +1,2329 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#define STANDALONE
+#include "SparseMatrix.h"
+#include "general.h"
+#include "QuadTree.h"
+#include "string.h"
+/* #include "types.h" */
+#include <cgraph.h>
+#include "make_map.h"
+/* #include "ps.h" */
+#include "stress_model.h"
+#include "country_graph_coloring.h"
+#include "colorutil.h"
+#include "delaunay.h"
+
+#ifdef SINGLE
+#define REAL float
+#else /* not SINGLE */
+#define REAL double
+#endif /* not SINGLE */
+/* #include "triangle.h" */
+
+void map_optimal_coloring(int seed, SparseMatrix A, float *rgb_r,  float *rgb_g, float *rgb_b){
+  int *p = NULL;
+  float *u = NULL;
+  int n = A->m;
+  int i;
+  real norm1;
+
+  country_graph_coloring(seed, A, &p, &norm1);
+
+  rgb_r++; rgb_b++; rgb_g++;/* seems necessary, but need to better think about cases when clusters are not contigous */
+  vector_float_take(n, rgb_r, n, p, &u);
+  for (i = 0; i < n; i++) rgb_r[i] = u[i];
+  vector_float_take(n, rgb_g, n, p, &u);
+  for (i = 0; i < n; i++) rgb_g[i] = u[i];
+  vector_float_take(n, rgb_b, n, p, &u);
+  for (i = 0; i < n; i++) rgb_b[i] = u[i];
+  FREE(u);
+
+}
+
+static int get_poly_id(int ip, SparseMatrix point_poly_map){
+  return point_poly_map->ja[point_poly_map->ia[ip]];
+}
+void improve_contiguity(int n, int dim, int *grouping, SparseMatrix poly_point_map, real *x, SparseMatrix graph, real *label_sizes){
+ /* 
+     grouping: which group each of the vertex belongs to
+     poly_point_map: a matrix of dimension npolys x (n + nrandom), poly_point_map[i,j] != 0 if polygon i contains the point j.
+     .  If j < n, it is the original point, otherwise it is artificial point (forming the rectangle around a label) or random points.
+  */
+  int i, j, *ia, *ja, *ib, *jb, u, v;
+  real *a;
+  SparseMatrix point_poly_map, D;
+  real dist;
+  int nbad = 0, flag;
+  int maxit = 10;
+  real tol = 0.001;
+
+  D = SparseMatrix_get_real_adjacency_matrix_symmetrized(graph);
+
+  assert(graph->m == n);
+  ia = D->ia; ja = D->ja;
+  a = (real*) D->a;
+
+  /* point_poly_map: each row i has only 1 entry at column j, which says that point i is in polygon j */
+  point_poly_map = SparseMatrix_transpose(poly_point_map);
+
+  ib = point_poly_map->ia;
+  jb = point_poly_map->ja;
+
+
+  for (i = 0; i < n; i++){
+    u = i;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      v = ja[j];
+      dist = distance_cropped(x, dim, u, v);
+      /*
+       if ((grouping[u] != grouping[v]) || (get_poly_id(u, point_poly_map) == get_poly_id(v, point_poly_map))){
+       a[j] = 1.1*dist;
+       } else {
+       nbad++;
+       a[j] = 0.9*dist;
+       }
+      */
+      if (grouping[u] != grouping[v]){
+       a[j] = 1.1*dist;
+      }        else if (get_poly_id(u, point_poly_map) == get_poly_id(v, point_poly_map)){
+       a[j] = dist;
+      } else {
+       nbad++;
+       a[j] = 0.9*dist;
+      }
+
+    }
+  }
+
+  if (Verbose || 1) fprintf(stderr,"ratio (edges among discontigous regions vs total edges)=%f\n",((real) nbad)/ia[n]);
+  stress_model(dim, D, &x, maxit, tol, &flag);
+
+  assert(!flag);
+
+  SparseMatrix_delete(D);
+  SparseMatrix_delete(point_poly_map);
+}
+
+/*
+struct color_card{
+  int ncolor;
+  real *rgb;
+};
+
+color_card color_card_new(int ncolor, real *rgb){
+  color_card c;
+
+  c->ncolor = ncolor;
+  c->rgb = MALLOC(sizeof(real)*ncolor);
+  for (i = 0; i < ncolor*3; i++){
+    c->rgb[i] = rgb[i];
+  }
+  return c;
+}
+
+void color_card_delete(color_card c){
+  FREE(c->rgb);
+}
+
+color_card_blend(color_card c, real x){
+  real c1[3], c2[3];
+  int ista, isto;
+  if (x > 1) x = 1;
+  if (x < 0) x = 0;
+  ista = x*(ncolor-1);
+  
+}
+
+*/
+
+struct Triangle {
+  int vertices[3];/* 3 points */
+  real center[2]; /* center of the triangle */
+};
+
+static void normal(real v[], real normal[]){
+  if (v[0] == 0){
+    normal[0] = 1; normal[1] = 0;
+  } else {
+    normal[0] = -v[1];
+    normal[1] = v[0];
+  }
+  return;
+}
+
+
+
+static void triangle_center(real x[], real y[], real z[], real c[]){
+  /* find the "center" c, which is the intersection of the 3 vectors that are normal to each
+     of the edges respectively, and which passes through the center of the edges respectively
+     center[{x_, y_, z_}] := Module[
+     {xy = 0.5*(x + y), yz = 0.5*(y + z), zx = 0.5*(z + x), nxy, nyz, 
+     beta, cen},
+     nxy = normal[y - x];
+     nyz = normal[y - z];
+     beta = (y-x).(xy - yz)/(nyz.(y-x));
+     cen = yz + beta*nyz;
+     Graphics[{Line[{x, y, z, x}], Red, Point[cen], Line[{cen, xy}], 
+     Line[{cen, yz}], Green, Line[{cen, zx}]}]
+     
+     ]
+ */
+  real xy[2], yz[2], nxy[2], nyz[2], ymx[2], ymz[2], beta, bot;
+  int i;
+
+  for (i = 0; i < 2; i++) ymx[i] = y[i] - x[i];
+  for (i = 0; i < 2; i++) ymz[i] = y[i] - z[i];
+  for (i = 0; i < 2; i++) xy[i] = 0.5*(x[i] + y[i]);
+  for (i = 0; i < 2; i++) yz[i] = 0.5*(y[i] + z[i]);
+
+
+  normal(ymx, nxy);
+  normal(ymz, nyz);
+  bot = nyz[0]*(x[0]-y[0])+nyz[1]*(x[1]-y[1]);
+  if (bot == 0){/* xy and yz are parallel */
+    c[0] = xy[0]; c[1] = xy[1];
+    return;
+  }
+  beta = ((x[0] - y[0])*(xy[0] - yz[0])+(x[1] - y[1])*(xy[1] - yz[1]))/bot;
+  c[0] = yz[0] + beta*nyz[0];
+  c[1] = yz[1] + beta*nyz[1];
+  return;
+
+}
+
+static SparseMatrix matrix_add_entry(SparseMatrix A, int i, int j, int val){
+  int i1 = i, j1 = j;
+  if (i < j) {
+    i1 = j; j1 = i;
+  }
+  A = SparseMatrix_coordinate_form_add_entries(A, 1, &j1, &i1, &val);
+  return SparseMatrix_coordinate_form_add_entries(A, 1, &i1, &j1, &val);
+}
+
+
+
+void plot_polys(int use_line, SparseMatrix polys, real *x_poly, int *polys_groups, float *r, float *g, float *b){
+  int i, j, *ia = polys->ia, *ja = polys->ja, *a = (int*) polys->a, npolys = polys->m, nverts = polys->n, ipoly = -1, max_grp,
+    min_grp;
+
+
+  min_grp = max_grp = polys_groups[0];
+  for (i = 0; i < npolys; i++) {
+    max_grp = MAX(polys_groups[i], max_grp);
+    min_grp = MIN(polys_groups[i], min_grp);
+  }
+  if (max_grp == min_grp) max_grp++;
+  if (Verbose) fprintf(stderr,"npolys = %d\n",npolys);
+  printf("Graphics[{");
+  for (i = 0; i < npolys; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      assert(ja[j] < nverts && ja[j] >= 0);
+      if (a[j] != ipoly){/* the first poly, or a hole */
+       ipoly = a[j];
+       if (ipoly != a[0]) printf("}],");
+       if (use_line){
+         printf("Black,");
+         printf("Line[{");
+       } else {
+         /*printf("Hue[%f],",0.6*(polys_groups[i]/(real) (max_grp-min_grp)));*/
+         if (r && g && b){
+           printf("RGBColor[%f,%f,%f],",r[polys_groups[i]], g[polys_groups[i]], b[polys_groups[i]]);
+         } else {
+           printf("Hue[%f],",((polys_groups[i]-min_grp)/(real) (max_grp-min_grp)));
+         }
+         printf("Polygon[{");
+       }
+
+      } else {
+       if (j > ia[i]) printf(",");
+      }
+      printf("{%f,%f}",x_poly[2*ja[j]],x_poly[2*ja[j]+1]);
+    }
+  }
+  printf("}]}]");
+}
+
+#if 0
+void ps_one_poly(psfile_t *f, int use_line, int border, int fill, int close, int is_river, int np, float *xp, float *yp){
+  if (use_line){
+    if (is_river){
+      /*river*/
+    } else {
+    }
+    ps_polygon(f, np, xp, yp, border, fill, close);
+  } else {
+    ps_polygon(f, np, xp, yp, border, fill, close);
+  }
+}
+
+void plot_ps_polygons(psfile_t *f, int use_line, SparseMatrix polys, real *x_poly, int *polys_groups){
+  int i, j, *ia = polys->ia, *ja = polys->ja, *a = (int*) polys->a, npolys = polys->m, nverts = polys->n, ipoly,first;
+  int np = 0, maxlen = 0;
+  float *xp, *yp;
+  int border = 0, fill = -1, close = 1;
+  int is_river;
+
+  for (i = 0; i < npolys; i++) maxlen = MAX(maxlen, ia[i+1]-ia[i]);
+
+  xp = MALLOC(sizeof(float)*maxlen);
+  yp = MALLOC(sizeof(float)*maxlen);
+
+  if (Verbose) fprintf(stderr,"npolys = %d\n",npolys);
+  first = ABS(a[0]); ipoly = first + 1;
+  for (i = 0; i < npolys; i++){
+    np = 0;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      assert(ja[j] < nverts && ja[j] >= 0);
+      if (ABS(a[j]) != ipoly){/* the first poly, or a hole */
+       ipoly = ABS(a[j]);
+       is_river = (a[j] < 0);
+       ps_one_poly(f, use_line, border, fill, close, is_river, np, xp, yp);
+       np = 0;/* start a new polygon */
+
+      } 
+      xp[np] = x_poly[2*ja[j]]; yp[np++] = x_poly[2*ja[j]+1];
+    }
+    if (use_line) {
+      ps_one_poly(f, use_line, border, fill, close, is_river, np, xp, yp);
+    } else {
+      ps_one_poly(f, use_line, polys_groups[i], polys_groups[i], close, is_river, np, xp, yp);
+    }
+  }
+  FREE(xp);
+  FREE(yp);
+
+}
+
+static void plot_line(real *x, real *y){
+  printf("Line[{{%f,%f},{%f,%f}}]", x[0], x[1], y[0], y[1]);
+}
+static void plot_voronoi(int n, SparseMatrix A, struct Triangle *T){ 
+  int *val, i, j, nline = 0;
+  val = (int*) A->a;
+  
+  printf("Graphics[{");
+  for (i = 0; i < n; i++){
+    for (j = A->ia[i]; j < A->ia[i+1]; j++){
+      if (j < A->ia[n] - A->ia[0] - 1 && A->ja[j] == A->ja[j+1]){
+       if (nline > 0) printf(",");
+       nline++;
+       plot_line((T)[val[j]].center, (T)[val[j+1]].center);
+       j++;
+      }
+    }
+  }
+  printf("}]");
+}
+
+
+void plot_ps_labels(psfile_t *f, int n, int dim, real *x, char **labels, real *width, float *fsz){
+
+  int i;
+
+  for (i = 0; i < n; i++){
+    if (fsz){
+      ps_font(f, NULL, 3*fsz[i]); /* name can be NULL if the current font name is to be used */
+    } else {
+      ps_font(f, NULL, -7); /* name can be NULL if the current font name is to be used */
+    }
+    ps_textc(f, x[i*dim], x[i*dim+1], labels[i], 0);
+  }
+
+}
+
+static void plot_ps_edges(psfile_t *f, SparseMatrix A, int dim, real *x){
+  int i, *ia, *ja, n, j;
+  float xx[2], yy[2];
+  n = A->m;
+  ia = A->ia;
+  ja = A->ja;
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      if (ja[j] == i) continue;
+      xx[0] = x[i*dim];
+      xx[1] = x[ja[j]*dim];
+      yy[0] = x[i*dim+1];
+      yy[1] = x[ja[j]*dim+1];
+      ps_polygon(f, 2, xx, yy, TRUE, -1, FALSE);
+    }
+  }
+}
+static void plot_triangles(int n, SparseMatrix A, int dim, real *x){
+  int i, j, ii, jj;
+  printf("Graphics[{Green");
+  for (i = 0; i < n; i++) {
+    for (j = A->ia[i]; j < A->ia[i+1]; j++){
+      ii = i;
+      jj = A->ja[j];
+      if (j < A->ia[n] - A->ia[0] - 1 && A->ja[j] == A->ja[j+1]) j++;
+      printf(",Line[{{%f,%f},{%f,%f}}]", x[ii*dim], x[ii*dim+1], x[jj*dim], x[jj*dim+1]);
+    }
+  }
+  printf("}]");
+}
+
+static void poly_bbox(SparseMatrix polys, real *x_poly, real *bbox){
+  /* get the bounding box of a polygon. 
+     bbox[0]: xmin
+     bbox[1]: xmax
+     bbox[2]: ymin 
+     bbox[3]: ymax
+  */
+  int i, j, *ia = polys->ia, *ja = polys->ja;
+  int npolys = polys->m;
+
+  bbox[0] = bbox[1] = x_poly[2*ja[ia[0]]];
+  bbox[2] = bbox[3] = x_poly[2*ja[ia[0]] + 1];
+  
+  for (i = 0; i < npolys; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      bbox[0] = MIN(bbox[0], x_poly[2*ja[j]]); 
+      bbox[1] = MAX(bbox[1], x_poly[2*ja[j]]); 
+      bbox[2] = MIN(bbox[2], x_poly[2*ja[j]+1]);
+      bbox[3] = MAX(bbox[3], x_poly[2*ja[j]+1]);
+    }
+  }
+}
+
+void plot_ps_map(int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, real *x_poly, int *polys_groups, char **labels, real *width,
+                float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A){
+  psfile_t *f;
+  int i;
+  real xmin[2], xmax[2], w = 7, h = 10;
+  real asp;
+  real bbox[4];
+  float pad = 20, label_fsz = 10;
+  int MAX_GRP;
+  int IBG;/*back ground color number */
+  int plot_polyQ = TRUE;
+
+  if (!r || !g || !b) plot_polyQ = FALSE;
+
+  xmin[0] = xmax[0] = x[0];
+  xmin[1] = xmax[1] = x[1];
+
+  for (i = 0; i < n; i++){
+    xmin[0] = MIN(xmin[0], x[i*dim] - width[i*dim]);
+    xmax[0] = MAX(xmax[0], x[i*dim] + width[i*dim]);
+    xmin[1] = MIN(xmin[1], x[i*dim + 1] - width[i*dim+1]);
+    xmax[1] = MAX(xmax[1], x[i*dim + 1] + width[i*dim+1]);
+  }
+
+  if (polys){
+    poly_bbox(polys, x_poly, bbox);
+    xmin[0] = MIN(xmin[0], bbox[0]);
+    xmax[0] = MAX(xmax[0], bbox[1]);
+    xmin[1] = MIN(xmin[1], bbox[2]);
+    xmax[1] = MAX(xmax[1], bbox[3]);
+  }
+
+  if (poly_lines){
+    poly_bbox(poly_lines, x_poly, bbox);
+    xmin[0] = MIN(xmin[0], bbox[0]);
+    xmax[0] = MAX(xmax[0], bbox[1]);
+    xmin[1] = MIN(xmin[1], bbox[2]);
+    xmax[1] = MAX(xmax[1], bbox[3]);
+  }
+
+  pad = .08*MIN(xmax[0] - xmin[0], xmax[1] - xmin[1]);
+  label_fsz = pad/3;
+
+  xmin[0] -= pad;
+  xmax[0] += pad;
+  xmin[1] -= pad;
+  xmax[1] += pad;
+
+
+ if ((xmax[1] - xmin[1]) < 0.001*(xmax[0] - xmin[0])){
+    asp = 0.001;
+  } else {
+    asp = (xmax[1] - xmin[1])/(xmax[0] - xmin[0]);
+  }
+  if (w*asp > h){
+    w = h/asp;
+  } else {
+    h = w*asp;
+  }
+  fprintf(stderr, "asp = %f, w = %f, h = %f\n",asp,w,h);
+
+  /*  f = ps_create_autoscale("test.ps", "title", 7, 7, 0);*/
+  f = ps_create_autoscale(NULL, "title", w, h, 0);
+  /*f = ps_create_epsf(NULL, "title", xmin[0], xmin[1], xmax[0] - xmin[0], xmax[1] - xmin[1]);*/
+
+  ps_line_width(f, 0.00001); // line width 1 point
+
+  ps_font(f, NULL, 10); /* name can be NULL if the current font name is to be used */
+
+  MAX_GRP = polys_groups[0];
+
+  for (i = 0; i < polys->m; i++){
+    if (r && g && b) ps_define_color_rgb(f, polys_groups[i], r[polys_groups[i]], g[polys_groups[i]], b[polys_groups[i]]);
+    MAX_GRP = MAX(MAX_GRP, polys_groups[i]);
+    assert(polys_groups[i] < PS_MAX_COLORS && polys_groups[i] >= 0);
+  }
+
+  /* set bg color */
+  IBG = MAX_GRP + 1;
+  assert(MAX_GRP + 1 < PS_MAX_COLORS);
+  if (bg_color) ps_define_color_rgb(f, IBG, bg_color[0], bg_color[1], bg_color[2]);
+
+  ps_color_model(f, PS_COLOR_MODEL_PALETTE);
+  if (bg_color) ps_rect(f, (float) xmin[0], (float) xmin[1], xmax[0] - xmin[0], xmax[1] - xmin[1], -1, IBG);
+
+
+  /* labels */
+  ps_color_model(f, PS_COLOR_MODEL_RGB);
+  ps_font(f, NULL, label_fsz); /* name can be NULL if the current font name is to be used */
+  ps_textc(f, (float)(.5*(xmin[0] + xmax[0])), (float) xmin[1] + pad, plot_label, 0);
+  
+  ps_color_model(f, PS_COLOR_MODEL_PALETTE);
+
+  /*polygons */
+  if (plot_polyQ) plot_ps_polygons(f, FALSE, polys, x_poly, polys_groups);
+  
+  ps_color_model(f, PS_COLOR_MODEL_RGB);
+  /* polylines*/
+  if (line_width >= 0){
+    ps_line_width(f, (float) line_width);
+    plot_ps_polygons(f, TRUE, poly_lines, x_poly, polys_groups);
+  }
+
+  /* edges*/
+  if (A) plot_ps_edges(f, A, dim, x);
+  
+  if (labels) plot_ps_labels(f, n, dim, x, labels, width, fsz);
+  
+  ps_done(f);
+  
+  
+}
+#endif
+
+
+static void plot_dot_edges(FILE *f, SparseMatrix A, int dim, real *x){
+  int i, *ia, *ja, j;
+
+  
+  int n = A->m;
+  ia = A->ia;
+  ja = A->ja;
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      if (ja[j] == i) continue;
+      fprintf(f,"%d -- %d;\n",i,ja[j]);
+    }
+  }
+}
+#if 0
+static void plot_processing_edges(FILE *f, SparseMatrix A, int dim, real *x){
+  int i, *ia, *ja, j;
+
+  //fprintf(f,"stroke(.5);\n");
+  fprintf(f, "beginLines\n");
+  fprintf(f, "color(125,125,125)\n");
+  int n = A->m;
+  ia = A->ia;
+  ja = A->ja;
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      if (ja[j] == i) continue;
+      //fprintf(f,"line(%f, %f, %f, %f);\n", x[i*dim], x[i*dim+1], x[ja[j]*dim], x[ja[j]*dim+1]);
+      fprintf(f,"%f %f %f %f\n", x[i*dim], x[i*dim+1], x[ja[j]*dim], x[ja[j]*dim+1]);
+    }
+  }
+  fprintf(f,"endLines\n");
+}
+#endif
+
+void plot_dot_labels(FILE *f, int n, int dim, real *x, char **labels, real *width, float *fsz){
+  int i;
+
+  for (i = 0; i < n; i++){
+    if (fsz){
+      fprintf(f, "%d [label=\"%s\", pos=\"%lf,%lf\", fontsize=%f];\n",i, labels[i], x[i*dim], x[i*dim+1], fsz[i]); 
+    } else {
+      fprintf(f, "%d [label=\"%s\", pos=\"%lf,%lf\"];\n",i, labels[i], x[i*dim], x[i*dim+1]); 
+    }
+  }
+
+}
+
+#if 0
+void plot_processing_labels(FILE *f, int n, int dim, real *x, char **labels, real *width, float *fsz){
+  int i;
+  //  fprintf(f, "PFont myFont; myFont = createFont(\"FFScala\",8); fill(0,0,0);\n");
+  for (i = 0; i < n; i++){
+    if (fsz){
+      //   fprintf(f, "textFont(myFont, %f); text(\"%s\", %f, %f);\n", fsz[i], labels[i], x[i*dim], x[i*dim+1]);
+      fprintf(f, "beginText\nfontSize(%f)\ntext(\"%s\")\nposition(%f, %f)\nendText\n", fsz[i], labels[i], x[i*dim], x[i*dim+1]);
+    } else {
+      fprintf(f, "beginText\ntext(\"%s\")\nposition(%f, %f)\nendText\n", labels[i], x[i*dim], x[i*dim+1]);
+    }
+  }
+
+}
+#endif
+
+static void dot_polygon(char **sbuff, int *len, int *len_max, int np, float *xp, float *yp, real line_width,  
+                       int fill, int close, char *cstring){
+  int i;
+  int ret = 0;
+  char buf[10000];
+  char swidth[10000];
+  int len_swidth;
+
+  if (np > 0){
+    /* figure out the size needed */
+    if (fill >= 0){/* poly*/
+      ret += sprintf(buf, " c %d -%s C %d -%s P %d ",(int) strlen(cstring), cstring, (int) strlen(cstring), cstring, np);
+    } else {/* line*/
+      assert(line_width >= 0);
+      if (line_width > 0){
+       sprintf(swidth,"%f",line_width);
+       len_swidth = strlen(swidth);
+       sprintf(swidth,"S %d -setlinewidth(%f)",len_swidth+14, line_width);
+       ret += sprintf(buf, " c %d -%s %s L %d ",(int) strlen(cstring), cstring, swidth, np);
+      } else {
+       ret += sprintf(buf, " c %d -%s L %d ",(int) strlen(cstring), cstring, np);
+      }
+    }
+    for (i = 0; i < np; i++){
+      ret += sprintf(buf, " %f %f",xp[i], yp[i]);
+    }
+
+    if (*len + ret > *len_max - 1){
+      *len_max = *len_max + MAX(100, 0.2*(*len_max)) + ret;
+      *sbuff = REALLOC(*sbuff, *len_max);
+    }
+
+    /* do the actual string */
+    if (fill >= 0){
+      ret = sprintf(&((*sbuff)[*len]), " c %d -%s C %d -%s P %d ",(int) strlen(cstring), cstring, (int) strlen(cstring), cstring, np);
+    } else {
+      if (line_width > 0){
+        sprintf(swidth,"%f",line_width);
+        len_swidth = strlen(swidth);
+        sprintf(swidth,"S %d -setlinewidth(%f)",len_swidth+14, line_width);
+       ret = sprintf(&((*sbuff)[*len]), " c %d -%s %s L %d ",(int) strlen(cstring), cstring, swidth, np);
+      } else {
+       ret = sprintf(&((*sbuff)[*len]), " c %d -%s L %d ",(int) strlen(cstring), cstring, np);
+      }
+    }
+    (*len) += ret;
+    for (i = 0; i < np; i++){
+      assert(*len < *len_max);
+      ret = sprintf(&((*sbuff)[*len]), " %f %f",xp[i], yp[i]);
+      (*len) += ret;
+    }
+
+
+  }
+}
+static void processing_polygon(FILE *f, int np, float *xp, float *yp, real line_width, int fill, int close, 
+                              float rr, float gg, float bb){
+  int i;
+
+  if (np > 0){
+    if (fill >= 0){
+      // fprintf(f, "beginShape();\n noStroke(); fill(%f, %f, %f);\n", 255*rr, 255*gg, 255*bb);
+      fprintf(f, "beginPolygons\ncolor(%f, %f, %f)\n", 255*rr, 255*gg, 255*bb);
+    } else {
+      //fprintf(f, "beginShape();\n");
+      fprintf(f, "beginPolylines\n");
+      if (line_width > 0){
+       fprintf(f, "strokeWeight(%f);\n", line_width);
+      }
+    }
+    for (i = 0; i < np; i++){
+      //fprintf(f, "vertex(%f, %f);\n",xp[i], yp[i]);
+      fprintf(f, "%f %f\n",xp[i], yp[i]);
+    }
+    //fprintf(f, "endShape(CLOSE);\n");
+    if (fill >= 0){
+      fprintf(f, "endPolygons\n");
+    } else {
+      fprintf(f, "endPolylines\n");
+    }
+
+  }
+}
+
+void dot_one_poly(char **sbuff, int *len, int *len_max, int use_line, real line_width, int fill, int close, int is_river, int np, float *xp, float *yp, char *cstring){
+  if (use_line){
+    if (is_river){
+      /*river*/
+    } else {
+    }
+    dot_polygon(sbuff, len, len_max, np, xp, yp, line_width, fill, close, cstring);
+  } else {
+    dot_polygon(sbuff, len, len_max, np, xp, yp, line_width, fill, close, cstring);
+  }
+}
+
+void processing_one_poly(FILE *f, int use_line, real line_width, int fill, int close, int is_river, int np, float *xp, float *yp, 
+                     float rr, float gg, float bb){
+  if (use_line){
+    if (is_river){
+      /*river*/
+    } else {
+    }
+    processing_polygon(f, np, xp, yp, line_width, fill, close, rr, gg, bb);
+  } else {
+    processing_polygon(f, np, xp, yp, line_width, fill, close, rr, gg, bb);
+  }
+}
+
+
+void plot_dot_polygons(char **sbuff, int *len, int *len_max, real line_width, char *line_color, SparseMatrix polys, real *x_poly, int *polys_groups, float *r, float *g, float *b){
+  int i, j, *ia = polys->ia, *ja = polys->ja, *a = (int*) polys->a, npolys = polys->m, nverts = polys->n, ipoly,first;
+  int np = 0, maxlen = 0;
+  float *xp, *yp;
+  int fill = -1, close = 1;
+  int is_river = FALSE;
+  char cstring[] = "#00000011";
+  int use_line = (line_width >= 0);
+  
+  for (i = 0; i < npolys; i++) maxlen = MAX(maxlen, ia[i+1]-ia[i]);
+
+  xp = MALLOC(sizeof(float)*maxlen);
+  yp = MALLOC(sizeof(float)*maxlen);
+
+  if (Verbose) fprintf(stderr,"npolys = %d\n",npolys);
+  first = ABS(a[0]); ipoly = first + 1;
+  for (i = 0; i < npolys; i++){
+    np = 0;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      assert(ja[j] < nverts && ja[j] >= 0);
+      if (ABS(a[j]) != ipoly){/* the first poly, or a hole */
+       ipoly = ABS(a[j]);
+       is_river = (a[j] < 0);
+       if (r && g && b) {
+         rgb2hex(r[polys_groups[i]], g[polys_groups[i]], b[polys_groups[i]], cstring);
+       }
+       dot_one_poly(sbuff, len, len_max, use_line, line_width, fill, close, is_river, np, xp, yp, cstring);
+       np = 0;/* start a new polygon */
+      } 
+      xp[np] = x_poly[2*ja[j]]; yp[np++] = x_poly[2*ja[j]+1];
+    }
+    if (use_line) {
+      dot_one_poly(sbuff, len, len_max, use_line, line_width, fill, close, is_river, np, xp, yp, line_color);
+    } else {
+      /* why set fill to polys_groups[i]?*/
+      //dot_one_poly(sbuff, len, len_max, use_line, polys_groups[i], polys_groups[i], close, is_river, np, xp, yp, cstring);
+      dot_one_poly(sbuff, len, len_max, use_line, -1, 1, close, is_river, np, xp, yp, cstring);
+    }
+  }
+  FREE(xp);
+  FREE(yp);
+
+}
+
+void plot_processing_polygons(FILE *f, real line_width, SparseMatrix polys, real *x_poly, int *polys_groups, float *r, float *g, float *b){
+  int i, j, *ia = polys->ia, *ja = polys->ja, *a = (int*) polys->a, npolys = polys->m, nverts = polys->n, ipoly,first;
+  int np = 0, maxlen = 0;
+  float *xp, *yp;
+  int fill = -1, close = 1;
+  int is_river = FALSE;
+  int use_line = (line_width >= 0);
+  float rr = 0, gg = 0, bb = 0;
+
+  for (i = 0; i < npolys; i++) maxlen = MAX(maxlen, ia[i+1]-ia[i]);
+
+  xp = MALLOC(sizeof(float)*maxlen);
+  yp = MALLOC(sizeof(float)*maxlen);
+
+  if (Verbose) fprintf(stderr,"npolys = %d\n",npolys);
+  first = ABS(a[0]); ipoly = first + 1;
+  for (i = 0; i < npolys; i++){
+    np = 0;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      assert(ja[j] < nverts && ja[j] >= 0);
+      if (ABS(a[j]) != ipoly){/* the first poly, or a hole */
+       ipoly = ABS(a[j]);
+       is_river = (a[j] < 0);
+       if (r && g && b) {
+         rr = r[polys_groups[i]]; gg = g[polys_groups[i]]; bb = b[polys_groups[i]];
+       }
+         processing_one_poly(f, use_line, line_width, fill, close, is_river, np, xp, yp, rr, gg, bb);
+       np = 0;/* start a new polygon */
+      } 
+      xp[np] = x_poly[2*ja[j]]; yp[np++] = x_poly[2*ja[j]+1];
+    }
+    if (use_line) {
+      processing_one_poly(f, use_line, line_width, fill, close, is_river, np, xp, yp, rr, gg, bb);
+    } else {
+      /* why set fill to polys_groups[i]?*/
+      processing_one_poly(f,  use_line, -1, 1, close, is_river, np, xp, yp, rr, gg, bb);
+    }
+  }
+  FREE(xp);
+  FREE(yp);
+
+}
+
+
+void plot_dot_map(Agraph_t* gr, int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, char *line_color, real *x_poly, int *polys_groups, char **labels, real *width,
+                float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A, FILE* f){
+  /* if graph object exist, we just modify some attributes, otherwise we dump the whole graph */
+  int plot_polyQ = TRUE;
+  char *sbuff;
+  int len = 0, len_max = 1000;
+
+  sbuff = N_NEW(len_max,char);
+
+  if (!r || !g || !b) plot_polyQ = FALSE;
+
+  if (!gr) {
+    fprintf(f, "graph map {\n node [margin = 0 width=0.0001 height=0.00001 shape=plaintext];\n graph [outputorder=edgesfirst, bgcolor=\"#dae2ff\"]\n edge [color=\"#55555515\",fontname=\"Helvetica-Bold\"]\n");
+  } else {
+    agattr(gr, AGNODE, "margin", "0"); 
+    agattr(gr, AGNODE, "width", "0.0001"); 
+    agattr(gr, AGNODE, "height", "0.0001"); 
+    agattr(gr, AGNODE, "shape", "plaintext"); 
+    agattr(gr, AGNODE, "margin", "0"); 
+    agattr(gr, AGNODE, "fontname", "Helvetica-Bold"); 
+    agattr(gr, AGRAPH, "outputorder", "edgesfirst");
+    agattr(gr, AGRAPH, "bgcolor", "#dae2ff");
+    if (!A) agattr(gr, AGEDGE, "style","invis");/* do not plot edges */
+    //    agedgeattr(gr, "color", "#55555515"); 
+  }
+
+  /*polygons */
+  if (plot_polyQ) {
+    if (!gr) fprintf(f,"_draw_ = \"");
+    plot_dot_polygons(&sbuff, &len, &len_max, -1., NULL, polys, x_poly, polys_groups, r, g, b);
+  }
+
+  /* polylines: line width is set here */
+  if (line_width >= 0){
+    plot_dot_polygons(&sbuff, &len, &len_max, line_width, line_color, poly_lines, x_poly, polys_groups, NULL, NULL, NULL);
+  }
+  if (!gr) {
+    fprintf(f,"%s",sbuff);
+    fprintf(f,"\"\n");/* close polygons/lines */
+  } else {
+    agattr(gr, AGRAPH, "_draw_", sbuff);
+    agwrite(gr, f);
+  }
+
+  /* nodes */
+  if (!gr && labels) plot_dot_labels(f, n, dim, x, labels, width, fsz);
+  /* edges */
+  if (!gr && A) plot_dot_edges(f, A, dim, x);
+
+  /* background color + plot label?*/
+
+  if (!gr) fprintf(f, "}\n");
+  
+}
+
+#if 0
+static void get_polygon_bbox(SparseMatrix polys, real *x_poly, real *bbox_x, real *bbox_y){
+  /* find bounding box. bbox_x is the xmin and xmax, bbox_y is ymin and ymax */
+  int i, j, *ia = polys->ia, *ja = polys->ja, *a = (int*) polys->a, npolys = polys->m, nverts = polys->n, ipoly,first;
+  int NEW = TRUE;
+
+  first = ABS(a[0]); ipoly = first + 1;
+  for (i = 0; i < npolys; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      assert(ja[j] < nverts && ja[j] >= 0);
+      if (NEW){
+       bbox_x[0] = bbox_x[1] =  x_poly[2*ja[j]];
+       bbox_y[0] = bbox_y[1] =  x_poly[2*ja[j]+1];
+       NEW = FALSE;
+      } else {
+       bbox_x[0] = MIN(bbox_x[0], x_poly[2*ja[j]]);
+       bbox_x[1] = MAX(bbox_x[1], x_poly[2*ja[j]]);
+       bbox_y[0] = MIN(bbox_y[0], x_poly[2*ja[j]+1]);
+       bbox_y[1] = MAX(bbox_y[1], x_poly[2*ja[j]+1]);
+      }
+    }
+  }
+}
+#endif
+
+#if 0
+void plot_processing_map(Agraph_t* gr, int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, int nverts, real *x_poly, int *polys_groups, char **labels, real *width,
+                float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A){
+  /* if graph object exist, we just modify some attributes, otherwise we dump the whole graph */
+  int plot_polyQ = TRUE;
+  FILE *f = stdout;
+  real xmin[2], xwidth[2], scaling=1, bbox_x[2], bbox_y[2];
+  int i;
+
+  /* shift to make all coordinates position */
+  get_polygon_bbox(polys, x_poly, bbox_x, bbox_y);
+  xmin[0] = bbox_x[0]; xmin[1] = bbox_y[0]; 
+  xwidth[0] = (bbox_x[1] - bbox_x[0])*scaling;
+  xwidth[1] = (bbox_y[1] - bbox_y[0])*scaling;
+  for (i = 0; i < n; i++) {
+    xmin[0] = MIN(xmin[0], x[i*dim]);
+    xmin[1] = MIN(xmin[1], x[i*dim+1]);
+  }
+
+  fprintf(stderr,"xmin={%f, %f}\n", xmin[0], xmin[1]);
+
+  for (i = 0; i < n; i++) {
+    x[i*dim] = (x[i*dim] - xmin[0])*scaling;
+    x[i*dim+1] = (x[i*dim+1] - xmin[1])*scaling;
+    xwidth[0] = MAX(xwidth[0], x[i*dim]);
+    xwidth[1] = MAX(xwidth[1], x[i*dim+1]);
+  }
+  for (i = 0; i < nverts; i++) {
+    x_poly[i*dim] = (x_poly[i*dim] - xmin[0])*scaling;
+    x_poly[i*dim+1] = (x_poly[i*dim+1] - xmin[1])*scaling;
+  }
+  /*
+  fprintf(f,"//This file is for processing language. Syntax:\n//\n");
+  fprintf(f,"//beginPolygons\n//[color(r,g,b)]\n//x y\n...\n//endPolygons\n//\n");
+  fprintf(f,"//beginPolylines\n//[color(r,g,b)]\n//...\n//endPolylines\n\n");
+  fprintf(f,"//beginLines\n//[color(r,g,b)]\n//x1 y1 x2 y2\n//...\n endLines\n//\n");
+  fprintf(f,"//beginText\n//[fontSize(x)]\n//text(\"foo\")\n//position(x,y)\n\\endText\n//\n");
+  fprintf(f,"//\n");
+
+  fprintf(f, "size(%d, %d);\n", (int)(xwidth[0]+1), (int) (xwidth[1]+1));
+  */
+
+  if (!r || !g || !b) plot_polyQ = FALSE;
+
+  if (!gr) {
+    fprintf(f, "background(234, 242, 255)");
+  }
+
+  /*polygons */
+  if (plot_polyQ) {
+    plot_processing_polygons(f, -1., polys, x_poly, polys_groups, r, g, b);
+  }
+
+  /* polylines: line width is set here */
+  if (line_width >= 0){
+    plot_processing_polygons(f, line_width, poly_lines, x_poly, polys_groups, NULL, NULL, NULL);
+  }
+
+  /* edges */
+  if (A) plot_processing_edges(f, A, dim, x);
+
+  /* nodes */
+  if (labels) plot_processing_labels(f, n, dim, x, labels, width, fsz);
+
+}
+#endif
+
+static void get_tri(int n, int dim, real *x, int *nt, struct Triangle **T, SparseMatrix *E, int *flag) {
+   /* always contains a self edge and is symmetric.
+     input:
+     n: number of points
+     dim: dimension, only first2D used
+     x: point j is stored x[j*dim]--x[j*dim+dim-1]
+     output: 
+     nt: number of triangles
+     T: triangles
+     E: a matrix of size nxn, if two points i > j are connected by an taiangulation edge, and is neighboring two triangles 
+     .  t1 and t2, then A[i,j] is both t1 and t2
+   */
+  int i, j, i0, i1, i2, ntri;
+  SparseMatrix A, B;
+
+  int* trilist = get_triangles(x, n, &ntri);
+  *flag = 0;
+
+
+  *T = N_NEW(ntri,struct Triangle);
+
+  A = SparseMatrix_new(n, n, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+  for (i = 0; i < ntri; i++) {
+    for (j = 0; j < 3; j++) {
+      ((*T)[i]).vertices[j] = trilist[i * 3 + j];
+    }
+    i0 = (*T)[i].vertices[0]; i1 = (*T)[i].vertices[1]; i2 = (*T)[i].vertices[2];
+
+    triangle_center(&x[i0*dim], &x[i1*dim], &x[i2*dim], (*T)[i].center);
+    A = matrix_add_entry(A, i0, i1, i);
+    A = matrix_add_entry(A, i1, i2, i);
+    A = matrix_add_entry(A, i2, i0, i);
+  }
+
+  B = SparseMatrix_from_coordinate_format_not_compacted(A, SUM_REPEATED_NONE);
+  SparseMatrix_delete(A);
+  B = SparseMatrix_sort(B);
+  *E = B;
+
+  *nt = ntri;
+
+  FREE(trilist);
+
+  return;
+}
+
+
+
+void plot_labels(int n, int dim, real *x, char **labels){
+  int i, j;
+
+  printf("Graphics[{");
+
+  for (i = 0; i < n; i++){
+    printf("Text[\"%s\",{",labels[i]);
+    for (j = 0; j < 2; j++) {
+      printf("%f",x[i*dim+j]);
+      if (j == 0) printf(",");
+    }
+    printf("}]");
+    if (i < n - 1) printf(",\n");
+  }
+  printf("}]");
+
+
+}
+void plot_points(int n, int dim, real *x){
+  int i, j;
+
+  printf("Graphics[{Point[{");
+  for (i = 0; i < n; i++){
+    printf("{");
+    for (j = 0; j < 2; j++) {
+      printf("%f",x[i*dim+j]);
+      if (j == 0) printf(",");
+    }
+    printf("}");
+    if (i < n - 1) printf(",");
+  }
+  printf("}]");
+
+  /*
+  printf(",");
+  for (i = 0; i < n; i++){
+    printf("Text[%d,{",i);
+    for (j = 0; j < 2; j++) {
+      printf("%f",x[i*dim+j]);
+      if (j == 0) printf(",");
+    }
+    printf("}]");
+    if (i < n - 1) printf(",");
+  }
+  */
+  printf("}]");
+
+}
+
+void plot_edges(int n, int dim, real *x, SparseMatrix A){
+  int i, j, k;
+  int *ia, *ja;
+
+  if (!A) {
+    printf("Graphics[{}]");
+    return;
+  }
+  ia = A->ia; ja = A->ja;
+
+  printf("Graphics[(* edges of the graph*){");
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      if (i > 0 && j == ia[i]) printf(",");;
+      printf("Line[{{");
+      for (k = 0; k < 2; k++) {
+       printf("%f",x[i*dim+k]);
+       if (k == 0) printf(",");
+      }
+      printf("},{");
+      for (k = 0; k < 2; k++) {
+       printf("%f",x[ja[j]*dim+k]);
+       if (k == 0) printf(",");
+      }
+      printf("}}]");
+      if (j < ia[i+1] - 1) printf(",");
+    }
+  }
+  printf("}(* end of edges of the graph*)]");
+
+}
+static SparseMatrix get_country_graph(int n, SparseMatrix A, int *groups, SparseMatrix *poly_point_map, int GRP_RANDOM, int GRP_BBOX){
+  /* form a graph each vertex is a group (a country), and a vertex is connected to another if the two countryes shares borders.
+   since the group ID may not be contigous (e.g., only groups 2,3,5, -1), we will return NULL if one of the group has non-positive ID! */
+  int *ia, *ja;
+  int one = 1, jj, i, j, ig1, ig2;
+  SparseMatrix B, BB;
+  int min_grp, max_grp;
+  
+  min_grp = max_grp = groups[0];
+  for (i = 0; i < n; i++) {
+    max_grp = MAX(groups[i], max_grp);
+    min_grp = MIN(groups[i], min_grp);
+  }
+  if (min_grp <= 0) return NULL;
+  B = SparseMatrix_new(max_grp, max_grp, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+  ia = A->ia;
+  ja = A->ja;
+  for (i = 0; i < n; i++){
+    ig1 = groups[i]-1;/* add a diagonal entry */
+    SparseMatrix_coordinate_form_add_entries(B, 1, &ig1, &ig1, &one);
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (i != jj && groups[i] != groups[jj] && groups[jj] != GRP_RANDOM && groups[jj] != GRP_BBOX){
+       ig1 = groups[i]-1; ig2 = groups[jj]-1;
+       SparseMatrix_coordinate_form_add_entries(B, 1, &ig1, &ig2, &one);
+      }
+    }
+  }
+  BB = SparseMatrix_from_coordinate_format(B);
+  SparseMatrix_delete(B);
+  return BB;
+}
+
+static void conn_comp(int n, SparseMatrix A, int *groups, SparseMatrix *poly_point_map){
+  /* form a graph where only vertices that are connected as well as in the same group are connected */
+  int *ia, *ja;
+  int one = 1, jj, i, j;
+  SparseMatrix B, BB;
+  int ncomps, *comps = NULL, *comps_ptr = NULL;
+
+  B = SparseMatrix_new(n, n, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+  ia = A->ia;
+  ja = A->ja;
+  for (i = 0; i < n; i++){
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (i != jj && groups[i] == groups[jj]){
+       SparseMatrix_coordinate_form_add_entries(B, 1, &i, &jj, &one);
+      }
+    }
+  }
+  BB = SparseMatrix_from_coordinate_format(B);
+
+  SparseMatrix_weakly_connected_components(BB, &ncomps, &comps, &comps_ptr);
+  SparseMatrix_delete(B);
+  SparseMatrix_delete(BB);
+  *poly_point_map = SparseMatrix_new(ncomps, n, n, MATRIX_TYPE_PATTERN, FORMAT_CSR);
+  FREE((*poly_point_map)->ia);
+  FREE((*poly_point_map)->ja);
+  (*poly_point_map)->ia = comps_ptr;
+  (*poly_point_map)->ja = comps;
+  (*poly_point_map)->nz = n;
+
+}
+
+
+static void get_poly_lines(int exclude_random, int nt, SparseMatrix graph, SparseMatrix E, int ncomps, int *comps_ptr, int *comps, 
+                          int *groups, int *mask, SparseMatrix *poly_lines, int **polys_groups,
+                          int GRP_RANDOM, int GRP_BBOX){
+  /*============================================================
+
+    polygon outlines 
+
+    ============================================================*/
+  int i, *tlist, nz, ipoly, ipoly2, nnt, ii, jj, t1, t2, t, cur, next, nn, j, nlink, sta;
+  int *elist, edim = 3;/* a list tell which vertex a particular vertex is linked with during poly construction.
+               since the surface is a cycle, each can only link with 2 others, the 3rd position is used to record how many links
+             */
+  int *ie = E->ia, *je = E->ja, *e = (int*) E->a, n = E->m;
+  int *ia = NULL, *ja = NULL;
+  SparseMatrix A;
+  int *gmask = NULL;
+
+
+  graph = NULL;/* we disable checking whether a polyline cross an edge for now due to issues with labels */
+  if (graph) {
+    assert(graph->m == n);
+    gmask = malloc(sizeof(int)*n);
+    for (i = 0; i < n; i++) gmask[i] = -1;
+    ia = graph->ia; ja = graph->ja;
+    edim = 5;/* we also store info about whether an edge of a polygon correspondes to a real edge or not. */
+  }
+
+  for (i = 0; i < nt; i++) mask[i] = -1;
+  /* loop over every point in each connected component */
+  elist = MALLOC(sizeof(int)*(nt)*edim);
+  tlist = MALLOC(sizeof(int)*nt*2);
+  *poly_lines = SparseMatrix_new(ncomps, nt, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+  *polys_groups = MALLOC(sizeof(int)*(ncomps));
+
+  for (i = 0; i < nt; i++) elist[i*edim + 2] = 0;
+  nz = ie[E->m] - ie[0];
+
+  ipoly = 1;
+
+  for (i = 0; i < ncomps; i++){
+    /*fprintf(stderr, "comp %d has %d members\n",i, comps_ptr[i+1]-comps_ptr[i]);*/
+    nnt = 0;
+    for (j = comps_ptr[i]; j < comps_ptr[i+1]; j++){
+      ii = comps[j];
+
+      if (graph){
+       for (jj = ia[ii]; jj < ia[ii+1]; jj++) gmask[ja[jj]] = ii;
+      }
+
+      (*polys_groups)[i] = groups[ii];/* assign the grouping of each poly */
+
+      /* skip the country formed by random points */
+      if (exclude_random && (groups[ii] == GRP_RANDOM || groups[ii] == GRP_BBOX)) continue;
+
+      /* always skip bounding box */
+      if (groups[ii] == GRP_BBOX) continue;
+
+      /*fprintf(stderr, "member %d is in group %d, it is\n",ii, groups[ii]);*/
+      for (jj = ie[ii]; jj < ie[ii+1]; jj++){
+       /*
+       fprintf(stderr, "connected with %d in group %d\n",je[jj], groups[je[jj]]);
+       fprintf(stderr, "jj=%d nz = %d je[jj]=%d je[jj+1]=%d\n",jj,nz, je[jj],je[jj+1]);
+       */
+       if (groups[je[jj]] != groups[ii] && jj < nz - 1  && je[jj] == je[jj+1]){/* an triangle edge neighboring 2 triangles and two ends not in the same groups */
+         t1 = e[jj];
+         t2 = e[jj+1];
+
+         nlink = elist[t1*edim + 2]%2;
+         elist[t1*edim + nlink] = t2;/* t1->t2*/
+         if (graph){
+           if (gmask[je[jj]] == ii){/* a real edge */
+             elist[t1*edim+nlink+3] = POLY_LINE_REAL_EDGE;
+           } else {
+             fprintf(stderr,"not real!!!\n");
+             elist[t1*edim+nlink+3] = POLY_LINE_NOT_REAL_EDGE;
+           }
+         }
+         elist[t1*edim + 2]++;
+
+         nlink = elist[t2*edim + 2]%2;
+         elist[t2*edim + nlink] = t1;/* t1->t2*/
+         elist[t2*edim + 2]++;
+         if (graph){
+           if (gmask[je[jj]] == ii){/* a real edge */
+             elist[t2*edim+nlink+3] = POLY_LINE_REAL_EDGE;
+           } else {
+             fprintf(stderr,"not real!!!\n");
+             elist[t2*edim+nlink+3] = POLY_LINE_NOT_REAL_EDGE;
+           }
+         }
+
+         tlist[nnt++] = t1; tlist[nnt++] = t2;
+         jj++;
+       }
+      }
+    }/* done poly edges for this component i */
+
+
+    /* debugging*/
+#ifdef DEBUG
+    /*
+    for (j = 0; j < nnt; j++) {
+      if (elist[tlist[j]*edim + 2]%2 != 0){
+       printf("wrong: elist[%d*edim+2] = %d\n",j,elist[tlist[j]*edim + 2]%);
+       assert(0);
+      }
+    }
+    */
+#endif
+
+    /* form one or more (if there is a hole) polygon outlines for this component  */
+    for (j = 0; j < nnt; j++){
+      t = tlist[j];
+      if (mask[t] != i){
+       cur = sta = t; mask[cur] = i;
+       next = neighbor(t, 1, edim, elist);
+       nlink = 1;
+       if (graph && neighbor(cur, 3, edim, elist) == POLY_LINE_NOT_REAL_EDGE){
+         ipoly2 = - ipoly;
+       } else {
+         ipoly2 = ipoly;
+       }
+       SparseMatrix_coordinate_form_add_entries(*poly_lines, 1, &i, &cur, &ipoly2);
+       while (next != sta){
+         mask[next] = i;
+         
+         if (graph && neighbor(cur, nlink + 3, edim, elist) == POLY_LINE_NOT_REAL_EDGE){
+           ipoly2 = -ipoly;
+         } else {
+           ipoly2 = ipoly;
+         }
+         SparseMatrix_coordinate_form_add_entries(*poly_lines, 1, &i, &next, &ipoly2);
+
+         nn = neighbor(next, 0, edim, elist);
+         nlink = 0;
+         if (nn == cur) {
+           nlink = 1;
+           nn = neighbor(next, 1, edim, elist);
+         }
+         assert(nn != cur);
+
+         cur = next;
+         next = nn;
+       }
+
+       if (graph && neighbor(cur, nlink + 3, edim, elist) == POLY_LINE_NOT_REAL_EDGE){
+         ipoly2 = -ipoly;
+       } else {
+         ipoly2 = ipoly;
+       }
+       SparseMatrix_coordinate_form_add_entries(*poly_lines, 1, &i, &sta, &ipoly2);/* complete a cycle by adding starting point */
+
+       ipoly++;
+      }
+
+    }/* found poly_lines for this comp */
+  }
+
+  A = SparseMatrix_from_coordinate_format_not_compacted(*poly_lines, SUM_REPEATED_NONE);
+  SparseMatrix_delete(*poly_lines);
+  *poly_lines = A;
+
+  FREE(tlist);
+  FREE(elist);
+}
+
+static void plot_cycle(int head, int *cycle, int *edge_table, real *x){
+  int cur, next;
+  real x1, x2, y1, y2;
+
+  printf("Graphics[{");
+  cur = head;
+  while ((next = cycle_next(cur)) != head){
+    x1 = x[2*edge_head(cur)];
+    y1 = x[2*edge_head(cur)+1];
+    x2 = x[2*edge_tail(cur)];
+    y2 = x[2*edge_tail(cur)+1];
+    printf("{Black,Arrow[{{%f,%f},{%f,%f}}],Green,Text[%d, {%f,%f}],Text[%d, {%f,%f}]},",x1,y1,x2,y2,edge_head(cur),x1,y1,edge_tail(cur),x2,y2);
+    cur = next;
+  }
+  x1 = x[2*edge_head(cur)];
+  y1 = x[2*edge_head(cur)+1];
+  x2 = x[2*edge_tail(cur)];
+  y2 = x[2*edge_tail(cur)+1];
+  printf("{Black,Arrow[{{%f,%f},{%f,%f}}],Green,Text[%d, {%f,%f}],Text[%d, {%f,%f}]}}]",x1,y1,x2,y2,edge_head(cur),x1,y1,edge_tail(cur),x2,y2);
+
+
+}
+
+static void cycle_print(int head, int *cycle, int *edge_table){
+  int cur, next;
+
+  cur = head;
+  fprintf(stderr, "cycle (edges): {");
+  while ((next = cycle_next(cur)) != head){
+    fprintf(stderr, "%d,",cur);
+    cur = next;
+  }
+  fprintf(stderr, "%d}\n",cur);
+
+  cur = head;
+  fprintf(stderr, "cycle (vertices): ");
+  while ((next = cycle_next(cur)) != head){
+    fprintf(stderr, "%d--",edge_head(cur));
+    cur = next;
+  }
+  fprintf(stderr, "%d--%d\n",edge_head(cur),edge_tail(cur));
+
+
+
+
+
+
+}
+
+static int same_edge(int ecur, int elast, int *edge_table){
+  return ((edge_head(ecur) == edge_head(elast) && edge_tail(ecur) == edge_tail(elast))
+         || (edge_head(ecur) == edge_tail(elast) && edge_tail(ecur) == edge_head(elast)));
+}
+
+static void get_polygon_solids(int exclude_random, int nt, SparseMatrix E, int ncomps, int *comps_ptr, int *comps, 
+                              int *groups, int *mask, real *x_poly, SparseMatrix *polys, int **polys_groups,
+                              int GRP_RANDOM, int GRP_BBOX){
+  /*============================================================
+
+    polygon slids that will be colored
+
+    ============================================================*/
+  int *edge_table;/* a table of edges of the triangle graph. If two vertex u and v are connected and are adjencent to two triangles
+                    t1 and t2, then from u there are two edges to v, one denoted as t1->t2, and the other t2->t1. They are
+                    numbered as e1 and e2. edge_table[e1]={t1,t2} and edge_table[e2]={t2,t1}
+                 */
+  SparseMatrix half_edges;/* a graph of triangle edges. If two vertex u and v are connected and are adjencent to two triangles
+                    t1 and t2, then from u there are two edges to v, one denoted as t1->t2, and the other t2->t1. They are
+                    numbered as e1 and e2. Likewise from v to u there are also two edges e1 and e2.
+                 */
+
+  int n = E->m, *ie = E->ia, *je = E->ja, *e = (int*) E->a, ne, i, j, t1, t2, jj, ii;
+  int *cycle, cycle_head = 0;/* a list of edges that form a cycle that describe the polygon. cycle[e][0] gives the prev edge in the cycle from e,
+              cycle[e][1] gives the next edge
+            */
+  int *edge_cycle_map, NOT_ON_CYCLE = -1;/* map an edge e to its position on cycle, unless it does not exist (NOT_ON_CYCLE) */
+  int *emask;/* whether an edge is seens this iter */
+  enum {NO_DUPLICATE = -1};
+  int *elist, edim = 3;/* a list tell which edge a particular vertex is linked with when a voro cell has been visited,
+               since the surface is a cycle, each vertex can only link with 2 edges, the 3rd position is used to record how many links
+             */
+
+  int k, duplicate, ee = 0, ecur, enext, eprev, cur, next, nn, nlink, head, elast = 0, etail, tail, ehead, efirst; 
+
+  int DEBUG_CYCLE = 0;
+  SparseMatrix B;
+
+  ne = E->nz;
+  edge_table = MALLOC(sizeof(int)*ne*2);  
+
+  for (i = 0; i < n; i++) mask[i] = -1;
+
+  half_edges = SparseMatrix_new(n, n, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+
+  ne = 0;
+  for (i = 0; i < n; i++){
+    for (j = ie[i]; j < ie[i+1]; j++){
+      if (j < ie[n] - ie[0] - 1 && i > je[j] && je[j] == je[j+1]){/* an triangle edge neighboring 2 triangles. Since E is symmetric, we only do one edge of E*/
+       t1 = e[j];
+       t2 = e[j+1];
+       jj = je[j];       
+       assert(jj < n);
+       edge_table[ne*2] = t1;/*t1->t2*/
+       edge_table[ne*2+1] = t2;
+       half_edges = SparseMatrix_coordinate_form_add_entries(half_edges, 1, &i, &jj, &ne);
+       half_edges = SparseMatrix_coordinate_form_add_entries(half_edges, 1, &jj, &i, &ne);
+       ne++;
+
+       edge_table[ne*2] = t2;/*t2->t1*/
+       edge_table[ne*2+1] = t1;
+       half_edges = SparseMatrix_coordinate_form_add_entries(half_edges, 1, &i, &jj, &ne);
+       half_edges = SparseMatrix_coordinate_form_add_entries(half_edges, 1, &jj, &i, &ne);     
+
+
+       ne++;
+       j++;
+      }
+    }
+  }
+  assert(E->nz >= ne);
+
+  cycle = MALLOC(sizeof(int)*ne*2);
+  B = SparseMatrix_from_coordinate_format_not_compacted(half_edges, SUM_REPEATED_NONE);
+  SparseMatrix_delete(half_edges);half_edges = B;
+
+  edge_cycle_map = MALLOC(sizeof(int)*ne);
+  emask = MALLOC(sizeof(int)*ne);
+  for (i = 0; i < ne; i++) edge_cycle_map[i] = NOT_ON_CYCLE;
+  for (i = 0; i < ne; i++) emask[i] = -1;
+
+  ie = half_edges->ia;
+  je = half_edges->ja;
+  e = (int*) half_edges->a;
+  elist = MALLOC(sizeof(int)*(nt)*3);
+  for (i = 0; i < nt; i++) elist[i*edim + 2] = 0;
+
+  *polys = SparseMatrix_new(ncomps, nt, 1, MATRIX_TYPE_INTEGER, FORMAT_COORD);
+
+  for (i = 0; i < ncomps; i++){
+    if (DEBUG_CYCLE) fprintf(stderr, "\n ============  comp %d has %d members\n",i, comps_ptr[i+1]-comps_ptr[i]);
+    for (k = comps_ptr[i]; k < comps_ptr[i+1]; k++){
+      ii = comps[k];
+      mask[ii] = i;
+      duplicate = NO_DUPLICATE;
+      if (DEBUG_CYCLE) fprintf(stderr,"member = %d has %d neighbors\n",ii, ie[ii+1]-ie[ii]);
+      for (j = ie[ii]; j < ie[ii+1]; j++){
+       jj = je[j];
+       ee = e[j];
+       t1 = edge_head(ee);
+       if (DEBUG_CYCLE) fprintf(stderr," linked with %d using half-edge %d, {head,tail} of the edge = {%d, %d}\n",jj, ee, t1, edge_tail(ee));
+       nlink = elist[t1*edim + 2]%2;
+       elist[t1*edim + nlink] = ee;/* t1->t2*/
+       elist[t1*edim + 2]++;
+
+       if (edge_cycle_map[ee] != NOT_ON_CYCLE) duplicate = ee;
+       emask[ee] = ii;
+      }
+
+      if (duplicate == NO_DUPLICATE){
+       /* this must be the first time the cycle is being established, a new voro cell*/
+       ecur = ee;
+       cycle_head = ecur;
+       cycle_next(ecur) = ecur;
+       cycle_prev(ecur) = ecur;
+       edge_cycle_map[ecur] = 1;
+       head = cur = edge_head(ecur);
+       next = edge_tail(ecur);
+       if (DEBUG_CYCLE) fprintf(stderr, "NEW CYCLE\n starting with edge %d, {head,tail}={%d,%d}\n", ee, head, next);
+       while (next != head){
+         enext = neighbor(next, 0, edim, elist);/* two voro edges linked with triangle "next" */
+         if ((edge_head(enext) == cur && edge_tail(enext) == next)
+             || (edge_head(enext) == next && edge_tail(enext) == cur)){/* same edge */
+           enext = neighbor(next, 1, edim, elist);
+         };
+         if (DEBUG_CYCLE) fprintf(stderr, "cur edge = %d, next edge %d, {head,tail}={%d,%d},\n",ecur, enext, edge_head(enext), edge_tail(enext));
+         nn = edge_head(enext);
+         if (nn == next) nn = edge_tail(enext);
+         cycle_next(enext) = cycle_next(ecur);
+         cycle_prev(enext) = ecur;
+         cycle_next(ecur) = enext;
+         cycle_prev(ee) = enext;
+         edge_cycle_map[enext] = 1;
+
+         ecur = enext;
+         cur = next;
+         next = nn;
+       } 
+       if (DEBUG_CYCLE) cycle_print(ee, cycle,edge_table);
+      } else {
+       /* we found a duplicate edge, remove that, and all contiguous neighbors that overlap with the current voro
+        */
+       ecur = ee = duplicate;
+       while (emask[ecur] == ii){
+         /* contigous overlapping edges, Cycling is not possible
+            since the cycle can not complete surround the new voro cell and yet
+            do not contain any other edges
+         */
+         ecur = cycle_next(ecur);
+       }
+       if (DEBUG_CYCLE) fprintf(stderr," duplicating edge = %d, starting from the a non-duplicating edge %d, search backwards\n",ee, ecur);
+
+       ecur = cycle_prev(ecur);
+       efirst = ecur;
+       while (emask[ecur] == ii){
+         if (DEBUG_CYCLE) fprintf(stderr," remove edge %d (%d--%d)\n",ecur, edge_head(ecur), edge_tail(ecur));
+         /* short this duplicating edge */
+         edge_cycle_map[ecur] = NOT_ON_CYCLE;
+         enext = cycle_next(ecur);
+         eprev = cycle_prev(ecur);
+         cycle_next(ecur) = ecur;/* isolate this edge */
+         cycle_prev(ecur) = ecur;
+         cycle_next(eprev) = enext;/* short */
+         cycle_prev(enext) = eprev;
+         elast = ecur;/* record the last removed edge */
+         ecur = eprev;
+       }
+
+       if (DEBUG_CYCLE) {
+         fprintf(stderr, "remaining (broken) cycle = ");
+         cycle_print(cycle_next(ecur), cycle,edge_table);
+       }
+
+       /* we now have a broken cycle of head = edge_tail(ecur) and tail = edge_head(cycle_next(ecur)) */
+       ehead = ecur; etail = cycle_next(ecur);
+       cycle_head = ehead;
+       head = edge_tail(ehead); 
+       tail = edge_head(etail);
+
+       /* pick an edge ev from head in the voro that is a removed edge: since the removed edges form a path starting from
+          efirst, and at elast (head of elast is head), usually we just need to check that ev is not the same as elast,
+          but in the case of a voro filling in a hole, we also need to check that ev is not efirst,
+          since in this case every edge of the voro cell is removed
+        */
+       ecur = neighbor(head, 0, edim, elist);
+       if (same_edge(ecur, elast, edge_table)){
+         ecur = neighbor(head, 1, edim, elist);
+       };
+
+       if (DEBUG_CYCLE) fprintf(stderr, "forwarding now from edge %d = {%d, %d}, try to reach vtx %d, first edge from voro = %d\n",
+                                ehead, edge_head(ehead), edge_tail(ehead), tail, ecur);
+
+       /* now go along voro edges till we reach the tail of the broken cycle*/
+       cycle_next(ehead) = ecur;
+       cycle_prev(ecur) = ehead;
+       cycle_prev(etail) = ecur;
+       cycle_next(ecur) = etail;
+       if (same_edge(ecur, efirst, edge_table)){
+         if (DEBUG_CYCLE) fprintf(stderr, "this voro cell fill in a hole completely!!!!\n");
+       } else {
+       
+         edge_cycle_map[ecur] = 1;
+         head = cur = edge_head(ecur);
+         next = edge_tail(ecur);
+         if (DEBUG_CYCLE) fprintf(stderr, "starting with edge %d, {head,tail}={%d,%d}\n", ecur, head, next);
+         while (next != tail){
+           enext = neighbor(next, 0, edim, elist);/* two voro edges linked with triangle "next" */
+           if ((edge_head(enext) == cur && edge_tail(enext) == next)
+               || (edge_head(enext) == next && edge_tail(enext) == cur)){/* same edge */
+             enext = neighbor(next, 1, edim, elist);
+           };
+           if (DEBUG_CYCLE) fprintf(stderr, "cur edge = %d, next edge %d, {head,tail}={%d,%d},\n",ecur, enext, edge_head(enext), edge_tail(enext));
+
+
+           nn = edge_head(enext);
+           if (nn == next) nn = edge_tail(enext);
+           cycle_next(enext) = cycle_next(ecur);
+           cycle_prev(enext) = ecur;
+           cycle_next(ecur) = enext;
+           cycle_prev(etail) = enext;
+           edge_cycle_map[enext] = 1;
+           
+           ecur = enext;
+           cur = next;
+           next = nn;
+         }
+       }
+       if (DEBUG_CYCLE && 0) {
+         cycle_print(etail, cycle,edge_table);
+         plot_cycle(etail, cycle,edge_table, x_poly);
+         printf(",");
+       }
+
+      }
+      
+    }
+    /* done this component, load to sparse matrix, unset edge_map*/
+    ecur = cycle_head;
+    while ((enext = cycle_next(ecur)) != cycle_head){
+      edge_cycle_map[ecur] = NOT_ON_CYCLE;
+      head = edge_head(ecur);
+      SparseMatrix_coordinate_form_add_entries(*polys, 1, &i, &head, &i);
+      ecur = enext;
+    }
+    edge_cycle_map[ecur] = NOT_ON_CYCLE;
+    head = edge_head(ecur); tail = edge_tail(ecur);
+    SparseMatrix_coordinate_form_add_entries(*polys, 1, &i, &head, &i);
+    SparseMatrix_coordinate_form_add_entries(*polys, 1, &i, &tail, &i);
+
+
+    /* unset edge_map */
+  }
+
+
+
+  B = SparseMatrix_from_coordinate_format_not_compacted(*polys, SUM_REPEATED_NONE);
+  SparseMatrix_delete(*polys);
+  *polys = B;
+  
+  SparseMatrix_delete(half_edges);
+  FREE(cycle);
+  FREE(edge_cycle_map);
+  FREE(elist);
+  FREE(emask);
+  FREE(edge_table);
+
+}
+static void get_polygons(int exclude_random, int n, int nrandom, int dim, SparseMatrix graph, real *xcombined, int *grouping, 
+                        int nt, struct Triangle *Tp, SparseMatrix E, int *nverts, real **x_poly, 
+                        int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map, SparseMatrix *country_graph,
+                        int *flag){
+  int i, j;
+  int *mask;
+  int *groups;
+  int maxgrp;
+  int *comps = NULL, *comps_ptr = NULL, ncomps;
+  int GRP_RANDOM, GRP_BBOX;
+  SparseMatrix B;
+
+  *flag = 0;
+
+  assert(dim == 2);
+  *nverts = nt;
+  groups = MALLOC(sizeof(int)*(n + nrandom));
+  maxgrp = grouping[0];
+  for (i = 0; i < n; i++) {
+    maxgrp = MAX(maxgrp, grouping[i]);
+    groups[i] = grouping[i];
+  }
+
+  GRP_RANDOM = maxgrp + 1; GRP_BBOX = maxgrp + 2;
+  for (i = n; i < n + nrandom - 4; i++) {/* all random points in the same group */
+    groups[i] = GRP_RANDOM;
+  }
+  for (i = n + nrandom - 4; i < n + nrandom; i++) {/* last 4 pts of the expanded bonding box in the same group */
+    groups[i] = GRP_BBOX;
+  }
+  
+  /* finding connected componts: vertices that are connected in the triangle graph, as well as in the same group */
+  mask = MALLOC(sizeof(int)*MAX(n + nrandom, 2*nt));
+  conn_comp(n + nrandom, E, groups, poly_point_map);
+
+  ncomps = (*poly_point_map)->m;
+  comps = (*poly_point_map)->ja;
+  comps_ptr = (*poly_point_map)->ia;
+
+  if (exclude_random){
+    /* connected components are such that  the random points and the bounding box 4 points forms the last
+     remaining components */
+    for (i = ncomps - 1; i >= 0; i--) {
+      if ((groups[comps[comps_ptr[i]]] != GRP_RANDOM) &&
+         (groups[comps[comps_ptr[i]]] != GRP_BBOX)) break;
+    }
+    ncomps = i + 1;
+    if (Verbose) fprintf(stderr," ncomps = %d\n",ncomps);
+  } else {/* alwasy exclud bounding box */
+    for (i = ncomps - 1; i >= 0; i--) {
+      if (groups[comps[comps_ptr[i]]] != GRP_BBOX) break;
+    }
+    ncomps = i + 1;
+    if (Verbose) fprintf(stderr," ncomops = %d\n",ncomps);
+  }
+  *npolys = ncomps;
+
+  *x_poly = MALLOC(sizeof(real)*dim*nt);
+  for (i = 0; i < nt; i++){
+    for (j = 0; j < dim; j++){
+      (*x_poly)[i*dim+j] = (Tp[i]).center[j];
+    }
+  }
+  
+
+  /*============================================================
+
+    polygon outlines 
+
+    ============================================================*/
+  get_poly_lines(exclude_random, nt, graph, E, ncomps, comps_ptr, comps, groups, mask, poly_lines, polys_groups, GRP_RANDOM, GRP_BBOX);
+
+  /*============================================================
+
+    polygon solids
+
+    ============================================================*/
+  get_polygon_solids(exclude_random, nt, E, ncomps, comps_ptr, comps, groups, mask, *x_poly, polys, polys_groups, GRP_RANDOM, GRP_BBOX);
+
+  B = get_country_graph(n, E, groups, poly_point_map, GRP_RANDOM, GRP_BBOX);
+  *country_graph = B;
+
+  FREE(groups);
+  FREE(mask);
+
+}
+
+
+int make_map_internal(int exclude_random, int include_OK_points,
+                     int n, int dim, real *x0, int *grouping0, SparseMatrix graph, real bounding_box_margin[], int *nrandom, int nedgep, 
+                     real shore_depth_tol, real edge_bridge_tol, real **xcombined, int *nverts, real **x_poly, 
+                     int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map,
+                     SparseMatrix *country_graph, int highlight_cluster, int *flag){
+
+
+  real xmax[2], xmin[2], area, *x = x0;
+  int i, j;
+  QuadTree qt;
+  int dim2 = 2, nn = 0;
+  int max_qtree_level = 10;
+  real ymin[2], min;
+  int imin, nz, nzok = 0, nzok0 = 0, nt;
+  real *xran, point[2];
+  struct Triangle *Tp;
+  SparseMatrix E;
+  real boxsize[2];
+  int INCLUDE_OK_POINTS = include_OK_points;/* OK points are random points inserted and found to be within shore_depth_tol of real/artificial points,
+                             including them instead of throwing away increase realism of boundary */
+  int *grouping = grouping0;
+
+  int HIGHLIGHT_SET = highlight_cluster;
+
+  *flag = 0;
+  for (j = 0; j < dim2; j++) {
+    xmax[j] = x[j];
+    xmin[j] = x[j];
+  }
+
+  for (i = 0; i < n; i++){
+    for (j = 0; j < dim2; j++) {
+      xmax[j] = MAX(xmax[j], x[i*dim+j]);
+      xmin[j] = MIN(xmin[j], x[i*dim+j]);
+    }
+  }
+  boxsize[0] = (xmax[0] - xmin[0]);
+  boxsize[1] = (xmax[1] - xmin[1]);
+  area = boxsize[0]*boxsize[1];
+
+  if (*nrandom == 0) {
+    *nrandom = n;
+  } else if (*nrandom < 0){
+    *nrandom = -(*nrandom)*n;
+  } else if (*nrandom < 4) {/* by default we add 4 point on 4 corners anyway */
+    *nrandom = 0;
+  } else {
+    *nrandom -= 4;
+  }
+  if (Verbose) fprintf(stderr,"nrandom=%d\n",*nrandom);
+
+  if (Verbose) fprintf(stderr,"nrandom=%d\n",*nrandom);
+
+  if (shore_depth_tol < 0) shore_depth_tol = sqrt(area/(real) n); /* set to average distance for random distribution */
+
+
+  /* add artificial points along each edge to avoid as much as possible 
+     two connected components be separated due to small shore depth */
+  {
+    int nz;
+    real *y;
+    int k, t, np=nedgep;
+    if (graph && np){
+      fprintf(stderr,"add art np = %d\n",np);
+      nz = graph->nz;
+      y = MALLOC(sizeof(real)*(dim*n + dim*nz*np));
+      for (i = 0; i < n*dim; i++) y[i] = x[i];
+      grouping = MALLOC(sizeof(int)*(n + nz*np));
+      for (i = 0; i < n; i++) grouping[i] = grouping0[i];
+      nz = n;
+      for (i = 0; i < graph->m; i++){
+
+       for (j = graph->ia[i]; j < graph->ia[i+1]; j++){
+         if (!HIGHLIGHT_SET || (grouping[i] == grouping[graph->ja[j]] && grouping[i] == HIGHLIGHT_SET)){
+           for (t = 0; t < np; t++){
+             for (k = 0; k < dim; k++){
+               y[nz*dim+k] = t/((real) np)*x[i*dim+k] + (1-t/((real) np))*x[(graph->ja[j])*dim + k];
+             }
+             assert(n + (nz-n)*np + t < n + nz*np && n + (nz-n)*np + t >= 0);
+             if (t/((real) np) > 0.5){
+               grouping[nz] = grouping[i];
+             } else {
+               grouping[nz] = grouping[graph->ja[j]];
+             }
+             nz++;
+           }
+         }
+       }
+      }
+      fprintf(stderr, "after adding edge points, n:%d->%d\n",n, nz);
+      n = nz;
+      x = y;
+      qt = QuadTree_new_from_point_list(dim, nz, max_qtree_level, y, NULL);
+    } else {
+      qt = QuadTree_new_from_point_list(dim, n, max_qtree_level, x, NULL);
+    }
+  }
+  graph = NULL;
+
+  fprintf(stderr,"margin=%f\n",bounding_box_margin[0]);
+
+  /* generate random points for lake/sea effect */
+  if (*nrandom != 0){
+    for (i = 0; i < dim2; i++) {
+      if (bounding_box_margin[i] > 0){
+       xmin[i] -= bounding_box_margin[i];
+       xmax[i] += bounding_box_margin[i];
+      } else if (bounding_box_margin[i] == 0) {/* auto bounding box */
+       xmin[i] -= MAX(boxsize[i]*0.2, 2.*shore_depth_tol);
+       xmax[i] += MAX(boxsize[i]*0.2, 2*shore_depth_tol);
+      } else {
+       xmin[i] -= boxsize[i]*(-bounding_box_margin[i]);
+       xmax[i] += boxsize[i]*(-bounding_box_margin[i]);
+      }
+    }
+    if (*nrandom < 0) {
+      real n1, n2, area2;
+      area2 = (xmax[1] - xmin[1])*(xmax[0] - xmin[0]);
+      n1 = (int) area2/(shore_depth_tol*shore_depth_tol);
+      n2 = n*((int) area2/area);
+      *nrandom = MAX(n1, n2);
+    }
+    srand(123);
+    xran = MALLOC(sizeof(real)*(*nrandom + 4)*dim2);
+    nz = 0;
+    if (INCLUDE_OK_POINTS){
+      int *grouping2;
+      nzok0 = nzok = *nrandom - 1;/* points that are within tolerance of real or artificial points */
+      grouping2 = MALLOC(sizeof(int)*(n + *nrandom));
+      MEMCPY(grouping2, grouping, sizeof(int)*n);
+      grouping = grouping2;
+    }
+    nn = n;
+
+    for (i = 0; i < *nrandom; i++){
+
+      for (j = 0; j < dim2; j++){
+       point[j] = xmin[j] + (xmax[j] - xmin[j])*drand(0);
+      }
+      
+      QuadTree_get_nearest(qt, point, ymin, &imin, &min, flag);
+      assert(!(*flag));
+
+      if (min > shore_depth_tol){/* point not too close, accepted */
+       for (j = 0; j < dim2; j++){
+         xran[nz*dim2+j] = point[j];
+       }
+       nz++;
+      } else if (INCLUDE_OK_POINTS && min > shore_depth_tol/10){/* avoid duplicate points */
+       for (j = 0; j < dim2; j++){
+         xran[nzok*dim2+j] = point[j];
+       }
+       grouping[nn++] = grouping[imin];
+       nzok--;
+
+      }
+
+    }
+    *nrandom = nz;
+    if (Verbose) fprintf( stderr, "nn nrandom=%d\n",*nrandom);
+  } else {
+    xran = MALLOC(sizeof(real)*4*dim2);
+  }
+
+
+
+  /* add 4 corners even if nrandom = 0. The corners should be further away from the other points to avoid skinny triangles */
+  for (i = 0; i < dim2; i++) xmin[i] -= 0.2*(xmax[i]-xmin[i]);
+  for (i = 0; i < dim2; i++) xmax[i] += 0.2*(xmax[i]-xmin[i]);
+  i = *nrandom;
+  for (j = 0; j < dim2; j++) xran[i*dim2+j] = xmin[j];
+  i++;
+  for (j = 0; j < dim2; j++) xran[i*dim2+j] = xmax[j];
+  i++;
+  xran[i*dim2] = xmin[0]; xran[i*dim2+1] = xmax[1];
+  i++;
+  xran[i*dim2] = xmax[0]; xran[i*dim2+1] = xmin[1];
+  *nrandom += 4;
+
+
+  if (INCLUDE_OK_POINTS){
+    *xcombined = MALLOC(sizeof(real)*(nn+*nrandom)*dim2);
+  } else {
+    *xcombined = MALLOC(sizeof(real)*(n+*nrandom)*dim2);
+  }
+  for (i = 0; i < n; i++) {
+    for (j = 0; j < dim2; j++) (*xcombined)[i*dim2+j] = x[i*dim+j];
+  }
+  for (i = 0; i < *nrandom; i++) {
+    for (j = 0; j < dim2; j++) (*xcombined)[(i + nn)*dim2+j] = xran[i*dim+j];
+  }
+
+  if (INCLUDE_OK_POINTS){
+    for (i = 0; i < nn - n; i++) {
+      for (j = 0; j < dim2; j++) (*xcombined)[(i + n)*dim2+j] = xran[(nzok0 - i)*dim+j];
+    }
+    n = nn;
+  }
+
+
+  {
+    int nz, nh = 0;/* the set to highlight */
+    real *xtemp;
+    if (HIGHLIGHT_SET){
+      fprintf(stderr," hightlight cluster %d, n = %d\n",HIGHLIGHT_SET, n);
+      xtemp = MALLOC(sizeof(real)*n*dim);
+      /* shift set to the beginning */
+      nz = 0;
+      for (i = 0; i < n; i++){
+       if (grouping[i] == HIGHLIGHT_SET){
+         nh++;
+         for (j = 0; j < dim; j++){
+           xtemp[nz++] = x[i*dim+j];
+         }
+       }
+      }
+      for (i = 0; i < n; i++){
+       if (grouping[i] != HIGHLIGHT_SET){
+         for (j = 0; j < dim; j++){
+           xtemp[nz++] = x[i*dim+j];
+         }
+       }
+      }
+      assert(nz == n*dim);
+      for (i = 0; i < nh; i++){
+       grouping[i] = 1;
+      }
+      for (i = nh; i < n; i++){
+       grouping[i] = 2;
+      }
+      MEMCPY(*xcombined, xtemp, n*dim*sizeof(real));
+      *nrandom = *nrandom + n - nh;/* count everything except cluster HIGHLIGHT_SET as random */
+      n = nh;
+      fprintf(stderr,"nh = %d\n",nh);
+      FREE(xtemp);
+    }
+  }
+
+  get_tri(n + *nrandom, dim2, *xcombined, &nt, &Tp, &E, flag);
+  get_polygons(exclude_random, n, *nrandom, dim2, graph, *xcombined, grouping, nt, Tp, E, nverts, x_poly, npolys, poly_lines, polys, polys_groups, 
+              poly_point_map, country_graph, flag);
+  /*
+  {
+    plot_voronoi(n + *nrandom, E, Tp);
+    printf("(*voronoi*),");
+    
+  }
+*/
+
+
+
+
+  SparseMatrix_delete(E);
+  FREE(Tp);
+  FREE(xran);
+  if (grouping != grouping0) FREE(grouping);
+  if (x != x0) FREE(x);
+  return 0;
+}
+
+
+int make_map_from_point_groups(int exclude_random, int include_OK_points,
+                              int n, int dim, real *x, int *grouping, SparseMatrix graph, real bounding_box_margin[], int *nrandom,
+                              real shore_depth_tol, real edge_bridge_tol, real **xcombined, int *nverts, real **x_poly, 
+                              int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map,
+                              SparseMatrix *country_graph, int *flag){
+
+  /* create a list of polygons from a list of points in 2D. Points belong to groups. Points in the same group that are also close 
+     gemetrically will be in the same polygon describing the outline of the group.
+
+     input: 
+     exclude_random:
+     include_OK_points: OK points are random points inserted and found to be within shore_depth_tol of real/artificial points,
+     .                  including them instead of throwing away increase realism of boundary 
+     n: number of points
+     dim: dimension of the points. If dim > 2, only the first 2D is used.
+     x: coordinates
+     grouping: which group each of the vertex belongs to
+     graph: the link structure between points. If graph == NULL, this is not used. otherwise
+     .      it is assumed that matrix is symmetric and the graph is undirected
+     bounding_box_margin: margins used to form the bounding box. Dimension 2.
+     .      if negative, it is taken as relative. i.e., -0.5 means a margin of 0.5*box_size
+     nrandom (inout): number of random points to insert in the bounding box to figure out lakes and seas.
+     .        If nrandom = 0, no points are inserted, if nrandom < 0, the number is decided automatically.
+     .        On exit, it is the actual number of random points used. The last 4 "random" points is always the
+     .        
+     shore_depth_tol: nrandom random points are inserted in the bounding box of the points,
+     .      such random points are then weeded out if it is within distance of shore_depth_tol from 
+     .      real points. If < 0, auto assigned
+     edge_bridge_tol: insert points on edges to give an bridge effect.These points will be evenly spaced
+     .       along each edge, and be less than a distance of edge_bridge_tol from each other and from the two ends of the edge.
+     .       If < 0, -edge_bridge_tol is the average number of points inserted per half edge
+     output:
+     xcombined: combined points which contains n + ncombined number of points, dimension 2x(n+nrandom)
+     npolys: number of polygons generated to reprsent the real points, the edge insertion points, and the sea/lake points.
+     nverts: number of vertices in the Voronoi diagram
+     x_poly: the 2D coordinates of these polygons
+     poly_lines: the sparse matrix representation of the polygon indices, as well as their identity. The matrix is of size
+     .       npolygons x nverts. The i-th polygon is formed by linking vertices with index in the i-th row of the sparse matrix.
+     .       Each row is of the form {{i,j1,m},...{i,jk,m},{i,j1,m},{i,l1,m+1},...}, where j1--j2--jk--j1 form one loop,
+     .       and l1 -- l2 -- ... form another. Each row can have more than 1 loop only when the connected region the polylines represent
+     .       has at least 1 holes.
+     polys: the sparse matrix representation of the polygon indices, as well as their identity. The matrix is of size
+     .       npolygons x nverts. The i-th polygon is formed by linking vertices with index in the i-th row of the sparse matrix.
+     .       Unlike poly_lines, here each row represent an one stroke drawing of the SOLID polygon, vertices
+     .       along this path may repeat
+     polys_groups: the group (color) each polygon belongs to, this include all groups of the real points,
+     .       plus the random point group and the bounding box group
+     poly_point_map: a matrix of dimension npolys x (n + nrandom), poly_point_map[i,j] != 0 if polygon i contains the point j.
+     .  If j < n, it is the original point, otherwise it is 
+     country_graph: shows which country is a neighbor of which country.
+     .     if country i and country j are neighbor, then the {i,j} entry is the total number of vertices that
+     .     belongs to i and j, and share an edge of the triangulation. In addition, {i,i} and {j,j} have values equal 
+     .     to the number of vertices in each of the countries. If the input "grouping" has negative or zero value, then
+     .     country_graph = NULL. 
+     
+  */
+  int res;
+  int nedgep = 0;
+  int highlight_cluster = FALSE;
+  /* get poly outlines */
+  res = make_map_internal(exclude_random, include_OK_points, n, dim, x, grouping, graph, bounding_box_margin, nrandom, nedgep,
+                 shore_depth_tol, edge_bridge_tol, xcombined, nverts, x_poly, 
+                         npolys, poly_lines, polys, polys_groups, poly_point_map, country_graph, highlight_cluster, flag);
+
+  printf("Show[{");
+
+  plot_points(n + *nrandom, dim, *xcombined);
+
+
+  printf(",");
+  plot_polys(TRUE, *poly_lines, *x_poly, *polys_groups, NULL, NULL, NULL);
+
+  printf("}]\n");
+
+  return res;
+}
+
+static void add_point(int *n, int igrp, real **x, int *nmax, real point[], int **groups){
+
+  if (*n >= *nmax){
+    *nmax = MAX((int) 0.2*(*n), 20) + *n;
+    *x = REALLOC(*x, sizeof(real)*2*(*nmax));
+    *groups = REALLOC(*groups, sizeof(int)*(*nmax));
+  }
+
+  (*x)[(*n)*2] = point[0];
+  (*x)[(*n)*2+1] = point[1];
+  (*groups)[*n] = igrp;
+  (*n)++;
+
+}
+
+static void get_boundingbox(int n, int dim, real *x, real *width, real *bbox){
+  int i;
+  bbox[0] = bbox[1] = x[0];
+  bbox[2] = bbox[3] = x[1];
+  
+  for (i = 0; i < n; i++){
+    bbox[0] = MIN(bbox[0], x[i*dim] - width[i*dim]);
+    bbox[1] = MAX(bbox[1], x[i*dim] + width[i*dim]);
+    bbox[2] = MIN(bbox[2], x[i*dim + 1] - width[i*dim+1]);
+    bbox[3] = MAX(bbox[3], x[i*dim + 1] + width[i*dim+1]);
+  }
+}
+
+
+int make_map_from_rectangle_groups(int exclude_random, int include_OK_points,
+                                  int n, int dim, real *x, real *sizes, 
+                                  int *grouping, SparseMatrix graph0, real bounding_box_margin[], int *nrandom, int *nart, int nedgep, 
+                                  real shore_depth_tol, real edge_bridge_tol,
+                                  real **xcombined, int *nverts, real **x_poly, 
+                                  int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map, 
+                                  SparseMatrix *country_graph, int highlight_cluster, int *flag){
+
+  /* create a list of polygons from a list of rectangles in 2D. rectangles belong to groups. rectangles in the same group that are also close 
+     gemetrically will be in the same polygon describing the outline of the group. The main difference for this function and
+     make_map_from_point_groups is that in this function, the input are points with width/heights, and we try not to place
+     "lakes" inside these rectangles. The is achieved approximately by adding artificial points along the perimeter of the rectangles,
+     as well as near the center.
+
+     input:
+     include_OK_points: OK points are random points inserted and found to be within shore_depth_tol of real/artificial points,
+     .                  including them instead of throwing away increase realism of boundary 
+     n: number of points
+     dim: dimension of the points. If dim > 2, only the first 2D is used.
+     x: coordinates
+     sizes: width and height
+     grouping: which group each of the vertex belongs to
+     graph: the link structure between points. If graph == NULL, this is not used. otherwise
+     .      it is assumed that matrix is symmetric and the graph is undirected
+     bounding_box_margin: margins used to form the bounding box. Dimension 2.
+     .      if negative, it is taken as relative. i.e., -0.5 means a margin of 0.5*box_size
+     nrandom (inout): number of random points to insert in the bounding box to figure out lakes and seas.
+     .        If nrandom = 0, no points are inserted, if nrandom < 0, the number is decided automatically.
+     .        On exit, it is the actual number of random points used. The last 4 "random" points is always the
+     .        
+     nart: on entry, number of artificla points to be added along rach side of a rectangle enclosing the labels
+     . On exit, actual number of artificial points added.
+     nedgep: number of artificial points are adding along edges to establish as much as possible a bright between nodes 
+     .       connected by the edge, and avoid islands that are connected. k = 0 mean no points.
+     shore_depth_tol: nrandom random points are inserted in the bounding box of the points,
+     .      such random points are then weeded out if it is within distance of shore_depth_tol from 
+     .      real points. If < 0, auto assigned
+     edge_bridge_tol: insert points on edges to give an bridge effect.These points will be evenly spaced
+     .       along each edge, and be less than a distance of edge_bridge_tol from each other and from the two ends of the edge.
+     .       If < 0, -edge_bridge_tol is the average number of points inserted per half edge
+
+     output:
+     xcombined: combined points which contains n + ncombined number of points, dimension 2x(n+nrandom)
+     npolys: number of polygons generated to reprsent the real points, the edge insertion points, and the sea/lake points.
+     nverts: number of vertices in the Voronoi diagram
+     x_poly: the 2D coordinates of these polygons, dimension nverts*2
+     poly_lines: the sparse matrix representation of the polygon indices, as well as their identity. The matrix is of size
+     .       npolygons x nverts. The i-th polygon is formed by linking vertices with index in the i-th row of the sparse matrix.
+     .       Each row is of the form {{i,j1,m},...{i,jk,m},{i,j1,m},{i,l1,m+1},...}, where j1--j2--jk--j1 form one loop,
+     .       and l1 -- l2 -- ... form another. Each row can have more than 1 loop only when the connected region the polylines represent
+     .       has at least 1 holes.
+     polys: the sparse matrix representation of the polygon indices, as well as their identity. The matrix is of size
+     .       npolygons x nverts. The i-th polygon is formed by linking vertices with index in the i-th row of the sparse matrix.
+     .       Unlike poly_lines, here each row represent an one stroke drawing of the SOLID polygon, vertices
+     .       along this path may repeat
+     polys_groups: the group (color) each polygon belongs to, this include all groups of the real points,
+     .       plus the random point group and the bounding box group
+     poly_point_map: a matrix of dimension npolys x (n + nrandom), poly_point_map[i,j] != 0 if polygon i contains the point j.
+     .  If j < n, it is the original point, otherwise it is artificial point (forming the rectangle around a label) or random points.
+    country_graph: shows which country is a neighbor of which country.
+     .     if country i and country j are neighbor, then the {i,j} entry is the total number of vertices that
+     .     belongs to i and j, and share an edge of the triangulation. In addition, {i,i} and {j,j} have values equal 
+     .     to the number of vertices in each of the countries. If the input "grouping" has negative or zero value, then
+     .     country_graph = NULL. 
+
+     
+  */
+
+  real *X;
+  int N, nmax, i, j, k, igrp;
+  int *groups, K = *nart;/* average number of points added per side of rectangle */
+
+  real avgsize[2],  avgsz, h[2], p1, p0;
+  real point[2];
+  int nadded[2];
+  int res;
+  real delta[2];
+  SparseMatrix graph = graph0;
+  real bbox[4];
+
+  *nart = 0;
+  if (Verbose){
+    int maxgp = grouping[0];
+    int mingp = grouping[0];
+    for (i = 0; i < n; i++) {
+      maxgp = MAX(maxgp, grouping[i]);
+      mingp = MIN(mingp, grouping[i]);
+    }
+    fprintf(stderr, "max grouping - min grouping + 1 = %d\n",maxgp - mingp + 1); 
+  }
+
+  if (!sizes){
+    return make_map_internal(exclude_random, include_OK_points, n, dim, x, grouping, graph, bounding_box_margin, nrandom, nedgep, 
+                           shore_depth_tol, edge_bridge_tol, xcombined, nverts, x_poly, 
+                            npolys, poly_lines, polys, polys_groups, poly_point_map, country_graph, highlight_cluster, flag);
+  } else {
+
+    /* add artificial node due to node sizes */
+    avgsize[0] = 0;
+    avgsize[1] = 0;
+    for (i = 0; i < n; i++){
+      for (j = 0; j < 2; j++) {
+       avgsize[j] += sizes[i*dim+j];
+      }
+    }
+    for (i = 0; i < 2; i++) avgsize[i] /= n;
+    avgsz = 0.5*(avgsize[0] + avgsize[1]);
+    if (Verbose) fprintf(stderr, "avgsize = {%f, %f}\n",avgsize[0], avgsize[1]);
+
+    nmax = 2*n;
+    X = MALLOC(sizeof(real)*dim*(n+nmax));
+    groups = MALLOC(sizeof(int)*(n+nmax));
+    for (i = 0; i < n; i++) {
+      groups[i] = grouping[i];
+      for (j = 0; j < 2; j++){
+       X[i*2+j] = x[i*dim+j];
+      }
+    }
+    N = n;
+
+    if (shore_depth_tol < 0) {
+      shore_depth_tol = -(shore_depth_tol)*avgsz;
+    } else if (shore_depth_tol == 0){
+      get_boundingbox(n, dim, x, sizes, bbox);
+      shore_depth_tol = MIN(bbox[1] - bbox[0], bbox[3] - bbox[2])*0.05;
+    } else {
+      /*
+      get_boundingbox(n, dim, x, sizes, bbox);
+      shore_depth_tol = MIN(bbox[1] - bbox[0], bbox[3] - bbox[2])*shore_depth_tol;
+      */
+
+    }
+
+    /* add artificial points in an anti-clockwise fashion */
+
+    if (K > 0){
+      delta[0] = .5*avgsize[0]/K; delta[1] = .5*avgsize[1]/K;/* small pertubation to make boundary between labels looks more fractal */
+    } else {
+      delta[0] = delta[1] = 0.;
+    }
+    for (i = 0; i < n; i++){
+      igrp = grouping[i];
+      for (j = 0; j < 2; j++) {
+       if (avgsz == 0){
+         nadded[j] = 0;
+       } else {
+         nadded[j] = (int) K*sizes[i*dim+j]/avgsz;
+       }
+      }
+
+      /*top: left to right */
+      if (nadded[0] > 0){
+       h[0] = sizes[i*dim]/nadded[0];
+       point[0] = x[i*dim] - sizes[i*dim]/2;
+       p1 = point[1] = x[i*dim+1] + sizes[i*dim + 1]/2;
+       add_point(&N, igrp, &X, &nmax, point, &groups);
+       for (k = 0; k < nadded[0] - 1; k++){
+         point[0] += h[0];
+         point[1] = p1 + (0.5-drand(0))*delta[1];
+         add_point(&N, igrp, &X, &nmax, point, &groups);
+       }
+       
+       /* bot: right to left */
+       point[0] = x[i*dim] + sizes[i*dim]/2;
+       p1 = point[1] = x[i*dim+1] - sizes[i*dim + 1]/2;
+       add_point(&N, igrp, &X, &nmax, point, &groups);
+       for (k = 0; k < nadded[0] - 1; k++){
+         point[0] -= h[0];
+         point[1] = p1 + (0.5-drand(0))*delta[1];
+         add_point(&N, igrp, &X, &nmax, point, &groups);
+       }
+      }
+
+      if (nadded[1] > 0){      
+       /* left: bot to top */
+       h[1] = sizes[i*dim + 1]/nadded[1];
+       p0 = point[0] = x[i*dim] - sizes[i*dim]/2;
+       point[1] = x[i*dim+1] - sizes[i*dim + 1]/2;
+       add_point(&N, igrp, &X, &nmax, point, &groups);
+       for (k = 0; k < nadded[1] - 1; k++){
+         point[0] = p0 + (0.5-drand(0))*delta[0];
+         point[1] += h[1];
+         add_point(&N, igrp, &X, &nmax, point, &groups);
+       }
+       
+       /* right: top to bot */
+       p0 = point[0] = x[i*dim] + sizes[i*dim]/2;
+       point[1] = x[i*dim+1] + sizes[i*dim + 1]/2;
+       add_point(&N, igrp, &X, &nmax, point, &groups);
+       for (k = 0; k < nadded[1] - 1; k++){
+         point[0] = p0 + (0.5-drand(0))*delta[0];
+         point[1] -= h[1];
+         add_point(&N, igrp, &X, &nmax, point, &groups);
+       }       
+      }
+      *nart = N - n;
+
+    }/* done adding artificial points due to node size*/
+
+
+    /* add artificial node due to edges */
+    if (graph && edge_bridge_tol != 0){
+      int *ia = graph->ia, *ja = graph->ja, nz = 0, jj;
+      int KB;
+
+      graph = SparseMatrix_symmetrize(graph, TRUE);
+      ia = graph->ia; ja = graph->ja;
+      real dist, avgdist = 0.;
+      for (i = 0; i < n; i++){
+       for (j = ia[i]; j < ia[i+1]; j++){
+         jj = ja[j];
+         if (jj <= i) continue;
+         dist = distance(x, dim, i, jj);
+         avgdist += dist;
+         nz++;
+       }
+      }
+      avgdist /= nz;
+      if (edge_bridge_tol < 0){
+       KB = (int) (-edge_bridge_tol);
+      } else {
+       KB = (int) (avgdist/edge_bridge_tol);
+      }
+
+      assert(avgdist > 0);
+      for (i = 0; i < n; i++){
+       for (j = ia[i]; j < ia[i+1]; j++){
+         jj = ja[j];
+         if (jj <= i) continue;
+         dist = distance(x, dim, i, jj);
+         nadded[0] = (int) 2*KB*dist/avgdist;
+
+         /* half the line segment near i */
+         h[0] = 0.5*(x[jj*dim] - x[i*dim])/nadded[0];
+         h[1] = 0.5*(x[jj*dim+1] - x[i*dim+1])/nadded[0];
+         point[0] = x[i*dim];
+         point[1] = x[i*dim+1];
+         for (k = 0; k < nadded[0] - 1; k++){
+           point[0] += h[0];
+           point[1] += h[1];
+           add_point(&N, grouping[i], &X, &nmax, point, &groups);
+         }     
+
+         /* half the line segment near jj */
+         h[0] = 0.5*(x[i*dim] - x[jj*dim])/nadded[0];
+         h[1] = 0.5*(x[i*dim+1] - x[jj*dim+1])/nadded[0];
+         point[0] = x[jj*dim];
+         point[1] = x[jj*dim+1];
+         for (k = 0; k < nadded[0] - 1; k++){
+           point[0] += h[0];
+           point[1] += h[1];
+           add_point(&N, grouping[jj], &X, &nmax, point, &groups);
+         }     
+       }
+
+      }/* done adding artifial points for edges */
+    }
+
+    res = make_map_internal(exclude_random, include_OK_points, N, dim, X, groups, graph, bounding_box_margin, nrandom, nedgep, 
+                           shore_depth_tol, edge_bridge_tol, xcombined, nverts, x_poly, 
+                           npolys, poly_lines, polys, polys_groups, poly_point_map, country_graph, highlight_cluster, flag);
+    if (graph != graph0) SparseMatrix_delete(graph);
+    FREE(groups); 
+    FREE(X);
+  }
+
+  return res;
+
+}
diff --git a/cmd/gvmap/make_map.h b/cmd/gvmap/make_map.h
new file mode 100644 (file)
index 0000000..180d7ef
--- /dev/null
@@ -0,0 +1,60 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef MAKE_MAP_H
+#define MAKE_MAP_H
+
+#include <SparseMatrix.h>
+#include <cgraph.h>
+
+int make_map_from_rectangle_groups(int exclude_random, int include_OK_points, int n, int dim, real *x, real *sizes, 
+                                  int *grouping, SparseMatrix graph, real bounding_box_margin[], int *nrandom,int *nart, int nedgep, 
+                                  real shore_depth_tol, real edge_bridge_tol, real **xcombined, int *nverts, real **x_poly, 
+                                  int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map, 
+                                  SparseMatrix *country_graph, int highlight_cluster, int *flag);
+
+int make_map_from_point_groups(int exclude_random, int include_OK_points, int n, int dim, real *x, int *grouping, SparseMatrix graph, real bounding_box_margin[], int *nrandom,
+                              real shore_depth_tol, real edge_bridge_tol, real **xcombined, int *nverts, real **x_poly, 
+                              int *npolys, SparseMatrix *poly_lines, SparseMatrix *polys, int **polys_groups, SparseMatrix *poly_point_map, 
+                              SparseMatrix *country_graph, int *flag);
+
+
+void improve_contiguity(int n, int dim, int *grouping, SparseMatrix poly_point_map, real *x, SparseMatrix graph, real *label_sizes);
+
+
+#if 0
+void plot_polys(int use_line, SparseMatrix polys, real *x_poly, int *polys_groups, float *r, float *g, float *b);
+void plot_points(int n, int dim, real *x);
+void plot_edges(int n, int dim, real *x, SparseMatrix A);
+void plot_labels(int n, int dim, real *x, char **labels);
+void plot_ps_map(int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, real *x_poly, int *polys_groups, char **labels, real *width,
+                float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A);
+#endif
+
+void plot_dot_map(Agraph_t* gr, int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, char *line_color, real *x_poly, int *polys_groups, char **labels, real *width, float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A, FILE*);
+
+#if 0
+void plot_processing_map(Agraph_t* gr, int n, int dim, real *x, SparseMatrix polys, SparseMatrix poly_lines, real line_width, int nverts, real *x_poly, int *polys_groups, char **labels, real *width, float *fsz, float *r, float *g, float *b, char *plot_label, real *bg_color, SparseMatrix A);
+#endif
+
+void map_optimal_coloring(int seed, SparseMatrix A, float *rgb_r,  float *rgb_g, float *rgb_b);
+
+enum {POLY_LINE_REAL_EDGE, POLY_LINE_NOT_REAL_EDGE};
+enum {OUT_PS = 1, OUT_M = 0, OUT_M_COUNTRY_GRAPH = 2, OUT_DOT = 3, OUT_PROCESSING = 4};
+#define neighbor(t, i, edim, elist) elist[(edim)*(t)+i]
+#define edge_head(e) edge_table[2*(e)]
+#define edge_tail(e) edge_table[2*(e)+1]
+#define cycle_prev(e) cycle[2*(e)]
+#define cycle_next(e) cycle[2*(e)+1]
+
+#endif
diff --git a/cmd/gvmap/mq.c b/cmd/gvmap/mq.c
new file mode 100644 (file)
index 0000000..e5e2140
--- /dev/null
@@ -0,0 +1,618 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+/* Modularity Quality definitation:
+
+   We assume undirected graph. Directed graph should be converted by summing edge weights.
+
+   Given a partition P of V into k clusters.
+
+   Let E(i,j) be the set of edges between cluster i and j.
+   Let |E(i,j)| be the sum of edge weights of edges in E(i,j).
+
+   Let E(i,i) be the set of edges within cluster i, but excluding self-edges.
+   Let |E(i,i)| be the sum of edge weights of edges in E(i,i).
+
+   Let V(i) be the sets of vertices in i
+
+   The intra-cluster edges concentration for a cluster i is 
+   (the denominator could be |V(i)|*(|V(i)-1)/2 strictly speaking as we exclude self-edges):
+
+     |E(i,i)|
+   -----------
+   (|V(i)|^2/2)
+
+   The inter-cluster edges concentration between cluster i and j is
+
+     |E(i,j)|
+   ------------
+   |V(i)|*|V(j)|
+
+   So the cluster index is defined as the average intra cluster edge concentration, minus
+   the inter-cluster edge concentration:
+
+   .                               |E(i,i)|                                        |E(i,j)|
+   MQ(P) = (1/k) * \sum_{i=1...k} ------------ - (1/(k*(k-1)/2)) * \sum_{i<j} ------------------- = mq_in/k - mq_out/(k*(k-1)/2)
+   .                              (|V(i)|^2/2)                                   |V(i)|*|V(j)|
+
+   or
+
+   .                                 |E(i,i)|                                     |E(i,j)|
+   MQ(P)/2 = (1/k) * \sum_{i=1...k} ------------ - (1/(k*(k-1))) * \sum_{i<j} ------------------ = mq_in/k - mq_out/(k*(k-1))
+   .                                |V(i)|^2                                   |V(i)|*|V(j)|
+
+   Notice that if we assume the graph is unweights (edge weights = 1), then 0<= MQ <= 1.
+   For weighted graph, MQ may not be within 0 to 1. We could normalized it, but 
+   for comparing clustering quality of the same graph but different partitioning, this 
+   unnormalized quantity is not a problem.
+
+*/
+
+#define STANDALONE
+#include "general.h"
+#include "SparseMatrix.h"
+#include "mq.h"
+#include "LinkedList.h"
+
+static real get_mq(SparseMatrix A, int *assignment, int *ncluster0, real *mq_in0, real *mq_out0, real **dout0){
+  /* given a symmetric matrix representation of a graph and an assignment of nodes into clusters, calculate the modularity quality.
+   assignment: assignmenet[i] gives the cluster assignment of node i. 0 <= assignment[i] < ncluster.
+   ncluster: number of clusters
+   mq_in: the part of MQ to do with intra-cluster edges, before divide by 1/k
+   mq_out: the part of MQ to do with inter-cluster edges, before divide by 1/(k*(k-1))
+   mq = 2*(mq_in/k - mq_out/(k*(k-1)));
+  */
+  int ncluster = 0;
+  int n = A->m;
+  int test_pattern_symmetry_only = FALSE;
+  int *counts, *ia = A->ia, *ja = A->ja, k, i, j, jj;
+  real mq_in = 0, mq_out = 0, *a = NULL, Vi, Vj;
+  int c;
+  real *dout;
+
+
+  assert(SparseMatrix_is_symmetric(A, test_pattern_symmetry_only));
+  assert(A->n == n);
+  if (A->type == MATRIX_TYPE_REAL) a = (real*) A->a;
+
+  counts = MALLOC(sizeof(int)*n);
+
+  for (i = 0; i < n; i++) counts[i] = 0;
+
+  for (i = 0; i < n; i++){
+    assert(assignment[i] >= 0 && assignment[i] < n);
+    if (counts[assignment[i]] == 0) ncluster++;
+    counts[assignment[i]]++;
+  }
+  k = ncluster;
+  assert(ncluster <= n);
+
+  for (i = 0; i < n; i++){
+    assert(assignment[i] < ncluster);
+    c = assignment[i];
+    Vi = counts[c];
+    for (j = ia[i] ; j < ia[i+1]; j++){
+      /* ASSUME UNDIRECTED */
+      jj = ja[j];
+      if (jj >= i) continue;
+      assert(assignment[jj] < ncluster);
+      Vj = counts[assignment[jj]];
+      if (assignment[jj] == c){
+       if (a) {
+         mq_in += a[j]/(Vi*Vi);
+       } else {
+         mq_in += 1./(Vi*Vi);
+       }
+      } else {
+       if (a) {
+         mq_out += a[j]/(Vi*Vj);
+       } else {
+         mq_out += 1./(Vi*Vj);
+       }
+      }
+      
+    }
+  }
+
+  /* calculate scaled out degree */
+  dout = MALLOC(sizeof(real)*n);
+  for (i = 0; i < n; i++){
+    dout[i] = 0;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj == i) continue;
+      if (a){
+       dout[i] += a[j]/(real) counts[assignment[jj]];
+      } else {
+       dout[i] += 1./(real) counts[assignment[jj]];
+      }
+    }
+  }
+
+  *ncluster0 = k;
+  *mq_in0 = mq_in;
+  *mq_out0 = mq_out;
+  *dout0 = dout;
+  FREE(counts);
+
+  if (k > 1){
+    return 2*(mq_in/k - mq_out/(k*(k-1)));
+  } else {
+    return 2*mq_in;
+  }
+}
+
+Multilevel_MQ_Clustering Multilevel_MQ_Clustering_init(SparseMatrix A, int level){
+  Multilevel_MQ_Clustering grid;
+  int n = A->n, i;
+  int *matching;
+
+  assert(A->type == MATRIX_TYPE_REAL);
+  assert(SparseMatrix_is_symmetric(A, FALSE));
+
+  if (!A) return NULL;
+  assert(A->m == n);
+  grid = MALLOC(sizeof(struct Multilevel_MQ_Clustering_struct));
+  grid->level = level;
+  grid->n = n;
+  grid->A = A;
+  grid->P = NULL;
+  grid->R = NULL;
+  grid->next = NULL;
+  grid->prev = NULL;
+  grid->delete_top_level_A = FALSE;
+  matching = grid->matching = MALLOC(sizeof(real)*(n));
+  grid->deg_intra = NULL;
+  grid->dout = NULL;
+  grid->wgt = NULL;
+
+  if (level == 0){
+    real mq = 0, mq_in, mq_out;
+    int n = A->n, ncluster;
+    real *deg_intra, *wgt, *dout;
+
+    grid->deg_intra = MALLOC(sizeof(real)*(n));
+    deg_intra = grid->deg_intra;
+
+    grid->wgt = MALLOC(sizeof(real)*n);
+    wgt = grid->wgt;
+
+    for (i = 0; i < n; i++){
+      deg_intra[i] = 0;
+      wgt[i] = 1.;
+    }
+    for (i = 0; i < n; i++) matching[i] = i;
+    mq = get_mq(A, matching, &ncluster, &mq_in, &mq_out, &dout);
+    fprintf(stderr,"ncluster = %d, mq = %f\n", ncluster, mq);
+    grid->mq = mq;
+    grid->mq_in = mq_in;
+    grid->mq_out = mq_out;
+    grid->dout = dout;
+    grid->ncluster = ncluster;
+
+  }
+
+
+  return grid;
+} 
+
+void Multilevel_MQ_Clustering_delete(Multilevel_MQ_Clustering grid){
+  if (!grid) return;
+  if (grid->A){
+    if (grid->level == 0) {
+      if (grid->delete_top_level_A) SparseMatrix_delete(grid->A);
+    } else {
+      SparseMatrix_delete(grid->A);
+    }
+  }
+  SparseMatrix_delete(grid->P);
+  SparseMatrix_delete(grid->R);
+  FREE(grid->matching);
+  FREE(grid->deg_intra);
+  FREE(grid->dout);
+  FREE(grid->wgt);
+  Multilevel_MQ_Clustering_delete(grid->next);
+  FREE(grid);
+}
+
+Multilevel_MQ_Clustering Multilevel_MQ_Clustering_establish(Multilevel_MQ_Clustering grid, int maxcluster){
+  int *matching = grid->matching;
+  SparseMatrix A = grid->A;
+  int n = grid->n, level = grid->level, nc = 0, nclusters = n;
+  real mq = 0, mq_in = 0, mq_out = 0, mq_new, mq_in_new, mq_out_new, mq_max = 0, mq_in_max = 0, mq_out_max = 0;
+  int *ia = A->ia, *ja = A->ja;
+  real *a, amax = 0;
+  real *deg_intra = grid->deg_intra, *wgt = grid->wgt;
+  real *deg_intra_new, *wgt_new = NULL;
+  int i, j, k, jj, jc, jmax;
+  real *deg_inter, gain = 0, *dout = grid->dout, *dout_new, deg_in_i, deg_in_j, wgt_i, wgt_j, a_ij, dout_i, dout_j, dout_max = 0, wgt_jmax = 0;
+  int *mask;
+  real maxgain = 0;
+  real total_gain = 0;
+  SingleLinkedList *neighbors = NULL, lst;
+
+
+  neighbors = MALLOC(sizeof(SingleLinkedList)*n);
+  for (i = 0; i < n; i++) neighbors[i] = NULL;
+
+  mq = grid->mq;
+  mq_in = grid->mq_in;
+  mq_out = grid->mq_out;
+
+  deg_intra_new = MALLOC(sizeof(real)*n);
+  wgt_new = MALLOC(sizeof(real)*n);
+  deg_inter = MALLOC(sizeof(real)*n);
+  mask = MALLOC(sizeof(int)*n);
+  dout_new = MALLOC(sizeof(real)*n);
+  for (i = 0; i < n; i++) mask[i] = -1;
+
+  assert(n == A->n);
+  for (i = 0; i < n; i++) matching[i] = UNMATCHED;
+
+  /* gain in merging node A into cluster B is
+     mq_in_new = mq_in - |E(A,A)|/(V(A))^2 - |E(B,B)|/(V(B))^2 + (|E(A,A)|+|E(B,B)|+|E(A,B)|)/(|V(A)|+|V(B)|)^2
+     .         = mq_in - deg_intra(A)/|A|^2 - deg_intra(B)/|B|^2 + (deg_intra(A)+deg_intra(B)+a(A,B))/(|A|+|B|)^2
+
+     mq_out_new = mq_out - |E(A,B)|/(|V(A)|*V(B)|)-\sum_{C and A connected, C!=B} |E(A,C)|/(|V(A)|*|V(C)|)-\sum_{C and B connected,C!=B} |E(B,C)|/(|V(B)|*|V(C)|)
+     .                  + \sum_{C connected to A or B, C!=A, C!=B} (|E(A,C)|+|E(B,C)|)/(|V(C)|*(|V(A)|+|V(B)|)
+     .          = mq_out + a(A,B)/(|A|*|B|)-\sum_{C and A connected} a(A,C)/(|A|*|C|)-\sum_{C and B connected} a(B,C)/(|B|*|C|)
+     .                  + \sum_{C connected to A or B, C!=A, C!=B} (a(A,C)+a(B,C))/(|C|*(|A|+|B|))
+     Denote:
+     dout(i) = \sum_{j -- i} a(i,j)/|j|
+     then
+
+     mq_out_new = mq_out - |E(A,B)|/(|V(A)|*V(B)|)-\sum_{C and A connected, C!=B} |E(A,C)|/(|V(A)|*|V(C)|)-\sum_{C and B connected,C!=B} |E(B,C)|/(|V(B)|*|V(C)|)
+     .                  + \sum_{C connected to A or B, C!=A, C!=B} (|E(A,C)|+|E(B,C)|)/(|V(C)|*(|V(A)|+|V(B)|)
+     .          = mq_out + a(A,B)/(|A|*|B|)-dout(A)/|A| - dout(B)/|B|
+     .                  + (dout(A)+dout(B))/(|A|+|B|) - (a(A,B)/|A|+a(A,B)/|B|)/(|A|+|B|)
+     .          = mq_out -dout(A)/|A| - dout(B)/|B| + (dout(A)+dout(B))/(|A|+|B|)
+     after merging A and B into cluster AB,
+     dout(AB) = dout(A) + dout(B);
+     dout(C) := dout(C) - a(A,C)/|A| - a(B,C)/|B| + a(A,C)/(|A|+|B|) + a(B, C)/(|A|+|B|) 
+
+     mq_new = mq_in_new/(k-1) - mq_out_new/((k-1)*(k-2))
+     gain = mq_new - mq
+  */
+  a = (real*) A->a;
+  for (i = 0; i < n; i++){
+    if (matching[i] != UNMATCHED) continue;
+    /* accumulate connections between i and clusters */
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj == i) continue;
+      if ((jc=matching[jj]) != UNMATCHED){
+       if (mask[jc] != i) {
+         mask[jc] = i;
+         deg_inter[jc] = a[j];
+       } else {
+         deg_inter[jc] += a[j];
+       }
+      }
+    }
+    deg_in_i = deg_intra[i];
+    wgt_i = wgt[i];
+    dout_i = dout[i];
+
+    maxgain = 0; 
+    jmax = -1;
+    for (j = ia[i]; j < ia[i+1]; j++){
+      jj = ja[j];
+      if (jj == i) continue;
+      jc = matching[jj];
+      if (jc == UNMATCHED){
+       a_ij = a[j];
+       wgt_j = wgt[jj];
+       deg_in_j = deg_intra[jj];
+       dout_j = dout[jj];
+      } else if (deg_inter[jc] < 0){
+       continue;
+      } else {
+       a_ij = deg_inter[jc];
+       wgt_j = wgt_new[jc];
+       deg_inter[jc] = -1; /* so that we do not redo the calulation when we hit another neighbor in cluster jc */
+       deg_in_j = deg_intra_new[jc];
+       dout_j = dout_new[jc];
+      }
+
+      mq_in_new = mq_in - deg_in_i/pow(wgt_i, 2) - deg_in_j/pow(wgt_j,2) 
+       + (deg_in_i + deg_in_j + a_ij)/pow(wgt_i + wgt_j,2);
+
+      mq_out_new = mq_out - dout_i/wgt_i - dout_j/wgt_j + (dout_i + dout_j)/(wgt_i + wgt_j);
+
+      if (nclusters > 2){
+       mq_new =  2*(mq_in_new/(nclusters - 1) - mq_out_new/((nclusters - 1)*(nclusters - 2)));
+      } else {
+       mq_new =  2*mq_in_new/(nclusters - 1);
+      }
+
+#ifdef DEBUG
+      {int ncluster;
+       double mq2, mq_in2, mq_out2, *dout2;
+       int *matching2, nc2 = nc;
+       matching2 = MALLOC(sizeof(int)*A->m);
+       matching2 = MEMCPY(matching2, matching, sizeof(real)*A->m);
+       if (jc != UNMATCHED) {
+         matching2[i] = jc;
+       } else {
+         matching2[i] = nc2;
+         matching2[jj] = nc2;
+         nc2++;
+       }
+       for (k = 0; k < n; k++) if (matching2[k] == UNMATCHED) matching2[k] =nc2++;
+       mq2 = get_mq(A, matching2, &ncluster, &mq_in2, &mq_out2, &dout2);
+       fprintf(stderr," {dout_i, dout_j}={%f,%f}, {predicted, calculated}: mq = {%f, %f}, mq_in ={%f,%f}, mq_out = {%f,%f}\n",dout_i, dout_j, mq_new, mq2, mq_in_new, mq_in2, mq_out_new, mq_out2);
+
+       mq_new = mq2;
+       
+      }
+#endif
+
+      gain = mq_new - mq;
+      if (Verbose) fprintf(stderr,"gain in merging node %d with node %d = %f-%f = %f\n", i, jj, mq, mq_new, gain);
+      if (j == ia[i] || gain > maxgain){
+       maxgain = gain;
+       jmax = jj;
+       amax = a_ij;
+       dout_max = dout_j;
+       wgt_jmax = wgt_j;
+       mq_max = mq_new;
+       mq_in_max = mq_in_new;
+       mq_out_max = mq_out_new;
+      }
+
+    }
+
+    /* now merge i and jmax */
+    if (maxgain > 0 || (nc >= 1 && nc > maxcluster)){
+      total_gain += maxgain;
+      jc = matching[jmax];
+      if (jc == UNMATCHED){
+       fprintf(stderr, "maxgain=%f, merge %d, %d\n",maxgain, i, jmax);
+       neighbors[nc] = SingleLinkedList_new_int(jmax);
+       neighbors[nc] = SingleLinkedList_prepend_int(neighbors[nc], i);
+       dout_new[nc] = dout_i + dout_max;
+       matching[i] = matching[jmax] = nc;
+       wgt_new[nc] = wgt[i] + wgt[jmax];
+       deg_intra_new[nc] = deg_intra[i] + deg_intra[jmax] + amax;
+       nc++;
+      } else { 
+       fprintf(stderr,"maxgain=%f, merge with existing cluster %d, %d\n",maxgain, i, jc);
+       neighbors[jc] = SingleLinkedList_prepend_int(neighbors[jc], i);
+       dout_new[jc] = dout_i + dout_max;
+       wgt_new[jc] += wgt[i];
+       matching[i] = jc;
+       deg_intra_new[jc] += deg_intra[i] + amax;
+      }
+      mq = mq_max;
+      mq_in = mq_in_max;
+      mq_out = mq_out_max;
+      nclusters--;
+    } else {
+      fprintf(stderr,"gain: %f -- no gain, skip merging node %d\n", maxgain, i);
+      assert(maxgain <= 0);
+      neighbors[nc] = SingleLinkedList_new_int(i);
+      matching[i] = nc;
+      deg_intra_new[nc] = deg_intra[i];
+      wgt_new[nc] = wgt[i];
+      nc++;
+    }
+
+
+    /* update scaled outdegree of neighbors of i and its merged node/cluster jmax */
+    jc = matching[i];
+    lst = neighbors[jc];
+    do {
+      mask[*((int*) SingleLinkedList_get_data(lst))] = n+i;
+      lst = SingleLinkedList_get_next(lst);
+    } while (lst);
+
+    lst = neighbors[jc];
+
+    do {
+      k = *((int*) SingleLinkedList_get_data(lst));
+      for (j = ia[k]; j < ia[k+1]; j++){
+       jj = ja[j]; 
+       if (mask[jj] == n+i) continue;/* link to within cluster */
+       if ((jc = matching[jj]) == UNMATCHED){
+         if (k == i){
+           dout[jj] += -a[j]/wgt_i + a[j]/(wgt_i + wgt_jmax);
+         } else {
+           dout[jj] += -a[j]/wgt_jmax + a[j]/(wgt_i + wgt_jmax);
+         }
+       } else {
+         if (k == i){
+           dout_new[jc] += -a[j]/wgt_i + a[j]/(wgt_i + wgt_jmax);
+         } else {
+           dout_new[jc] += -a[j]/wgt_jmax + a[j]/(wgt_i + wgt_jmax);
+         }
+       }
+      }
+      lst = SingleLinkedList_get_next(lst);
+    } while (lst);
+
+  }
+
+  fprintf(stderr,"verbose=%d\n",Verbose);
+  if (Verbose) fprintf(stderr,"mq = %f new mq = %f level = %d, n = %d, nc = %d, gain = %g, mq_in = %f, mq_out = %f\n", mq, mq + total_gain, 
+                      level, n, nc, total_gain, mq_in, mq_out);
+  
+#ifdef DEBUG
+  {int ncluster;
+
+  mq = get_mq(A, matching, &ncluster, &mq_in, &mq_out, &dout);
+  fprintf(stderr," mq = %f\n",mq);
+
+  }
+#endif
+
+  if (nc >= 1 && (total_gain > 0 || nc < n)){
+    /* now set up restriction and prolongation operator */
+    SparseMatrix P, R, R0, B, cA;
+    real one = 1.;
+    Multilevel_MQ_Clustering cgrid;
+
+    R0 = SparseMatrix_new(nc, n, 1, MATRIX_TYPE_REAL, FORMAT_COORD);
+    for (i = 0; i < n; i++){
+      jj = matching[i];
+      SparseMatrix_coordinate_form_add_entries(R0, 1, &jj, &i, &one);
+    }
+    R = SparseMatrix_from_coordinate_format(R0);
+    SparseMatrix_delete(R0);
+    P = SparseMatrix_transpose(R);
+    B = SparseMatrix_multiply(R, A);
+    if (!B) goto RETURN;
+    cA = SparseMatrix_multiply(B, P); 
+    if (!cA) goto RETURN;
+    SparseMatrix_delete(B);
+    grid->P = P;
+    grid->R = R;
+    level++;
+    cgrid = Multilevel_MQ_Clustering_init(cA, level); 
+    deg_intra_new = REALLOC(deg_intra_new, nc*sizeof(real));
+    wgt_new = REALLOC(wgt_new, nc*sizeof(real));
+    cgrid->deg_intra = deg_intra_new;
+    cgrid->mq = grid->mq + total_gain;
+    cgrid->wgt = wgt_new;
+    dout_new =  REALLOC(dout_new, nc*sizeof(real));
+    cgrid->dout = dout_new;
+
+    cgrid = Multilevel_MQ_Clustering_establish(cgrid, maxcluster);
+
+    grid->next = cgrid;
+    cgrid->prev = grid;
+  } else {
+    /* no more improvement, stop and final clustering found */
+    for (i = 0; i < n; i++) matching[i] = i;
+
+    FREE(deg_intra_new);
+    FREE(wgt_new);
+    FREE(dout_new);
+  }
+
+ RETURN:
+  for (i = 0; i < n; i++) SingleLinkedList_delete(neighbors[i], free);
+  FREE(neighbors);
+
+  FREE(deg_inter);
+  FREE(mask);
+  return grid;
+}
+
+Multilevel_MQ_Clustering Multilevel_MQ_Clustering_new(SparseMatrix A0, int maxcluster){
+  /* maxcluster is used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 */
+  Multilevel_MQ_Clustering grid;
+  SparseMatrix A = A0;
+
+  if (maxcluster <= 0) maxcluster = A->m;
+  if (!SparseMatrix_is_symmetric(A, FALSE) || A->type != MATRIX_TYPE_REAL){
+    A = SparseMatrix_get_real_adjacency_matrix_symmetrized(A);
+  }
+  grid = Multilevel_MQ_Clustering_init(A, 0);
+
+  grid = Multilevel_MQ_Clustering_establish(grid, maxcluster);
+
+  if (A != A0) grid->delete_top_level_A = TRUE;/* be sure to clean up later */
+  return grid;
+}
+
+
+static void hierachical_mq_clustering(SparseMatrix A, int maxcluster,
+                                             int *nclusters, int **assignment, real *mq, int *flag){
+  /* find a clustering of vertices by maximize mq
+     A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+     maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     .   is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 
+     nclusters: on output the number of clusters
+     assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters
+   */
+
+  Multilevel_MQ_Clustering grid, cgrid;
+  int *matching, i;
+  SparseMatrix P;
+  real *u;
+  assert(A->m == A->n);
+
+  *mq = 0.;
+
+  *flag = 0;
+
+  grid = Multilevel_MQ_Clustering_new(A, maxcluster);
+
+  /* find coarsest */
+  cgrid = grid;
+  while (cgrid->next){
+    cgrid = cgrid->next;
+  }
+
+  /* project clustering up */
+  u =  MALLOC(sizeof(real)*cgrid->n);
+  for (i = 0; i < cgrid->n; i++) u[i] = (real) (cgrid->matching)[i];
+  *nclusters = cgrid->n;
+  *mq = cgrid->mq;
+
+  while (cgrid->prev){
+    real *v = NULL;
+    P = cgrid->prev->P;
+    SparseMatrix_multiply_vector(P, u, &v, FALSE);
+    FREE(u);
+    u = v;
+    cgrid = cgrid->prev;
+  }
+
+  if (*assignment){
+    matching = *assignment; 
+  } else {
+    matching = MALLOC(sizeof(int)*(grid->n));
+    *assignment = matching;
+  }
+  for (i = 0; i < grid->n; i++) (matching)[i] = (int) u[i];
+  FREE(u);
+
+  Multilevel_MQ_Clustering_delete(grid);
+  
+}
+
+
+
+void mq_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value,
+                          int *nclusters, int **assignment, real *mq, int *flag){
+  /* find a clustering of vertices by maximize mq
+     A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+     inplace: whether A can e modified. If true, A will be modified by removing diagonal.
+     maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+     .   is desired. this may not always be realized, and mq may be low when this is specified. Default: maxcluster = 0 
+     nclusters: on output the number of clusters
+     assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters
+   */
+  SparseMatrix B;
+
+  *flag = 0;
+  
+  assert(A->m == A->n);
+
+  B = SparseMatrix_symmetrize(A, FALSE);
+
+  if (!inplace && B == A) {
+    B = SparseMatrix_copy(A);
+  }
+
+  B = SparseMatrix_remove_diagonal(B);
+
+  if (B->type != MATRIX_TYPE_REAL || !use_value) B = SparseMatrix_set_entries_to_real_one(B);
+
+  hierachical_mq_clustering(B, maxcluster, nclusters, assignment, mq, flag);
+
+  if (B != A) SparseMatrix_delete(B);
+
+}
diff --git a/cmd/gvmap/mq.h b/cmd/gvmap/mq.h
new file mode 100644 (file)
index 0000000..b2cfcdf
--- /dev/null
@@ -0,0 +1,63 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef MG_H
+#define MG_H
+
+typedef struct Multilevel_MQ_Clustering_struct *Multilevel_MQ_Clustering;
+
+struct Multilevel_MQ_Clustering_struct {
+  int level;/* 0, 1, ... */
+  int n;
+  SparseMatrix A; /* n x n matrix */
+  SparseMatrix P; 
+  SparseMatrix R; 
+  Multilevel_MQ_Clustering next;
+  Multilevel_MQ_Clustering prev;
+  int delete_top_level_A;
+  int *matching; /* dimension n. matching[i] is the clustering assignment of node i */
+
+  /*
+
+   .                                 |E(i,i)|                                     |E(i,j)|
+   MQ/2 = (1/k) * \sum_{i=1...k} ------------ - (1/(k*(k-1))) * \sum_{i<j} -------------------  
+   .                                |V(i)|^2                                   |V(i)|*|V(j)|
+   .   = mq_in/k - mq_out/(k*(k-1))
+  */
+
+  real mq;
+  real mq_in, mq_out;/* mqs(A) = deg_in(A)/|A|^2 - deg_out(A)/|A|/(|V|-|A|) */
+  int ncluster; /* number of clusters */
+
+  real *deg_intra;/* dimension n. deg[i] equal to the sum of edge weights within cluster i */
+  real *dout;/* dimension n, dout[i] = \sum_{j -- i} a(i,j)/|j| is the scaled sum of outdegree */
+  real *wgt; /* total vertex weight each coarse grid vertex represent */
+};
+
+/* find a clustering of vertices by maximize modularity quality
+   A: symmetric square matrix n x n. If real value, value will be used as edges weights, otherwise edge weights are considered as 1.
+   inplace: whether A can e modified. If true, A will be modified by removing diagonal.
+
+   maxcluster: used to specify the maximum number of cluster desired, e.g., maxcluster=10 means that a maximum of 10 clusters
+   .   is desired. this may not always be realized, and modularity quality may be low when this is specified. Default: maxcluster = 0 (no limit)
+
+   use_value: whether to use the entry value, or treat edge weights as 1.
+   nclusters: on output the number of clusters
+   assignment: dimension n. Node i is assigned to cluster "assignment[i]". 0 <= assignment < nclusters.
+   .   If *assignment = NULL on entry, it will be allocated. Otherwise used.
+   mq: achieve modularity
+*/
+void mq_clustering(SparseMatrix A, int inplace, int maxcluster, int use_value,
+                          int *nclusters, int **assignment, real *mq, int *flag);
+
+#endif
diff --git a/cmd/gvmap/power.c b/cmd/gvmap/power.c
new file mode 100644 (file)
index 0000000..897bf03
--- /dev/null
@@ -0,0 +1,101 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#include "SparseMatrix.h"
+/* #include "matrix_market.h" */
+void power_method(SparseMatrix A, int random_seed, int maxit, real tol, real **eigv){
+  /* find the largest eigenvector of a matrix A. Result in eigv. if eigv == NULL; memory will be allocated.
+     maxium of maxit iterations will be done, and tol is the convergence criterion
+
+     This converges only if the largest eigenvector/value is real and the next largest eigenvalue separate from teh largest one
+
+   */
+  int n;
+  real *v, *u;
+  int iter = 0;
+  real res, unorm;
+  int i;
+  assert(A->m == A->n);
+  assert(A->type = MATRIX_TYPE_REAL || A->type == MATRIX_TYPE_INTEGER);
+
+  n = A->m;
+  if (!(*eigv)) *eigv = MALLOC(sizeof(real)*n);
+  u = MALLOC(sizeof(real)*n);
+
+  srand(random_seed);
+
+  for (i = 0; i < n; i++) (*eigv)[i] = drand();
+
+  res = vector_product(n, *eigv, *eigv);
+  if (res > 0) res =  1/res;
+  for (i = 0; i < n; i++) (*eigv)[i] = (*eigv)[i]*res;
+  
+  v = *eigv;
+  
+  do {
+    SparseMatrix_multiply_vector(A, v, &u, FALSE);
+
+    unorm = vector_product(n, u, u);/* ||u||^2 */
+    unorm = sqrt(unorm);
+    if (unorm > 0) unorm = 1/unorm;
+    res = 0.;
+    for (i = 0; i < n; i++) {
+      u[i] = u[i]*unorm;
+      res = res + (u[i] - v[i])*(u[i] - v[i]);
+      v[i] = u[i];
+    }
+   
+    /* 
+    printf("=== %d === %f\n",iter,res);
+    printf("{");
+    {int j;
+      for (j = 0; j < MIN(10,n); j++){
+      if (j == n-1){
+       printf("%f",v[j]);
+      } else {
+       printf("%f,",v[j]);
+      }
+    }
+    printf("\n");
+    }
+    */
+
+  } while (res/n > tol*tol && iter++ < maxit);
+  
+  
+}
+
+/*
+main(){
+  real *v = NULL;
+  int i;
+  int n;
+
+  SparseMatrix A;
+
+  A = SparseMatrix_import_matrix_market(stdin, FORMAT_CSR);
+  n = A->m;
+  
+  power_method(A, 123, 100, 0.00001, &v);
+
+  printf("{");
+  for (i = 0; i < n; i++){
+    if (i == n-1){
+      printf("%f",v[i]);
+    } else {
+      printf("%f,",v[i]);
+    }
+  }
+  printf("}\n");
+}
+*/
diff --git a/cmd/gvmap/power.h b/cmd/gvmap/power.h
new file mode 100644 (file)
index 0000000..1854928
--- /dev/null
@@ -0,0 +1,19 @@
+/* $Id$Revision: */
+/* vim:set shiftwidth=4 ts=8: */
+
+/*************************************************************************
+ * Copyright (c) 2011 AT&T Intellectual Property 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: See CVS logs. Details at http://www.graphviz.org/
+ *************************************************************************/
+
+#ifndef POWER_H
+#define POWER_H
+
+void power_method(SparseMatrix A, int random_seed, int maxit, real tol, real **eigv);
+
+#endif