Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_bad_level_calls.h3
-rw-r--r--source/blender/blenkernel/BKE_global.h18
-rw-r--r--source/blender/blenkernel/bad_level_call_stubs/stubs.c2
-rw-r--r--source/blender/blenkernel/intern/blender.c2
-rw-r--r--source/blender/blenkernel/intern/exotic.c39
-rw-r--r--source/blender/blenkernel/intern/scene.c4
-rw-r--r--source/blender/blenlib/BLI_editVert.h38
-rw-r--r--source/blender/blenloader/intern/readfile.c8
-rw-r--r--source/blender/blenloader/intern/writefile.c1
-rw-r--r--source/blender/include/BDR_drawobject.h3
-rw-r--r--source/blender/include/BDR_editcurve.h2
-rw-r--r--source/blender/include/BIF_editmesh.h24
-rw-r--r--source/blender/include/BIF_editmode_undo.h55
-rw-r--r--source/blender/include/BIF_resources.h14
-rw-r--r--source/blender/include/blendef.h11
-rw-r--r--source/blender/include/editmesh.h11
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h2
-rw-r--r--source/blender/makesdna/DNA_scene_types.h11
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h9
-rw-r--r--source/blender/src/SConscript1
-rw-r--r--source/blender/src/blenderbuttons.c2762
-rw-r--r--source/blender/src/buttons_editing.c19
-rw-r--r--source/blender/src/drawobject.c251
-rw-r--r--source/blender/src/edit.c20
-rw-r--r--source/blender/src/editcurve.c262
-rw-r--r--source/blender/src/editmesh.c859
-rw-r--r--source/blender/src/editmesh_add.c156
-rw-r--r--source/blender/src/editmesh_lib.c697
-rw-r--r--source/blender/src/editmesh_loop.c67
-rw-r--r--source/blender/src/editmesh_mods.c1899
-rw-r--r--source/blender/src/editmesh_tools.c375
-rw-r--r--source/blender/src/editmode_undo.c329
-rw-r--r--source/blender/src/editobject.c69
-rw-r--r--source/blender/src/editview.c105
-rw-r--r--source/blender/src/header_view3d.c90
-rw-r--r--source/blender/src/interface.c4
-rw-r--r--source/blender/src/resources.c16
-rw-r--r--source/blender/src/space.c45
-rw-r--r--source/blender/src/toets.c14
-rw-r--r--source/blender/src/usiblender.c14
40 files changed, 4795 insertions, 3516 deletions
diff --git a/source/blender/blenkernel/BKE_bad_level_calls.h b/source/blender/blenkernel/BKE_bad_level_calls.h
index 45d590487c6..40d14fa09d6 100644
--- a/source/blender/blenkernel/BKE_bad_level_calls.h
+++ b/source/blender/blenkernel/BKE_bad_level_calls.h
@@ -87,7 +87,8 @@ void RE_jitterate2(float *jit1, float *jit2, int num, float rad2);
/* exotic.c */
void load_editMesh(void);
void make_editMesh(void);
-void free_editMesh(void);
+struct EditMesh;
+void free_editMesh(struct EditMesh *);
void free_editArmature(void);
void docentre_new(void);
int saveover(char *str);
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index d54b6232c6a..0196d8bc391 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -63,16 +63,6 @@ struct bSoundListener;
struct BMF_Font;
struct EditMesh;
-#define UNDO_MAX 64
-#define UNDO_EDIT_MAX 64
-
-typedef struct UndoBufferEdit {
-
- void *datablock;
- char name[64];
-
-} UndoBufferEdit;
-
typedef struct Global {
@@ -153,14 +143,6 @@ typedef struct Global {
short special1, special2;
int flags;
-
- /* editmode undo - written by intrr, ported by Det. Thorn */
- struct UndoBufferEdit undo_edit[UNDO_EDIT_MAX+1];/* need one more for undoing first undo */
- int undo_edit_level; /* index of last undo buffer created */
- int undo_edit_highest; /* index of highest undo buffer in use */
- void *undo_last_data; /* pointer to last datablock edited */
- void (*undo_clear)(void); /* pointer to function to free the undo data */
-
} Global;
diff --git a/source/blender/blenkernel/bad_level_call_stubs/stubs.c b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
index ada7692b014..bb15cb29d5e 100644
--- a/source/blender/blenkernel/bad_level_call_stubs/stubs.c
+++ b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
@@ -117,7 +117,7 @@ void RE_jitterate2(float *jit1, float *jit2, int num, float rad2){}
/* exotic.c */
void load_editMesh(void){}
void make_editMesh(void){}
-void free_editMesh(void){}
+void free_editMesh(struct EditMesh *em){}
void docentre_new(void){}
int saveover(char *str){ return 0;}
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index c0be3d71ec2..0d70d29c100 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -241,7 +241,7 @@ static void clear_global(void)
if (G.obedit) {
freeNurblist(&editNurb);
- free_editMesh();
+ free_editMesh(G.editMesh);
free_editText();
free_editArmature();
}
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index 5348aea6e2a..72a2310dca6 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -307,13 +307,7 @@ static void read_stl_mesh_binary(char *str)
me->totvert = totvert;
mesh_add_normals_flags(me);
- /*
- G.obedit= ob;
- make_editMesh();
- load_editMesh();
- free_editMesh();
- G.obedit= 0;
- */
+
tex_space_mesh(me);
}
waitcursor(1);
@@ -479,13 +473,7 @@ static void read_stl_mesh_ascii(char *str)
free(vertdata);
mesh_add_normals_flags(me);
- /*
- G.obedit= ob;
- make_editMesh();
- load_editMesh();
- free_editMesh();
- G.obedit= 0;
- */
+
tex_space_mesh(me);
waitcursor(1);
}
@@ -707,7 +695,7 @@ static void read_videoscape_mesh(char *str)
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
G.obedit= 0;
tex_space_mesh(me);
waitcursor(1);
@@ -892,7 +880,7 @@ static void read_radiogour(char *str)
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
G.obedit= 0;
tex_space_mesh(me);
@@ -2273,13 +2261,6 @@ static void displist_to_mesh(DispList *dlfirst)
dl= dl->next;
}
- //G.obedit= ob;
- //make_editMesh();
- //load_editMesh();
- //free_editMesh();
-
- //G.obedit= 0;
-
mesh_add_normals_flags(me);
tex_space_mesh(me);
@@ -3764,7 +3745,7 @@ static void dxf_read_point(int noob) {
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
@@ -3789,7 +3770,7 @@ static void dxf_close_line(void)
G.obedit= linehold;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
@@ -3938,7 +3919,7 @@ static void dxf_close_2dpoly(void)
G.obedit= p2dhold;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
@@ -4219,7 +4200,7 @@ static void dxf_read_polyline(int noob) {
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
}
@@ -4241,7 +4222,7 @@ static void dxf_close_3dface(void)
G.obedit= f3dhold;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
tex_space_mesh(f3dhold->data);
@@ -4614,7 +4595,7 @@ static void dxf_read(char *filename)
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
waitcursor(1); /* patch yah... */
G.obedit= 0;
tex_space_mesh(ob->data);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 7cf90e92673..7a751f2d720 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -128,7 +128,6 @@ void free_scene(Scene *sce)
BLI_freelistN(&sce->base);
free_editing(sce->ed);
if(sce->radio) MEM_freeN(sce->radio);
- if(sce->fcam) MEM_freeN(sce->fcam);
sce->radio= 0;
BPY_free_scriptlink(&sce->scriptlink);
@@ -150,7 +149,8 @@ Scene *add_scene(char *name)
sce= alloc_libblock(&G.main->scene, ID_SCE, name);
sce->lay= 1;
-
+ sce->selectmode= SCE_SELECT_VERTEX;
+
sce->r.mode= R_GAMMA;
sce->r.cfra= 1;
sce->r.sfra= 1;
diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h
index 05670ccc69c..0ff57f8cde7 100644
--- a/source/blender/blenlib/BLI_editVert.h
+++ b/source/blender/blenlib/BLI_editVert.h
@@ -44,23 +44,30 @@ typedef struct EditVert
float no[3];
float co[3];
short xs, ys;
- unsigned char f, h, f1, hash;
- int totweight; /* __NLA */
+ unsigned char f, h, f1, f2;
+ short fast; /* only 0 or 1, for editmesh_fastmalloc */
+ short totweight; /* __NLA */
+ int hash;
struct MDeformWeight *dw; /* __NLA */
- int keyindex; /* lets hold on to this so that maybe we can have a hope
- * of restoring any key information if the number/order
- * of verts change.
- */
-
+ int keyindex; /* original index #, for restoring key information */
} EditVert;
+struct EditEdge;
+
+typedef struct HashEdge {
+ struct EditEdge *eed;
+ struct HashEdge *next;
+} HashEdge;
+
typedef struct EditEdge
{
struct EditEdge *next, *prev;
struct EditVert *v1, *v2, *vn;
- short f, f1;
- unsigned char h, dir, seam;
+ short f1, f2; /* short, f1 is (ab)used in subdiv */
+ unsigned char f, h, dir, seam;
float crease;
+ int fast; /* only 0 or 1, for editmesh_fastmalloc */
+ HashEdge hash;
} EditEdge;
typedef struct EditFace
@@ -68,15 +75,24 @@ typedef struct EditFace
struct EditFace *next, *prev;
struct EditVert *v1, *v2, *v3, *v4;
struct EditEdge *e1, *e2, *e3, *e4;
- float n[3];
+ float n[3], cent[3];
+ short xs, ys; /* selection */
struct TFace tf; /* a copy of original tface. */
unsigned char mat_nr, flag;
- unsigned char f, f1;
+ unsigned char f, f1, h, puno;
+ short fast; /* only 0 or 1, for editmesh_fastmalloc */
} EditFace;
typedef struct EditMesh
{
ListBase verts, edges, faces;
+ HashEdge *hashedgetab;
+
+ /* this is for the editmesh_fastmalloc */
+ EditVert *allverts, *curvert;
+ EditEdge *alledges, *curedge;
+ EditFace *allfaces, *curface;
+
} EditMesh;
#endif
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 697f281a948..f6e5ecb4820 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2439,7 +2439,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->basact= newdataadr(fd, sce->basact);
sce->radio= newdataadr(fd, sce->radio);
- sce->fcam= newdataadr(fd, sce->fcam);
sce->r.avicodecdata = newdataadr(fd, sce->r.avicodecdata);
if (sce->r.avicodecdata) {
@@ -4471,6 +4470,13 @@ static void do_versions(Main *main)
}
}
}
+ if(main->versionfile <= 234) {
+ Scene *sce;
+
+ for (sce= main->scene.first; sce; sce= sce->id.next) {
+ if(sce->selectmode==0) sce->selectmode= SCE_SELECT_VERTEX;
+ }
+ }
/* don't forget to set version number in blender.c! */
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 0bb8d378978..558caea7ba7 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1078,7 +1078,6 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
}
writestruct(wd, DATA, "Radio", 1, sce->radio);
- writestruct(wd, DATA, "FreeCamera", 1, sce->fcam);
ed= sce->ed;
if(ed) {
diff --git a/source/blender/include/BDR_drawobject.h b/source/blender/include/BDR_drawobject.h
index 9733cb71a20..6cdcefd23ce 100644
--- a/source/blender/include/BDR_drawobject.h
+++ b/source/blender/include/BDR_drawobject.h
@@ -49,12 +49,13 @@ void init_draw_rects(void);
void helpline(float *vec);
void drawaxes(float size);
void drawcamera(struct Object *ob);
+
+void calc_mesh_facedots_ext(void);
void calc_lattverts_ext(void);
void calc_meshverts(void);
void calc_meshverts_ext(void);
void calc_meshverts_ext_f2(void);
void calc_nurbverts_ext(void);
-void tekenvertices(short sel);
void drawcircball(float *cent, float rad, float tmat[][4]);
void get_local_bounds(struct Object *ob, float *centre, float *size);
void draw_object(struct Base *base);
diff --git a/source/blender/include/BDR_editcurve.h b/source/blender/include/BDR_editcurve.h
index 839bf4c6802..18f2c1f9984 100644
--- a/source/blender/include/BDR_editcurve.h
+++ b/source/blender/include/BDR_editcurve.h
@@ -93,8 +93,6 @@ int bezt_compare (const void *e1, const void *e2);
void curve_changes_other_objects(struct Object *ob);
extern void undo_push_curve(char *name);
-extern void undo_clear_curve(void);
-
#endif /* BDR_EDITCURVE_H */
diff --git a/source/blender/include/BIF_editmesh.h b/source/blender/include/BIF_editmesh.h
index a40c09f4bfe..fe11e0b684e 100644
--- a/source/blender/include/BIF_editmesh.h
+++ b/source/blender/include/BIF_editmesh.h
@@ -35,6 +35,7 @@
#ifndef BIF_EDITMESH_H
#define BIF_EDITMESH_H
+struct EditMesh;
struct EditFace;
struct EditEdge;
struct EditVert;
@@ -45,16 +46,11 @@ struct View3D;
/* ******************* editmesh.c */
extern void make_editMesh(void);
extern void load_editMesh(void);
-extern void free_editMesh(void);
+extern void free_editMesh(struct EditMesh *);
extern void remake_editMesh(void);
/* Editmesh Undo code */
-void undo_free_mesh(struct Mesh *me);
-void undo_push_mesh(char *name);
-void undo_pop_mesh(int steps);
-void undo_redo_mesh(void);
-void undo_clear_mesh(void);
-void undo_menu_mesh(void);
+extern void undo_push_mesh(char *name);
extern void separatemenu(void);
extern void separate_mesh(void);
@@ -67,6 +63,20 @@ extern void addvert_mesh(void);
extern void addedgeface_mesh(void);
/* ******************* editmesh_lib.c */
+
+extern void EM_set_flag_all(int flag);
+extern void EM_clear_flag_all(int flag);
+
+extern void EM_select_face(struct EditFace *efa, int sel);
+extern void EM_select_edge(struct EditEdge *eed, int sel);
+
+extern void EM_select_flush(void); // vertices to edges/faces (exception!)
+extern void EM_selectmode_set(void); // when mode changes
+extern void EM_selectmode_flush(void); // when selection changes
+
+extern int EM_nfaces_selected(void);
+extern int EM_nvertices_selected(void);
+
extern int faceselectedAND(struct EditFace *efa, int flag);
extern void recalc_editnormals(void);
extern void flip_editnormals(void);
diff --git a/source/blender/include/BIF_editmode_undo.h b/source/blender/include/BIF_editmode_undo.h
new file mode 100644
index 00000000000..f0f95fb3e77
--- /dev/null
+++ b/source/blender/include/BIF_editmode_undo.h
@@ -0,0 +1,55 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+
+#ifndef BIF_EDITMODE_UNDO_H
+#define BIF_EDITMODE_UNDO_H
+
+// Add this in your local code:
+
+extern void undo_editmode_push(char *name,
+ void (*freedata)(void *), // pointer to function freeing data
+ void (*to_editmode)(void *), // data to editmode conversion
+ void *(*from_editmode)(void)); // editmode to data conversion
+
+
+// Further exported for UI is:
+
+struct uiBlock;
+
+extern void undo_editmode_step(int step); // undo and redo
+extern void undo_editmode_clear(void); // free & clear all data
+extern void undo_editmode_menu(void); // history menu
+extern struct uiBlock *editmode_undohistorymenu(void *arg_unused);
+
+#endif
+
diff --git a/source/blender/include/BIF_resources.h b/source/blender/include/BIF_resources.h
index d5efcf85d80..7c2e8bffcc3 100644
--- a/source/blender/include/BIF_resources.h
+++ b/source/blender/include/BIF_resources.h
@@ -161,9 +161,9 @@ typedef enum {
ICON_GHOST,
ICON_SHARPCURVE,
ICON_SMOOTHCURVE,
- ICON_BLANK23,
- ICON_BLANK24,
- ICON_BLANK25,
+ ICON_VERTEXSEL,
+ ICON_EDGESEL,
+ ICON_FACESEL,
ICON_BLANK26,
ICON_BPIBFOLDER_X,
ICON_BPIBFOLDERGREY,
@@ -328,6 +328,7 @@ typedef enum {
} BIFColorID;
+/* XXX WARNING: this is saved in file, so do not change order! */
enum {
TH_AUTO, /* for buttons, to signal automatic color assignment */
@@ -381,8 +382,13 @@ enum {
TH_EDGE_FACESEL,
TH_FACE,
TH_FACE_SELECT,
- TH_NORMAL
+ TH_NORMAL,
+ TH_FACE_DOT,
+ TH_FACEDOT_SIZE,
+
};
+/* XXX WARNING: previous is saved in file, so do not change order! */
+
/* specific defines per space should have higher define values */
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index 0528a1914b8..ba62238bb17 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -232,22 +232,25 @@
#define B_AUTOKEY 139
#define B_SCENELOCK 140
#define B_LOCALVIEW 141
-#define B_U_CAPSLOCK 142
+#define B_U_CAPSLOCK 142
#define B_EDITMODE 143
#define B_VPAINT 144
#define B_FACESEL 145
#define B_VIEWBUT 146
#define B_PERSP 147
#define B_PROPTOOL 148
-#define B_VIEWRENDER 149
+#define B_VIEWRENDER 149
#define B_VIEWTRANS 150
#define B_VIEWZOOM 151
#define B_STARTGAME 152
#define B_POSEMODE 153
-#define B_TEXTUREPAINT 154
+#define B_TEXTUREPAINT 154
#define B_WPAINT 155
-#define B_MODESELECT 156
+#define B_MODESELECT 156
#define B_AROUND 157
+#define B_SEL_VERT 158
+#define B_SEL_EDGE 159
+#define B_SEL_FACE 160
/* IPO: 200 */
#define B_IPOHOME 201
diff --git a/source/blender/include/editmesh.h b/source/blender/include/editmesh.h
index d7cd45948c4..bb69b033cb7 100644
--- a/source/blender/include/editmesh.h
+++ b/source/blender/include/editmesh.h
@@ -58,12 +58,9 @@ extern struct EditFace *addfacelist(struct EditVert *v1, struct EditVert *v2, st
extern struct EditEdge *findedgelist(struct EditVert *v1, struct EditVert *v2);
/* ******************* editmesh_add.c */
-extern void adduplicateflag(int flag);
/* ******************* editmesh_lib.c */
-extern int editmesh_nfaces_selected(void);
-extern int editmesh_nvertices_selected(void);
extern int faceselectedOR(EditFace *efa, int flag);
extern int faceselectedAND(EditFace *efa, int flag);
@@ -72,15 +69,19 @@ extern int exist_face(EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4);
extern void flipface(EditFace *efa); // flips for normal direction
extern int compareface(EditFace *vl1, EditFace *vl2);
+extern short extrudeflag_vert(short flag);
+extern short extrudeflag(short flag);
+
+extern void adduplicateflag(int flag);
extern void delfaceflag(int flag);
-extern short extrudeflag(short flag,short type);
+
extern void rotateflag(short flag, float *cent, float rotmat[][3]);
extern void translateflag(short flag, float *vec);
extern float convex(float *v1, float *v2, float *v3, float *v4);
/* ******************* editmesh_mods.c */
-extern EditEdge *findnearestedge();
+extern EditEdge *findnearestedge(short *dist);
/* ******************* editmesh_tools.c */
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index f0ac467afb2..426c06366ca 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -99,6 +99,8 @@ typedef struct MSticky {
/* flag (mface) */
#define ME_SMOOTH 1
+#define ME_FACE_SEL 2
+ /* flag ME_HIDE is used here too */
#endif
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 6400077b0af..b4448b5e3ef 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -47,7 +47,6 @@ extern "C" {
#include "DNA_ID.h"
#include "DNA_scriptlink_types.h"
-struct FreeCamera;
struct Radio;
struct Object;
struct World;
@@ -250,10 +249,9 @@ typedef struct Scene {
float cursor[3];
unsigned int lay;
+ short selectmode, pad;
+ int pad1;
- /* some realtime vars */
- struct FreeCamera *fcam; /* old, can be removed (ton) */
-
void *ed;
struct Radio *radio;
void *sumohandle;
@@ -365,6 +363,11 @@ typedef struct Scene {
/* sce->flag */
#define SCE_ADDSCENAME 1
+/* sce->selectmode */
+#define SCE_SELECT_VERTEX 1
+#define SCE_SELECT_EDGE 2
+#define SCE_SELECT_FACE 4
+
/* return flag next_object function */
#define F_START 0
#define F_SCENE 1
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 6f589cd9fed..7d35bbb7873 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -63,7 +63,7 @@ typedef struct ThemeUI {
} ThemeUI;
-// try to put them all in one, if needed a spacial struct can be created as well
+// try to put them all in one, if needed a special struct can be created as well
// for example later on, when we introduce wire colors for ob types or so...
typedef struct ThemeSpace {
char back[4];
@@ -83,11 +83,12 @@ typedef struct ThemeSpace {
char vertex[4], vertex_select[4];
char edge[4], edge_select[4];
char edge_seam[4], edge_facesel[4];
- char face[4], face_select[4];
+ char face[4], face_select[4]; // solid faces
+ char face_dot[4]; // selected color
char normal[4];
- char vertex_size, pad;
- short pad1[3];
+ char vertex_size, facedot_size;
+ char pad1[2];
} ThemeSpace;
diff --git a/source/blender/src/SConscript b/source/blender/src/SConscript
index 3926894c16d..8460a5cb750 100644
--- a/source/blender/src/SConscript
+++ b/source/blender/src/SConscript
@@ -56,6 +56,7 @@ source_files = ['B.blend.c',
'editmesh_loop.c',
'editmesh_mods.c',
'editmesh_tools.c',
+ 'editmode_undo.c',
'editnla.c',
'editobject.c',
'editoops.c',
diff --git a/source/blender/src/blenderbuttons.c b/source/blender/src/blenderbuttons.c
index 4403e3713e7..8af5c9f0b77 100644
--- a/source/blender/src/blenderbuttons.c
+++ b/source/blender/src/blenderbuttons.c
@@ -1,1335 +1,1435 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 42551;
+int datatoc_blenderbuttons_size= 45738;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,190, 0, 0, 0,
-242, 8, 6, 0, 0, 0, 50, 96,160, 74, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0,
- 0, 0, 7,116, 73, 77, 69, 7,212, 7, 16, 21, 58, 53,206,181, 4,215, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,157,121,120,
- 20, 85,214,198,127,213, 75, 58, 43, 89,216, 9,178, 36, 18, 80, 89,130, 65,217,101, 11,200,176,168, 8, 1, 21, 71,157, 81, 73,
- 20, 70, 17, 81,112,148, 81,199, 13,252, 4, 81,113, 76,240,115, 6,253,212, 17, 2,174,136, 32, 65, 97, 0, 5,101, 71,144, 4,
- 8, 16, 8, 91,200,158,222,187,171,190, 63, 58,213,116, 58,157,222,210, 64,116,234,125,158,134,174,234,202,233,219, 85,247,222,
-247,190,231,158,123,174, 48,238,238,121, 18, 10, 20, 40, 80,160, 64,193,127, 9, 84,202, 45, 80,160, 64,129, 2, 5, 10,241, 41,
- 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2,
- 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,
-160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5,
- 0,104,124, 93,176,250,195, 23,234, 28,143,187,123, 94, 72,190, 88,182,219, 88,123,161, 46,159,187,189, 80,254,230,198,252,110,
- 79,229, 10, 69,249, 66,117,255,188,149, 47,148,118,155,122,125, 81,218,135,210, 62,148,246,113,233,219,199, 37, 85,124,158, 30,
-150,175, 7,232,203,158,252, 10, 69, 3,185, 20,229, 11,166,210,134,170,242, 95,110, 52,116,255,154, 74, 57, 47,199,243,109,106,
-246,148,246,161,180, 15,165,125, 52, 1,197,231,202,210, 77,173, 98,122, 26, 65,200, 21, 51,216, 17,163, 39,123, 77,169, 81, 95,
-138, 17,147,171,205, 96,203,217, 80,185,130,181,231,250,119,211,230,204, 7, 96,233,130,185,206,207,130,125,190,178,173,198,218,
-115,133,123,249,148,246,161,180, 15,165,125, 52,237,246,161, 10,164,162, 55,150, 0,199,221, 61,207,249, 10, 69,101,108, 42,178,
- 57,152, 74,213, 84,202,228,126, 15, 67,121, 95, 67,225,174,115,189,103,161,190,127,141,177,231,233,153,202,239,149,246,161,180,
- 15,165,125,132,190,125, 92,118,197,247,223, 0, 79,149, 47, 20, 21, 51,212,141,186,169,250,204, 47,197,189, 83,160,180, 15,165,
-125, 40,184,172,138,239,183, 6, 87,223,123, 40, 38,100,127, 43, 21, 51,148,243, 65, 77,201,149, 45,223,119, 87,247,136,252, 94,
-233, 44,148,246,161,180, 15,165,125,252,215, 43, 62,215, 10, 25,234,135,222, 24,255,246,165,112,225,120,154,111, 8, 69, 25, 67,
-241,123, 47,213,104, 54, 20,115, 3,227,238,158,199,234, 15, 95,104,146,243,112, 74,251, 80,218,135,210, 62, 20,197,119,197, 27,
-181,187, 31, 63,152,145, 94,168, 27,181,167,185,133, 80,206, 5,185,218,111,106, 65, 76,211,230,204, 15,201,125,188, 20,247, 79,
-105, 31,191,239,246, 33,215, 61,215, 58,168,180, 15, 69,241,253,110, 71,178,174,163,160, 75, 49, 26, 11,197,200,177, 41, 63,147,
- 80,141,138,221, 39,199,151, 46,152,219,168,123,247,223,228, 6, 82,218,135,210, 62,148,246,241, 59, 83,124,161,110,212, 77,205,
-135,255, 91, 43,159, 2,165,125, 40,237, 67,193,111,158,248, 60,185,189,154,226,132,246,165, 44, 75, 99, 26,146,187, 11,209,221,
- 21, 19,170,206,168, 41,216,184,148,240, 52,121, 31,170,142,177, 49,245,249,183, 18, 92,160,180,143,208,213, 63,165,125,252,126,
-218,135,230,114, 85,160,203,221,248, 2,189,185,178,219,230, 82,167,100,186, 20,191, 55,216,138,233, 58,249, 31,138,223, 27,202,
-129,145,107,249,220, 27,116, 40, 83, 80,133,186,243, 81,218,199,239,175,125,132,170,254, 41,237,163,233, 64, 24,119,247, 60, 73,
- 17,190, 10, 20, 40, 80,160,224,191, 5,202,238, 12, 10, 20, 40, 80,160, 64, 33, 62, 5, 10, 20, 40, 80,160, 64, 33, 62, 5, 10,
- 20, 40, 80,160, 64, 33, 62, 5, 10, 20, 40, 80,160, 64, 33, 62, 5, 10, 20, 40, 80,160, 64, 33, 62, 5, 10, 20, 40, 80,160, 64,
- 33, 62, 5, 10, 20, 40, 80,160, 64, 33, 62, 5, 10, 20, 40, 80,160,224,210,161, 78,230,150,241,131,219, 7,109,232,171,205,167,
-234,157,243,100,239,216,129, 31, 65,101,162,109,251, 68,170,141,122,202, 75,245,164, 92, 51, 40,104,123, 91,118, 29, 5, 81,199,
-185,226, 98,162, 34,162,136, 79,136,162,111,159,206, 65,219, 11,245,239, 45, 62,157, 75, 88,184, 13, 93,184, 6,181, 70,141, 29,
-129,102, 97, 19,130,182, 23,151,144, 70,124,124, 60, 17, 17, 17, 32, 8, 28,220,255,165,223,229,139, 72, 60, 20,244,239, 53, 22,
-119,171,119,174, 93,228,185,160,237,157, 54,180,174,111,207, 28,124,249, 78,235,234,151, 47,209,146, 31,180,189,226,176,174,191,
- 57,123,215,121,121,190, 11, 22,228, 50,103, 78, 70,131,159, 31,240,240,124, 35,218, 91,130,175, 47,167,194,234,215,231,196,224,
-235,203, 87,197,245,235,139,201, 28, 21,180,189,112,157,190,254,119,220,178, 36,104,123,227,191,156, 81,239,220,227,103,179,131,
-182,183,176, 77,214, 21,233,175,154,146,189,203, 70,124, 13,225,193,141,179, 16,134,221,203, 82,169, 87,192, 95, 80,248,203,183,
- 8,136, 68,235, 34,248, 87,206,199,188,255,254, 27, 12, 76, 31,136, 77,111,224,218,110, 55, 33,138, 48,253, 73, 59,215, 94,219,
-149, 35, 71, 78, 96, 50,218,136,105, 59,176, 65,123, 91,119,159, 71, 66,160,198,108, 36,115,214,139, 60,255,230,205,156, 62,176,
- 19, 8,103,205,222, 83,168, 84,240,198,115,207, 80, 80,144, 79,167, 78, 29,209, 69,104,104, 30,175,107,208,222,175, 95,125,131,
- 78,167, 35, 50, 50,146,152,152, 24,226,226,226,104,158,208,156,132,132,120, 98, 99,227,136,142,138, 66,173,209, 32,138,118,140,
- 70, 35,213, 85,213,236, 49, 84,250,252,221, 71, 10,150,163, 11, 55, 18, 29, 19, 78,120,164, 14, 77,152, 26, 65, 37,160,210,168,
-145,212,223, 98,181, 9,132,217, 70,250,125, 31,143, 21,169,104,209,162, 5,225, 81, 38,204,102, 19, 42,181, 10, 65,128,118, 87,
- 13,166,162,162, 28, 67,245, 47, 87,108,244,180,116,233, 82,166, 77,155,166, 12, 35,155, 0,124, 17, 92, 99,175, 7,104, 19, 17,
- 73,113,113, 49,218,112, 29, 98,100,100,147,187, 7,134,178, 61,252,176,225,147,122,231,211, 51,230,255,110,158,243,255,125,240,
- 1,186,176, 48, 68, 81, 36, 42, 58,154,241,183,220,162, 84,254, 80, 19, 31,128,180,225,125,166,141, 8,140,252, 50,110,185, 26,
-243,240, 4,172, 53, 21,104,236, 42,110,236,217,158,123,239,125,212,249,185, 74, 5,219,126, 92, 70,139, 14,137,136, 53, 85, 12,
-233,219,131,211,167,203,201,219,109,243,104, 47, 51,243,101, 8,139, 69,136,108,134,164,150,216,123,240, 79,252,243,147,117,206,
-207, 69, 17, 70,247,239, 15, 53,103,129, 24,142,238,255, 21,109,139, 56, 6,246,235, 78,116, 92,171, 6,203, 41, 32, 32, 8, 2,
- 42, 65,133, 90,165, 70,163, 81,163,209,106,209,106,181,104,180, 90, 52, 26, 13, 54,155,128, 74,165, 70, 16, 4,159,191,123,239,
-238,165,196,198,106,136,137,142,166,101,171,230, 68,199, 68, 98,151,236,152,204, 70,172,118, 59,145,209,145,180,108,213, 22,187,
-120,156,147,135, 58,121,181,181,118,125, 1, 49, 49,209,196,197,197, 99, 48, 68, 96, 48, 68, 18, 30,174, 67,168,117, 82, 27,141,
- 70, 12, 6, 3, 23,202,155,113,225,194, 5, 74, 47,156, 99, 96,255,171,188,218,204, 93,144,235,247, 51, 76,191, 47,157,248,214,
-241, 94, 73,239,114,144,223, 95,255,231,127, 0,120,249,137, 39, 66, 98,239,169, 87, 95, 5,224,149, 39,159, 12,218,198, 47,197,
-197, 20, 20, 20, 0,112,251,176, 97, 65,217,200, 89,177,194, 81, 7, 93,234,149, 36, 73, 8,130,224,252, 95, 62, 39, 95, 55, 45,
-163, 97,162,154, 51, 39,195,111, 50, 11,148,244, 58,199, 39, 96,180,152, 1, 8,139, 8,199, 98, 52, 33,234, 13, 92, 56,123,134,
-182, 61,122,248,101,163,109,114, 74, 64,247, 39,182,227, 53, 28,250,238,139,128,254,230,135, 13,159, 48, 40,253, 14,194,227, 83,
- 3,127, 32, 25,101, 1, 93, 62,121,242,100, 86,100,228,121,189,102, 88, 94, 73,157,227,107,227, 28,221,238,121,147,136,209,230,
-120,174,250,218,255,115,250,198,145, 18,163,245,106,239,181,215, 94,227,175, 51,103,115,235,237, 19, 48,153,140,188,241,250, 34,
-150, 44, 89,194,140, 25, 51, 20, 70, 11, 37,241,189, 59,116, 17, 19,183,189,132,248,195,215, 76, 27,128,223,228,103,174, 41,163,
-205,213, 35,120,241,137,219, 89,150,179,209,121,126,211, 15,217,232, 13,102,198,164, 63,202,128,129,247,113,199,228,225, 68, 68,
-232,176,216,109, 84, 27, 44,164,244,187,171, 1,139, 39,192, 2,183, 79,125,135, 7,103, 93,116, 5,140, 30, 48,148,240,112, 29,
-159,127,183,142, 53, 91,127,228,131,127,253, 3,147,209, 76,152, 90, 67,116,100, 24,205,194,236, 28, 41, 58,235,153,208, 37,144,
-144, 92,254,175,125, 47, 58,222,139,146,136,221,110,199,110,183, 99,179,217,176,217,108, 94,127,243,246, 31,151,210,170,165,154,
-152,152, 40,174,186,170, 3, 93,175,233, 66,116,116, 36,101, 21,165,156, 62,123,134,146,210, 11,136, 54,137,168,200, 40,186,166,
- 92, 75,108, 92, 17,191,108,139,246,104,235,203,207,127, 2,141, 14,163, 70, 69,152, 46, 12,131, 33, 28,131, 33,194, 65,124,130,
- 4, 8, 24, 12, 6, 12,134, 26, 12, 6, 61,250,154, 42, 74, 75, 78,243,225,178, 93,196, 38,167,121, 45,231,255,124,240, 63, 62,
-159,223, 19,247,120, 39,153,242,242,242,122,199, 9, 9, 9,206, 78, 59, 62, 62,158,163, 71,143,146,155,155,219, 40, 82, 12,107,
-125,209,205, 85, 14,196,135, 82,173,230,230, 50,125,250,116,172,231,207, 7, 76,122,173, 90,181,226,246, 81,163,176,234,116, 44,
- 92,184,144,137,195,135, 59, 9,202, 95, 8,130,192,107,207, 61,119,209, 61,246,236,179, 44,124,254,121,175,199,190,224, 78,126,
- 11, 22,228,146,150,150, 70, 94, 94, 33,233,233, 73, 65,145, 94,183, 54,109,137,107,214,204, 73,194, 81,225, 17,156, 41, 57, 79,
- 85,121, 5,209,113,241,156,248,121, 7, 29,111,232,227,151,173, 91,166,205,230,238,137,227,233,210,233,226,160,239,217,133,111,
-213,185,230,249,199,255, 2, 64,209, 55, 27,184, 49,229,170,192, 93,153,193,144,158,115,100,152, 16,192,197,233, 1,153,142,210,
- 8,236,125,254,126,132,102, 45,176, 23,238,197, 92,120,128,130, 50, 61,125,190,241,175,254,101,231,228, 48, 43,115, 58,247, 60,
-240,103,114, 63,250,132, 78,157, 58,241,226,130, 87,137,121,238, 69, 62,255,252,115,110,187,237,182,223, 53, 97,133, 42,161,190,
- 71,226,155,118,248, 31, 46,204, 0, 8, 32,137, 53, 96, 49, 99,221,248, 49,211,134, 18,128,242, 11,227,218,107,186,162, 82,109,
-164,160,162, 20,248,149,202,226,195,104,195,117,124,241,245,155, 24, 46,216,153,250,167,199, 16, 69,184,101,124,127,236,154,104,
-159, 22, 11, 10,126, 69, 20, 97, 76, 47, 1,104, 7,116,196,100,182, 48,105,244, 40,194,227, 84,124,240,241, 90, 84, 42, 88,249,
-201, 50,212,182,106,174,233,168,227, 72, 81, 3, 74, 86,146, 16, 69, 17, 81,116, 16,156,205,110,195, 98,181, 96, 54,155, 49,154,
-140, 14, 37,168, 82, 97,179, 89, 29, 36, 99, 52,122, 13, 9,138,109, 38,161,213,106, 73, 72,104,206,213,201, 93, 72,185,186, 27,
- 42,181,128,205, 46,114,190,164, 12,179,201,138, 93,212, 83,114,238, 2,237, 19,141,116,235,210,141, 93,187, 63, 7,218,212,179,
-165, 83, 73, 72,162, 17,171,193,134, 94, 13,225,186, 48,194,195,117,104,181, 26, 68,209,134, 32, 8,232, 13, 6,206,159, 59,205,
-129,125, 59, 40, 61,127, 26, 81,180,163, 18,130,139, 89,250,231, 59,255,116,190,255,243, 67,127,246,221, 63,228,230,214, 59,158,
- 53,107, 22, 69, 69, 69, 8,130, 64, 78, 78, 78, 72, 42,251,219,111,191,205,185,115,231, 88,185,114, 37, 99,111,186,137,248, 86,
-173, 26,109,243,149, 39,159,164,188,246,249, 47, 89,226,152,219,201,156, 60,217,239,191, 47, 40, 40,224,246, 81,163, 28, 53, 60,
- 44,140,148,148, 20, 86,125,247, 93,192,234, 47, 80,162,244, 23,115,230,100,144,151, 87,200,206,157, 59, 1,234,252,159,145,145,
- 17, 16,233,165,180,106, 77, 92,179,102,168, 85, 42, 30,190,123, 42, 70,147,153,133,239,189, 71,100, 68, 4, 38,147, 9,147,209,
-136, 74,163,230,228,238,221, 92,213,187,183, 79,123, 50,169, 29, 62,126,188,222,185, 80,160,239,240, 59,200,203,157,203,200, 91,
-238, 71,210,117, 9,202,134, 48,249,226,160, 78, 90, 17,239,243,188, 47, 92, 27,167,225, 68,141,157, 77, 35, 91,162,125, 52,135,
-170,169,157,209,196,183, 10,136,244, 54,108,216, 64,167,182,237,120,224,225, 44,230, 62,246, 36, 75,254,149,205,141,215, 95, 79,
-246, 91,217,204,124,114, 54, 31,245,239,203,254,253,251,233,225,167,250,254,173,147,158,124, 46, 24,242,171, 71,124, 15,254,240,
- 20, 6,117, 56,162, 93, 68, 20,212,196, 72, 70,176,154, 16, 80, 67, 98, 10, 90,139, 30, 41,239,159, 76, 75,255,179,159,228, 39,
-162, 86,171,107,223, 55, 3,218, 19,155,216,149, 19,249, 43,121, 39,231, 95,168,204,145,140, 26, 54,144,181, 27,182, 98, 48, 64,
-100, 66,108,131,150, 34, 34,187, 98, 52,228, 99,183,219, 93,206,158, 5, 78,163, 82, 15,229,158,123,239, 71,212,233, 89,253,245,
- 63,185,101,252,159,137,140, 2, 67,105,185, 71, 82,113,150, 78, 18,177,219, 69,108, 54, 27, 86,171, 21,179,201,140,193, 96, 68,
-171,213,130, 0, 22,139, 5,149,160,194,102,179, 97, 48, 24,168,169,169,129, 88,207,243, 26,155,190,207,161, 77,107, 1, 65,165,
- 66,163,214, 98, 23, 37,202, 74, 43,177,216, 44,156, 59, 91, 74, 69,121, 53, 6,189, 5,140, 54, 68,241, 44,106,205, 47,180,107,
-223,145,168,136, 8, 47,110, 88,192,102,193, 88, 94,194,121, 99, 13,162,213,132, 90, 45, 96,179, 89, 57,127,174,152,131,251,118,
-114,238,244, 73, 36, 73, 66,165, 82,163, 82,169,192, 15,119,108, 40, 32,171,184,165, 75,151, 50,105,210, 36, 82, 83, 83,209,233,
-116, 44, 90,180, 40,100,223, 33,171,189,126,221,187,211,186,117,107,150, 44, 89,194,184, 33, 67,104, 23, 2,242,139,175, 37, 59,
-109,171, 86, 44, 89,178, 4,109,171, 86, 1, 41, 63,171, 78,135,214,108,102,213,170, 85,245,212, 95,176,174,207, 80, 66, 38, 59,
-215, 1, 72,102,102, 38,185,185,129,169, 61,189,193, 64,203,132, 4,254, 52,105, 18, 21,149, 85,148,148,149,162,213,106,208,104,
- 28, 47,173, 86,139, 46, 34,146,170,210, 11, 84,159, 60, 69,204, 85,190,131, 28, 14, 31, 63,206,135,171,190,170, 71,124,178,242,
-235,123,125, 79,198, 12, 27, 18,224, 47,174, 6, 98,136,105,158, 74,250, 45, 81,172,255,242, 61,135, 38,107, 2,115,123,251,222,
- 95,140,121,237,191,104,245,238, 46,174,141,211,160,110,150,128,173,252, 60,125,190, 57, 79,148, 70, 64,111,147, 80,251, 24,175,
- 30, 59,114,132, 53, 95,126,205,251,239,190,207,155,239,253,131,236, 69,139, 73,104,158,192,139, 47,191,200, 7, 31,127,196,224,
-126, 3,249,231,123,255,228,246,140,219, 25, 60,112,240,239,146,244, 92,119,156,151,183, 59, 10,134,252,234,221,234,119, 7,188,
-194,135,125,159,229,227, 1,207,211,108,224, 4,176,152, 17, 18,218,194,147,203,249,249,193, 79,225,150,135, 17,209,194,150,127,
- 51, 77,181,223,171,241, 47,191, 43, 3,170,184,245,222, 71, 17, 69,128, 50, 32, 6,176,210,177,235,245,132,235, 52,216,109,102,
- 36,139,195,125, 24, 19, 19, 67,105, 89,121,131,246, 22,191, 62, 11,128,131,219,222, 67,165,186, 72,172, 0,162,241, 0, 38,179,
- 21,181, 54, 28, 33,204,225, 35,175,174,170,162,121,243,230,222,105, 89, 20, 17, 69, 59, 54,155, 21,179,217,130,209,100,164,166,
-166,134,202,202, 42, 42,202, 43, 40, 43, 45,163,180,180,148,210,178, 82,202, 43,202,169,172,106, 56,176, 69,167,179, 96,183,139,
- 88, 44, 54,202, 43,170, 56,114,228, 24, 59,118,238,225,167,159,118,115,232,208, 81, 78, 23,151, 80, 83, 99,166,166,218, 68,201,
-249,114, 14, 30, 60,204,246,237, 59, 41, 46,110, 56,218,205, 85, 15, 88,140, 6,138,143, 29,102,223, 79, 63,240,217,242,247, 88,
-251,229, 39,156, 42, 42,196, 46,218, 29,100, 39,184,144,165,159,240,229,206,244, 57,114,210, 92, 28, 59,197,199,199, 19, 19, 19,
-195,156, 57,115, 66, 86,225,223,126,251,109, 38, 77,154, 4, 64,231,150, 45,253,154, 99, 13, 20, 50,217,201,202,207, 31, 55, 39,
-192,194,133, 11, 57,124,230, 12,183,143, 26,197,160, 84,135,107,109,223,190,125, 0,124,250,253,247,126,127,255,227,207, 62,203,
-236,231,158,115,186, 49,229,247,242,177,252,222, 31, 55,167,140,188,188,194,122,164,231,122, 44,127,238, 11,113, 26, 13, 38,139,
- 25,181, 90,205,161,194,163, 20,158, 58,201,246, 61,123,177, 88,172,168, 16,208,104, 52, 8,130,128,104,183, 99,212, 27, 88,191,
- 98,185, 95,118, 93, 73,239,238,137,227,235, 79, 25,236,218, 87, 71, 17,250,135, 24,151,198,216,197, 73,120,121,185,115,209,218,
- 14, 95,217,158,187,236, 12, 97, 29, 82, 56, 63,125, 0,251,222, 95,140,166, 69, 91,231, 71,231,167, 15,160, 69,184,138,102, 26,
-239,117,187,107,151,174, 68, 70, 70,241,230,255,190,205,176, 33, 67,232,219,191, 31,199,142, 28,227,208,145, 2, 16, 37,194,117,
- 58, 6,166, 13,228,235, 47,191,230,179,207, 62,227,247, 14, 87, 18, 12,137,171, 19, 96,154,176, 23,105,211,199, 8,106, 13,252,
-229, 61, 30, 61,222,150, 55, 23,189, 15, 49,209,188, 51, 47,159, 7, 95,238,138, 58,111, 41,211,174,186,134,165, 93, 30,118,184,
-216, 84,234,122,118,174,110,214,158, 95,246,125,234,194,179,122,192,234,120, 89,205,104, 68, 53,170, 90,242,250,236,243,111, 1,
- 24,248,135,134, 93, 78,107,247, 75,140,238,221,221, 77, 19,105, 0, 45,104,195,177, 9,118,196,218,174,127,202,212, 71, 0, 56,
-241,195, 82,175,196,103,179,219, 81, 89,109,168, 84,102,135, 98, 66,192,110,183, 97, 54,155,208,104,180, 8, 2,216,237,118, 44,
- 22, 11,102,147, 25,221, 85,109, 61,218,178,219, 69, 44, 86, 17,140, 22, 46, 92, 40,199, 96, 48,163, 86,107,176, 88,172,152, 45,
- 22,172,118, 43,162, 36, 34, 9, 2,168,172, 84,215, 88, 40, 41,169, 70,111,180, 1, 41, 62,104,239,226,123,179,201, 72,101, 69,
- 89,109,176, 77,109,112, 78, 35, 42, 80,254,137,124,186,118,236,234,151,123,179,142, 26, 21, 4,199,178, 10, 23, 18, 44, 44, 44,
-100,193,130, 5,181,238,182, 57,196,198,198, 82, 89, 89, 73, 69, 69, 69,192,110, 61, 89,237,181,105,115, 81,177,207,152, 49,131,
-183,222,122, 43,100,170,207,213,174, 63,196,231, 58,183, 39,196,196,176, 96,193, 2,158,124,242, 73,180, 90, 45,214,242,114, 98,
- 99, 99,153, 59, 99, 70, 64,202,207,125, 14,207,215,156, 95, 67, 88, 16, 64,208,210,206,157, 59,157,138,208,219, 92, 73,121, 89,
- 25,209, 49, 49, 92, 40, 47,231,251,237,219,209,168,212,152,173, 86, 12, 70, 35,162, 40, 58,231,115,109, 86, 11, 22,179,217,239,
-103,220,144,107,243,249,199,255,226, 84,125, 93, 58,117,162,168,240, 72,163,158,107,122,198,124,244, 37,219,249,230,179,247, 66,
-162,252, 2,113,111,186, 98,207,138,119, 73,189,247, 49,116,157,123, 2, 96,187,112,134,130, 50,199,146, 10, 93,255,113, 20,217,
-109, 68, 46,217,238,213, 70, 85, 85, 21,186,136,112,174,238,220,153, 99,167, 78, 82, 90, 82,202,148,187,167,178,102,195,122,222,
-152,191,144,207,214,124, 73,151,206, 93,184,103,226, 31,249,113,215, 86, 62, 91,181,138, 9, 19, 39,162,192, 79,226,155, 38,236,
- 69,250,110, 25,232,116,144,208, 1,195, 85,125,121,243,197,108,176,235,225,108, 21,207,252,123, 19, 89,183,102, 65,222,251, 20,
-157, 45,129, 46, 32,218,109, 30,137,239, 72, 85, 21, 41,113,205,176,153,225,200,198, 15,185,122,232,205,128,227, 58,171,197,138,
- 22, 21, 53, 38, 71,164,216,232,161,215, 19,209, 60,209,107,129, 71,247, 16, 88,179, 87, 66, 27, 14, 97, 29,110,198, 82,180,217,
-169,250,180, 97, 58,172,152,136,142, 8,119, 40,206, 53,255,198, 88,122,146,126,201,113, 94,136, 79,114,204,237, 9, 54, 84, 42,
-193, 73,134, 22,139, 5,163,209,232, 84, 52,162,232,112,135, 90, 44, 22, 90, 54, 96,203,100,178,213,186, 33, 69,204,102, 59,213,
-213, 70, 36, 9,108, 54, 17,171,213, 14, 42, 80,105,212,160, 18,144, 4, 1, 73, 18,176,137,122,140, 38,187,127,141,206,149,255,
- 4,217,163,233,170,244,228,147,254,209, 96, 99,213, 30, 64,164, 75, 56,187, 59,233, 37, 37, 37, 81, 93, 93,141,205,102,115,118,
-144,193,168,189, 78, 45, 90, 56,207,117,106,209,226,146,168, 62,127,225, 58,183, 39, 85, 87, 51,111,222, 60,204,165,165, 88,229,
-129, 94, 45, 73,107,205,102,198,143, 31, 79,241,249,243, 36, 94,166,144,127, 87,247,165,235,252,158, 39,164,165,165, 57, 3, 93,
- 0, 14, 20,123,190,206,102,182, 80, 97, 41,195,100, 50, 17, 23, 27, 75,120,152, 14,171,221,134, 36, 73,206,193,160,213,106, 69,
-180,217,253,126,190,135,143, 31,175, 19,216,226,238,246,116, 15,124,105, 44,162, 90,246, 5, 66,163,128,130,157,227, 27,178,190,
-132,243,157, 86, 18,214, 33, 5,161,115, 79, 58,254,107, 55, 23, 76, 34, 81, 26, 1,203,150,207,201, 47, 60,230,115,134,194,104,
-179,176,243,199,159, 88,252,218,235, 12, 24, 58,136,103,254,254, 28,235,190, 89,199, 71, 31,252, 31,253,111, 26,196, 85,157, 58,
-160,137,212,178, 97,243, 6, 62,126,255,255,248,244,243, 85,124,253,245,215,140, 29, 59, 86, 97, 58, 95,174,206,105,170,253, 72,
-155, 63,130,136,112,142, 87, 89,192, 88,137, 78, 52,208,179,123, 18,148, 26,192, 98, 99,104,175, 20,199,218, 1,171, 9,181, 80,
-235,106, 20, 27,234,188, 43, 40,168, 40, 66,163,131,209,183, 60,198,199,111,206, 7, 44, 96, 48, 99, 55,194,231,223,239, 33,239,
-231,131, 0,180,239,208,217, 65, 12, 62, 48,166,151,128,213, 4, 95,126,189,150, 62,163,254,226, 80,123,104, 81, 71,192,228,113,
- 25,140,185,233, 86, 0, 78,157, 56,138,100,245, 78, 42,146, 36,214,170, 62, 27,102,139, 5,147,217,132,209,104, 64,175,175,161,
-186,186,154,202,202, 74,170, 42,171,168,170,170,166,166,166, 6,131,193,208,240, 92,136, 94,196,104,180, 97, 52,218,208,235, 45,
- 84, 87,155,168,170, 54, 82, 93, 99,162,166,198, 76, 85,165,137,234,106, 51,213, 85,142, 87,101,165,153,202, 10, 35,229,229, 70,
-111, 5,116, 33, 60, 9, 9, 9, 36,169, 86,227, 9,174,242, 43, 96, 55, 39,192, 53,253,175, 97,235,154,173,172,251,110,157,147,
- 12,243, 79,248,183,176, 90,173,118, 44,253,144,241,106,237, 18,129,185,115,231,146,148,148,228, 84,133,142,159, 17,156,218,107,
-221,186,254,194,229,233,211,167,243,245,127,254,195,233, 0, 35, 49,189, 97,201,146, 37,126, 19,170, 85,119,113, 93,232,242,229,
-203, 57,114,214, 17, 49,188,122,227,198, 58,159,229,231,231,211,178,101,203, 43,210,176,101, 82,203,204,204,172,115, 94, 62,118,
- 37, 61,175, 3,155,102, 49,136,118, 59, 85,101,229,142,229, 50, 21,229,232, 13, 6,244, 6, 3,213, 53, 53,232, 43,171,168,174,
-168,192,100, 52, 96, 49,153, 16,109,190, 7,113,238,164,230, 74,122,242,177,123,148,167,191,168, 41,217, 78, 94,238,220, 58,231,
- 12,101,123,174,120, 71,123,102, 74, 39, 58,254,107, 55, 66,231,158,152, 55,173,228,196,159,122, 19,165, 17,216, 60,178, 37,182,
-202, 18,250,172, 61,143, 15, 79, 39,147, 38, 77,226,193, 71, 31,226, 72,126, 62, 63,110,220, 76,108, 76, 44,119, 78,185,147,184,
-230, 9,236,250,105, 7,209, 97,225, 68, 69, 69,209,182, 83, 59,254,253,201,191,153,251,244, 95,169,169,168,248, 93, 16,149,236,
-145, 88,186, 96,110,157, 87, 72, 20,223,180,130,127, 32,149, 28,199,164, 13, 39,239,124, 36, 2,208,169,226, 12,234, 79, 95,228,
-155,204, 23,248,159,107,175,166,109,124, 56,127,233, 22, 1,111,239, 70,178, 90, 56,169,110, 83,223, 43, 87, 7,209, 64, 13, 0,
-123,247,125, 69,175,212,241,252,237,153, 15,248,226,211, 69,124,251,253,175, 12,235,127, 29, 26,141,142,245,155,119, 33,169, 53,
- 88,236,118,191, 11, 63,186,119, 55,214,238, 60, 4, 11,231, 51,105,252, 24,198,141, 27,207,186,239, 62,195,102, 53, 49,246,230,
- 59, 81,217,173,104,213,222,137, 84, 20, 37,167, 98,148, 36, 9, 73,116, 68,121,170,173, 54, 84, 42,149, 67, 5, 10, 66,237,242,
- 6, 7, 73, 54, 72,124,134, 48, 4,193,136, 86,235, 88,172,142, 36, 33,138, 96, 23, 69,108, 54, 17,155, 77, 66, 80,219, 28,246,
- 16,176,137, 96,177,137, 24, 77,118, 34,227,125,106,189,122, 71,130, 32, 19,139, 91,139,241,163,255,126,226,158, 39,184,166,255,
- 53, 23, 21,194,178, 60,242,150, 57,214, 35,109, 93,179, 21,198,248,247, 12, 28,247, 15, 86,174, 92,233,108,156,157, 59,119,118,
-170,100,171,213,138,205,102, 11,136,248,194, 90,183,118,170,189,206,151,129, 56,180,181, 46,211,177, 67,124, 7, 83, 12,232,209,
-131,133, 11, 23, 50,126,252,120,242,243,243, 41, 40, 40,224,182,116, 71, 72,123,215,174, 93,235,124,118,226,196, 9, 90,232,116,
-180,113, 81,172,158,240,248,179,207,214, 81,196,179,159,123,174,206,253, 10,100,110,207, 21, 25, 25, 25,228,230,230,146,153,153,
- 73, 78, 78,142,147,244,210,210,210,252,182, 81,126,161, 18, 1, 27, 22,139, 25,211, 57, 3, 97,225,225,104, 52, 26,167,226, 51,
-214,212, 96,214,235, 49,155,205,212, 84, 84, 48,122,234, 84,159, 54,101, 82,147,221,157,125,175,239,201,246, 93,251,234, 92,227,
-105,222,207, 23,170, 75,182,179,125,227,103,140, 24,115,199, 69, 34,172, 60, 76,254,190,173, 33, 81,121,193,186, 57, 1, 10,202,
-244, 20, 61,112, 3,210,177,125,180,122,119, 23,122,155, 68,213,212,206,196,126,124,140,170, 63, 53, 71, 35,128,202,143,129,215,
-244, 25, 51,152, 55,255, 69, 90, 53,111,129, 85,180,115,248,100, 33, 83,239,188,139, 15, 62,252,144, 47, 62,255,146,187,166,222,
-133,217,100,102,243,142, 31, 48, 26,107,152,118,223,125,108,248,241, 71,188, 5,248,253,150,200,207, 53,178,211,253, 56,104,226,
- 91,154,242, 48, 67,245, 57, 20,156, 42,231,204,248, 90, 54,221, 62, 23,105,245, 59,180, 59,119,140,215,135,220, 14, 21,101,240,
-242, 50,164,226, 67,216, 35,162,168, 40,115, 56,121, 4,149,231,144,164, 77, 27,191, 96,200,208, 17, 14, 98, 16,173, 28,169, 40,
- 2,236, 92,221,172, 51,195,134,245,164,117,139, 54,148, 86, 86, 57,180,161,197,198,153, 10, 61,215,120, 41,112,251, 14,253, 57,
- 85,244, 99,109,141,212, 48,186,151, 99,142,111,237,126, 43,235, 86,175,228,220,133,211, 52,143,115, 68,134,198,133,105,105, 27,
- 23,237,195,125, 40,213, 6,222,136,181,107,248, 28,196,103, 87,217, 17, 84,142,133,237, 2,181,235,253, 36, 7,249, 53,132, 59,
-239,122,148,255,251,224,121,194,195, 53,168,213,130,147, 24, 68,187,132,205, 46, 97,181,138,216, 68, 9, 4, 1, 17, 1,187, 93,
-194,108, 21,121,244,161,231, 61,166,236,145,220,202,233,122,194,149,240,156,239, 2, 8,110,113, 37, 61, 79,199, 91,215,248,238,
- 44,236,118, 59,102,179,153, 73,147, 38, 57,137,111,229,202,149,172, 92,185,146, 73,147, 38,145,156,156,140, 32, 8,188,241,198,
- 27,204,157, 59,151,178, 50,255, 22, 7,207,158, 61,155,217,179,103,179,118,237, 90,244,231,234, 7,254,116,110,217,146, 99,199,
-142, 1,254, 45,104,111,104,177,186,182, 85, 43,222,126,251,109, 36, 73, 98,220,144, 33, 36,250, 49,103,216,166, 69, 11, 6,244,
-236, 73,233,241,227,180,208,233, 40,224, 98,116,103,151,182,109,153, 53,107, 22, 91,183,110, 37, 37, 37,133,238,137,137,190, 59,
- 85, 15,235,248,130,157,227,115,133,188, 78,111,206,156, 12, 10, 11, 47, 42, 61,215,181,125,254, 68,118, 70, 39,182,194,120,230,
- 44,162,205,142,190,178,146,202, 11, 37, 8,130, 10, 73, 18, 49,153, 76,206, 54,115,236,224,175, 88, 45,102,191, 34, 58,235,121,
-112,134, 13, 97,204,176, 33,117,130, 89, 2,117,117,214, 92,248,137,237, 27, 29,238,204,232,168, 40,190,112, 83,125,125, 6, 79,
-184,162,157,118,159,111,206,179,227, 15,144,154,150,206,249,233, 3,104,243,143, 31, 40, 40,211, 19, 31, 38, 80, 90, 86,142, 70,
- 16,124, 42, 62, 25,247,220,115, 79,157,227,175,190,250,138, 49, 99,255,192,234, 47, 87,179, 98,197, 10,158,123,122, 30,223,110,
-220,128, 90,163, 38,177,125, 34,149,149,149, 16,246,219, 39, 62, 87,229,215, 88,212,155,227,219,216, 59, 19, 92,150,226,172, 62,
- 31,199,184,150, 2,210,142, 53, 72, 63,126,233,240,168,133,135, 99,138,140, 97,125,220, 80,206,246, 79,175,117,123,121,206, 54,
-144, 95, 96, 97,203,182,151, 29, 36,160, 14,151,157,100, 28,169, 58,195,223,102,252, 25,131,193, 76,149,209, 49,199,103, 81,233,
- 24, 62,122,146,215, 2,207,123,250, 62,214,126, 93,187, 80,214, 46,231, 18,180, 49,186,135,192, 29, 15, 47, 34, 50, 82, 71,179,
-218, 57, 62,173,104, 34,177,165,143,206, 76,146,144, 4, 7, 65,201,163,110, 81, 16, 17, 68,193,153,209,197,193,124,181,244,227,
- 67,184, 24, 12, 17, 24,141,213,104,181,106, 84, 2,136,146,195,182, 67,241,137, 24,140, 54, 36, 4, 68, 9,172, 54, 9, 73, 37,
-120, 43,154,131,196, 36, 87,242,147, 26,148,215,114,136,203,221,127,154,224, 51,247,221,175, 63,254,218,232,202, 35, 73, 18, 70,
-163,145, 30, 61,122,144,148,148,196,241,227,199, 89, 81,155,137, 68, 38, 66, 25,243,231,207, 15,136,252, 0,178,178,178, 26,252,
-108,226,189,247, 58, 20, 9,254, 47,104,151,179,164,184, 99,252,208,161, 1, 5,202,180,113,137, 20,118, 87,128, 39, 78,156,160,
- 79,215,174,132,233,245,126,223,195, 80,195,157,212,220,215, 91,202, 4,232, 47,249, 69,180,109,131,225,240, 17,236, 54, 27, 85,
-229, 21,181, 10,222, 49, 0, 44, 63,119,158,170,242,114, 36, 73,242, 75,237,185, 67,158,223,115, 95,190,224, 62, 15,232,189,209,
-237,101,219,247,159, 58, 15,191,200,117, 44, 99,184,126,200, 29, 36,180, 74,189,130,221,180, 84,159,252,120,151,212,172,191,113,
- 86, 20,233,181,236, 39,126, 26,221,154,235, 86,159, 67, 35, 64,140, 54,184,245,183,227,199,143,231,187,141,223, 49,124,228, 8,
-190, 92,245, 57, 47, 44,152,207,156,202, 74, 36, 81,100,249,242, 85,180,104,209,130,162, 42, 20,120, 35,190,122,190,233,241,115,
-121,111,127, 30,221,237, 7,104,163,173,196, 36,105, 56, 44,197,161, 46,169,226,108,191,139, 89, 11, 84, 94, 92,138, 45, 19,122,
- 51,230,190,123,176, 75,209,117, 42, 69,141,190, 10,181, 38, 22, 84,145, 60,249,154,255,139,157, 71,143,237,206,231,111,207, 5,
-149, 65,246, 82, 58, 70,122,209,177,216,173,229, 32,233, 57,241,195, 82,250,244,236,224, 95,213,148, 28,171,244, 37, 36, 4, 9,
- 4,161,118, 14, 77,112,165, 19,207,149,217, 29,153, 89, 79,178,228,173,151,169,174,174, 68,163, 81, 57, 85,159,189, 86,241,213,
-212, 88,176,216, 68, 68, 73, 64,173, 81,241,234, 43,139, 27,180,245,135, 91,251, 1,176,238,171,109,216,107,231, 78, 36,185,184,
-206, 89,190,139,229,188,247,129, 73,126,221,191, 7, 94,120,128,227, 71,143,135,164, 2,153,205,102,202,107,163, 25,211,210,210,
-184,241,198, 27, 41, 41, 41,225,232,209,163,142, 48,119, 81,100,213,170, 85, 1,145,223,140,123,239, 37,162, 85, 43,198,121,113,
- 61,206,168, 37,190, 8, 63, 8,235,137, 90, 85,232,201, 94,162,135, 57,196, 64,208,166, 69, 11, 6,214, 42,192, 86, 17, 17,116,
- 31, 48,224,138, 54,104, 79,100,150,150,150,230, 49,208, 37, 16,242,107,222,229,106,170,203,203,209,232,194, 48,155, 77,216,173,
- 54, 68, 81, 36, 38, 62,158,202,178, 50, 70, 79,157,234,183,218,115, 93,192, 46,207,239,109,223,181,143, 49,195,134,212,153,219,
-243,181,168, 61,165,109, 57, 23, 74, 47,176, 34,247,223,117,206, 79,158,122, 63,101,150, 46,141,186,143, 13,185, 53, 61,159,247,
-127,102,189,207, 55,231,225,155,139,169,197,174,254,226, 98, 70,169, 74,171, 61,232,242, 14, 31, 58,156,189,241,123, 25, 53,118,
- 52, 15,254,241,126,122,246,234,193,151, 95,124,197,143,123,118, 50,109,218, 52,138, 46,115, 18,232, 80, 67,118,105,186, 42, 62,
- 79,231, 66, 70,124, 0, 98,143,116,246,145,206,190, 70, 20,188,123,247,129,188,249,230, 7, 60,242,232,157, 36,118,236, 2,152,
-209,234,194, 57,117,166,138, 33,227,239, 9,216, 94,239,222, 73,220,119,223,100,150,253,243, 83, 16, 79, 0, 26,108, 38, 35,137,
-109, 99,233,208,204, 22,144,106, 17, 16,144, 4, 7,233,201,122, 74, 64, 2, 73, 64, 16, 36, 2, 29,147,207,248,203, 95, 1,248,
-235, 83,143,160, 86,171,144, 0,187, 93,194,102,179, 83, 83, 99, 67, 20, 37, 84, 42,129,119,222,241, 47,123,251,205,227, 29, 4,
-184,230,243,173, 46, 57, 27,113, 6,180,220,159,121,103, 64,229,171,172,169,244,154,127, 51, 16,136,162,136,209,104,196,110,183,
- 83, 85, 85,133, 90,173,198,110,183,211,166, 77, 27,172, 86,107,189,117,100,243,231,207,247,153,190, 76, 86, 95,241, 33, 90,174,
-144, 32,207,157, 52,146,228, 26, 66,107, 31,107, 69,125, 33,148,115,124,158, 72,204, 91,116,103, 32, 11,217, 59,221,120, 3, 0,
-135, 54,109,194,100, 48, 34,218,237, 92,147,150, 70,143, 1, 55, 17,157,232,231,179,146, 4, 78, 28, 59, 10, 64, 24,240,231,219,
- 47, 78, 38,159, 56,118,180,222,177,183, 80,199,130, 51,241, 64, 60, 83,166, 62,192,137,147,103,217,246,159,213, 0,172,248,232,
- 61,250,222, 52,142,152,214,131, 2,126, 22,147, 39, 79, 38,208, 52,100,118, 65,231,245,243,162, 9,109,248,230,180,233,146,147,
- 67,175, 94,189,232,213,171, 23, 59,118,236, 96,195,182, 77, 52,111,209,252,119,151, 60, 62,216, 57,189,160,136, 47, 84, 72,238,
-118, 3, 95,175, 59,194,109, 99, 35,105,149,120, 21,101,213, 54,134,140,253, 99,208,246,250,223,208,141,254, 55,252,149,204,204,
-191, 1,231,136,143,209,208, 33, 65, 12,204,198,212, 41,151,236,247,190,252,202,155, 0, 60,242,200, 95,176, 90, 44,136,146, 35,
-252,255,245,215, 95, 15,202,222,152,219, 28,187, 86,124,253,217, 22, 4, 65,197,180,135,239,110, 18,149, 81,146, 36,204,102, 51,
- 22,139,197,217,129,203, 29,183,178,107,131,119, 4,146, 38, 45, 88, 4,186,251,130, 47,116, 27, 50, 36,232,191, 61, 83,152, 79,
-223, 46,237, 67, 90,158, 82,203,213, 68,183,190,154,244,140, 65,141,182,229, 43,225,116, 93,168,176, 9, 58,140, 42,239, 1, 88,
- 71,171,109,164,196,248,211,213,134,102,153, 78,159, 62,125,126,119,237,164,161, 64,150, 96,231,252,132,113,119,207,147, 80,160,
-160,145,136, 48, 31,194,232, 97, 79, 60, 5, 10, 20, 40,104,106, 80,118, 96, 87, 16, 18, 40,164,167, 64,129, 2,133,248, 20, 40,
- 80,160, 64,129, 2,133,248, 20, 40, 80,160, 64,129, 2,133,248, 20, 40, 80,160, 64,129,130,203,134, 58,161, 70,227, 7, 7, 31,
-109,229,105,193,180, 98, 79,177,167,216,107, 26,246,228,180,101,202,253, 83,236,253, 86,236, 93, 54,226,147, 27, 72,160,240,214,
-160, 66,109, 79, 65,211,131,175, 78, 85, 65,211,125, 22,190,174,215,217, 37,204,234,186, 97,246, 69, 69, 69, 20, 23, 23,163,211,
-233,104,209,162, 5, 29, 58,116,104, 82,247,192,117,151,144,223, 91,191,114,254,252,121,138,139,139,253,190, 62, 49, 49,145, 86,
- 94,214,195,134,218,222,111, 82,241,201, 8, 36,141,146, 63, 25,237, 61,217,107,104,155,154, 43,185,229, 76, 83,237,200,252,197,
-204,153, 51,185,230,154,107, 66,106, 51, 35, 35,131,244,244,116,159,182, 46, 53,249,221,124,243,205, 0,172, 91,183,174, 73,216,
-211,235,245,172, 90,181,138,130,130, 2, 0, 38, 78,156, 72,239,222,189,131,126,190,174,245, 94,146, 46,166,207,115,223,221, 66,
- 16, 4,178,179,179,189, 14, 26,253,125, 22,254, 92,231, 74,122,231,207,159,199,108, 54, 35, 8, 2,225,225,225,152, 76, 38,138,
-138,138,248,249,231,159,233,213,171, 23, 87, 95,125,181,207,239, 28, 56,112, 96, 64,247,231,204,153, 51, 20, 22, 22, 6,244, 55,
- 11, 22, 44,112,110,139, 21, 40, 2, 93,119, 58,121,242,100,175,237,195, 83,123,235,216,177, 35, 0,213,213,213,152,205,102,103,
-125,242,167,189, 21, 23, 23, 51,107,214, 44,191,202, 86, 94, 94, 78,223,190,125,189, 62,227,226,226, 98,174,189,246, 90,191,236,
-157, 59,119,142,121,243,230,253, 46, 6, 16, 26, 20, 52,121,229,242, 69,246,104,159,215,220,246,208,218,144,171,106, 95, 4,153,
-151,151, 87,239,216,181,209, 30, 59,118,140,163, 71,143,146,155,155,219,168,251,186,127,255,126, 39, 81,117,115,213, 52, 0, 0,
- 32, 0, 73, 68, 65, 84,185,127, 71, 99,145,149,149,197,244,233,211,233,209,163, 71, 64,127,183,106,213, 42, 90,181,106,197, 61,
-247,220, 67,121,121, 57, 11, 23, 46,164, 83,167, 78,196,199, 7,150, 17, 71, 16, 4,190,249,230, 27,231,241,232,209,163, 89,187,
-118,173,215, 99,127,158,173,107, 93,206,204,204, 36, 45, 45,141,165, 75,151, 58, 59,246, 64,235,122,101,101,165,115,164, 47, 73,
- 18, 17, 17, 17,156, 63,127,158,138,138, 10, 98, 99, 99,249,233,167,159, 0,252, 34,191,238,221,187,147,145,145, 81,135,152,220,
- 21,218,156, 57,115, 0,216,182,109, 27,119,221,117, 87,192,207, 53, 24,210,147,177,120,241,226, 75,214,150,163,162,162, 56,120,
-240, 32, 90,173, 22,139,197,194,218,181,107, 57,124,248, 48, 79, 61,245, 84, 64,118,206,185, 37,111, 31, 60,120, 48,155, 55,111,
-174,115,238,194,133, 11, 65,217,106, 8,199, 93,146,136, 95, 41,184, 47, 98, 15,118, 1,251,239,134,248,118,239,222, 29,212,136,
-251,183, 66,126,245, 92, 14,125, 94,188, 56,106,219,241, 76, 72,108, 46, 93,186, 52,160,145,175,123,242,227,220,220, 92,210,211,
-211, 89,191,126, 61,130, 32,120, 76,142, 28, 12,222,126,251,109,206,157, 59,231,220,245, 33, 20, 88,183,110, 29, 27, 54,108, 64,
-146, 36,231,206,235,129, 60,247,130,130, 2,103,150,252,176,176, 48, 82, 82, 82, 88,184,112, 97,192,234,239, 82, 36,169,150,127,
-203,210,165, 75,157,233,202,228,255, 51, 51, 51,201,200,200, 8,232,183,150,151,151, 19, 31, 31,143, 74,165,226,190,251,238,195,
-100, 50,145,157,157, 77, 68, 68, 4, 38,147, 9,163,209,136, 90,173,102,231,206,157,180,108,217,146,216,216, 88,175,246,100, 82,
-115, 85,114,242,185, 80, 96,206,156, 57,100,102,102, 6,173,250, 0, 30,123,236, 49,231,123,215, 76, 75, 13,157,247,133,142, 29,
- 59,114,225,194, 5,158,121,230, 25,162,162,162, 88,185,114, 37, 67,134, 12, 9,138,244,220, 49,120,240, 96,166, 78,157, 90,143,
-252,100, 53,233, 79, 91, 8, 37, 82, 83, 83, 73, 76, 76,228,224,193,131,206, 93, 84,100,180,111,223,158,148,148, 20, 4, 65, 96,
-195,134, 13,141, 34, 61,249,220, 37,203,213, 25,202, 14,213,159,243,193, 32, 59, 59,155,172,172,172, 70,147,223,212,169, 83,149,
- 57,171, 0, 85, 99,102,102, 38,147, 38, 77, 98,228,200,145, 64,253,157, 25, 26,131,253,251,247, 3,144,158,158, 78,235,214,173,
- 89,178,100, 9,173, 91,183, 14, 88,161,121,194,136, 17, 35, 24, 49, 98, 4,251,247,239,103,201,146, 37,236,223,191, 63, 32,187,
- 50, 33,132, 74,253,133, 26, 50,217,185,214,229,204,204, 76,231, 0,197, 95, 24, 12, 6,154, 55,111,206, 29,119,220, 65,101,101,
- 37,165,165,165,104,181, 90, 52, 26, 13, 26,141, 6,173, 86, 75, 68, 68, 4,101,101,101,252,252,243,207,126,217, 46, 44, 44,172,
- 51, 48,146,137, 79, 86,126,142, 29,226,131, 83,246, 73, 73, 73,204,153, 51,199,105,171, 41,180,229,227,199,143,179,105,211, 38,
-198,142, 29, 75,199,142, 29,105,209,162, 5,155, 54,109,226,169,167,158, 34, 42, 42, 10,189, 94,143, 90,173, 14,216,238,224,193,
-131,121,250,233,167,157,125,151, 39,229,231, 11, 31,127,252,177, 95,170,175,184,184,152, 59,238,184,195,231,117,118,187,157,196,
-196, 68, 18, 19, 19, 41, 44, 44,116,122,134,122,245,234, 69,223,190,125,157, 3,199, 96, 73,111,218,156,249, 14,254,168,221,136,
- 54, 24,242,187, 44,196,215,144,203, 44,152,192,151, 75, 77,126, 99,198,140,105,180,242, 11,228,119, 5,242, 29, 19,103,172, 99,
-213,146,155, 67,254,108, 66,221, 49,184,118, 58,161, 80,123,178,202,235,209,163, 7,130, 32,112,238,220,185,144, 16,159, 12,217,
-214,146, 37, 75,124,222, 11,121,110, 15, 96,225,194,133, 76,156, 56,177,206,254,104,251,246,237,171,243,153, 63,117,113,244,232,
-209,117,230,188,255,240,135, 63,212, 81,130,254,184, 55, 27, 26, 84,186,255, 30,217, 13,234,234,246,244,134, 35, 71,142,160, 82,
-169, 80,171,213, 28, 57,114, 4, 73,146,200,207,207,119,230,101,213,104, 52, 8,130,128,221,110,199, 96, 48,240,217,103,159,249,
- 69, 88,174,164,151,145,225, 57,177,118, 99,220,149, 73, 73, 73,206,223,218, 88,245, 23, 10, 88,173, 86,174,191,254,122, 54,110,
-220, 72,159, 62,125,208,235,245, 78, 23,246,198,141, 27,185,249,230,155,177,217,108, 1,217, 28, 60,120, 48, 0, 47,189,244, 82,
-189,243,129,146, 95, 40,177,127,255,126,194,194,194, 72, 75, 75, 35, 41, 41,137,235,175,191, 30,139,197,226, 36,189,194,194, 66,
- 54,110,220, 24,148,109,153,244,228,247,193,238,194,126, 89,136,239,114, 6,183,132,130,252, 58,117,234,212, 40,229, 39, 55,184,
-143, 62,250,200,227,231,107,214,172,225,163,143, 62, 10,202,246,182, 99,215,210,175,243,193,144,185, 55,229,138,152,148,148, 20,
-146,132,210,174, 17,117,114,103, 19,104,112,130,187,218,107,211,230,226, 38,154, 51,102,204,224,173,183,222, 10,153,234,115,181,
- 43,187, 60,189,193, 85,221,233,245,122, 22, 44, 88, 64,151, 46, 93,208,106,181,232,116, 58, 98, 99, 99,121,241,197, 23, 3, 82,
-126,238,115,120,190,230,252, 66, 49,224,218,185,115,103,157,235, 27, 26, 49,151,149,149, 17, 19, 19, 67, 89, 89, 25, 63,252,240,
- 3,106,181, 26,139,197,130,209,104, 68, 20, 69,103, 59,182, 90,173,152,205,102,191, 93,183, 13,185, 54, 93, 7, 77, 73, 73, 73,
-156, 63,127,190,209, 94, 9,185, 78,134, 98,128, 23,108,130,249,133, 11, 23,242,196, 19, 79, 56,251,165,194,194, 66, 14, 31, 62,
- 12, 64,239,222,189,201,207,207, 15, 56, 90, 50,212,228, 38, 19,105, 40,190,107,231,206,157, 88, 44, 22,250,247,239, 95, 39,105,
-118,126,126, 62,155, 54,109,186,226, 10,252,119, 25,220,210, 84,200,111,234,212,169, 78, 55,132,171,203, 35, 24,210,155, 56, 99,
- 93,200,239, 83,168, 21,183, 39,210,147, 59,176,198,168,189,238,221,187, 59,207,117,239,222,253,146,168, 62,127,225, 58,183, 23,
- 21, 21,197,188,121,243,208,106, 47,110,194,156,154,234,216,248, 52, 62, 62,158,241,227,199,179,101,203, 22,198,143, 31,127, 89,
-202,230, 90,167, 92,231,247, 60, 33, 45, 45,173,206, 64,167,161,117, 84, 22,139,133,178,178, 50, 76, 38, 19,177,177,177,232,116,
-186,218,141,104, 37,236,118, 59, 22,139, 5,171,213,138,221,110,247,155,244,228,129, 86, 67,110, 79,247,192,151,198, 34,148,182,
-130,157,227,123,241,197, 23, 25, 59,118, 44,157, 58,117, 34, 50, 50,146,161, 67,135, 82, 86, 86, 70, 84, 84, 20,229,229,229, 44,
- 91,182, 12,149,234,202,230, 19,217,188,121,115, 29,215,169,220, 87, 5, 75,176,251,247,239,167,168,168,136, 41, 83, 28, 59,224,
- 44, 95,190,220,177, 27,124, 16,144,119,103, 88,186, 96,110, 61, 87,103, 48,115,124,191,203,204, 45,161,152,235, 3,130, 86,101,
-174, 29,145,171, 27, 34, 88,210,147,113,125,239, 84, 54,124,247, 61, 31,127, 23,233, 36,195,109,199,174,109,212,111, 76, 75, 75,
- 35, 47, 47,207,233,135,207,204,204, 12, 80,161, 93,236,236, 94,125,245, 85, 0,230,206,157,219,232,206, 70, 86,123,173, 61,236,
-161, 55,125,250,116, 86,174, 92,233,188, 38, 20, 88,178,100,137,223,222,134,242,242,114,231,251,229,203,151,179,103,207, 30, 0,
- 62,249,228,147, 58,159,229,231,231,211,178,101,203, 43,210, 6, 92,163, 55, 61, 13,118,252, 85,247, 49, 49, 49,216,237,118,202,
-203,203,185,112,225, 2,229,229,229, 24, 12, 6, 12, 6, 3, 53, 53, 53, 84, 85, 85, 81, 89, 89,137,209,104,196,108, 54, 99,183,
-251,222, 76,213,189,110,120, 10,146, 10,214, 85, 94, 88, 88, 88,239, 55, 7,235,113, 8, 37,222,127,255,125,134, 14, 29, 74,100,
-100, 36, 7, 15, 30,100,227,198,141, 68, 69, 69,241,183,191,253,141, 45, 91,182,240,212, 83, 79, 5, 76,124,131, 7, 15,110,240,
-213, 24,242,123,233,165,151, 26, 77,122,224,152, 66,144, 73, 15, 96,202,148, 41, 12,105,196,150, 86,206, 65,221,130,185, 65,187,
- 56, 47,171,226,187, 28,193, 45,161, 38,189,151, 94,122, 41, 36,174, 17,217,237, 57,117,234,212,160, 73,111,226,140,117, 92,223,
- 59,245,162,187,237,211,207, 88,245,169,227,253,134,239,190,135,225,195,128,192,150, 51,200, 33,238,174,157,141,220, 1, 5,182,
-100,192, 65, 22,114, 64,203,164, 73,147,232,220,185,115,163, 73, 79, 86,123,222, 84, 93,168, 84,159, 76,160, 51,102,204,240,253,
- 44, 38, 78,100,225,194,133,140, 31, 63,158,252,252,124, 10, 10, 10,184,251,110,199,190,136, 93,187,118,173,243,217,137, 19, 39,
-248,227, 31,125,239, 55,121, 41,230,248,100,229,148,155,155,235,244, 90,200,132,224,250,220,125,161,121,243,230,148,150,150, 98,
-177, 88, 40, 41, 41, 65,167,211,161,209,104,156,138, 79,175,215, 99, 48, 24, 48,155,205, 84, 86, 86,122,156,175,115,135,171, 87,
- 64, 46,143,187, 58,245,199, 78, 67, 30, 7, 87, 55,106, 67,139,217,131, 81,121,193,186, 57, 1, 14, 31, 62, 76,126,126, 62, 6,
-131,129,254,253,251, 99, 48, 24,200,205,205,101,202,148, 41,124,249,229,151,168,213,234,128,137, 47,212, 10,205,221,110, 99,236,
-164,165,165, 57,235,217,174, 93,187, 48, 24, 12, 12, 26, 52,136,174, 93,187,162,213,106,235, 45,133, 10,104, 80,231,166,248,154,
- 44,241, 93,174,224,150,166, 70,122,238,228,215, 24,165,231,237,120,195,119,223, 7, 85, 49,189, 29, 7, 82, 49, 39, 77,154,228,
- 36,190,149, 43, 87, 58,151, 29, 36, 39, 39, 35, 8, 2,243,231,207,103,238,220,185,126, 19,226,236,217,179,153, 61,123,118,157,
-185, 45,247,145,164, 28, 38,237, 79, 40,118, 67,139,213,101,130,149, 36,137, 25, 51,102,212,113,169, 54,132,222,189,123,211,177,
- 99, 71,182,110,221, 74, 74, 74, 10, 5, 5, 5,206,232, 78,247,207, 92,131, 94, 26, 28, 54,120, 88,199, 23,236, 28,159,123,219,
-202,201,201, 33, 61, 61,157,188,188, 60,103, 91,115,141,196,245,167, 62,182,111,223,158, 35, 71,142, 96,183,219,169,170,170,194,
-106,181, 58, 73,218,100, 50, 57, 55, 29,150, 3, 94,130, 81,250,233,233,233,164,167,167,215, 81,102,129,218,113, 37,184,164,164,
-164,122,125, 75, 40,151, 75, 4, 3,121,201,194,227,143, 63,206,198,141, 27, 25, 54,108, 24,135, 15, 31, 38, 58, 58,154,162,162,
-162,160,136,207,149,164,228,129,117,168,230,253, 26,171,244,228,254,164,176,176,144, 29, 59,118, 0,160,213,106,233,219,183, 47,
- 73, 73, 73, 12, 29, 58, 52,160, 0, 23, 57,170,211, 83,112, 75,200,162, 58, 67,157, 61,197, 83,165,115, 31,153,185,143, 6,175,
- 20,233, 77,157, 58,245,146,132, 63, 55,198,230,201, 83,103,125, 94, 19, 17, 17, 25,144, 77,111,243, 63,193,116, 92, 73, 73, 73,
- 28, 63,126,156, 21, 43, 86,212, 81,128, 50, 2, 37, 63,249,153, 54, 4,121, 49,109, 32,234,180,161,129,214, 95,254,242, 23,191,
- 72, 79, 70, 66, 66,130,115,222, 78,167,211,213, 83,121,207, 60,243,140,223,109,232, 82,172,227,115, 39, 53, 79,235, 41, 3, 25,
-140, 13, 25, 50,132, 53,107,214, 96,179,217,168,168,168,112,206,241, 1,148,148,148, 80, 81, 81,129, 36, 73, 65,205,205,201,243,
-123,238,203, 23,220,231, 1,253, 37, 61,215,231,220,212,150, 36,201,228, 55,119,238, 92, 54,109,218,196,248,241,227,121,229,149,
- 87,152, 61,123, 54, 26,141,134,240,240,112,191,236,184,186,211, 67,161,208,220,237, 53, 22,106,181,154,226,226,226,122,235,248,
-246,238,221, 75,105,105, 41, 41, 41, 41, 65, 45,221, 8, 37, 52,254, 18,149, 47,183,197,149, 70, 40, 72,175, 41, 54,150, 23, 95,
-124,209,239, 12, 12,129, 12, 68, 66, 57,239, 33, 8, 2,201,201,201, 36, 39, 39, 51, 98,196, 8, 10, 11, 11, 57,122,244, 40,130,
- 32, 32,138,162, 51,252,223, 95,242,123,226,137, 39,156,238, 46,247, 57, 62, 89,109, 60,249,228,147,126,147,134, 55,123,141,117,
-149, 6,163,242, 46,181,119,197,189, 14,123,114, 37, 6, 66,126,130, 32, 48,118,236, 88, 62,250,232, 35,194,194,194, 48,155,205,
-216,108, 54, 68, 81, 36, 46, 46,142,242,242,114,159,169,182, 60,245, 47,174, 65, 45, 59,119,238, 36, 61, 61,189, 78,127,226,171,
- 31,146,235,176,167,172, 47,141,157, 99,110,200,173,217, 24,119,167, 76,126,174, 11,214, 31,126,248, 97,231,251,170,170, 42,191,
-108,156, 62,125,186,222,226,244, 79, 62,249, 36,160,156,155,190,236, 53, 6,123,246,236,113,206,123,187,227,212,169, 83,156, 58,
- 21,124, 66,106, 79,193, 45, 33, 35,190, 80,147, 89, 67,246,154, 10,105, 54, 85,210, 3,104,217,178,101,200, 3, 36,146,146,146,
- 46,233,154, 38, 87,251,238, 42,107,254,252,249, 62,239,115, 40, 83,146, 93, 10,123,222, 20, 96, 48, 8,229, 28,159,167,123,235,
- 77,221, 7, 82,231,167, 78,157,202,209,163, 71,249,254,251,239, 49, 26,141,216,237,118, 82, 83, 83,153, 60,121,114, 64,245,105,
-219,182,109,117,212,164,235,121,247, 99, 95,245,204,117, 32, 39,147,232,130, 5, 11, 2, 34, 98, 87, 76,158, 60,185, 73,247, 43,
-137,137,137, 76,152, 48,193,239,235, 95,120,225,133,203,106,239, 82, 65,142,234,244, 68,120, 33,201,220, 18,234,206, 95,201,128,
-242,223, 13,229,249, 95,249,251, 19,202,239,144,149,125,176,216,186,117,107, 80,185, 55,253, 25,104,133, 98,128,115,169, 7, 73,
-141, 69,171, 86,173, 66,250, 60, 67,109,239,114,145, 95, 99, 72, 15, 64, 24,119,247, 60, 9, 5, 10, 66,128, 8,243, 33,140,186,
-110,202,141, 80,160, 64, 65,147,134,178, 3,187,130,144, 65, 33, 61, 5, 10, 20, 40,196,167, 64,129, 2, 5, 10, 20, 40,196,167,
- 64,129, 2, 5, 10, 20, 40,196,167, 64,129, 2, 5, 10, 20, 92, 22,212,137,234, 28, 63,184,125,208,134, 60, 37,185,245,102,207,
-215,250,161, 64,237,133,186,124,138, 61,197,222,127,187,189,175,110, 89, 18,180,189,241, 95,206,184,228,246,190, 24, 31,188,189,
- 91,191,170,111,111,220,160, 68,192,177,110,209,106,181,114,236,216, 49, 44, 22, 11, 26,141,134, 83,167, 78,113,103,108, 39,214,
-237,216,129,177,231, 85,244,235,215, 15,181, 90,237, 92,118,178,122, 75,241, 37,127, 30,114,249, 92, 33, 39, 74, 56,112,224, 0,
-237,218,181,163,172,172,140,118,237,218, 17, 17, 17, 1,224,181,124,222,236,157,252,229, 67, 50, 7, 23,241,241,142, 20, 52,173,
- 70, 17, 29,211,204,167,189, 80,255,222,203, 70,124,129,192,223,236, 8,129,166,234, 10, 38,181, 87,155,109, 7, 57,114,254, 12,
- 17, 97,225,116,141,140,229,200, 77,221,105, 74,104, 40, 95,160, 18,234,127,229,145,159,159,207,235,175,191,206,194,191, 58,142,
- 63,223,236, 72,255,228, 15,142,159, 58, 73,241,169, 83,228, 31, 58, 68,121,121, 57, 29, 59,118, 36, 58, 38,134,209, 35, 71,249,
-253,253,235,215,175, 15,168,188, 43, 87,174, 12,186,222,200,153,112,178,179,179, 27,119,211, 50,202,106,223, 72,128, 0,185, 9,
-193,219, 74,123, 29,146,238,173,109, 40,203, 96,231,172,198, 63,212, 73, 23,234,150,111,101, 11,191,254, 76, 16, 4,244,122, 61,
-223,126,251, 45,133,133,133,100,104,155,211,230,170,150,152,244, 70, 34, 12, 54, 6,206,126,144,155,198, 79, 97,245,123,217,124,
-181, 97, 3,163, 70,141,106, 18,117,216,110,183, 83, 88, 88, 72,175, 94,189, 72, 73, 73, 97,215,174, 93,152, 76, 38,186,116,233,
-210,224,246,111,222, 96,179,217,216,187, 99, 55,237,239,239,205,147, 55, 94,199,182,111, 95, 99,213,254,161,116,233, 62, 60, 40,
-123, 77, 94,241, 5, 66,120,254, 34,144,212, 72,129,146, 94,151, 93, 71,137, 47,173, 65, 64,194, 98, 87, 99, 45,171,225,212,133,
- 74,142, 47,217, 73,244,176,190,180,184,206,191, 40,195,157,223,103,210,205,185, 52, 73,205,103,223,138,108,254, 89, 98,218, 29,
-208, 45, 25,102,189,212, 56,194,146,211,179,133, 98,209,184, 59,137, 94,233, 13, 54, 1, 50, 50, 28, 11,135, 19, 18, 26,206,239,
- 89, 86,150, 94,251,140,227,155,204, 90,169,139,164, 39,213,146,222, 77,108,217,178,197, 47,226,235,217,235, 91, 78,159, 94,197,
- 7,255,186,120,174,224, 80, 62, 0, 15,252,233, 83, 42,107,102, 80, 93,225,223, 0,108,249,242,229,126,151, 57,216, 84, 79, 13,
-181,219,172,204, 76,178,131, 32, 82, 89, 25, 52,186, 19, 76,186,183,110, 18,232, 80, 16,159,203,125,242,103,183, 8, 25, 71,143,
- 30,101,227,138, 21,252, 61,125, 50,169, 83, 31, 38,172,117, 60,104, 84,128, 10, 68, 9, 68, 45,162, 89, 98,204,189,211, 40,122,
-115, 62, 63,252,240, 3, 3, 6, 12,184,226, 68,160, 82,169, 72, 77, 77,101,227,198,141,244,234,213,139, 27,111,188,145,179,103,
-207,178,119,239, 94,122,246,236, 25,112, 10, 74,181, 90,205,136,225, 35,121,101,209,151,204,185,111, 63,253, 70, 63, 68,191,190,
-121,204,126,235, 20, 41, 55,220,227,213,158, 92,207,252, 37, 72, 65, 16, 26, 63, 16,187,148,196, 87,167,225,164,175, 32, 39,195,
-255,252,110,238,228, 39,239, 12,224,186, 11,116,160,164,215,254,232, 57,174,143,136, 39,172,109, 44,118, 36, 34, 42, 34, 57, 91,
- 82,194,217,234, 74, 58,235,162, 57,180,110, 11, 18,208,210, 15,242,235,150, 12,135,142,170,144,164,112,236,130,142,219, 70, 90,
-153, 48,202, 8,136, 46, 35,199, 70,182,239, 70,146,147,107,230,121, 57,233,107,159,185,133, 44,216, 9, 44,152, 28, 16, 1, 6,
- 50,120, 9, 36, 3,134,188,227,178,103, 4,151, 15,240,240,134,102,188,182,226, 78,231,241,227, 25,255, 38, 37,189,170,209,207,
- 35, 63, 63,159, 69,139, 22,161, 82,169,120,252,229,139,187, 86,251,211, 73,244,236,245, 45,253,250,174,162, 95, 95,120,254,249,
-186,159,221,117, 23,140, 25, 3,176,132,127,175,240,143,252,212,106,181, 51,209,183,221,110,103,202,148, 41,206, 92,167,129,116,
-220,222,148,158,156, 62,206,245,247,101,101, 5, 71,122, 33, 67,218, 34, 0, 22, 47, 94,124,145,248,174, 95, 8,187, 30,191, 34,
-197,249,238,187,239,120,103,194, 52, 58, 15, 31, 9,106, 51,130, 86,133,160, 81, 33,168,181, 72,146,128,168,183, 33,217,237, 72,
- 22, 59, 15,222,251, 48, 15,255,237, 81,142,182,110,221,168, 5,253,161,192,142, 29, 59,104,219,182, 45,162, 40,178,105,211, 38,
- 14, 29, 58,196,200,145, 35,233,223,191, 63,219,183,111,231,186,235,174, 11,200,222,150, 13,255,230,246, 84, 3, 59,171,213,220,
-245,108, 13,131,122,191,193,140,153, 83,120,109, 78, 5,115, 94,251,136,164,222,119,249, 69,100,174,125,122, 86, 86,150,199,243,
-254,246, 69,238, 11,215,221, 17,146, 36,213,190, 72, 15, 32, 51, 55, 62, 96,242,115,221, 28, 83,254, 63, 51, 51,147,140,140,140,
-128, 72,175,211,161,211,116, 13,139, 34, 76,178, 17,241,218, 19,216, 12, 22,194, 31,127,137,216,176,112, 76, 90, 35,122,147,145,
- 8, 4,206,108,218, 70, 88,251,182,196,198,198,122,181,119,232, 40, 44,253, 68, 4, 12,181, 47, 24,124,131,138, 9,163, 4, 23,
-242,131,105,119,192,210, 79, 2,175,152,115,230,204, 33, 51, 51, 51,104,117, 38,147,158, 76,120, 50,233,185, 62,147, 5, 1,146,
-223,209,249, 71,125, 94,147, 60,215,191, 6,157,144,144, 87,111, 99,211,250,215,100,214, 94,227,223,118, 51, 23,246,183,229,153,
- 37,183, 34, 33,209, 63,225, 25, 6,166, 95,199,150,245, 7, 88,152,123, 23,228, 74, 60, 59,235, 31,180,235, 26,156,250,169, 57,
-145, 73, 98, 56, 24, 74, 15, 32, 73, 18, 49,173,122, 58, 73,239,157,119,222,241,250,183, 49,113,191,208,175,239, 42,231,241,246,
-237,208,183,239,197,207, 93, 51, 58,221, 57,121, 9,217,255,251, 52, 42,241, 42,191, 92,152,151, 2,153,153,153, 78,210,171, 75,
-134,153,100,103,123,111,115,170,201,229,117,134,125, 66,237, 63, 98,134,135,235, 4,217,179,232,120, 51,214,131,104, 86, 77, 41,
-119,122, 31, 1, 68,241, 62,102,206,156,233,252,124,230,204,153, 44, 94,188, 24, 85,151,251, 47,126,107,237,245,158,236,105,166,
-120, 46,159,205,230,225, 58, 63,202,103, 50,153,104,211,177, 19,136, 22, 84, 58, 16, 52,106,108,213,149,152, 10,143, 81,114,170,
-152,246, 3,134, 34,132,197, 33, 88, 45,160, 86,177,224,161,217,140, 92,250, 28,179,102,205, 10,249, 51,243,167, 35,151, 85,149,
-209,104, 36, 33, 33,129,252,252,124, 68, 81,228,216,177, 99, 44, 91,182,140,107,174,185,134,138,138,138,128, 84,188, 36, 73,116,
- 84,109,167,109,135,209, 84,108,218, 79,101,185,142,255, 91,109, 99,205,182, 15,121, 36, 35, 2,141, 65, 4, 26, 38,190,223,138,
- 27, 84,227, 47,225, 73,146,132, 48,210, 37,203,123,222,100,200, 8,108,180, 40,147,157,193,240, 17, 32, 96, 50,253,147,132,132,
- 60,114,115,115, 3,114,127,181, 58, 83, 70,171,214,225,132, 63,251, 48,246, 11,101,216, 78, 95, 64, 19,166, 37, 82, 80, 19, 37,
-168,137, 82,107, 72,208,134, 83, 94, 93,193,153,239,126, 32,118,194, 31,188,218,243, 68,102,155,127, 22,107,137, 15, 22, 61, 45,
- 32, 9, 32, 72,193,169,191,164,164, 36,230,204,153,227,116, 81, 6,227, 42,117, 37, 61,143,168, 37,191,198,204, 27,198, 79,187,
-248,188,203,151,230, 4,252, 27, 67,169,122,159, 94,114,139,147,240, 6, 92, 55, 9,128, 1,215, 77,226,135, 3, 14, 2,124,126,
-209,116,114,114,130,115,145, 8, 2,100, 62,246,139,179,177, 15, 26, 52,136,205,155, 55,251, 36, 61,128,155, 6,253, 92,231,248,
-134, 27,224,221,119,225,251,239,161, 75, 23, 72, 74,170,171, 24, 83,123,252,202,190,189,222,137,207, 93,213, 5,226,250,244, 71,
-209,187,147, 30,224,147,244, 0,178,115,114,156, 60,229,109, 80, 35,186,116,118, 57, 75,151, 34, 8,240,213,127,234, 7, 43,188,
-147,157, 35,115, 30,157, 58,117, 66,146, 36,222,120,227, 13,231,231,111,188,241, 6,139, 23, 47,102,221,186,117,117,178,250,211,
-128, 61, 89,173, 74,146,196,131, 15, 62,216, 96,249,108, 46,247,119,233,187,239, 34, 8,176,122,115,177,199, 78, 91, 19, 19, 3,
- 90, 53,118, 67, 5,191,174,217,192, 71, 43, 86,242,143,211,142,178,252,244,124, 51,186,220, 52, 6,115,209, 73, 14,236,221,201,
-254, 99, 5, 84,158, 61,203, 47,191,252, 2,180, 9, 73,135,220, 80,114,231,134, 72,234,244,233,211,204,155, 55,143,215, 94,123,
- 13,139,197,130, 90,173, 38, 38, 38, 6,189, 94,207, 79, 63,253,228,119,155,147,237, 85,156,218,202,243,255, 42,226,189,153,237,
- 40,211,135, 17,166, 81,209, 62, 62,156,179, 23, 44,100,190,106,163, 87,159, 52, 58,248,225, 97,144, 9,208,181, 46, 54,244,222,
- 31, 52, 52, 16,240,165, 4, 27, 28,212,249,106, 60,242,126, 91,117,144, 23,120, 34, 87,121,211, 89,131,225, 99, 39,233,193,197,
-185, 31,127, 55,165,213,108,220, 73,108, 89, 53, 98,152, 6,203,206, 3,152,127, 45,196,244,237,102, 48,154, 9,147, 36, 34, 81,
-163, 65,192, 44,218, 40, 51,155,248,199,250,213, 62,109, 46,122,218,161,230, 92,225, 56,150,155,189, 68,254, 17,137, 89, 47, 5,
- 63,154, 73, 74, 74,170, 35,239,253,221, 29,161,176,176,176,222, 94,121,117,212,158, 27,249, 53,133,221,166, 27,139,163,187,107,
- 0,161, 14,233, 1,220,254,172,150,215, 86,220,201,160,145,215, 1, 82,237,117,129,225,227,143, 63,230,241,151, 5,162, 91,246,
- 64, 2, 70, 79,120,136, 45, 91,182,248,245,183,162,234, 36,137,237,234, 39, 78,238,213,203, 65,122,247,220, 83,223, 77,122,213,
- 85,190, 51,230,171,213,106,212,106, 53, 83,166, 76,113,190,119,125,185,158,247, 23, 30,219,109, 48,131, 4,183,206, 81,126, 53,
-116, 78,240, 50, 54,116,181, 53,106,212, 40,143, 74,105,230,204,153,140, 28, 57,210,237,199,120,182,247,121, 78, 14,191,252,242,
-139,243,187, 93,239,153,251,189,149,207,121, 43, 95,152, 36,161,138,212, 97, 61,123,130,156,103,158, 97,153,190,130,242, 33,253,
-156,159,191,247,225, 50,158,155,253, 0, 41,179,238,228,239,251,191, 99, 69,249, 49, 70,222,114, 75, 80, 94,156, 61,123,246,144,
-153,153,201,238,221,187,221, 6, 36,217, 94,221,237,242,189,222,191,127, 63,155, 54,109,226,206, 59,239,100,201,146, 37,212,212,
-212, 56,183,139, 50,153, 76, 68, 71, 71, 51,121,242,100, 6, 14, 28,232,147,240, 4, 65, 96,255,143,171, 40, 88, 55,139, 89, 79,
- 45,228,171,103,219,241,107,177,134,202, 26, 53,162, 0,165, 53, 22,164,230,201, 60,246,215,151, 24,119,219,221,190, 7, 76,217,
-217,206,190, 46, 39, 39,199,231,251, 96, 33,147, 94, 72,146, 84,187, 18, 94, 40, 36,187, 39,200,164,231,174, 6, 93,175,111,232,
-199,104, 74, 43, 40,147,180,132,149,150, 17,254,249,119, 8, 26, 21,152, 44, 72,213,122, 4,155, 13, 45, 96,151, 68, 76,118, 27,
-213, 54, 11,136,190,231, 72,228,224,149, 69, 79, 55,220,252, 29,193, 47,141,191, 39, 57, 57, 57, 78,215,165, 63, 15,222,147,218,
-219, 49, 63,169, 65, 34,244,215,174,171, 59,211, 31,183,231,229,196,171,217,143,211, 47,254,153, 58,164, 39, 67, 62,223, 63,225,
- 0,175,102, 63, 30,208,111,253,232,163,143,248,207,127,254, 67,105,233, 8,154, 55,223, 64,116,139,238, 72,146,132, 74,165,242,
-107,130,189,168, 8,220,199, 21,146, 4, 55,222,232,120,127,248, 48,188,253,246,197,207,202,202, 64,163,241, 61, 29, 16,200, 60,
- 94,168,246, 49,115,109,107,254,222,195, 71, 31,125,180,142, 66,115, 39, 44,127, 33,111, 75, 37,207,237,185, 66, 86,125,157, 59,
-119,174,171,250, 60,224,254,196, 20, 10, 14, 28,164, 56, 62, 30,149, 74,197, 35,143, 60,194,155,111,190, 25,116,249, 6,155,227,
-144,196, 26, 30,120,249,105,122, 76,154, 68,206,203, 47,215,217, 28, 54,231,240, 47, 23, 61, 66,155, 55,179,126,253,122,142, 29,
- 59, 86,219, 87, 26, 2, 34, 61,217,187,144,147,147, 67, 86, 86, 22,169,169,169,236,222,189, 27, 73,146,120,232,161,135, 56, 89,
-221,240,128,230,212,169, 83,220,122,235,173,116,238,220,153, 53,107,214, 80, 89, 89,137,209,104,116,168,219, 90, 63,239,205, 55,
-223,236, 87,128,137, 36, 73, 20,230,239,225,185, 39,255, 76,243, 46,185,236,206,189,151,125, 39, 5,138,206,105, 64, 82, 97,182,
- 88, 41,147,154, 51,253,254,135, 67, 22,209, 25,138,253, 94, 27, 67,122, 94, 21, 95, 40, 32,179,122, 78, 78,142,139,106,241,124,
-227,210,210,210,234, 92,223, 16, 14,158, 42,226,231, 11,167, 57,112,172,144,115,199,142, 83,117,252, 20,213, 39,139,177, 25,140,
- 88,173, 54,170,237, 22, 12,118, 27,102,201,142, 29, 9, 41,128,155,236, 26,189,121,232,168,227,120,214, 75,178,210, 83,177,240,
-233,208,108, 88, 31,232, 8,177,207,220,194, 58,228, 38, 31,187,159,119, 39, 68,191,213,120,249, 82,167,123, 83,126, 93,105, 56,
- 84, 93,237,179, 56,239,216, 57,253,211,231,173, 60, 57,243, 89, 0, 6,166, 7, 54, 97,255,241,199, 31, 51,225,166,255, 80, 86,
-150, 78,252,182, 13,188,254,180,163,209,223,116,211, 77,126,185, 56, 1, 58,181,191,138,228,100,234,188, 14, 29,114, 4,180, 0,
-116,233, 34,177,120, 49, 36, 36, 56, 94, 87, 95, 13, 35,111,246,159,204, 92, 21,158,187, 90,145,207, 93,138,182,233, 15,214,175,
- 95,239,145,168,156, 94,147, 69,139,252, 94,154,145,158,158,238,140,228,244,132,199, 30,123,172,190,234,243,128,255, 28, 44,226,
-207,247, 79,103,231,199, 31,243,212, 83, 79, 53, 72,202,114,249, 54,108,216,224,181,211,189,233,218, 14,252,243,189,183, 73,187,
-235, 46, 94,121,229, 21,175,101,156, 57,115, 38, 35, 70,140, 8,138, 8,222,121,231, 29, 4, 65, 32, 39, 39, 7, 73,146,156,131,
- 46, 89,237,165,166,166,122,253,123,171,213,202,234,213,171, 57,120,240, 32,135, 15, 31, 70,175,215, 99,181, 90, 1,176, 88, 44,
-220,118,219,109, 1,137, 23,179,217,204,206, 85,119, 97, 42,120,139,117,155,142,114,236,140,154, 42,189, 10,187, 4,197,250, 8,
-166,207,122, 58, 32,123,153,153,153,206,165, 51, 89, 89, 89,206, 65, 86,102,102, 38,153,153,153, 72,146,228,124,127,165,160,106,
-168, 65,184,187, 52,220, 93,106,129, 66,158, 35,136,140,172, 59,171, 44,135,192,123,155, 67,112,133, 54, 76,141, 93,130, 83,250,
- 10,138, 42,203, 40,169, 42,167,210,100,162,220, 98,164,196,108,228,140,201, 64,177,169,134, 50,171,153,114,209,138,197,195,252,
- 70,189,145,222, 13, 30,200,192,101,222,239,129, 41,209, 72,132, 33, 17, 22,240,239, 46, 44, 44,172,247,128,131,117, 71, 54,232,
-226, 12,146,244,252, 13, 94,185, 18,216,154,119,192,249,190, 91,171,155,185,253, 89,109,157,215,194, 21,119, 33, 32,248,221, 16,
-111, 29,180,137,123,103, 57, 72, 79, 16, 4,190,216, 58, 20,192,239, 53,123, 50, 82,186,117,117, 35, 84, 88,178, 4,142, 28,113,
- 40,191,231,159,151,156,110, 70, 73,146,136,143,143,247, 91,241,217,237,118,236,118,187,115,142, 79, 62,118, 61,119,165, 32,171,
- 47, 79,202,233,209, 71, 31, 69, 16, 4,159, 10,205,117,196,239,141, 68,189,125,230,138,205,186, 10, 4, 85, 52,255,251,215,151,
-136, 94,157,199,180,105,211,234,108,121,148,217,165, 59,143,166, 13, 32, 50, 50,146,155,110,186,137,121,243,230,145,151,151,215,
-224,142,227,239, 21, 23,112,230,186,107, 73, 76, 76, 68, 20, 69,175, 68,234,237, 51, 95,117,209, 53,242,241,161,135, 30,114, 18,
-132,235,255,222,238,221, 85, 87, 93, 69, 81, 81, 17,155, 55,111,230,234,171,175, 70,163,209, 56, 7, 79,253,250,245, 11, 88,125,
- 37,119,235,205,210,111,227,216,183,230, 89, 6,247,191,134,168,112, 21, 81,145,118, 34,116,102,254,112,107,224,211, 90, 57, 57,
- 57,117,200, 60,212,174,206,198,170, 61,175,138,207, 19, 1, 74,235, 51, 2,118,143,184, 34, 35, 35,163, 14,217,201,255,187,207,
- 97,121,195, 53, 3, 6, 96,139,142,164, 92,178,115, 80, 95,206, 47,149,165, 28,168,186,192,129,170, 50, 14,234,203, 56, 98, 40,
-167,212,108,162,198,102,227,180, 65,239,252, 78,111,152, 48, 74, 96,209,211,106, 22, 61,173, 70, 66,141, 36,168,152,118,135,192,
-131,119,132,113,255,148,150, 36, 39,183, 70, 68, 11, 4, 38,209, 93,151, 32,184,159,243, 23,174,127, 43,147, 91, 67, 36,151,155,
-155,235,115,215,106, 79, 74, 59, 47, 47,143,185, 59,231, 58,201, 80, 86,128, 87, 10,179, 39,255,155, 31,203, 94,226,135, 3, 23,
- 35, 29, 63,125,222, 74,191,248,103,156,199, 47, 77, 95, 77,182, 31,193, 45,153,153,153,188,254, 12,220, 55,107, 4,113,219,242,
- 24,246,234, 16, 84, 99, 97,227,198,141, 65,213,225,142, 29, 59,214, 57, 30, 62, 28,226,226, 32, 41, 9,254,224, 33,134,170,207,
- 13, 55,248,165,248, 26, 82,122,242,249, 64, 21,159,167,249, 56, 87,100,101, 5, 62,218, 94,191,126,189,199, 29,200, 23, 47, 94,
- 28,240, 66,124,215,193,129,251, 57,209,143,193, 42,128, 69, 16, 16, 13,102,180,109, 58,146,249,226,139,220, 23, 21, 71,220,198,
- 31, 47,186, 66,239,190,143,231, 94,251, 95, 14, 47,250, 55,127,235, 49,156,201,241,157, 89,255,229,151, 13, 14, 60,111,203,202,
-228,186,238,221,157,193, 58,174, 3, 15,215, 65,138,251, 57,111, 46,205,172,172, 44,103,192,138, 60,159,231, 74,110,169,169,169,
-206, 96,144,135, 30,122,200,167,218,147, 36, 9,173, 86,203,109,183,221, 70,101,101, 37,229,229,229, 68, 68, 68,208,178,101, 75,
-226,226,226, 8, 15, 15, 15,248, 57,232,116, 58, 38,102,189,201,178,159,251,112,252,100, 21,173, 99,213,244,239, 42,208,179,179,
- 68, 84,179,102,252, 30,225,211,119, 39,119, 14,117, 26, 80, 16,138, 79, 94,187,145,158,158, 78, 94, 94, 30, 9, 9,185,117,236,
-251,187,142,175,166,215,213, 24, 10, 10, 48,216,204, 84,233, 13, 28,181, 90,209,138, 14, 7,106,165,213,132, 40, 73, 72,192,154,
-115,199,208,219,172,126,186, 21, 5,102,189, 84,183, 34, 59,230,251, 68,236,152,249,245, 72, 53,255, 92, 30,216,218, 49, 87,130,
- 75, 74, 74,170,167,250,252, 37,168,164,164, 36, 88, 48,217,235, 61,151,137, 48,144,249,189,228,185,201,117, 6, 28,185,185,185,
-206, 29,172,243,242,242,224, 10,174, 49,239, 50,162, 10, 86, 72, 78,213, 39,207,245, 61, 57,243, 89,126, 56,112, 29,175,173,184,
-139,191,190, 61,214,239,223,122,239,172,116,151,197,245, 27, 1, 71, 80,149, 36,229,214,214,107,137,220, 92,255,150, 89, 76,186,
-125, 34,235,215,125, 11, 56, 92,156,195,134, 9,200, 77, 67,146, 36, 86,175,134,113,227, 28,199,125,251,247,163,231,117,190,215,
-241,185,119,162,141, 93,187,231,122, 95, 50, 51, 51, 81,169, 84,245,200, 36, 59, 59, 39,224,197,235,242,124,150,235, 92,159,172,
- 0,253, 85,123, 80, 55,144,205, 61, 26,211,223, 32, 55,185, 79,178, 85, 87,163,109,145,128, 58, 50,154,235, 38, 78,226,239,163,
- 70,242, 87,121,249, 65,239,235,177, 27, 77,104,155,183,166, 71,191,161,116,106,223,153, 55,127,253,145,238,221,187,115,230,231,
- 11,245, 7, 3,153,153,206,193,237,195, 89, 89,206, 37, 16, 54,183,231,161,209,168, 65,170,187,140, 98,172, 7,245,145,154,154,
-234,116,101,202,202,199,147, 43, 51, 53, 53,213, 47,210,147,127,115, 92, 92, 28,253,250,245,227,208,161, 67,236,218,181, 11,187,
-221, 78, 84, 84, 20, 6,131, 33,224,186, 34, 8, 2,173, 91,183,230,214, 91,111,101,219,150,159, 88,156,187,158,102, 66, 24, 93,
- 91,155, 57,114, 33,138, 65, 93,173,117, 72,210,215,252,156, 32, 8,117,250, 58,127, 34, 60, 47,183,218,243,139,248,220, 27, 83,
-102,102,102,192, 75, 25,220, 73, 77,238, 96,221,237,251, 75,126,237, 90,181,102,191,233, 56,149, 42,145,179,166, 26,176, 90,177,
- 75, 18, 2,240,107, 77, 5,197,134, 42, 36, 73, 34, 35, 35,195, 79,226,147,152,118,135,192,210, 79, 46,142, 62, 15, 29,133,110,
-201, 54,212,232, 27, 69,122,174, 15, 57, 88,105,239, 88, 10, 49, 25,216, 81,135,236,250,204, 45,116,146, 94,159, 62,125, 2, 82,
-123,238, 42,219,253, 56, 47, 47,207,111, 91,142,200,220,114, 70,142, 92,122,145,172, 27,184, 38, 51, 51,207,175,165, 43, 47, 79,
- 95,205,211,111,143,231,199, 21, 18,253, 19, 14, 56,215,241,109, 43,127, 17, 1,129,151,166,127, 5,156,246,171,124, 9, 9,121,
- 8,130,192,132, 9, 19,120,247,221, 42, 39, 81, 9, 46, 33,126,114,246, 25, 25, 95,109,238,223,160,189,233,143,252,133,183,223,
-124,139,225,195, 29, 74,207, 21, 99,198,192,223,254, 6,235,214,247, 99,184,159, 75,116,100, 55,213,164, 73,147, 88,190,124,185,
-215, 5,237,193,144,160,188,128,221,125,142, 38, 59, 39,199,175,245,124,238,245, 98,241,226,197, 78,226,123,253,245,215, 3, 86,
-123,238, 29,101,176, 8, 15, 15,231,236,137,227,116, 78,238,130,104, 51, 35,216,236,104, 98,154, 17,115,125, 31,162,123,223,128,
-168,183, 97, 55,152,145,108,118,176,139,204,121,231, 53,166,220, 53,165, 65, 85,100,251, 36,222,175,239,245,116,221,173, 95,121,
-190,246,161,135, 30, 34, 59, 59,219,217, 7, 60,252,240,195, 30,175,243,151,244, 0,186,118,237,202, 91,111,189, 69, 73, 73, 9,
- 35, 71,142,100,199,142, 29, 24, 12, 6, 82, 83, 83,105,217,178,101,192,247,190, 95,223,190,100,221,159,197,177, 83,199,248,227,
-253, 89,108, 95,255, 62,103,170,203,232, 51,100, 36,173,219,167,120, 84,137,222, 20,164, 43, 87, 52,180,104, 61,208, 5,236,151,
- 93,241,121, 27, 77, 6, 67,122,114, 39, 43,175,233, 11,134,252,204, 67,210, 72, 33,141,226,156,101, 16, 17, 78,185,100,195, 98,
-179, 33, 74, 34,205, 99, 99, 57,165,175, 12, 40,227,136,167,101, 10, 23,231,248, 2, 27,125,123,114,101, 54, 54,173,152,188, 14,
- 80, 38, 55,217,125,235, 78,122,129,124,135,167,251,223, 88,184, 39, 39,168,251,108, 3,147,144,205,123, 22,147,157,147, 77, 65,
- 94, 51, 22,230,222,201,143, 43, 64, 64, 96,246,228,127, 59, 20,161,159,164, 39,215, 37, 7,177, 85,213, 54, 78,240,212,223, 46,
- 91,184, 1,128,168, 14,217, 64,195, 73,115,123, 94,215,157,156,156, 28, 90,180,250, 22,248,180, 78, 71, 82, 93,157, 66,239,180,
-238,180,110, 63, 18,141,228, 95,167,238, 75,241,185,206,239, 5, 19,213,153,157,157, 77, 86, 86, 86,157, 8, 69, 87,229, 23, 8,
- 92,231,250,228, 14, 48, 16,181, 23, 74, 12, 31, 62,156,233, 43,150,242,247,234, 10, 82,135, 12, 66,213, 58,222, 81, 38,171,228,
- 72, 49,134, 22, 65,173, 65, 8, 83,243,110,246, 34,154,141,232, 67,114,114,242,101, 93,100, 45,187, 50,223,121,231, 29,178,178,
-178,232,213,171, 87,163,236, 29, 61,122,148, 13, 27, 54,160, 86,171, 25, 60,120, 48, 42,149,202,227,188,158,221,110, 71, 16, 4,
-143,207,220, 21,187,118,237,226,131,101,239, 19,166,214, 49,233,206, 73,168, 84, 42, 6,141,121,160, 62,217,219,108, 78,123,161,
-136,202,108,242,174,206,119,103,134,186, 0, 0, 32, 0, 73, 68, 65, 84,198,194, 19,137,121,235,116, 3, 33,214, 97,153,247, 81,
-120,180,144, 93,223,172, 67,111,182, 96,179,219, 73,190,241,122, 70,119,184, 51, 32, 18, 8,101,178,104,153,164, 10, 11, 11,157,
-202,118,193,130, 5, 1, 17,113, 67,118,229,165, 16,125,250,244,169, 67,170,129,150, 95, 46, 95,168,144,153, 25,239,243, 62,102,
-102,230, 5,101, 59, 37,189,138,156,116, 87,187,193,165, 43,115,144,154,192,189,179, 46, 38,218,149,219,239,178,133, 27,136,234,
-144, 77, 84,135,140,128,108,158, 59, 51,138,165, 75, 71, 33,170, 78, 18,219,172, 18,192,153,162, 44,144,134, 21,170, 37, 10,254,
-144, 95, 40,224, 58,215,215, 24,181,231,143,130,240,134,228,228,100,218, 60,242, 8,139,191,253,150,194, 23, 62, 39, 67,219,156,
-184,218,164,210, 70,131,141, 71,103, 63,133, 58, 50,129, 53,239,231,176,183,133,192,168, 70,228,213,180,219,109, 4, 58,199, 31,
-140, 43,211,215,125, 42, 40, 40, 64,146, 36,186,117,235, 70,105,105, 41, 26,141, 6,155,205, 70,243,230,205,157,131, 47,189, 94,
- 79, 88,152, 35, 16,207, 27,241, 73,146,196, 79, 63,253,132,104, 19, 24, 48,176, 23,167, 78,157, 34, 44, 44, 12,139,197, 66,251,
-246,237,157,215, 84, 86, 86, 18, 30, 30,142, 32, 8,232,116, 58,191,196,142, 76,142,238,239, 27,227,234, 12,149,155,243,178, 16,
-223, 37, 39,154,228, 36,146,102, 60,212,164, 70, 19, 73, 73, 73, 36, 37, 37, 93,146,100,204,174, 11,225, 27, 91,190, 80,193,159,
-223,121,165, 19, 83, 59, 84, 28,120,242, 24, 6, 74,120,238, 80,137, 87, 81, 93,113, 85, 80,127, 59,114,228, 72,191, 66,247, 67,
- 69,126,161,192,177, 99,199, 2,154,139,243,134,198,216,145, 36,137,200,200, 72, 38, 76,152,224,220, 70,168,200,101, 27,161,173,
- 27,214, 59,183, 17, 26,209,111,132, 79,123,239,150,191,194,131,241, 79,213,255,192,207,221, 29,124,145, 95, 40,112,195, 13, 55,
- 56,215,234,137,162,136,197, 98, 1,160,164,164, 4,128,232,232,104, 0,231,121,173, 86,235,245,254,141, 27, 55,206,121,173, 40,
-138,152, 76, 38, 0,138,138,138, 0,156, 81,201,242,249,176,176, 48,175,138,239,183,178,227,140, 48,238,238,121,191,253, 61, 38,
- 20, 40, 80,160, 64,129, 2,127, 7,171,202, 45, 80,160, 64,129, 2, 5, 10,241, 41, 80,160, 64,129, 2, 5, 10,241, 41, 80,160,
- 64,129, 2, 5,191,125,104,148, 91,160, 32, 24,244, 14,114, 59, 16, 87,236, 14, 65,116,150, 2, 5, 10, 20, 52,138,248,198, 15,
-110, 31,180,161,175, 54,215, 95,247,212,212,237, 93,223, 62,159,112,225, 87, 52,170,211,168, 48, 32, 32, 32,161, 70,172,205,201,
- 41, 72, 18,146, 32, 57,211,149,169,177,240,196, 75,142, 60,127,158, 66,106,255,219,238, 95,251, 70, 68,112,157,242, 16,206,252,
-223,118,255, 20,123,138, 61,197, 94,195,246, 20,197,119,137,240,247,249, 43,120,240,142, 48,174, 73,182,114,232,168,228, 92,180,
-190,232,105, 21,179, 94,170,155,226,105,225, 51, 42, 4,169,126,134,151, 6, 33, 73, 88,206, 30,167,210, 34, 58,210,168, 9, 42,
-226, 90,183, 11, 56,151,158, 59, 98, 98, 98,168,174,174,198,116,161,128,240, 22, 41,202,208,173, 9,224,215,252, 93, 88, 76, 6,
-122,245, 26,212, 40, 59,222,214, 54, 5, 19, 38, 30,106,123, 50, 58,119,238,236, 92,130, 33,111,205,211, 24,184, 39,168, 15,213,
- 82, 9, 5, 10, 2, 34,190,247, 63,120,207,111, 3,247,222,115,191,207,107, 66,109, 47,148,120,247, 19, 11,139,158,118,223,133,
-189, 46,233, 77,187, 67, 64,144, 36, 64,162, 91,178, 35,143,231,119, 39,124, 24,182, 89, 24,189,231, 31,252,116,193, 78,177, 81,
-228,188, 69,224, 68, 88, 28,218,228, 52,174, 29, 48,130,240,136,136,128,203,186,122,227, 33,190,252,135, 6,204, 22,192, 6,186,
-131,252,240,131,145, 29, 7, 98, 8,143,109, 28, 9,154,206, 23, 16,222, 74, 33,210, 64,176,111,111, 30,157,218,155,233,145, 44,
- 33,138,118, 42, 75, 62,161,248,156,138, 26,115, 91,250,164, 13, 14,202,102,101,201,255,162, 86, 95, 92,164,127,100,241, 92, 82,
-255,110, 9,186,140,238,164,180,106,213, 42,102,207,158,221,168,223, 61,114,228, 72,102,206,156,137, 32, 8,188,254,250,235, 33,
- 33, 42,103, 34,124, 73, 89, 93,117,185,225,239,206, 56,242,128,126,233,187,239,250, 28,108,185,174,245,147,115,124,186,230,250,
-148,159,179,235, 78, 21,255,181,138, 79,197,229, 77,133,179,240,105, 29, 2,230, 90,114,163,118,179, 89, 0, 53,131,111, 16,217,
-252,179, 84,123, 94,170,179, 87, 31,192, 56, 31, 27, 17,171, 17,233,220, 34,154,106, 67, 9,106,155, 29,193, 38, 97,175, 54,114,
-118,219, 87,172,219,187,141,193,247, 62, 70, 66,109,182, 5,127,240,225,247,167, 17, 58,221, 2,172, 1,149, 10,180,145,160,214,
- 48, 96,104, 52, 61,174, 61,203,191, 62, 63, 65,120,100,199,192,200,174,188,128, 62, 93,171, 25,208, 55, 2,204, 54,224, 32, 3,
- 22,223, 64,139, 11, 59, 25,119, 83,183,223,101, 35,223,179, 59, 15,157,166, 12,141,202,130,201,100,167, 82, 31,193,160,155, 2,
-219,122,229,224,161, 93,196,132,151, 50,124,160,142, 78, 29,147,105,214, 44, 22,171,205, 70, 73,201, 5, 90, 23,157,228,240,209,
- 66,126,216, 90,198,128,129,183, 6, 92, 62,181,186, 10,251,145,151, 66,250,155, 67,153,158, 78,222, 68,214, 53, 87,167, 63,155,
-198,254,214,145,151,151,199,170, 85,171,234,231, 59,189, 2,157,118, 45,157,212, 78,205,132,192, 82,209,167, 8,219, 31,112,229,
-182,218,172, 70,181, 89,186, 93,240, 64,182,158, 27,167,188,229,117, 0,243,205, 55,223, 56,143, 71,143, 30,205,218,181,107,189,
- 30, 7, 52,248,119,139, 45, 8, 54,139,139, 87,226,219,186,101, 59, 3, 7,245,189,108,143, 82, 12,224, 49, 6,179,131,116,189,
-239, 19, 84, 28, 62,226, 32,188,110,201,112,232,168, 10, 73, 10,199, 46,232,184,109,164,149, 9,163,140, 46,234, 47,240, 42,118,
-252,212,105, 86,159,133, 83, 6,176, 73, 16,173, 2,141, 86, 77, 88, 77, 9, 27,151,191,203,109, 89, 79,250,204,165, 7,240,201,
-103,223, 33,164,102, 58,211, 16, 97,182,128, 40,130,198, 14, 42, 21, 49,241, 9, 76, 28,122,158, 85,235,204,132,199,251,167,218,
- 76,250, 19,252,233,150, 10, 98, 90,183, 1,187,232, 80,144, 86, 27, 17,173, 59, 83,153,144,200,135,155, 55,114,247,224,118, 77,
-182, 35,218,189,123, 55,189,123,247,246,251,250, 95, 14,238, 66, 50, 31,167, 99, 91, 19,177,205,116,168, 84,145, 24,141, 54, 74,
-203,140,108,202, 91, 76,120,179,235,233,123,227, 77,126,217, 10, 87,151,144,210, 89,226,186,235,174,225,204,217,114,118,238,222,
- 69, 77,141,158,216,216, 24,146,146, 58,162, 82,107,177,219,139,216,189,103, 11,189, 83, 7,241,123,194,200,145, 35,235,108,208,
- 58,115,230, 76, 94,127,253,117,222,245,162, 2, 2,234,132,155,168,226,147, 51, 15,173, 92,185, 50,100, 59,145, 7, 11, 87, 85,
-149,147,147, 77, 99,139,162,234, 56,209,105,207,190, 60,206, 37,143,173,212,164,158,223,106, 15, 1,117,193,166, 49,243,169,248,
-182,110,217, 14,208,104, 2,220,242,200, 97,175,159, 15,122,179, 75,208, 55, 89,150,207,129, 18,224, 19, 47, 26, 1,135,235,242,
-208, 81, 88,250,137, 8, 24,106, 95, 48,248, 6, 21, 19, 70, 9,184,186, 62, 29, 10, 80,240,233,234,180,170,180,100,183,155,200,
-233, 56, 17, 84,106, 98, 48,147, 82,248, 29, 69,101, 6, 42, 84,106, 42, 79, 31,227,228,201,227,116,236,232, 61,117,216,207, 59,
-119,114, 33,238, 6, 90,105,181,104,195,180,220,182,244, 14,204,159,220,238,252,252,190,135,250, 51,101,124, 75, 18,219,132,147,
-220,162,156, 98, 63,114,106,155, 74, 11,152, 56,172,146,152,248, 4, 48,153, 29, 36,106,179,131,213, 70,152, 46, 12,149, 0,150,
- 46, 67,248,228,139, 28,238,184,117,120,147, 36, 61,215, 13, 46,253,129, 89, 95, 76,231, 68, 35, 45,154, 71,209, 62,177, 13,145,
- 81,145,156, 56, 81,140,221, 46,146,216, 46,134, 3,191,254,200,158,136, 40, 82,123,120,223, 27,114,255,254, 45,244, 76,177,208,
-161, 67,103, 14,254,122,130,157, 59,127,165,228, 66, 53,146, 4,241,241, 17, 24, 12, 53,244,238,125, 29, 21, 21,149, 20,239,220,
-205,222,253, 17,244,234,145,198,239, 1,178,218,115,221, 40,246,141, 55,222, 96,241,226,197, 1,171,190,105,211,166,121,220,230,
- 70, 16,132, 58,174,183, 80,184, 81, 95,120,225, 5,198,143, 31,223,232,180, 97,233,233,233, 8,130,192,138, 21, 43,252, 26,176,
-102,101,101,121, 84,132,123,246,236,113, 38,173,246, 52,120,203,204,204,108,176, 35,119,205,183,234,216,201, 60,171, 81,170,211,
-221,158,122, 74, 5,226,242,184, 38, 93, 15, 93,239,205,234, 32,163,203,253, 94,199,183,117,203,118, 39, 9, 6, 3,111,196, 22,
- 12,233,201,216,180,105, 19,197,197,197, 20, 23, 23, 55,106,139,139,186,115,124, 14,108,254, 89,116,142,122, 22, 61, 45,176,240,
- 25,129,110,201, 2, 18, 90,223, 55, 86,173,161, 75,223, 81, 12, 25, 54,154, 33, 67, 70,210,251,166, 49, 68,223,242, 40, 67,155,
- 75,128,136, 70,128, 95,246,251,190,159, 71,142, 30, 35,166,121,123,180, 97, 26,194,180,142,100,198,186, 59, 62,117,190,126,217,
- 87, 8, 38, 19,152, 76,164,118,168,244,235,183, 38,199,151,147,216, 58, 28,140, 38, 42,206, 87,177,236,163,189,116,189,225,109,
-222, 93,186, 29,171,190, 18,109,152, 22,173, 86,203,133, 22, 55,240,243, 37,216,197, 33, 20,164, 23, 8,126, 57,184,139,112,205,
- 25, 34, 34,180,132,235,194,232,220,185, 19,125,110,188,145,248,248,120, 52, 26, 53, 97, 97,106, 18,226,195, 41, 62,121,220,247,
- 72, 81, 42, 38, 38, 58, 2,131,209,198, 47,191, 28,230,244,217, 74,138, 78, 85, 81, 80,104,225,204,217,106, 74, 74, 42, 56, 92,
- 80,200,213,201,201, 36,182,107, 70,105, 73,209,239, 74,237,121,218,129,253,177,199, 30, 11, 42,223,168,156,233,223,149,252,124,
-109,160, 27,172,138,124,231,157,255,103,239,205,227,163,170,238,255,255,231,157,153, 76, 18,178,145,144, 16,150,176, 37,172, 34,
-251,162,178, 83,130, 32, 32,173, 74, 0,133, 90,107, 43, 1,181, 31, 64,139,168,232,175,237,215,165,226, 6, 90, 43,130,181,213,
- 74, 64, 13,106, 69,164, 85, 64, 86, 1,129,136,128, 32, 32, 4, 8, 36, 16,178, 76,246,217,231,254,254, 24,238,101, 50,153,204,
-204,157,153,144, 4,239,235,193,144,153, 59,247,190,231,222,115,239, 57,175,243,122,191,207,121,159, 21,242,130,176,129, 98,203,
-150, 45,100,103,103,203,171,163,248,163,110,164,197,103,221, 73, 79,234,168,187,159,147,175,115,148,126, 83, 90,185, 61, 84, 10,
-251,163,133, 81, 62, 28,171,146,235,211, 55, 38, 78,156,200,109,183,221, 38,187, 49,165,247,210,103,233,189, 18, 55,103,125,202,
-110,202,236,167, 3,114,119, 42,142,241,133, 74, 1,134, 18, 63,253,228, 84,147,249,249,249,180,111,223, 62, 0,215,167,192,171,
- 75,196, 43,170,143, 90,234,206,121,203,157,190,238, 19,167,164,239, 45, 62, 99,124,117,126, 65,208, 32,198,182,166, 71,171, 8,
-132, 60, 19,118,192,104,172,244,121,220,133,188, 60,218,246,214,160,211,234,208,106,195,176,219,173,181,190, 63,127,186, 18,140,
- 38, 64, 36, 86,244,111, 16, 68,255,182,229, 96,212, 0, 2,167, 79, 22,241,226, 63,207, 49,234,142,251,168,104,215, 11,253,197,
- 75,132,197, 37, 32, 58,236,196, 36,165,112,234,251, 47, 25, 50,232,218, 43, 22, 79,174, 76, 87,210, 83, 82,241, 13,165,151, 73,
-140, 17,176,217, 29, 88,172, 54,138,138, 75, 9,211, 71, 96, 54, 91,177,218,236,216,108, 14,108,118,145, 50, 67,177, 79, 91,250,
-176,106, 34, 34, 83, 40, 41, 41,167,162,178,134, 82,131,145,216, 86,253, 24,214,183, 47,251,190,249, 31,237, 44, 54,202, 43,202,
-233,209, 35,141,112,189,142,234,202,210,235, 70,237,137,162, 40,199,246, 92,177,124,249,242,128, 98,125, 11, 22, 44,168,165, 30,
-221,191,243,215,109,230,186,150,226,220,185, 9,140, 27, 87, 59, 33,117,126,126, 62, 0,235,215,175,167,184,184, 56,160,132,233,
-155, 55,111,150, 73, 79, 58,254,227,143, 63,246, 73, 42,238,158,137, 21, 43, 86,200, 3, 58,164,245,234, 92, 59,114,111,189,245,
-150, 79,210,151, 86,122,152, 55,111,158,172, 28,189,149,149,175,246, 48, 35, 35,131,105,183,108,230, 67, 96,198,178,106, 52, 51,
-202,188,218, 27, 58,195,123, 89,185,199,240,124,197,252, 26, 3,215, 52,115,139, 39,101, 23,140,218, 43, 47, 47,175, 67,128,203,
-151, 47, 87,164,252, 30,152,169, 5,156,131, 87, 86,125,224,116,123, 74,175,171,131, 93,156,228,216, 51, 77, 65, 47, 84, 20,137,
- 49,150, 16,107, 44, 38,178,186,132,168,234, 34,122, 20,230,112,176,196, 68,153, 67,192, 6,196,181,241,103,222,139,136,221, 92,
-137, 86,171, 65,171,171,125,187,186,109,155,195,164,177, 93,100,197,151, 91, 16,238,215,169,197,138, 22,168, 49,129,209,196,133,
-159, 10, 73,110,223,129,158,189,122, 1,208, 82,103, 67,167,211, 93, 33, 90, 13, 23,242,174,189, 98, 57,120,240, 96,157,222,176,
-180, 77,114,207, 40,113, 91,217,237, 80, 93, 99,165,186,218, 66, 69,133,153,194, 66, 3, 5, 5,197, 84, 86,154,169,170,178, 82,
- 85,101,161,186,218, 74,121,153,111,197,108, 54,219, 48,153,236, 88,173, 22, 98, 98,244,116,104, 31, 75,139, 40,103,111, 57, 53,
-173, 51, 41,237, 98,137,139,141, 64, 20,237, 88,109, 14,204,230,234,235, 70,237, 61,242,200, 35, 94, 73, 76,137,234,115, 93,218,
-200, 19,150, 45, 91,166,104, 49,228,218,238,191,204, 90, 47,137, 72,242,243,243,201,206,206, 86,236, 25,218,178,101, 11,235,214,
-173,171, 69,122,233,233,233, 76,155, 54,205, 39, 65, 9,130, 32, 63,199,146,250,147,220,139, 82,231,205,245,123, 81, 20, 21, 44,
- 31, 37,214, 82,109,158, 8,211, 31,229,156,152,152,136,224,162,231,130,181,215,208,216,176,250, 25,249, 21, 40, 20, 43,190,166,
-164,244,174, 54,108,246,128,214, 52,123, 96, 70, 56,189,210, 44, 28, 63,125,117,219, 35,207, 57, 73, 15,112, 81,128,146,187, 83,
-203, 43, 75, 4,236, 68,179,195, 71,140,207, 97,179,210,125,247, 74,194, 5, 7, 69, 22, 13,216,109,156,191,152,207, 63,242, 53,
-132, 33, 82,174, 21,184,105,128,239, 33,239, 41, 41,237,217,241,239, 69, 76,122,252, 83, 52, 17, 17,196,198,198,241,239,222,243,
- 65, 52,195,136,118,206,225, 87,102, 19, 56, 96,255,177, 24,232,234,251,186,115, 47,133,211, 47,209, 4, 8, 76, 24,146, 76, 98,
-201, 79,228,152, 10, 72, 75, 40, 97, 87,202, 98,194,180,118,180, 90, 13,118, 83, 37,112,237,131,248,146,210,147,122,179,174, 67,
-158,235,139,139,120, 67,124, 66, 18, 5,103,126, 32, 92,175,197, 98,117, 96, 50, 95,224,252,133, 18, 74, 13, 21,148,150,214, 80,
- 82,106,164,164,212, 72,203,132,206, 62,109, 21, 22,139, 92, 42, 44,166, 87,175, 52,202, 12, 6,194,116, 26, 42, 42, 47, 80, 93,
-230,224,134,174,213, 36, 39, 37,209,162, 69, 11,194,195, 35,185,120,169, 18, 65, 27,207,245,130,250,212, 25, 92,141,245,249, 11,
- 73, 25,206,159, 63,191,142,138,148,220,169,129,142, 20,157, 62,125,122, 45,197, 34,173,139, 41, 8, 2,119,221,117, 23,227,199,
-143,247,123,194,180, 39,165, 39,193, 93, 89,214,241,172,244,239, 47,171, 62, 73,249, 9,130, 32,119,218,164,239, 87,172, 88,193,
-202,149, 43,101,181,215,191,127,127,206,123, 57,191, 21, 43, 86,240,224,131,243,228, 69,132,157, 4, 42,202,212,245,214, 91,111,
-201,215,239, 15,137,174, 88,177,130,191,143,141,103,198,242, 26,143,110,207, 25,203,107,100,123,247,143, 13,107,212,103,208,157,
-236, 54,172,126,166, 97, 93,157,161, 34,188, 17,175,119,147, 7,186, 4,163,246, 92,225, 78,122, 19, 39, 78,244,107, 37,247,158,
- 93,157, 49,188,158,105, 48,114, 8,236,220, 95,251,123, 87,183,231,239,103, 68, 35, 98, 71, 68, 64, 35,250, 22,202,162,195,206,
-103, 71,242, 40,177,138,152,108, 80,109,135, 82,155, 6, 17,145, 98,163, 72,143,137,183, 19, 27, 29,227,155, 4, 6, 14,224,194,
-133, 11, 20, 28,221, 74,231,129, 19,209,235,195,157,163, 58, 53, 26,176, 91,228,110,218,250, 29, 22, 28, 93,167,248, 85, 94,251,
- 79,234,233,151, 86, 9, 2, 68,104, 4,134,223,150,202,112,235, 33, 16,194,249,176, 48, 12,139,197,129,221, 84,197,222,127, 44,
- 98,212, 77,253, 26,229, 1,151, 86,173, 94,185,114,165, 60, 8, 66,169,210,147,208,175,207, 32,126,252, 33, 7, 49,191,130, 26,
-163, 21, 67,184, 9, 17, 3, 38,147,141,138, 10, 51,151,139,107, 40,184, 88,197,200,177,190,167,131, 24, 45,137,228,158, 41, 34,
-181, 75, 71,186,116, 73,161,164,164,152,248,150,118,186,117,139,163,117, 82, 42, 17,145,145,148,149, 85,145,243,221,113, 46,228,
- 87,208, 38,165,119,179, 37, 58, 17,103,191, 74,226, 16, 87, 50,241, 54,239,174,222,174,146,219,232,248, 77,155, 54,177,124,249,
-242, 58,196,247,234,171,175,242,213, 87, 95,249,180, 39, 61, 23,210, 66,200,206,115, 18,235, 16,146, 68,124,211,166, 77,243,203,
-205, 89,219,117,186, 37,168, 69,164,231,205,155, 39,187, 53, 1, 30,124,240, 65,143,223, 75, 4,229,139,168,164, 17,165,111,190,
-185, 66,142,133,246,239,223, 15,215,248,219, 85,197,230,123, 29, 64,201,158,102,186, 65,182,151,113, 75,120,173, 82,159,190,172,
- 90,182,231, 15, 38, 78,156, 88,107,228,235,109,183,221, 86,235, 57, 9,198,189, 57,103,241, 11,181,219,232,165,143, 7, 68,126,
- 62,137,175, 41, 42, 60, 9, 51,103,206, 12,234,120,193, 37,126,119,199,173, 2,119,220,170,185, 90,209, 4,145, 57, 51, 69, 68,
-194,112,136,113,164,165,197,226,160, 8, 1, 59, 14, 65,244,163,209, 16, 40,119,104, 41,182, 58,176, 57, 68, 42,172, 34,149, 86,
- 7, 22,173,142,212,177,227, 24, 61,234, 54,191,206,177,103,247, 30, 92, 28, 92,192,129, 3, 89,156,172, 40,166,235, 45,119, 58,
- 85,157,197, 2, 8,124,159, 91,201,193, 51, 81, 88,187,221,227,247,117, 59,122,142,102,253,182, 15,152,122,139,254,106,203, 34,
-106,192,225,140, 17, 90,141,149, 20, 28,222, 74,106,251, 86, 12, 24, 56,160, 81,238,109,255,254,253,107,141,138,203,204,204, 12,
-106, 84, 94, 74,167, 30, 28,216,251, 37,173, 19, 91,208,162,133,238,138,219,210, 78, 69,165,133, 82,131,145, 14, 93,122, 51, 98,
-216,104,159,118, 38, 77,186,139,175,254,251, 47,246,238, 59,202,200,225,253,232,212,169, 19, 86,139,137, 1,253,251, 18, 21, 23,
-199,185,220, 60,242, 11,202,248,102,207,143, 24, 42,227,184,227,150,209, 52, 87,204,155,155, 41,215,148,121,153,153, 50,113, 57,
-220,200, 78,163, 17, 64,188,218, 84, 10,192,100, 15, 13,209,220,204, 76, 87, 97, 2, 8, 56, 28,142, 90,170,111,254,252,249, 8,
-130,192,196,137, 19, 92,216, 23, 38,207,122,186, 94,183,155, 47, 82, 18, 4,193,111,210,115,199,180,105,211,124, 42, 59,127,158,
- 99,201,123,209,175, 95,191,122,191,247,103,149,118, 87, 18, 21, 69,241,138,218, 19,234,144,169,191,112,183,247,209,194,232, 58,
- 93, 13,215,109, 95, 30,178,250, 44,107,247,152, 94, 83,140,241,121, 37,190, 97,195,135, 54,136, 79, 55, 84, 74,207,181, 0, 3,
-193,143,167, 69,122,165, 93,173,132,143, 60, 87,123, 46,128,211,229,233,192,142,153, 31, 79, 85,242,207, 15,157, 25, 53, 70, 12,
-177,210,178,135, 47,226, 19, 49,217,193,230, 16, 17, 69, 17,125,187,110,180,107,211,137, 27,135,220, 66, 74, 59,101, 57,237,198,
-142, 25, 75,116,116, 52,219,182,254,143,207,190,126, 15,190,184,249,106,143,231,112,127,250, 15, 28,162,248,218, 47,117,154,201,
-191, 54,173, 97, 64,135,106,250,119,142, 1, 81,164,172,202, 74,101, 81, 30,167,118,125,130,233,248,151, 12, 30, 60,136,158,221,
-123, 52, 90,195, 59, 96,192, 0,185, 7,172,212,189, 89,231,153,187, 66,106, 39,143, 31,163, 32,247, 28, 26,141,128,221, 46, 18,
- 17,153, 64,247, 94, 55,114,199,175,252, 95,133,189,117,251,190,236,221,247, 63, 76, 38, 27,125,110, 76,165,125,187, 68,242,206,
- 23, 98, 56,114,154, 19, 39,243,216,242,245, 97,206,229,139,252,254,129, 63, 4,116,174,103, 54, 84,134,180, 28,207,158, 61, 27,
-208,113,142, 15,227, 3,222,239,246,245,126,218, 59,253,175, 90,170,111,249,242,229,144,251,110,157,125, 61,217,243,166, 2,221,
- 27,247,160, 58,200, 65,182,129,210, 64,148,250, 72,205,215,247,158, 84,164,235,177,158,236, 41,186,207,231, 62,102,221,242,123,
-157,106,247,150,186,174, 76,215,109,190,136,175,185,100,222,209, 53,228, 13,111, 72,132, 98,137,251,183, 63,176,187, 16, 92,221,
- 60,156,199, 79, 67,207, 52, 27, 90,170,101,210, 3,216,181,223,194, 20,159,124, 32, 80,105,177, 97,177, 65,161, 5,166,223,253,
- 0,177,177,113, 1,159,235,144,193, 67, 24, 50,120, 8,251, 15,236, 7,174, 6, 24, 3, 33, 61, 9,214,222,247,176,234,187,253,
-104,119, 31,165,172,232, 20, 7, 10,227, 56,145,247, 75,210, 58, 36, 51,102,236, 24,134, 12, 30,210,232,247, 57, 88,194,115, 39,
-191, 17,195, 70,243,253,145, 28, 10, 47, 21, 18, 21, 21,229,151,202,171,211,176,244, 29, 68,255,190,131,200, 90,189,146, 99, 39,
-190,165,109,114, 52, 17, 17, 97, 84, 85, 89,200,191, 88,129,160,235,192,239, 31,184, 55,160,115,140, 78,120, 36,164,229, 39,205,
-189,107,178,248,238, 81, 72,251,109,237,105, 18, 57,129,151, 65, 40,218,172,185,115, 19, 92, 8, 52, 52, 13,185, 47, 50, 82, 66,
- 86,193,206, 71,244, 84,102,238,238,205,166,138, 85, 75, 31,175,227,238, 12, 25,241,133, 58, 95,230,181,206,191,169, 20,199, 79,
-107,174,100,111, 17,175, 76, 97,184,226,102,148,213,160,131, 57, 51,116,172,250,208,230,127,193,234,195, 49,197,167, 80, 93,105,
-130, 40,145, 22, 45, 90,132,228, 92,135, 12, 30, 66,175, 7,183, 49, 56,165,156,150,173,186,210,103,124,144, 21,114,224, 16,192,
- 73,112, 35,129,253, 7,246, 55, 9,194,107, 72,244,239, 51, 8,250, 4,111,103,214,236, 76,118,237,222, 78, 81, 73, 17,198, 75,
- 53, 68, 68,180, 34,165, 75,223,128,200, 52, 84,157,185,134,180, 87,187,103,239,128, 80,165, 24,204,125,247,234, 8,207,220,247,
- 26,253,249, 8,198,181,217, 28,113,235,148, 25,138,148,218, 80, 31,223, 55, 68,140,111,202,236,167,229,129, 45,171,150, 62, 94,
-231,187,144, 42,190,159, 11, 68,185, 24,108,117,242,114, 58,213,160,150,110, 93, 35,128, 42, 69,189,168,137, 15, 54,204,122,115,
- 11,255,184,168,193,202,226,122, 39,189, 80, 35, 80,146,107, 14, 88,101,120,129, 57,241,143,215,253, 34, 59, 33,180,246,114, 30,
- 9, 74,229,169, 8, 14,211, 30,122,163, 89,116,182, 92,201, 47, 24,210, 3, 16,166,204,126, 90, 77,135,174, 66, 49,212,133,104,
- 85,168, 80,209, 92,161, 42, 62, 21, 42,105,169, 80,161,226,103, 5,141, 90, 4, 42, 84,168, 80,161, 66, 37, 62, 21, 42, 84,168,
- 80,161, 66, 37, 62, 21, 42, 84,168, 80,161,162,249,163, 86,140,239,246,145, 41, 1, 27,242,148,251, 46,212,246, 70, 15,109,239,
-243,184,234,210, 75,242,251,168,132, 54,242,251,237,251,242,235,236,107, 78, 74,246,105,111,211,178,135,229,247,227, 23, 94, 29,
-253, 20, 94, 84, 24,208,249,213,135, 64,207,175, 62,120, 58,191,193, 3,124, 47, 44, 91,124,230,168,252, 62,177,203,213,116, 91,
- 7, 14, 22, 52,120,249, 77,220,228,125,237,181,184,118,237,248,181,203, 50, 47,111, 36, 95,253,253,255,141,159,211,224,207,159,
-187,189, 19, 39, 78,212, 73,180,188,112,225, 66,122,244,232,209, 40,245, 67,181,215,252,236, 29, 57,114, 68,126,223,167, 79,159,
-160,237,213,183, 64,119,115, 44,191,107, 70,124,158, 32, 37,105,149, 16, 76,222,186,134,176, 87, 93,122,137,168,132, 54, 50,225,
-181,233,208, 25,128, 75,126,172,173, 86, 95, 67, 61,126,225, 27,114,131,253,247,245,251, 0,120,104,234, 80,174, 71, 20,159, 57,
- 74, 98,151,222, 50,225,245, 30, 60, 28,128,163, 7,190,105,244,242,251,188,170,138, 47,171,171,153, 16, 21,197,151,213,213, 80,
- 88,200,190,197,143, 1, 48,116,233,139,141, 90,110,219,182,109,227,131, 15, 62,192,100, 50,213,218, 30, 17, 17,193,204,153, 51,
- 25, 51,102,140,218,173, 86,225,145,232,250,244,233, 35, 19, 94,176,245, 77,202, 73, 44, 17, 94, 48,245,205,125,213,138, 80, 77,
- 77,168,143,140,155,140,226,243,132,236,236,108,162,123,101,212,250, 28, 12, 81,101,103,103,147, 17,149, 20,180, 61,137,232, 34,
-227, 90, 81, 93,122, 73, 38, 60,111, 10,208, 31,101, 50,116,214,227,108, 90,246,176,252, 0,213,183,159,183,249, 35,238,191,169,
-215, 59,115, 98,138,162,136,195,225, 92,205,221,110,183,203,231,175,209,134,249,173,154, 0,218,182,118, 42, 29, 75, 69, 25,102,
-155,115, 82,125,149,205, 46,159,127, 92,107,223, 61, 47,137,232,226,218,165, 81,124,230,168, 92, 1,235, 87,128,241,215,172,252,
- 0, 30, 46,116, 42, 66,137,244, 36,194, 3, 56,241,213,166, 58,251, 77,241,243,185, 41,143, 42,166, 36,186,136,178,146, 83,180,
-110,217,139,148,226,174,138,159,189, 19, 39, 78,240,225,135, 31,214, 33, 61, 0,147,201, 68,100,100, 36,109,219,182,245,168,252,
- 84,252,124, 9, 79,170,111, 71,142, 28,169,183,190, 93, 85,128,241,126,145,201,208, 89,143,147,153,153, 89,111,125,147,246,243,
- 85,223, 50, 51, 51, 89,241,238,218,218,219,238,187, 59,104,162,114, 39, 83,127, 22, 15,104,116,226,203,204,204,172, 69,122, 0,
-209,189, 50, 2, 62,249,204,204,204, 90,164, 7,144, 17,149,164,216, 94,117,233, 37, 34,227, 90, 17, 23,235, 92,221, 64,250,235,
-105,191, 54, 29, 58,251, 84,127,155,150, 61,204,208, 89,143,243,155, 25,119, 2,200,127, 61,237,247,247,245,251, 20,245,166,180,
- 90, 45, 41, 41, 41,104,181, 90, 44, 22, 11,213,213,213,216,237,118, 12, 6, 67, 64, 55, 44, 90,167,229,159,203, 63, 37, 60, 14,
- 10,207,194,254,170,124,138, 46,157,226,253,101, 79, 40, 82,121,113,237,210, 72,105,231,116, 5, 75,127,235, 39, 61, 66, 86,126,
-254, 36,129,122,184,176,144, 9, 81, 81, 60,243,240, 67, 0, 60,227, 66,120,171, 79,158,172, 77,122, 10,178, 74,157, 21,119,194,
-208,124,102,118,156,141,217,209,149,112,135,200,143,197, 91, 56,184,233, 4, 93, 29, 15,250, 93,126,203,150, 45,195,104, 52,242,
-238,187,239,114,223,125,247,201,219,165,207, 70,163,145,136,136,136,160,115, 68,170,184,126, 72, 47,174, 93, 26, 39, 15,238,166,
-247,224,225,117,234,219,215, 95,124, 66,114,114,114, 45,183,167,175,118,212,159,250,150,153,153, 89,123,121, 13, 5,164, 7,176,
-226,221,181, 33, 33,191, 80,192,219,218,123,129, 76, 98,111,118,131, 91,220, 73,175, 78,143,190,162,146, 75,231,207, 18, 25,215,
-170, 94, 21,232,173,209,118,199,123, 31,126,194, 67, 83,135, 50,116,214,227,245,246,170, 60, 65,175,215,163,213,106,137,141,141,
- 37, 55, 55, 23,131,193,128,195,225, 8,152,244,218,182, 78, 38, 90,167,229,142, 63, 60,203,109,247, 12, 99,195, 15,249, 92, 50,
- 18, 52,233,185,227, 66,193, 37,142, 30,248,134,164,248,216, 43, 93, 35,109, 72,202,111,226, 93,191,113,246, 99,117, 97,138, 72,
- 15,224,233, 55,254,206,211,111,252, 93, 38,189, 47,171,171, 89,116,235, 21,141,151,164,247,235,186, 15,198,109,228,214,105,237,
-248,109,167, 7, 9,211, 68, 19, 69, 11, 52,104,105,159, 60,156, 17,119,141, 35,183,221, 50,191,236,108,219,182,205,121, 93,239,
-189, 39,147,157,167,191,174,251, 6,130,157, 59,119,170,140,113, 29,145,222,115, 79, 46, 36, 59, 59,155,127,252,237,229, 58,164,
-151,157,157,205, 27,111,188,225, 87,125,115, 39,189,250,234,219,109,195,175,228,184,141,137, 10,136,244,106,145,159,194,133,123,
-155, 3,116,190,212,222, 43, 79,253,142, 57,247, 76,144,183,175, 90,243, 37,143, 62,171, 92,178,186,170,189, 27, 38,222,204,159,
-215, 57,211,173, 79,143,110,173, 88,245,121, 34,189,242,138, 74,140,229, 37,178,251, 80,218,167,188,194,119,166,123, 79, 15,209,
-123, 31,126,194,190,172, 23,100,119,130,180,207,123, 31,126,226,215, 57,166,165,165, 81, 82, 82, 66, 73, 73, 9,122,189, 30,141,
- 70,131,209,104,196, 96, 48,160,213,106,177,219,237,138, 18,234,126,252,159, 79,217,248,157,145,229, 11,110,165,109,235,100, 90,
- 68, 37,112,190, 58,159,247,151, 61, 65,180, 78, 75,149,205,142,214, 79,123,158, 72,239, 66,193, 37,202, 11,156, 43,242,246, 76,
-105,205,217,162, 50,194, 91,132, 99, 54,154,131, 46,191, 39,222,222,192,234,231, 31,225,198,212, 27,248,241,204,143, 62,237, 73,
-164,231,174,240,190,172,118,174, 11,150,155,249, 23,238,248,226, 29,122, 15, 77,229,104,142,239,197, 74, 15,233, 55, 48,124, 76,
- 50, 73, 81,189, 48,138,149,104, 45,213,232,109,102,202, 53,118, 76,130,136, 67, 31, 77,251,145,131, 89,247,196,243, 76,235,255,
-164, 87, 91, 82, 92, 47, 60,220,185,218,189,244,204, 74,141,131,244,217,100, 50, 17, 17, 17, 17,112,172,111,245,234, 53,140, 28,
- 57, 18, 21,205, 31, 41,237,218,144,145,145, 65,118,118, 54, 57, 57, 57,164,126,241, 9,221, 7, 12,227,228,193,221,242,120,135,
-140,140,140,144,213,183, 23,239,155,194,223,254,183,151, 54,169,109,185,116,174,176, 81,175,221, 53,254,232, 90, 63, 2,197,148,
- 16, 37,206,240, 25,227,147, 72, 47,230,134,233, 84, 30,251,136, 57,247, 76,224,209,103,223, 9,234, 71, 37,210, 11, 5, 92,221,
-152,158,148,160,177,188,228,202,232,206,124,191,236,185,186, 49, 61,245,172,246,101,189,224, 28,157, 88,228,253,129,178,217,108,
-180,104,209, 2,141, 70, 67,124,124, 60, 53, 53, 53, 84, 95,105,184,147,146,146, 40, 41, 41, 81,148, 24,214,100,128,161,145,145,
- 44,250,219, 78,198,247,131,115, 7, 65, 90, 55,119,209,223,118,242,250,194,177,216, 29,118,197,229,231, 26, 84, 31, 55,168, 39,
-186, 24, 13, 95,110, 59,198,128,158, 29,136,141, 14,103,251,129, 83, 36,118,233,205, 89, 15,163, 58,125,149,223,250, 99, 34, 92,
-132,169,227, 4,222,222,144, 75,171,248, 46,220, 57, 92,240,171,252, 36,210,147,200, 14, 64,252,243, 50,104, 95,142,240,192,159,
- 16,255,242, 12,104,140, 8,251,158,231,141,228,100,188, 45, 80,101,234,121,142, 78, 45, 39, 81, 97,175,194,108, 56,197,251,121,
-107,216, 53,213,192, 13,191, 31,203,173,127,136, 38, 50,190, 7, 17,186,120,116, 83,203,217,255,137,127, 73,186, 53, 26, 77,173,
-251,231,254, 57, 24,236,220,185, 19, 65, 16,216,181,107, 23, 35, 70,140, 8,137, 61, 64, 37,210, 70,196, 47, 38,223, 73,110,110,
- 46, 57, 57, 57,100,103,103, 51,232,202,123,128, 65,131, 6, 49,113,244, 96,185,190,245,233,211,135,179,126,142,114,116,173,111,
- 23,255,243, 2, 49,189, 35,136,238,182,128,143, 94,248, 61,253,110,108, 67,143, 41,207,178,114,229,202,107, 62,106,210,157,252,
-154,133,226,115,141,237,197,220, 48,221,227,129, 74, 98,125,158, 98,123,238,152, 30,221,186,214,194,163,254, 64, 82,115,245,185,
- 62,253, 81,123,238,189,166,250, 8, 79,137,218, 3, 40, 46, 46,166,117,235,214,178, 50,176, 90,173,242,128,150,184,184, 56,194,
-194,194, 56,127,254, 60, 97,126,218,251,215,230,237,252,126,202,104, 36,253,112,210,230,116,115, 2,140,233, 14,177,207,110,101,
-225, 31,135, 41,186,222, 11, 5,206, 65, 56, 29, 91, 39, 96, 48,155,209,197,106, 49, 21,213,128, 70, 67,219, 78, 41,124,245,245,
-254,128,202,239, 55,143, 62,199,153,111,182,160,187, 4,101,201,208, 66,163,225,230,206, 93,248,197,104,255,166,103,184, 43,189,
-213, 51,126,207,199,230, 19,208,213, 4,223,234, 32, 90, 7,183, 15, 34,229,246,223,248,167,190,219, 39, 96,177,148, 18,102,179,
-242,126,222, 26,246,220, 23,199,168, 59,126, 73,207,214,189,248,225,171,109, 12,200,168, 38,204, 82,141,173,167,131,162, 66,255,
- 6, 67, 73, 36, 39,197,248,220, 63, 7,131,213,171,215,176,114,229, 10,230,206,125, 48,104,226,219,185,115, 39, 89, 89,107,229,
-243, 83,201,175,241, 48,241,174,217,164,166,166,202,202, 79, 82,122,201,109,219, 6, 85,223,230,220, 62,138,189, 5,151,137,233,
- 23, 67,254,151,167, 33, 34,156,187,254,112, 47, 9, 41, 83, 26,245,122,235,115,145, 6, 67,132,161, 74, 82,237,119,140, 79, 82,
-126,171,214,124, 25,178,130,249,243,180,169, 68,198,196, 56, 93,126,130,128, 70,163, 44,228,104, 44, 47,241, 26,239,187,170,246,
-252,195,190,172, 23,188,250,207,101,181,231, 7, 42, 42, 42,168,172,172,196,108, 54,227,112, 56, 40, 42, 42,146,221,156, 53, 53,
- 53, 84, 85, 85, 41,114,117,126,250,183,167,216,246, 3,148,159, 5,171, 17, 94, 95, 60, 86,118,115,126,119, 16,190,191,248, 13,
- 90,133,229, 95, 94,112,154,132,184, 40, 90, 37, 68,209,163,123, 47,114,207, 20,113, 50,191,132,142,173,226, 48, 23, 94,198,102,
-181,213,154,203,231, 79,249, 13, 27,243, 75, 70,140,189,155, 79, 63,255,136,173, 59, 62, 98,205,171,143,114,215,163,207,115,216,
- 10, 69, 37,151,253, 42, 63,215, 88,222,111,135,221,196,172, 27, 58,241,209,167, 95,115,248,240, 89, 94, 61,146,195, 7,227,239,
-133,119,118,147,159, 95, 84,107, 46, 95,189,174, 38, 83, 56,118, 75, 49, 22, 75, 57, 0,201,237, 59,208,179, 87, 47, 42, 34,157,
-177, 86,163,163, 6,141,185,154,200,106, 45,133, 23,189, 19,159,116,207, 76, 38, 83,173, 81,157,238,159,131, 85,123, 18,153, 6,
- 19,235,219,185,115, 39,171, 87,175,225,173,183,222,100,229,202, 21,100,101,173, 85, 99,135,141, 8, 41,148,224, 14,215,250,230,
- 58,151,207,159,250, 54,114, 72, 15,210,135,119,231,185,255,247, 50,175, 44,223,200,255,183,250,107,230,254, 98, 48,151, 62,219,
- 72,185,161,194, 39,201,172, 92,185,146,121,247,221, 93,239,247,243,130, 24,220,114, 45,148,222,134, 0,147,229,107,188,169, 61,
- 87,210,123,229,169,223, 93,137,239,189, 83, 71,245, 5,170,246,206,124,227, 28, 53,168,209,106,209,133,133, 49,163,101, 91, 30,
-121,196,191,229, 73, 36, 53,231,109,144, 75, 64,106,197, 75,208, 88, 9,226,227,227, 41, 42, 42, 34, 60, 60,156,202,202, 74,146,
-146,146,228,193, 46, 38,147,137,178,178, 50, 69,196, 55,231,185, 15,120,125,241, 88,226, 58,195,182, 31,224,255,150,110, 37, 90,
-167,229,206,249,127,229,130,227, 18, 89,175, 62,134, 86,227,191, 61, 73,237, 13, 26,212,157,164,212,206,180, 78, 74, 68,175, 17,
-176, 9, 34, 69,213, 70, 12,149,166,128,202,239,149, 23,254,195,175,122,117, 33, 54,182, 21, 45,146,218, 97, 45, 53,112,112,195,
- 90,202, 74,243, 2,122, 64,255,249,194,195,176, 48, 29,157,205, 66,231,106,184,172,173,224,245,139,251, 65, 31,235,183, 13,211,
-233, 10,138, 53, 70,242,244, 53, 12,238, 58,150, 27,238,141, 38, 55,126, 27, 73, 73, 7,233,112,115, 46,229,154, 74,204,162,145,
-154,213, 14, 34,162, 99,252, 82,122, 13,133,213,171,215, 48,107,150,179, 33,154, 61,251, 30, 86,175, 94, 19,176,173,172,172,181,
-204,158,125,143,252,121,214,172,187,201,202, 90,171, 50, 80, 35,224, 66,193, 37,246,236,217, 35,199,244, 6, 13, 26, 4, 56,167,
-115,125,184,126, 99,192,245,237,179, 79,255,204,132,197,127, 96,210,164,113, 36,134,107,169, 20, 68,190, 60,121,158, 61, 63,228,
-251,109,171, 62,242,147,182, 53,165,193, 45, 83,102, 63, 45,191,130, 33, 63,191, 36,214, 43, 79, 57, 23,146, 13, 54,182, 87,167,
- 65,170,174,198, 98, 50,161,209,105,209,134,233, 8,211,135, 19, 17, 17,161, 72,237,121, 34,188, 75,231,207, 6,172,246, 60, 61,
- 96, 15, 77, 29,170, 72,237,129,115,158, 94,155, 54,109, 48,155,205, 20, 22, 22, 82, 80, 80, 64,124,124, 60,101,101,101,178,114,
- 80, 66,124, 69,151, 78,241,212,179, 91, 41, 63, 11, 47, 61, 58,146, 63,205, 31,198,156,231, 62, 32,235,149,199,208,234,244,232,
- 4, 1,157, 2,123,229, 5,167,105,155,216,146, 48,194, 16, 16,184,120,230, 40,231, 46,151,211, 46, 46, 6, 99,141,137,239, 78,
-231, 43, 86,123,119,221,255, 8, 97, 9,160,209,194,187, 27,207,240,241,155,139,152,240,187, 5,252,240,227, 33, 30, 26,215, 73,
- 81,249,125, 89, 93,205, 43, 83,167, 67, 89, 4, 8, 97,240,202,203, 76,219,191,147, 23,134,254,138,221,123,143, 32, 44,123,204,
- 47,181, 7,112,232, 82, 34,130,177,156, 42,170,169,137,136, 32,237,174, 88, 82,238, 12,163,124, 66, 52,230,148,238,216,236, 53,
- 88,139,243,249,230,111,229,116,237,154,214,104,149,122,215,174, 93, 8, 43,176,197, 86, 0, 0, 32, 0, 73, 68, 65, 84,130, 32,
-187, 35,165,191,129,168,180,157, 59,119, 34,138, 98, 45,215,166,244,126,215,174, 93, 42, 19, 93, 99,156, 60,184,187, 86, 76,239,
-193,251,167,147,145,225, 20, 24, 57, 57, 57,252,119,247,119,138,213,222,140,244,155,136,115,196,163, 33,140,143,151,253,129, 55,
- 55,124,207,244, 33,189, 57,115, 42,143,105,207,191,175, 72,113, 73,228,231,250,114, 61,190,177,201,207,157,236,130,113,115,214,
- 33, 62, 79,106, 15,156,113, 62, 95,177, 62, 37,106,111,122,116,107,102,196,182, 65,163,209, 16, 22,174, 71, 23,230,124,233, 35,
- 35,200,104,149,194,243,207, 63,175, 88,237,185, 19,158, 18,210,243,164,246,220, 9, 79, 73,163, 13, 96, 48, 24,168,170,170, 34,
- 44, 44, 76, 86,123, 14,135, 67,254,171,148,248,222, 95,246, 4,223,229,111, 39,186,141,115, 48, 75,140, 78, 75,209,165, 83,196,
-134,135, 81, 86,122, 1,173, 70, 64,231,167,171, 88, 82,123, 29, 18, 98, 56,150,123, 6,155,197, 66,184, 78, 79, 85,149,137, 67,
-103, 10, 72,236,210, 91, 17,233, 73,229,247,203,135,159, 33,235,245,215,168,113, 64,135,180, 20,126, 56,186,151, 71,110,239, 23,
- 80,249, 1, 60,146, 54,152,207,127,250, 26,202,109, 16,145,200,166,125,199, 16,254,250, 7,222, 72, 78,246,155,244, 0,250, 89,
-166,240,205,166,125, 96,169,164, 74,168,196,160,169,162, 92,103,197,106,175, 32,220, 84, 67, 68,193, 25, 62,120,242, 39, 58,247,
-239,238,247, 66,188,145,145,145,242,251,136,136,136, 90, 29, 54,215,239,148, 16,213,251,239,103,241,214, 91,111,214,218,254,235,
- 95,207, 98,245,234, 53,138,200, 79,138,235,185,170, 61, 87,213,247,254,251, 89,170,203,243, 26,171, 61,215,209,155, 79, 61,189,
-144,112,157,158,228,228,100,153,252, 92,179, 89,249, 91,223,126, 63,166, 47, 11, 94,126,141,202,194,203, 36,197,182,230,232,177,
- 60,238,123,117, 13, 43, 87,174, 12,200,205, 40, 29,231,122,124, 83, 34,191, 80,194,175,245,248, 42,143,125, 36, 19, 96, 40,240,
- 81,213,101,103, 37, 76,236,224, 60,137, 48, 29, 58,189, 30, 99, 85, 21,241,201,201,180,208,182,240, 91,237,185, 79, 99, 8, 19,
-173, 96,171,185,170,188,116, 45, 20,169, 61,247,105, 12, 0,229,151,175,142,136,242, 39, 43,138, 43,249, 1,180,105,227, 36,225,
-210,210, 82, 98, 99, 99,101, 55,167, 18,226,147,200, 15,254,202,188,140,209,240,250, 78,222, 92, 50,153,105,143,190,198,154, 23,
- 30, 66, 39, 8,232,195,253, 83,203,146,218, 59,150,119,153,174, 29, 18,217,178,121,175,243,218,218, 57,213,142,213,124,213,237,
- 18,230,135, 77, 73,237, 61,123,255, 56,254,239, 79,239,210, 33, 85, 8,170,252, 36,181,119,235,167,255,228,171, 89,119, 35,164,
-220, 12, 56,179,184,128, 51,149,153,132,219,163,163,253,186,230,190,230,199, 56,244,223, 13,152,122,236,166,115,183, 27,169,136,
-132, 51,156,163,242,108, 17, 69,207,219,169, 50,164,176,240,222, 71,253,190, 23, 43, 86,172, 32, 50, 50, 18,163,209, 88,107, 64,
- 86,100,100, 36, 43, 86,172, 80, 76,122, 89, 89,107, 89,185,178,238,113, 35, 70,140, 64, 20, 69,178,178,214, 34, 8,130,207,193,
- 46,115,231, 62,136, 40,138,204,158,125,143,199,129, 44,210,182,172,172,181,100,101,173,173, 67,180, 42, 66,143,242,130,211, 60,
-247,231,167,248,228,243,255, 50, 97,196,192, 90,245, 45,174, 93, 26,131,114,115,153,120,215,108,242, 74,106,232,216,202,191,246,
-106, 70,250, 77, 44, 88,245, 57, 79,254,238, 86,218,181, 25, 35,147, 42, 56,211, 66, 74, 8, 38,203,150, 43, 33, 74,164,215, 88,
-153, 87, 36,119,230, 53,155,206, 16, 42,194,139,136,142, 66, 23,230,156,108,124,127,135, 30,132, 69,132, 19, 29,239, 76,203, 99,
-172,172,196,106,177, 0,160,143,140, 32, 82,103,245,203,166, 52,149, 33, 42,161, 13, 14,187,213, 73,122, 87, 96, 21,194,124,166,
- 2,115,135, 52, 52,120,252,194, 55,106, 53,214,129,144,158, 43,249,185, 78, 88, 47, 45, 45, 85,126, 3,220,200,239,125,151,185,
-214,111, 63,239,146,113,196, 90, 69, 23, 63,237,116, 72,136, 97, 95,113, 25,223,255,228,116,105,186,146,157, 18,210,147,240,203,
-135,159,225,227,129, 81, 60,124, 71,207,144,148,223, 35,105,131,121,116,253, 71, 8,207,253,137,255, 38,223,196,242,170, 31,106,
-125, 63, 64, 23, 70, 74, 68,184,162,178,235,103,153,194,127,215,155,184, 96, 56, 77, 81,201, 69, 10, 79, 70,163,181,199, 50,188,
-239, 72,198,222, 59,182, 81, 26, 69, 87,162,170, 15, 18, 89,189,255,126, 22,239,191,159,229,145, 32, 37,248, 67,100, 35, 71,142,
- 84, 71,119, 94, 99,116, 72,136,225,150, 91,110,241, 88,223, 38,222, 53, 27,192, 47,210,147,240,251, 49,125, 25,191,249, 91,102,
-253,233,223,140, 26, 53,138,100, 15, 30,144, 80,144,158, 59,249, 41,157,187, 93,223,246, 80,144,103,160, 3, 91,234,180,187,210,
- 36, 75,165,200,200,200,192, 88,207,118,217, 94,117,209,213, 31,213,233, 8, 11, 11, 35, 60, 60,156,240,240,112, 34, 35, 35,229,
-191, 39, 68, 35,147, 38, 77,226,251,179,248, 84,125, 81, 9,109,208,218,106,192, 86, 35,143,104,148, 8, 79,105, 74, 26,201,165,
- 89,126,249, 66,157, 70, 91, 41,225,197, 37,181,195, 98, 49,135,236,161,155,245,204,251,252,116,252,104, 72, 43,226,190,147,231,
-229, 10,232, 78,122, 74, 8, 79,194,189, 3,163, 66, 86,126, 0,194,178,199,100,194,115, 37,189, 64, 8,207, 21,183,117,153,134,
-220, 59, 24,175,252,248,183,222,122, 75,206,206,178, 98,197,138, 90,153, 90,222,125,247, 93, 89,237,189,251,238,187,126, 77,205,
-241, 87,113,169,100,213,188,225,173,190, 41, 33, 60, 9,227,159,122,251,154, 16,158, 59,249, 53,228,254,129,146, 93, 32, 42, 80,
-231, 94, 96,129, 22,154,167, 9,146,193,216,251,254,172,231, 9,151, 82,236, 78, 34, 60,130, 36, 60, 41,246, 20,170, 6, 27,192,
-102,119, 40, 86,155,222,112,185,180, 60,224,115,113,135, 20,187, 11, 21,225,133,186,252,164,216,221,231, 85, 85, 33, 37, 60, 21,
- 42, 26, 3,210,128,149,188,146,154,144, 16,158, 68, 38,174,238,204,134, 38,188,166,128, 41,179,159, 14, 25,233, 1, 8, 83,102,
- 63, 45,170,143,167, 10, 21, 42, 84,168,248,185, 64, 93,129, 93,133, 10, 21, 42, 84,168,196,167, 66,133, 10, 21, 42, 84,168,196,
-167, 66,133, 10, 21, 42, 84,168,196,167, 66,133, 10, 21, 42, 84, 52, 47,212, 26,213,121,251,200,192, 71, 14,122, 26,213,169,218,
-107, 90,246, 76,151,206, 7,108, 47,162, 77,135,107,118,189, 90, 81, 68,231, 0,179,214,251, 4,255, 48, 59,216, 52, 32, 10,234,
-253, 85,237,169,246,174, 55,123,170,226, 83,128, 96,211,234,228,230,230,178,121,243,102,249,149,155,155,171,118,143,174, 33,194,
-237, 34,118, 65,168, 69,122,121,121,121,236,217,179,135,239,190,251,142,188,188,171,201,174,173, 90, 39,233, 5,138,134, 78, 56,
-173, 66,133, 18,156, 56,113, 34,168, 99,231,206,157, 27,210,115, 9,165,189, 38,173,248,154, 59,130, 37,169,220,220, 92, 94,120,
-225, 5,166, 79,159, 94,199,102,106,106,106,192, 54,115,115,115,201,206,206, 38, 35, 35,131,212,212, 84, 69,182,230,204,153,163,
-232,247,166, 79,159,238,117, 62,207,166, 77,255, 82,108,207, 96,136,186,102,247,208,149,240, 46, 95,190,140,217,108, 70, 16, 4,
- 34, 34, 34, 48,153, 76,228,229,229,177,127,255,126,250,245,235, 71,215,174, 93,131,250, 45,165, 41,227,156, 29,171,121,138,143,
-241,150,105, 37,244,246, 50,125, 28,187,178,206, 62,254, 78, 52,206,205,205,229,249,196,187, 16,191, 56,141,110, 91,221,108,254,
-246, 23,247, 33,110, 60,205,221, 73,159, 64,120, 79, 69,215, 52, 97,130,115,217,179, 47,191, 12,205,178,103, 25, 25,217, 87,202,
- 35, 62,228,243,219, 78,156, 56,193,178,101,203, 20,173, 29,250,192, 3,115, 16, 69,168,239,145,251,227, 31, 31, 85,108,211,245,
- 57, 94,190,124, 57,163, 71,143,102,238,220,185,172, 89,179,134,138,138, 10, 69,231, 86,135, 24,116, 90,102, 14,211,147, 57, 55,
-147, 23,255,247, 18,127, 28,255, 71,249,187,183,223, 94,117,125, 19,223,230,205,155, 61, 62, 52,245,109,111,238,196,231, 74,122,
-233,233,233,242, 36,209,220,220,220,128,136, 79, 34, 82,169,129,149,178,216, 44, 94,188, 88,153,189,236, 4, 5,191,234,251,190,
- 84,223,254,160,255,230, 20,230, 91, 14,213,226,147,229,229,229,180,110,221, 90, 86,102,145,145,145, 92,190,124,153,178,178, 50,
-226,226,226,216,183,111, 31,128, 98,242,219,188,121,179,124, 31, 4, 65,224,174,187,238, 34, 61, 61, 93, 17, 9,174, 95,255, 31,
-249,253,212,169,191,242,249,217, 23,140,187, 31,190, 90,220,195,222,168,245,217,125, 91,228, 48,223,201,190,255,247,191,186,235,
-209,239,216,177, 67, 78,254,238,122, 47, 86,175, 94,237,247,179,188,116,233, 82,158, 27,211, 31, 4,129,140,140,140, 58,109,128,
-184,246,116,253, 45,187,130,251,211,148, 39, 98, 75,164,183,114,229,202, 43, 57, 84,179,216,181,107, 23,147,238, 89,226,243,216,
-221,251, 60,111,255, 52,219, 73,122, 14,135,131, 85,171, 86,145,149,149, 69,108,199,209, 94,137,206,213, 91,113,252,248,113, 4,
- 65,224,238,187,157,157,145,123,238,185, 71, 49,129,190,188,233,101,249,253,165, 47, 47, 34, 8, 2,107,230,183, 0, 4, 22, 79,
-124, 12,174, 60, 82,107,223, 91,195,220,209, 77, 71, 9, 6,154,195, 83,227,173, 1,203,206,206,102,213,170, 85, 30, 27,142, 64,
- 92,138,161,118, 27,186,219,147, 84, 85,160, 88,181,106, 85,173,108, 51,233,233,233, 1, 43, 61,137, 72,133, 43,141,196,202,149,
- 43,229,115, 11,164, 28,132,233, 6,249,229,207,118, 95,136,222,176, 66,126,249,179, 93, 9,233,137,162, 40, 87,204, 64,220,137,
- 6,131,129,184,184, 56, 52, 26, 13,247,223,127, 63,179,102,205, 66,175,215, 19, 25, 25, 73, 68, 68, 4,130, 32,160,213,106,201,
-201,201,161,188,188,220, 47,155,199,142, 29, 35, 51, 51,147,117,235,214,201,247, 68, 20, 69, 62,254,248, 99,230,206,157,203,177,
- 99,199,154,100, 67,235,137, 8, 27,163, 67,185,116,233, 82, 86,174, 92,201, 61,173, 63,229,238,196,143, 61,222,251, 37, 55,125,
-143,110,235, 76,197,246,231,206,157,203,162, 69,139,232,210,165, 75, 72,206,119,238,220,185,100,102,198,211,170,213,150, 6, 83,
-122,174,164, 23, 12, 92, 73,239,209, 71, 31,245,203,166,123,157, 90,190,124, 57,163, 70,141, 2,224,238,187,239,102,244,232,209,
-138,218,103, 79,246,102,220,226,212, 68,107,230, 71, 50,115,152,158,199, 38, 44,106,114,117, 35,152, 92,157,154,250, 93, 5, 87,
-215,138,146,148,143,107,111, 89, 41,193, 72,149, 39,212,149, 49, 84, 46, 73,111,228, 21, 44, 92,137,116,241,226,197, 1,229, 67,
-109,234,112, 37, 61, 79, 21, 75, 73, 69,172,169,169, 65,163,209, 48,115,230, 76,202,203,203, 41, 40, 40, 32, 44, 44, 12,157, 78,
- 39,231,121,149, 86, 70,216,191,127,191, 95, 21,251,181,215, 94, 67, 16, 4,166, 77,155,198, 91,111,189, 69,122,122, 58, 43, 87,
-174,100,218,180,105, 0,188,254,250,235,168,240, 78,122, 0, 93,186,116,169,147,138, 48, 51, 51,179,150, 23, 35, 16,197,150,158,
-158,206, 91,111,189, 69,118,118,118,200, 98,175, 79, 60,241, 4,217,217,217, 30,211,123, 5, 66,122,175,190,250, 42,130, 32, 48,
-119,238, 92,178,178,174, 46,237,164,116, 53, 14, 87,210,147,108,106, 52, 26, 14, 28, 56,160,120,185,168, 19, 39, 78, 32, 8, 2,
- 51,103, 94,237,112,220,125,247,221,140, 25, 51,134,185,115,231,242,217,103,159,249,238, 84,187,168,244, 75, 95, 94, 4, 1,178,
-254,239,106, 58,181, 53,243, 91,112,247,240,112,167,242,187, 14, 72, 15,188,184, 58,211,211,211,201,205,205, 37, 39, 39,135,236,
-236,108,249, 61, 56, 23, 82, 84,242,112, 55, 52,233, 53, 36,241,133, 26, 47,188,240, 66, 72,203,162, 41, 33, 20, 13,214,169, 83,
-167,208,104, 52,104,181, 90, 78,157, 58,133, 40,138,156, 56,113, 2,139,197,130, 32, 8,232,116, 58, 4, 65,192,110,183, 83, 83,
- 83,195,167,159,126,234,243, 89,220,178,197,217,243,159, 54,109, 90,157,125,165,207, 82, 3,233,207,115,237,238,190,244,245,217,
- 31, 85, 39,161, 62,183,167, 63, 46, 78,119,236,216,177, 67, 86, 2,129,226,249,196,187,120,110, 76,127,116,153,158, 98,122,223,
- 34,110,204, 37, 87,169,235,222, 77,157, 73,157, 15,169, 17,222,178,101, 75,192,238, 78,201, 94,183,110,221,234, 52,234,129, 98,
-222, 60,103, 28, 86, 34,255,121,243,230,177,115,231, 78, 4, 65, 8,152,244, 70, 15,119,166,213,119, 56, 28,252,241,143,127,100,
-249,242,229,178,205,219,167, 62,128,221, 79, 59,174,106,207, 21,146,219,115,227,198,141,244,236,217, 19,136,242,219,222,140, 91,
-234,230, 25,118,186, 61, 97,237,154,131,156,104,115,194,111,123, 13, 73,122,115, 22,191,192,170,165,143,135,150,248,192, 57,176,
- 66, 82,121, 18,233,121,242,237, 43, 33, 41,111, 61,127,127,226, 64,190,236,185,127,223, 24,107, 71, 73,234,216,117, 13, 43,247,
-243, 13, 85, 44, 67,252, 40, 62,164,231, 93, 53, 69,217, 96, 11,215,107,243,212,200,184,110,147,246,245,118, 79, 74, 75, 75,137,
-137,137,161,180,180,148,221,187,119,163,213,106,177, 88, 44, 24,141, 70,121, 1, 95, 81, 20,177, 90,173,152,205,102,191,200, 86,
- 82,216,245,149,119,122,122, 58,235,214,173, 35, 59, 59,219,175,123,210, 80, 49,190,200, 97,111,212, 33, 56,233,115, 32, 4, 56,
-106,212,168,160,201, 79,252,226, 52,112, 53,166,231, 26,239, 22, 63, 56, 3, 8, 1,199,192,221, 59, 31,224, 92,253, 34, 51, 51,
- 51,100,113,190, 39,158,120, 66,142,109, 6,106, 83, 20,197, 90, 49,179, 17, 35, 70,176,115,231,206,160,148,158, 40,138,216,108,
-182, 58, 54,183,127, 99,231,229,165,254,197,208, 36,181, 39,145, 92,125, 88,182,108, 25,147,103, 61,229,211, 94,237,216,158, 7,
-101,168,208, 94, 67,147, 94,131, 40, 62, 79,202,175, 41, 42, 61, 87,100,100,100, 52,153,233, 7,238,238, 76,247,209,116,254, 54,
-178, 62,221, 20, 46,177,189, 80,144,160,107,108,207, 95, 18, 92,191,126,189,199,237,239,191,255, 62,191,254,245,175,221,212,208,
- 84, 50, 51, 51,235, 13, 70, 91, 44, 22, 74, 75, 75, 49,153, 76,196,197,197, 17, 30, 30,142,205,102, 67, 20, 69,236,118, 59, 22,
-139, 5,171,213,138,221,110, 87,164, 48,125,185,230,167, 77,155,214, 36, 92,208,190, 6,186, 40,133, 68,126, 1, 55, 16,219,238,
-174,183,236,238, 78,252, 56,168,184,186,187,218,115,237, 44, 5,210, 49,116, 87,123,222, 58,100,254, 98,205,154, 53,178,237,183,
-222,122, 43, 36,113, 61, 73, 68,232,116, 58, 22, 46, 92,200,129, 3, 7, 92,108,250,255, 76,191,246,218,107, 30,151,170,250,224,
-131, 15,216,190,125, 59,162, 40,202,157, 76,127,230,201, 45,127,109, 57, 51,111,174,171,246,102,189, 94,195, 7,187,173,136,162,
-200,128,123, 6, 48,119,244,220,107, 62,239, 46,212,240, 57,143,111,243,230,205,242,141,114,141,247,249,131,212,212, 84, 22, 47,
- 94, 28,178,147,245,101, 47, 53, 53, 53,224,198,203,117,238,158,235, 75, 26,229, 25,108,156, 64,233,180,132,230,134,169, 83,167,
- 50,117,234,212, 90,219, 36,210,115,253,174, 62,146,148, 16, 19, 19,131,221,110,199, 96, 48, 80, 92, 92,140,193, 96,160,166,166,
-134,154,154, 26,170,170,170,168,168,168,160,188,188, 28,163,209,136,217,108,198,110,247,237, 20, 18, 4,129,117,235,214, 41,234,
-168, 52,103,236,216,177,163,214,203, 21,197,197,197,181, 62,251, 19, 83,170,111,121, 49,215,216,117, 40,212,158,171,234, 91,183,
-110, 93, 72, 99,125,235,214,173, 83, 92,135,179,178,178,216,190,125,187, 60,152,101,238,220,185,114,121, 6, 50,237, 0, 96,201,
-226,209,108,223,190, 29,199,135, 45, 17, 69,145,101,203,150,201, 54,119,236,118,184,232, 42,223,106,207,213,165, 9,176,118,109,
- 22,243,230,205, 99,251,246,237, 44, 88,176, 64,209, 57, 94,250,242, 34, 2, 2, 89, 46,106,239,158,215,106,208,206, 44,103,237,
-110, 11, 11, 22, 44, 96,233,255, 94,108,212,231, 58, 84,106,207,167,226, 91,181,106, 85,173,184,158,107,188,207,223,134, 92, 34,
- 43, 73,169, 5,235,122,244,100, 79, 82,130,169,169,169, 33,115,109,186, 78,103,104,106,144, 84, 94,168,220,156,146,202, 83,234,
-230,116, 37, 61,215,247,174,228,230,237, 59, 79,104,213,170, 21, 37, 37, 37, 88, 44, 22,138,138,138, 8, 15, 15, 71,167,211,201,
-138,175,186,186,154,154,154, 26,204,102, 51,229,229,229,126,169, 13, 73,205,121,155,158, 35,237,231,223,245, 54, 92,140, 47,144,
-239,221, 33,185,246, 60, 54,188, 75,150,240,220,115,207,145,152,152,216,168,207,112,125,106,207, 21, 74, 98,125,245,169,189, 96,
-148,222,172, 89,179,152, 61,123, 54,162, 40,242,252,243,207,243,228,147, 79, 50,106,212, 40,102,205,154, 21,144,205,167, 30, 31,
-205,182,109,219, 16,214,181, 2,224,171,167, 98,184,245,217, 74, 70,141, 26,197,115, 75,157, 10,205, 95,117, 42,205,219,115, 42,
-188, 53,108,223,190, 19, 81, 16, 89,184, 96, 33, 61,122,244, 80,124,110,203,151, 47,103,230,176,176,218, 10, 15,167,189,228, 91,
-219,132, 36, 86,218, 84, 72,207, 43,241,185, 42,189, 65,131, 6,213,137,247, 41,113, 69,184,147, 85,168,148,159,100,175, 33,220,
-155,210,245,134,140,172, 26,249,193,105, 40, 72, 46, 92,137,128,178,179,179,235, 40, 63,111,223,185, 35, 37, 37,133, 83,167, 78,
- 97,183,219,169,168,168,192,106,181,202,113, 61,147,201, 36, 79,149,144, 6,188,248, 19, 91, 74, 79, 79, 39, 59, 59, 91, 86,125,
-174,207,237,230,205,155, 61,110,247,134,107, 29,227,115,119,127,250,186, 31,222,144,153,153,201,146, 37, 75,152, 49, 99, 6, 31,
-126,248, 97, 64,247,220,189,190, 73,159,159, 79,188,139,223,141, 89,203,221,155,189, 79, 96,159, 48, 97, 2,103,206,156,241, 56,
-223, 80,194,153, 51,103, 0,255, 38,180,103,100,100,147,145, 49,142,241,227,115,235,141, 55,150,148,140, 3, 12,100,102,250,110,
-183, 50, 51, 51,229,114,148, 84,231, 87, 95,125,229, 36,133, 0, 73, 79,163, 17,156, 29, 85,137,244, 14,219,248,215, 86, 11, 0,
-207, 45,221,174,184,141,144,234,196,188,121,243, 16, 69,145,133,143, 44,164, 71,247, 30, 1,157,219,162,199,254,120,197, 30,104,
-103,150,203,246,218,220,218,214,233,121,109, 66, 77, 87,125,131, 89, 54,172,126, 70,209, 92, 62,157, 47,215,143,235, 96, 22,215,
- 17,112, 74, 99, 84, 13,233,246, 12,118,254,158,138,224,225,234, 42,116,109,124,165,249,160,238,223,121,139, 17,140, 30, 61,154,
-141, 27, 55, 98,179,217, 40, 43, 43,147, 99,124, 0, 69, 69, 69,148,149,149, 33,138,162,156, 9,199, 31,204,159, 63,159,215, 94,
-123, 77, 38, 64,247,152,222,252,249,243, 27,189,115, 98,220,253,176, 98,162,243,214,104,215, 71,140,115,231,206, 13,136,244,234,
- 35,149,171,131, 93,148,117, 64,189,165,196, 58,123,246,172,220, 49,241,183,157,113, 13,201,212,189,238,116,197,229, 87, 82, 82,
-194, 87, 95,125, 85, 39, 94,166, 20,153,153,153, 56, 62,140,231,171,195,206,193, 44,239,110,181,240,193,110, 11,162, 40,178,115,
- 79,224,238,220, 29, 59,118,176, 96,193,130,128, 20,158, 43,164,186,245,225, 30, 43, 11, 22, 44,160,205,132,182, 46, 12,123,125,
-182, 87, 58,111, 21, 68,154,208,237,222,123, 86,226,234,244, 84, 65, 66, 73,126, 13,101,219, 53,109, 89, 32,200,200,200,240, 26,
- 55, 82, 74,212,245,185, 53, 3,117,119,214,231,214, 12,196,221,233, 58,112,199,189,113,240,246,157,183,222,236,228,201,147,201,
-202,202, 66,175,215, 99, 54,155,177,217,108, 56, 28, 14, 90,182,108,137,193, 96, 80, 60,186,248,134, 27,110, 96,229,202,149,108,
-218,180, 73, 30,193, 41,205,235,107,202,153, 66, 66,141,175,191,254,154,201,147, 39,179, 97,195,134,144,144,158,107,227,158,187,
-120,177, 95,222,151, 69,139, 22,213,233, 84,187,227,177,199, 30,243, 59,198,151,153, 25,239,211, 94,102,166, 50,239, 77,160,105,
-221,188, 97,194,179,149,181, 62, 7, 67,122,111,190,249,102,200,158,137,151, 95,122,197,169,238,154, 48,234, 83,115,129,102,110,
-241, 57,157, 65,201,246,198, 68, 83,155,191, 87,223,128,128,192, 8, 56,116, 13,243,244,233,211, 21,167, 33,243, 6,201, 29, 44,
- 17,185, 39,247,176,251,119,254,150,203,172, 89,179, 56,125,250, 52, 91,183,110,197,104, 52, 98,183,219,233,223,191, 63,211,167,
- 79, 15,248,126,143, 31, 63,158,241,227,199,203, 61,221, 64, 84, 94, 67,199,248,124,125,246,167,209,246, 52,218, 79,233,228,104,
-184,146,127,115,237,105,238, 78,170, 75,124,191,175, 24,192,239,198,126,128, 46,115,166, 60,129, 93,218,199,155,162,247,231,254,
-143, 27, 55, 78, 81, 93, 11,197, 62,174,229, 39, 8, 2,119,220,113,135,156, 67, 52, 88,104,102, 24, 16, 4,129,169,191,156, 35,
-119,238,164,105, 11,238, 41,200,174, 53, 6,205, 30,248,179,243, 80, 93, 23, 73,170, 67,209, 27,107,170,189,254, 80,159, 87,168,
- 19, 78, 55,116,185,165,165,165,145,150,150,230,241, 59,139,197,130, 86,171, 69,171,213, 94,195,103,109, 69, 19,183, 87,127, 93,
-152, 61,123,182, 98,123,226, 70,103,254, 77, 41,188,225,138,223,141,253, 0, 68, 20,185,156,127, 14,109,137,103,155,202,130,101,
-215,114,186, 64, 83,202,189,121,173, 32, 76,153,253,180,186, 54,139, 10, 21, 42, 84,168,248,217, 64, 93,129, 93,133, 10, 21, 42,
- 84,168,196,167, 66,133, 10, 21, 42, 84, 92,175,208,169, 69,160, 66,133, 10, 21,215, 6, 66,125, 31,196, 90,127, 84,168,196,167,
- 66,133, 10, 21,215, 9,233, 9, 32, 56,255,171, 7,162,244, 79,197,181, 34,190,219, 71,166, 4,108,200,211, 40, 36,213,158,106,
- 79,181,119,237,236,221, 59,181, 79,173,207, 26,141, 70,158,174,225, 58,100, 94,202,126,227, 58,132,254,223,235,143,212,177, 87,
-118,118, 43, 17, 17, 17,242,241,210,114, 81,238,246,164,132,225, 14,135, 3, 0,171,213, 74, 76,135, 81,234,253, 85,100, 79, 64,
-171, 11, 71,116,216,112, 56,108,108,216,117, 1,247, 25, 14,190,236,137,162, 72, 97, 97, 33,109,218,180, 9,201,249,133,218,158,
-210,242, 83, 21, 95, 3, 98,201,146,125,181, 62, 63,247,220,208,166,101,111,223, 18,167,157,161,207,213,122, 31, 44,124,101,248,
-240,245,125,176,246, 85,212,133,198, 82,141,174,228, 12,221, 76,135,105,111, 59,207, 73,177, 11, 23, 98,110,160, 38,182, 19,250,
-168, 24,159,199,239,218,181,139, 17, 35, 70,200,132, 39, 17,149, 32, 8,117,136,202,225,112,200,175,115,231,206,121,180,247,221,
-119,223, 49,104,208, 32, 34, 35, 35,209,233,116,104,181,218, 90, 54, 37,178,179,219,237,242,203,108, 54,147,147,147,195,152, 14,
-163,174,219,251, 36,138, 34, 37, 37, 37,236,217,179,135,150, 45, 91,122,156, 51,169, 72, 9, 10, 26,194, 35, 18,104, 25,223,131,
-234,170,124,170, 42,207, 95, 81,133,254,171, 63,135,195,193,186,117,235, 56,121,242, 36, 0,145,145,145, 60,250,232,163, 1,159,
-147,100, 47,247,244, 41,180, 90, 45,250,240,112, 22, 44, 88,216,168,243, 13, 85,226, 3,159,217,246,193,191,164,195, 18, 49,185,
- 19, 86,160, 8,181, 61, 21,117, 9,213, 21,215, 5,185,138, 34,149,231,126,164,124,199, 71,212,212,152,233,124,147,134,200, 20,
-129,110,121,135, 25,194, 33, 12,230,104,190,111,113, 47,197, 66,123,175,102,142, 29, 59,134, 86,171,101,228,200,145,242,106,245,
- 58,157, 78, 38, 66, 73,229,217,108, 54,236,118, 59, 86,171,149,115,231,206,241,245,215, 95,163,109, 53,184,142,189,154,154, 26,
- 14, 30, 60,200,205, 55,223,140, 94,175, 39, 44, 44,172,150, 77,135,195,129,205,102,195,102,179, 97,181, 90, 49, 26,141, 28, 60,
-120,144,170,170,170,235,238,185,123,242,201, 39,235,180, 45,149,149,149,244,239,223, 63, 36,246,222, 95,147, 67,100,100,107,180,
- 90,189,147,248, 4,156,138, 79,192, 47,230, 43, 40, 40,160,170,170,138,123,238,185,135,212,212, 84, 57,221, 90, 66, 66, 2,131,
- 7, 15,246,122,236,125, 19,234, 38, 11, 56,114,252, 56,219, 98, 90,240,200,178,255,199,128,129, 55,114,241,194,101,190,218,184,
-141,206, 55, 14,160,162,162,252,250, 36, 62,247, 20, 83,190, 62, 55, 6,233, 61,248,224,131, 94,247, 49, 24, 12,172, 93,187,214,
- 47,242,147, 72, 42, 88,117,214, 16,246, 92,149, 94, 40,212,158,167, 69,113,125,237,219, 24,247, 89, 82,140,174,127, 37,148,150,
- 58, 39,205, 39, 36,108,230,122,128,229,252, 49,194,119,191,143,185,198,193,157, 93,181,244, 72,178,225, 72, 16, 9, 75,208, 82,
- 89,162, 39,178,210, 72,175, 67,111,144,211,125, 46, 53, 45, 58,121, 81, 14, 2, 63,254,248, 35,122,189,158, 95,252,226, 23, 50,
- 89,133,133,133,161,209,104,228, 5,124,109, 54, 27,102,179,153,243,231,207,179,117,235, 86,236,118, 59,158, 82, 0,104, 52, 26,
-172, 86, 43,135, 14, 29, 98,228,200,145, 68, 70, 70, 18, 30, 30, 46,219,147,136,207,108, 54, 83, 85, 85,197,145, 35, 71, 48,153,
- 76,138, 18, 10,156, 61,123,150,243,231,207, 83, 89, 89,137, 94,175, 39, 57, 57,153,110,221,186,201, 46, 86,165, 8,181, 61,135,
-195,193, 83, 79, 61, 85,107,197,139, 39,159,124,146, 99,199,142,209,186,117,107, 90,181,106, 21, 16,233,253,243,254,251,153, 52,
- 96, 0, 0,109,254,240, 7, 34, 91, 36, 83, 85,145, 71, 69,249,105, 68,209,238, 76,106,237,192,111,133,149,144,144, 64, 98, 98,
- 34,255,254,247,191,249,205,111,126,195,250,245,235, 73, 72, 72, 96,199,142, 29, 88, 44, 22,160,163,215,227, 75,254,250, 72,173,
-207,209, 22, 43,237,108, 38, 22, 44,250, 19,203, 94,254, 11, 47,189,252, 38,237, 53,118,222,124,249, 85,126, 49,243, 30,159,246,
- 26, 10, 82,138, 50, 87, 40, 77, 87,230, 83,241,185,231,231,243,245,249, 90,162,169, 46, 25,212, 80,112, 37,191, 96,224,218,121,
-249,215, 29,255,174,119,191,223,126,122,111,163,170, 41,233,183,221,255,250, 34,235,230, 6, 83, 89, 49,221,207,124,193,101,173,
-157,174,113,208,169,163,136,182,175, 30, 93,106, 42,122,179, 9,243, 55,231, 49,151,235,208, 58,194, 48,109,126, 31,205,164,249,
- 56,116,158,221,158,146, 27,242,212,169, 83,196,199,199, 51,118,236, 88, 34, 34, 34,208,235,245,232,116, 58, 89,229,153, 76, 38,
- 10, 10, 10,216,190,125, 59, 26,141, 6,141, 70,227,213,158,221,110,231,232,209,163,140, 24, 49,130,216,216, 88, 34, 34, 34,208,
-106,181,216,108, 54, 44, 22, 11, 21, 21, 21,236,223,191, 31,179,217,140, 78,167,147, 99,125,190,112,248,240, 97,118,239,222,205,
-153, 51,103,168,168,168, 64,175,215,211,166, 77, 27, 6, 15, 30,204,176, 97,195,136,138, 82,150,101, 40,148,246, 28, 14,135,188,
- 40,178, 59,164, 37,138,166, 77,155,166,152, 80, 53, 90,125,157,109,151,254,246, 55,218,252, 42,133,151, 94,122, 13,171,181,250,
- 74,217, 11, 56, 68, 17, 68,167,228,243, 69,127,187,118,237,226,219,111,191,229,241,199, 31, 71,171,213,114,231,157,119,210,161,
- 67, 7,182,110,221,202,198,141, 27,185,105,130,130,236, 44,130,192,234, 83, 23,249,248,167,124,214,127,246, 30, 90,173,192, 35,
-127,248, 53,253,218, 36,178,106,193,159,120, 91,169,189, 6, 36, 61,105,123, 72,115,117,122, 47,155,198, 77,219,221,183,111, 95,
-159,251, 72,254,238,230,170,246,234, 83,125,205,197, 21, 25,140, 98,244, 22, 35,188, 94,148, 30, 64,233,209,239, 40,200,175,160,
- 93, 75, 29, 97, 14, 43,186, 68, 7,186, 91, 38, 18,209,230,105, 28,182, 60,248,225, 55,136,167, 43, 40,169,209,211, 81, 91,195,
-161,195,187,137, 27, 56,161, 94,162,210,233,116,132,133,133,241,211, 79, 63,145,152,152,200,184,113,227,136,138,138,146, 9,201,
-104, 52,114,226,196, 9,118,236,216,129, 86,171,149, 9,209, 19,164,239,245,122, 61,118,187,157,147, 39, 79, 50,102,204, 24, 18,
- 18, 18, 8, 11, 11,195,106,181, 82, 94, 94,206,129, 3, 7,176, 90,173,132,133,133,201,174, 79,127,148,217,166, 77,155,184,116,
-233, 18,105,105,105,180,105,211,134,234,234,106,142, 31, 63,206,215, 95,127, 77, 84, 84, 20, 3, 7, 14,244,155, 88,206,158, 61,
-203,166,205, 91, 40, 44,183, 16,219,245,102,218, 36,117,192, 90, 93, 78,241, 79, 7,216,180,121,139, 34,123, 14,135,131,138,138,
- 10, 78,158, 60,201,217,179,103,233,219,183, 47, 79, 62,249,164,172,250, 36, 55,165, 18,210,211,104,245, 68, 70, 38, 18,217,162,
- 13, 89, 31, 28,102,214,204,190,252,243,254,251, 1,184,255,159,255, 4,144, 73, 15, 64, 35,128, 70, 16,176, 11,190,131,124, 27,
- 55,110,100,227,198,141, 44, 89,178,132,152, 24,103,167,104,213,170, 85, 12, 30, 60,152,226,226, 98,186,119,239,174,232,153,124,
-237,224, 79,188,246,221, 73, 62,251,215,139,232,180, 70, 4,187,157, 23,151,255,147,169,147,198, 81,160,209, 5,189, 26, 68, 48,
-164,231, 78,112,245,145, 97,192,196,231,139,216,174,151, 32,103,115, 35,192,102,209,152,151,166, 7, 77, 82,245,145,158,171,242,
-187, 30,226,123,177,166, 18, 54,230,153,104,111,208, 50, 32, 86, 32,169, 8,186,234,226,208, 8,173, 16, 77,133, 84, 23, 10, 28,
-205,115,112,169,218,132, 78,163, 1,199, 73,240,131,248,194,195,195, 57,125,250, 52,237,219,183,103,252,248,241,104,181, 90, 28,
- 14, 7, 37, 37, 37,236,218,181,139,176,176, 48,244,122,189,156,239,212, 81,143, 61,201,166, 94,175, 71, 20, 69,114,115,115,233,
-218,181, 43,113,113,113, 84, 85, 85,113,240,224, 65,236,118, 59,225,225,225,152,205,102,204,102,179, 95,157,226,253,251,247,115,
-225,194, 5,250,245,235,199,152, 49, 99, 72, 73, 73,161,186,186,154,164,164, 36, 54,111,222,204,158, 61,123, 20,185, 40,247,239,
-223, 79, 97,105, 57, 9,221,111, 38,117,228, 12, 90,166,116,199, 92, 93, 70,222,183, 95,240,211,150,247, 20,217,147, 98,155, 5,
- 5, 5, 36, 39, 39,211,189,123,119, 14, 31, 62, 44, 19,158, 43, 1,122, 91,244, 87,238, 64,232, 34,104, 25,223,131,150, 9, 61,
-208,104,194,176, 90,171,121,231, 95, 91,185,255,183, 99,101,123, 15, 60,240, 0, 73, 73, 73,178, 61,103, 25, 94,105, 99,189,196,
-249,118,237,218,197,231,159,127,206,131, 15, 62, 72,219,182,206, 21, 22,182,108,217,194,217,179,103,137,140,140, 36, 50, 50,146,
-201,147, 39,179,251,152,209,175,114, 92,115,226, 60,175,236, 63,206, 63, 94, 88, 76, 74,143, 78, 84, 87, 25,248,236,191,251, 57,
-124,228, 4, 45, 69, 7,250, 75,133, 76,126,120, 22,223, 28, 53, 54,235,122,167,171,175,113,113, 93, 94,196,215,231,230,140, 80,
- 18, 83, 67,216, 11,165,155,179,161, 21,158,191,251,248, 67, 88, 63,151, 81,161, 69,197,231,217,125,209,200,228, 22, 45,216,121,
-222, 65,187,129,225,116, 49,231, 96, 56,246, 32,159,190,120, 24,199,217,114,170, 44, 34,249,149,118, 34,117, 26,108,229,151,136,
-243,210, 89,117, 37,191,136,136, 8,206,157, 59,199,241,227,199,233,221,187, 55, 6,131,129,189,123,247,202,177, 58, 95,241, 56,
- 65, 16,100,213, 39,217, 19, 69,145,243,231,207,211,167, 79, 31, 54,111,222,140,195,225, 32, 34, 34,130,176,176, 48,121,212,103,
-125,174, 83, 87,228,229,229, 97, 50,153, 24, 52,104, 16, 41, 41, 41,104,181, 90, 98, 99, 99,185,233,166,155,216,187,119, 47,121,
-121,121,152,205,102,191,203, 49, 47, 47, 15,135, 70, 79,251,254,233,180, 76,233,142, 70, 27, 70,100,108, 18, 29,111,154,204,185,
-189,235,253,182, 39,138, 34,101,101,101,228,231,231,211,177, 99, 71,134, 15, 31,142, 86,171,149,221,155,191,249,205,111,228,125,
-227,226,226,252, 58,183,136,136, 86,180, 74,234,135,197, 92, 78,113,201, 65,204,102, 3, 86,171,115, 0,144,100,175,240,210,165,
- 90,246, 4,193,249,242,134,139, 23, 47,146,149,149,197,172, 89,179,232,211,199, 57,149,229,171,175,190, 98,227,198,141, 60,241,
-196, 19, 36, 39, 39,187,236,237,123,186,192,201,138, 26, 22,111,255,158, 23,254,152,201,200, 41,233, 84, 87, 21,243,209, 39,219,
- 89,249,206,199,252,247,145,251, 72,189,124,129,165, 21,151, 72, 72,104,229,151,189, 80,194,147, 43, 51,208, 37,137,188, 42, 62,
-247,216,157,175,207,215, 35, 26,106, 42,129, 82, 60, 59,228,217, 38,187,130,187, 59, 57,121, 34,194,134,203,120,223,252,113,168,
-212, 72,185,197,193,161, 34, 27, 5,101, 54,146,247,234,232,251,209, 41,206,157, 61,202,137,111, 45,216,116, 90, 44, 14, 48, 89,
- 68, 12,162,131,164,120,209, 43, 81,185, 78, 99,144, 70, 96, 22, 22, 22,210,169, 83, 39,206,158, 61, 43, 79, 75,208,233,116,242,
-254, 74,159, 45,215, 57,128,210,223,166,250,124, 42,133,195,225,160,186,218,233,114,236,210,165, 75,157,142,193,129, 3, 7, 0,
-232,209,163, 7,139, 23, 47,102,233,210,165, 62, 23,216, 22, 4,103, 71,192, 88, 83, 72, 85,229,121,236,118, 83, 29,123,235,129,
- 83,167, 78,209,181,107, 87,167, 61, 17,188, 57,213, 12, 6, 3,127,251,219,223,152, 60,121, 50, 35, 70,140, 0,224,155,111,190,
-225, 63,255,249, 15, 15, 61,244,144, 27,233,249,198,197, 26, 51,191,222,184,151, 5,211, 39, 51,237,215,119, 81, 99,170,224,211,
-245,219, 88,254,230, 26,254,125,235, 16, 82, 47, 95,104, 50,247,200,213,189, 25, 8,233,121, 37,190,134, 80, 5, 77,117,148,104,
- 83, 71,115,107, 84,130,141,193, 73,207,131,183,231,226,122, 81,132, 70,123, 44, 86,225, 18, 7,138,205,232, 4,216,146,107,162,
- 77,182,131,234,182,173, 57,165,175, 66,103, 48, 96, 70, 67, 11, 45, 32,138,132,183,106,227,147,144,164,249,121,118,187, 29,155,
-205, 70,171, 86,173,136,142,142,166, 83,167, 78,252,240,195, 15,242,118, 79, 19,217,221,237, 73,243,243,108, 54, 27, 70,163, 17,
- 81, 20,233,208,161, 3,249,249,249,180,109,219,150,163, 71,143, 98, 54,155,177, 88, 44,242,239,250, 19, 6,233,216,177, 35, 23,
- 46, 92, 32, 39, 39,135,152,152, 24,217,213,249,237,183,223, 82, 85, 85, 69,199,142, 29, 9, 15, 15,247,187, 28, 59,118,236, 72,
-225,161,163,228, 31,220, 76,120, 76,171, 90,174, 78, 75,181,193,111,123,174,231, 94, 83, 83,131,195,225,144, 21,172,164,250, 36,
-244,232,209,131,242,114,223, 67,251,109, 54, 35, 54,107, 21,145, 81,109,136,136, 76,160,186,234, 34, 32,214,177,247,246,219,111,
-203,246, 28,162, 88,135,248, 74, 74, 74,248,226,139, 47, 48, 26,141, 28, 63,126,156, 25, 51,102,112,243,205, 55,203,234,239,243,
-207, 63,103,209,162, 69,116,233,210,197,175, 50, 43, 41, 41, 97,227,198,141,252,239,179, 79,249,122,235,118,254,223,239,167,243,
-171,251,102, 80, 99,169,226,204,153,243,172, 92,249, 17,255,185,125, 24, 3, 91,199, 55,217,250, 19,200,192,150,107, 70,124, 18,
-154,234, 40,209, 37, 75,246,121,116, 81, 6, 58,149,160, 62,123,251,150, 56,109, 13,125,238, 57,143,159,189, 41, 79, 79,191, 29,
-168,189,107,161, 0,131, 37, 38, 95, 83, 22,174,151, 78, 82,215,110, 93,185,124,238, 52, 23,170, 29, 84,136, 34, 63, 26, 44,100,
-157, 18, 49,158, 41,160,180,202, 70,167, 72, 1, 4, 59, 23, 69,104,161,131,113,105, 93,235, 29,235, 32,145,158, 52,218,210,104,
- 52,210,182,109, 91,110,188,241,198, 43,101,153,192,208,161, 67, 89,183,110, 29, 22,139, 69, 38,171,250,136, 74, 34, 50,171,213,
-138,197, 98, 65, 16, 4,210,210,210, 40, 43, 43,163,186,186, 26,155,205, 70,231,206,157, 57,119,238, 28, 22,139, 5,179,217, 44,
- 31,227, 11, 67,134, 12, 33, 47, 47,143,163, 71,143, 98, 50,153,106, 13,110,209,106,181,220,114,203, 45,242, 64, 13,127, 48,100,
-200, 16,242,206, 95,224, 82,238,247, 88,205, 53, 68,183,238,136,181,186,130,226,159, 14, 16,174,113,248,109, 79,167,211,145,156,
-156, 76,108,108, 44,135, 14, 29, 34, 50, 50,146,196,196, 68, 34, 34, 34,106,185,112, 15, 28, 56,192,129, 3, 7,232,221,187,183,
- 79,155, 22,115, 57,229,101,167, 72, 72,236, 67,203,132,158,128, 6,139,217,128,205,118, 53, 78, 86,240,237,223, 41,248, 22,198,
-247,188, 82,246,226,149,177,156, 34,114,124,239,139, 47,190, 32, 50, 50,146,212,212, 84, 76, 38,147, 76,122,146,250,155, 61,123,
-182,223,164, 7,176,113,227, 23,196,198,198, 48,106,244, 77,148,150,151,114,199,131,247, 83,109, 44,167,168,176,148,185,127,120,
-134,165,131,187, 54, 73,210,147,136, 78, 82,126,215,116, 84,231,207, 73,213,132, 42,198, 54,244,185,231,216,183,100,137, 76, 80,
-193,146, 84, 32,246, 92, 93,145,191,253,244, 94, 69, 74,189,177,224,122, 30,238,243,251,154, 59,218,119,191,129, 62, 71,148, 61,
-251, 38, 0, 0, 32, 0, 73, 68, 65, 84,115,232,100, 40,167,216,238,160,194,100, 35, 92, 20, 17,205, 54, 58, 70,235, 48,216,108,
-228, 87, 59, 71, 73, 78,238,150, 76, 84,231, 27,168,242,226,166,115,157,178,208,167, 79, 31,250,245,235,135,193, 96,144, 71,117,
-198,196,196,112,243,205, 55,243,233,167,159,202,115,250, 28, 14,135,199,212,145, 18,137, 90,173, 86, 4, 65,160,123,247,238, 24,
-141, 70,138,138,138,228,209,160, 38,147,137,238,221,187,115,249,242,101,217, 94,125,163, 68, 93,209,185,115,103,198,143, 31, 47,
- 79, 63, 56,116,232, 80,173,233, 7,253,250,245, 83, 52,106,178,115,231,206,140, 79, 31,231,180,119,250, 91, 10, 14,110,186,106,
-111,248, 47, 20,217,139,141,141,101,224,192,129,124,243,205, 55,236,222,189,155,246,237,219,211,185,115,103,162,162,162,120,242,
-201, 39,121,253,245,215,233,212,169, 19,131, 7, 15,230,213, 87, 95,101,214,172, 89, 62,220,167, 86,202, 13,167, 64,132,184,132,
-238,180,105,119, 11, 70, 99, 49, 85, 21,231,120,233,229,215,249,203,159,159,164, 93, 10,172,157,223, 2, 97,186,129,177,247,130,
-195,225, 84,124,174, 19, 25, 78,158, 60,201,184,113,227, 24, 49, 98, 4,157, 58,117,162,166,166, 6, 81, 20,121,227,141, 55,152,
- 49, 99,134,220,193,241, 23, 39, 78,156,100,218, 93,191,100,230,204,169,220,216,167, 7, 37,149,229, 84,149, 23, 51,231,255,158,
-225,153, 59,198, 49,206, 81,211,164,235,206,148,217, 79,135,126, 84,231,181, 38, 54, 37,163, 68,167, 77,155, 22,178,204, 45,190,
- 16,234,169, 4, 18, 89,133, 74,153, 41,181,231,175, 34,107,108, 98,113, 85,122,174,231,225, 62,175,175,185,163, 93,151, 52, 76,
- 67, 71, 98,219,183,145,179,229, 16, 45,132,209, 41, 90, 67,190, 93, 64, 27,174, 99,199,101, 59, 38, 7, 36,133,107, 73, 27, 60,
-138,170,248,206, 94, 26, 88,167, 58,211,106,181,116,233,210,133,129, 3, 7, 82, 81, 81,129,201,100,146,137,207, 98,177,144,144,
-144,192,136, 17, 35,248,252,243,207,177, 90,173,216,237,118,143, 13,129,221,110,151,179,190,244,234,213, 11,187,221, 46,219,147,
-234,179,164, 28,123,245,234, 69,105,105, 41, 85, 85, 85,126,215,229,190,125,251, 18, 27, 27, 27,178, 9,231,161,178,167,209,104,
-104,215,174, 29, 19, 38, 76,224,204,153, 51, 28, 63,126,156,188,188, 60, 98, 98, 98,104,217,178, 37,227,199,143,231, 31,255,248,
-135,207,140, 40,181,221,157, 53,148, 25, 78, 96, 50,149,210, 50,190, 59,209, 49, 29,136,137,237, 72,117,101, 62, 47, 44,125,135,
-187,103,166,179,118,126, 11,151,123,121,197, 5,237, 50,155, 97,210,164, 73,108,220,184,145, 11, 23, 46, 80, 90, 90,202,212,169,
- 83,121,239,189,247, 24, 58,116, 40, 61,123,246, 84, 92, 94,147, 39, 79,226,211, 79, 63,167,162,172,132, 11, 5, 23,153,255,208,
-189, 44,122,252,121,238,248,197, 48, 70,152, 43, 32,172,233, 36,246, 10,102, 32, 75,163, 17, 95, 67,140, 18, 13, 5,169, 73, 40,
- 46,126,135, 37,251, 62,243,234,210, 84, 50,168,165,184,248, 29,246, 45,249,204,163, 10,115, 85,103,251,150, 44,241,139,172,138,
-223, 41,102,223,103, 75, 66,102,175,169,227,231, 22,235,237, 60,108, 44,135,205, 54,138,190,222, 66,152,205,200,225, 74,145,205,
-149, 54,244,130, 64, 43, 81,100,108,219,150,140,190,117, 28, 9,131,198,248, 80, 22, 78,197,215,185,115,103,134, 14, 29,138,209,
-104,196,106,181,162,215,235,101,162,146, 84, 89, 82, 82, 18,195,135, 15,231,203, 47,191,172,215, 53,233,112, 56,208,233,116,244,
-235,215, 15, 65, 16,168,169,169,145,213,164,212, 89,149,178,193, 56, 28, 14,250,244,233,195,222,189,123,175,100, 10,241, 95,169,
-117,238,220, 57,116,101, 25, 34,123, 26,141,134,150, 45, 91,210,167, 79, 31,218,183,111,143,193, 96,160,168,168, 8,128,252,252,
-124,110,187,237, 54, 94,125,245, 85, 69, 54,237,118, 51,213, 85,249, 88, 44,229, 68, 86,156, 37,182,101, 26, 45,162,219,209, 34,
-186, 29, 95,109, 41, 68, 24,151,236, 34, 4,174,252,117, 57,126,216,176, 97,232,245,122, 74, 75, 75,153, 52,105, 18,173, 90,181,
-226,222,123,239,101,219,182,109, 1, 93,227, 45,183, 12, 35, 60, 60,156,216, 99, 57, 60,244,208,239, 72,233,222,141, 23, 23,252,
-142,119,223,124,143, 55,180,166, 38, 95,111, 2, 85,123,215, 84,241, 53,229, 81,162,222, 26,218, 64,212, 94,125,246, 60,197,228,
-252, 33,171, 80,219,243,135, 92,130, 37, 31,117,160,146,178, 70,182,255,184, 9,180,106,151, 66,209,143, 63,160, 61,151, 75, 87,
-235, 69, 98, 90, 37, 51,172, 79, 79,122, 15,186, 17, 99, 27,223,147,134, 69, 81,164, 75,151, 46,140, 24, 49, 66,142,183,105,181,
- 90,204,102,179,156, 98,204,213, 29,218,161, 67, 7,134, 15, 31, 94,111,195, 25, 25, 25, 73,255,254,253,209,233,116, 88, 44, 22,
-249, 56,215,145,142,174, 9,170, 53, 26, 13, 3, 6, 12, 32, 39, 39,231,186,185, 55, 58,157,142,214,173, 91,211,186,117,107,122,
-244,232,129,195,225,160,166,166, 6,179,217,204,136, 17, 35, 88,178, 68,105,251, 32, 98,181, 84, 98,181, 84, 97, 52, 22, 17, 30,
- 30, 79,152, 62, 6,141, 70,199,234,172, 47,152, 61,107,242,213, 78,133,135,163, 37,149,249,202, 43,175, 96, 52, 58, 99,132,221,
-187,119, 87,148, 38,206, 21, 3, 7, 14, 66, 59,100, 8,247,255, 89,178, 39,210,189,123, 15,186,255,234, 87,232,116, 77, 71,241,
- 73,110,205,107,146,178, 76, 69,104,167, 47,184, 19, 82,176,234, 44,212,246, 84, 52, 46, 58,244,234, 77,135, 94,206,193, 18,174,
-107, 27,248, 59, 85, 56, 35, 35,131,248,248,120,121,196,166, 52, 34,209,117,202,130, 52,152, 69, 90,161, 33, 45, 45, 13, 65, 16,
-216,245, 67,117, 29,123,203,151, 47, 39, 59, 59, 91,222,215,110,183,251, 92,150, 72,175,215, 43,114, 1, 54,199, 78, 74,116,116,
- 52,209,209,209, 65,118,240, 36, 2,172, 68,163,209, 1, 26,192, 33,219,243,229, 44,150, 86, 94,112, 29,117, 26, 40,236,118, 7,
- 11, 23, 46, 12,153,189,134, 38,191, 96, 73, 15, 64,152, 50,251,105,117,205, 67, 21, 42, 84,168,184, 70, 16,228,255,234,112,161,
-186, 0,237,181, 82,242,106, 17,168, 80,161, 66,197,181,131,232,143,164, 83,209,176,202, 93, 45, 2, 21, 42, 84,168, 80,161, 18,
-159, 10, 21, 42, 84,168, 80,161, 18,159, 10, 21, 42, 84,168, 80,209,252, 81, 43,198,119,251,200,148,128, 13,125,190,179,110, 18,
- 83,213,158,106, 79,181,167,218, 83,237,169,246, 2,177,119,205,136, 15,188, 47, 51, 19,232,130,162,205,213, 94, 32, 54,155,250,
-245, 54, 87,248,147, 62,205,223,172,237,215,106, 5,137,166, 86,126,234,220, 74, 21, 42,234, 33, 62, 0,241,163,186,137, 73,133,
-233,134,128,127,164,190,236,250, 77,197,158,167,235, 13,230,154,155,250,245, 74, 40, 45, 58, 69, 81,209, 69, 10,139,171, 40, 47,
-183, 18, 23, 23, 70,114, 98, 52, 73, 73,109, 73, 72,234,170,216,222,119,123,222, 36,247,244, 73, 78,159, 53,113,254,162, 72,135,
-182, 2,105,157, 35, 72, 77,235,206,192, 91, 30,108,240,135,217,149,236, 54,172,126,134,219, 71,174,244,139, 64, 51, 51, 51,155,
- 4, 49,228,230,230,178,116,233,210, 90,219, 22, 47, 94,220,164,150, 0, 11,101, 57, 53,135,235, 85,241, 51, 34,190,159, 35, 92,
- 73, 78, 16,192,241, 97,252,117,123,173, 86, 75, 53,231,243,142, 96,177, 88,233,218,165, 37, 99, 70,116,164,101, 92, 56,134, 50,
- 19,249, 23,171,248, 41,247, 34,101,229,197,116,232,216,135, 48,125,148, 79,123,134,226,147,236,222,254, 54, 90, 42,152, 49, 25,
-134, 15,130,180, 78,112,234,172,200,174, 3, 70, 54,110, 61,196, 23, 31, 47, 98,216,232, 7,136, 79,236, 30, 50,242,247,151, 4,
-125,169, 70, 41,233,117, 99,146, 95,125, 29, 25,137, 24,154,130, 90,115, 93, 46, 42,216,243,105, 14,215,171,162,233, 33, 84, 19,
-216, 85,226,115, 81,125, 18,249, 93,207,164, 7,112, 33,239, 8,201,137, 17, 12, 25,208,229,202, 74,207, 2, 14,135, 72,108,116,
- 56, 81,105,122, 58,119,136,227,216,137, 98, 46,228, 29,161, 75,215,155,125,218,219,189,253,109, 70, 14,170, 96,193,111, 65,171,
-117,118, 28,172, 54,136,106, 1,189,186,194,205,253, 97,195,214, 10,118,111,127,155,201,119,189, 20, 84, 67,217, 80,169,212, 36,
-242,107,108,210,171,111, 97,223, 96,200, 38,148, 54, 66,161,252, 66,121,189,158,108,249,187, 77, 69,243, 37, 60,215,237,129,144,
-159, 58,170,211, 93,249, 93,231,215, 87, 90,116, 10,171,213,202,208,129,109,107, 63, 8, 26, 1,189, 94, 75,100,132,142,176, 48,
- 13,105, 93,226,177, 88,172,148, 22,157,242,106,239,187, 61,111,162,165,130,133,247,131,201, 12,103,206,131,161, 28,202, 42, 96,
-205,122,248,195,159,225,201,151, 97,216, 64,208,136, 21,124,183,231, 77,245, 33,115,129,123,178,118,111, 68,173, 52,145,187,187,
-138,117, 85,182,193,118, 24,220, 93,197,193, 92,239,166, 77,155,216,188,121,115,192,215,235,171,220, 84,194,187,126, 48,101,246,
-211,181, 94,222, 72,241,186, 83,124, 13,217, 51, 23, 27,240,252, 66,229, 74,115, 95,161, 92, 73, 5, 47, 42,190, 72,143,180, 4,
-153,236, 60, 33, 34, 92, 71, 89,185,153,238,105, 9,156,204,189,232, 53,222,151,123,250, 36, 51,156,121,117,249,223, 14,248,251,
-251,112,235, 72,152, 52, 6,142,159,130,131, 71, 69, 34, 35, 4, 6,244,134, 9,163,225,147, 47, 79, 50,240,150,208, 41,181, 64,
-202,174,161, 98,166,129,192, 31,215,158, 68, 88, 75,151, 46, 85, 92, 14,245,185,117, 3, 85,203,238,229,167, 84,161,185, 95,239,
-166, 77,155,106, 45, 49,150,158,158,174,248,122, 61, 93,143,191,219, 84, 52, 31,194, 11, 37, 60, 18, 95,125,131, 58, 2,105,104,
-125, 17,129, 82,123,215,186,215, 22,200, 8, 64,111,131,101, 2,177,231,233,152, 64, 7,228, 20, 22, 85, 49,118,120, 71, 68, 17,
-118,238, 57, 79,141,209, 10,192,192,126,109, 72,106, 21,201,249,252, 74, 78,157, 49,160,211,105,232,150, 26,207, 55,223, 86,211,
-163, 87,253,246, 78,159, 53, 49,124, 16,152,173,240,223,237,176,117,143, 72,187,100,129,212,142, 48,110, 4,244, 76, 19,208,105,
-157, 75,123,221,220, 31, 94, 90,105,242,235, 90, 93, 27,104,127,222,251, 83, 49,220, 21,143,187, 27,236,122, 82, 4,222,136, 40,
-152,133,124,189, 41,189, 64,108,186,146, 94,118,118, 54,233,233,233, 65,119,136, 84,181,167, 34, 32,226,171,111, 84,103,160,163,
- 61,235,235, 97, 7,210,243,246, 70,150,129, 18,179,183,235,174, 47, 6,225, 11,245, 13,150, 9,196,158,183, 99,164,223, 17, 0,
-199, 71,190, 99,147,206,209,155,225, 0,156, 47,168,192,104,116,174,238,221, 53, 53,158,164, 86,145, 28, 58,122,153, 19, 63,149,
- 18, 17,161, 37,173, 75, 75, 12,229,222,215, 86, 59,127, 81, 36,173,147,243,247, 39,142,130,254, 55, 8,132,235,193,102,115, 42,
-191,150, 49,144,155, 7, 19, 70, 65,167, 20,231,254,141, 9, 87,178,187, 30,227, 62,174,215,228,137,152,234,235,100, 4,163, 0,
-131, 41,195,140,140, 12,178,179,179,129,224,214,216, 92,186,116, 41,139, 23, 47, 14,248,123, 21,205, 11,254, 78, 93, 82, 68,124,
- 77, 29,222,136, 32, 16, 98, 9,102,170,134, 87,187, 13, 60, 58, 84,152,110, 80,252, 27,113,113, 97, 24,202, 76, 36, 38,180, 32,
- 99,106, 79,108,118, 7,225,225, 90,180, 26, 13,162, 40, 50,229,214, 52, 38,143, 79, 67, 16,160,196, 96, 36, 46, 46,204,171,189,
- 14,109, 5, 78,159, 19,233,153, 6,191,184,197,233, 42, 62,126, 10,250,246,132,248, 88,184,109, 12, 56, 28,160,211,194,201, 51,
-206,253,253,189,183, 74,222, 7, 59, 1,182, 41, 76,103,240,116, 14, 74,207,203,149,216,221,213,153,183,207,129,158,103, 48,234,
-209,245, 56, 81, 20, 25, 63,126,124, 64,182,220,167, 68,168,228,167,146,222,117, 73,124, 13, 77,164,161,106, 8, 69, 17, 52, 51,
- 12, 13, 70,126,210, 72, 84,205,116,131, 95,106, 15, 32, 57, 49,154,243,249,149, 36, 38,180,224,213, 21,251, 25, 53,172, 3, 3,
-251, 38, 35,132, 9,242, 8,207, 43, 75,183,113, 62,191,146,228,196,104,175,246,210, 58, 71,240, 77,142,145,158,105,144, 56, 8,
- 30,159, 7,243,239,131,184, 24,167,123,243, 47,175,195,159,231, 59,247,253, 38,199,185,127, 48, 74, 38,148, 49,210,166, 48,151,
-111,241,226,197, 44, 93,186, 84, 62,167,220,220, 92,121, 30,155, 52,184, 67,250, 78, 73,163,237,141,144, 66, 61, 66, 84,137, 45,
- 79,215, 43,185, 55, 3,185, 94, 87,210,243,135, 0, 85,242, 83, 73, 79, 37,190,107,128,134,158, 26, 33,147,159,159, 4,155,148,
-212,150, 83,103, 10,232,215,187, 53,143,207,191,153,119,215, 30, 33, 50, 66, 71,255, 27, 91,203,139,149, 2, 56, 28, 34,167,206,
- 24, 72,110,221,206,171,189,212,180,238,124,241,245, 33,238,187, 11,196, 92,184,249, 78, 72,237, 0, 89,159,185,236, 52, 31,236,
-118,248,226,107,231,254,141,169,168,234,235,236, 52,214,116, 6,247,201,218,158,136,175,190,125, 3, 81,145,193, 92, 99, 40, 98,
-122,161,190, 94,137, 72,125, 17,165, 63,251,168,248,121,144, 30,168,211, 25,154, 53,132,233, 6,197,238,206,132,164,174,132,135,
-235,249, 54,167, 0,135, 67,228,182,244, 84, 14, 31,189,204,115,175,238,225,217, 87,118,203,164,247,109, 78, 1,225,225,122,159,
- 25, 92, 6,222,242, 32,118, 98, 89,246, 79, 39,185,189,245, 44,252,251, 19, 24,123, 51, 12,184, 1,182,173,117,110, 95,246, 79,
-176, 19, 27,112, 6,151,149, 43, 87, 6,165,198, 92, 85, 94, 83, 26,213,233,222,216, 75,241, 46,247,247,158,246,245,183,204,220,
- 85, 90, 48, 49, 61, 95,158,146,198,184, 94,127,201, 76, 37, 61,149,244, 84,226,107, 96,136, 31,197,215, 59,242, 50,212,191,161,
- 84, 85,118,232,216,135,162, 82, 51, 31,111, 56, 65,193,165, 42, 38,223,154,198, 19, 11,111,102,238,111,251,115,240, 72, 33, 31,
-111, 56, 65, 81,169,153, 14, 29,251,248,101,111,216,232, 7,216,153, 19, 75,198, 67,144,243, 3,188,253, 87,120,242, 33,200,188,
- 7,222,249, 8, 50, 30,130,157, 57,177, 12, 27,253, 64, 80,196, 21, 40, 57,249,114,147, 54,230,168, 78,127,227, 83, 74,247,245,
- 68, 80,161,184,190, 96,109, 53,212,245,250, 34, 53,149,244,174, 15,132,106, 90,131,162,233, 12,129, 14, 2, 81, 58,157, 33, 80,
-123,129,218, 12,245,249,121, 43,167, 80,157, 95, 48, 3,114,194,244, 81,164,118,189,153,210,162, 83,228,158,189,200,158, 3, 23,
-106,229,234, 76,110,221, 78, 81,174,206,248,196,238, 76,190,235, 37,190,219,243, 38, 31,126,113,146,231,255,222, 56,185, 58,149,
-168,149,166, 64,122,190,126,183,169,142, 52, 13,230,188,154,227,245,170,104,154,202, 47, 24, 66,212, 53,244,195,119, 45,237, 5,
- 59, 47,169,185, 93,111,176, 72, 72,234, 74, 66, 82, 87,122,132,200,222,192, 91, 30, 12,104,114,186,218,216, 54,109,178, 82,161,
-226,122,131, 48,101,246,211,162, 90, 12, 42, 84,168, 80,161,226,231, 2, 53,198,167, 66,133, 10, 21, 42, 84,226, 83,161, 66,133,
- 10, 21, 42, 84,226, 83,161, 66,133, 10, 21, 42, 84,226, 83,161, 66,133, 10, 21, 42,154, 23,106,141,234,188,125,100, 74,192,134,
- 60,229, 74, 84,237, 53,140, 61,127, 18, 3, 55,166,189,220,220, 92,114,115,115,201,206,206, 14,137,189, 51,103,206,112,250,244,
-105,178,179,179, 89,181,106, 21,224,204,237,168, 62, 47,170, 61,213,222,245,107,239,154, 17,159,175, 70,177, 62, 40, 25, 42, 29,
-106,123,215, 18,115, 50,202, 65,175,103, 85, 86,164, 95,251,231,230,230,250, 53, 9,215,223,235,117,181,231,109, 81,209, 64,236,
-253,240,106, 44, 55, 62, 82, 17,148, 61, 39, 68,250, 26,223, 64,180,216, 1, 88,181,106, 21,115,230,204, 9,162,212, 69,134,104,
- 63,192,106,173, 32, 50, 50,146,143, 62,250,136,251,238,187, 15,187,221,142,197, 98,193,225,112, 92,211,103, 32, 20,139,184, 54,
- 39,123,205, 5,130, 32,160,209,104,208,104, 52,114,234, 61,139,197,130, 86,171,197,225,112,212,233, 40,169, 80, 21,159,215, 74,
-228,237,129,113,205,237,232,111,131, 17, 42,123, 74, 21, 75, 40,177,105,211, 38,136,232,229, 23,169, 44, 94,188,184,222,156,131,
- 74, 87,174,150, 22,230,204,204,204,244,184, 98,117, 32,246,196,239,159, 70,232,255, 12,255,222,238, 92,126, 72,252,254,234, 68,
- 80,161,191,178,149,141, 99,142, 61,130, 40,194,218,111,156,182,110, 27, 16, 70,239,246, 71,101,149,166,148, 0, 59, 38,124,203,
-153, 35,133,236,186,216,137,234,232, 40, 38,142, 41,163,125,146,192,246,109,155,168,168, 52, 49,105,210, 36,204,102,243, 53,111,
-212, 26,179,163,231,143, 61, 37,229, 17,104,157, 11, 22,185,185,185,188,248,226,139, 44, 90,180,136,180,180,180,160,108,105,181,
- 90,116, 58, 29, 58,157, 14,173, 86,139, 70,163, 97,233,210,165, 44, 90,180, 8,187,221,142,205,102,195,102,179, 97,183,219, 27,
-229, 90,191,248,226, 11,191,203,126,210,164, 73,138,108,111,220,184, 49,168,227, 85,226, 11,128,244, 6, 13, 26, 68, 78, 78,142,
-162,138,234,173,162,249, 99,207,147,253,197,139, 23,203,174,181, 80,102,216,159,115,251, 42,136,236,206,170,143,198, 56,213, 75,
-118,156,147,244, 20,144, 84,125,249, 6,165,243,246, 71, 17,186,218, 3,231, 26,102,233,233,233,181, 22,237, 12,196,158, 68,114,
-210,223,165,127,161, 22,233, 61,246,203, 8, 94,252,204,228, 87, 89,197,157,120,148,222, 29,181, 84,155, 68, 30,153, 18,193,222,
-159,108, 24,205, 34, 70, 43,140,109,127,148, 31,242,236,138,212,223,249,195,203,200, 41,138, 34, 54, 74, 32,185,117, 50,173,219,
-119,229,220, 5, 51, 61,186,219, 8,215, 94,230,243, 13,197,172, 93,187,150, 59,239,188, 83,173,197,205, 16, 75,151, 46,229,246,
-219,111,231,197, 23, 95,244, 88, 95, 7, 14, 28,200, 95,254,242, 23,110,191,253,118,239, 13,152, 78,135, 94,175,151, 95,231,207,
-159,167, 91,183,110,104,181, 90, 98, 98, 98, 56,117,234, 20,209,209,209,236,223,191,159, 61,123,246,240,208, 67, 15,249,174,247,
- 87,158, 81,215,246,207,181,221,146,182, 11,130, 32,119,234,188, 97,253,250,245,245,218,112,221, 46,138,162, 98,226,250,236,179,
-207,130, 58,190,185, 66,202,224, 18,210,101,137,252, 37, 61,127,161,116,121, 17,165,164,247,194, 11, 47,240,248,227,143,215,218,
- 30, 40,249,205, 25,180, 10, 90,117,103,213, 87, 99,106, 41,188,241,227,199, 3,200,127,235,243, 73,187,147,148,183,243,246, 55,
-219,190, 84, 54,174,157, 8,247,132,190,129,216,243,166,232, 30,251,165,127,203, 7,137,162, 72,226, 79,143,210,173,157,150, 72,
-189, 64,231, 36, 13, 69, 21, 34, 54,187,150,226, 74,145,242, 26,145,211,133, 14, 4, 1, 18, 29,135,107,101,227,175, 87,173, 20,
-173,163,107,199, 84,138,138, 10,233,156,146, 68,159,222,169,232,162,227, 73, 77, 41,195,104, 47,231,226, 69, 59,249, 6, 19,145,
-230, 92, 78,159,238, 23,208,170, 5,161, 68,176, 11, 32, 55,148,189,250, 58,153,141,237,246,203,205,205, 69, 16, 4,110,184,225,
- 6, 62,255,252,243, 58,207,196,160, 65,131,252, 34, 61,128,176,176, 48, 34, 34, 34, 40, 46, 46,166,123,247,238, 12, 24, 48, 0,
-157, 78,199,235,175,191,142,221,110,167, 79,159, 62,124,242,201, 39,236,223,191,159,195,135, 15,163,213,106,125, 42,191, 95,254,
-242,151,114,249,249,106, 7,253, 33,154,207, 62,251, 76, 46,119,111, 29,127, 81, 20, 41, 44, 44, 84, 76,124,193, 28,223, 28,201,
-174, 65, 20,159, 84,233,124, 41,179,166,130,220,220, 92, 30,127,252,241,128, 19,248,214, 7,167,178,155,195,166, 77,155,200, 94,
- 53, 20,244, 70,191, 98,123,158, 72,202, 83, 71, 64,105, 99,237,218,232,109,222,188,185,142,218, 83,106, 47,235,255,162,113, 46,
- 27, 91, 23,179, 94,175,246,219,142, 40,138, 68,232, 5,180, 26,104, 17, 14,101, 53, 34, 22,187, 72, 84,132,128,209, 10, 70,139,
- 72,251,120, 13, 14, 7,156,188,104,103,243,230,205, 94, 85, 95,229,165,111,137, 11,139, 34, 44, 76,228,129,140,161,216,109, 34,
-151, 12, 22,242,206,148,163,225, 60, 45, 91,154,185, 92,120, 22,189,182,156, 99,103,203,200, 55,109, 14, 50,134, 24, 26,120, 90,
- 64, 54,152, 21, 31,220, 19,156, 11,211, 13, 1,217, 43, 45, 77,175,245, 57, 33, 97,179,207, 6,253, 90,168,189, 41, 83,166,200,
-207,236,209,163, 71,229,247,146,210,155, 50,101,138, 95,182,194,195,195,169,174,174,166, 87,175, 94,140, 29, 59,150, 71, 31,125,
-148,223,253,238,119, 0, 88,173, 86,222,125,247, 93,114,114,114,248,238,187,239,248,240,195, 15, 49, 26,141, 62,227,194,147, 39,
- 79, 14,233,245,190,243,206, 59,126,119, 84,148, 42, 54, 87,219,129, 28,175,186, 58,253, 84,104,161, 38,152, 96,225,174,124, 20,
- 43,188, 85,153,208, 22, 86,221,238,108,184, 86,229,204,169,229,206,116, 42,188,242, 58,202,207,223, 70,208,189, 55, 27, 8, 73,
- 41, 85, 10,153,153,153,126,184, 0,124, 55,124,146,155,179, 62,123,162, 40, 82,180,237, 17,218,116,212, 82,101, 20, 17, 69,231,
-170,243, 53, 22, 17,163, 5,172, 54,231,111,216, 28, 34,142, 43, 13,237,145, 67, 57, 87,220,191,122,143,191, 89, 86,120, 20,125,
- 82, 60, 73, 45, 91, 82,102, 48, 82, 86,110, 96,239,209, 66,242, 13, 34, 45, 90,212,144,214,169, 10, 99, 85, 49,125,187, 89,185,
-161,179,153, 85,107,115, 56,117,234, 20, 16,161,214,230,102, 0, 73,237, 9,130,192,231,159,127,206,148, 41, 83,216,176, 97, 3,
-189,123,247, 38, 35, 35, 67, 17,233, 73,196, 87, 84, 84, 68,139, 22, 45, 24, 53,106, 20, 47,191,252, 50, 97, 97, 97,100,102,102,
-242,222,123,239,145,147,147,195,222,189,123,217,178,101, 11, 71,142, 28, 33, 49, 49, 17,155,205,230,187, 93,152, 51,199,167,171,
-243,237,183,223,246,235, 28, 27,210,213,185,126,253,250,159,141,171,211,181, 13, 10, 86,253, 53,235,133,104,235, 91, 60, 52, 16,
- 23,211,166, 77,155,200,126,252, 12,104,245,204,185,181, 51,180,236,204,170,143,156,223,249, 27,219,107, 72, 23,154, 52,152,197,
- 85,233,185, 67,138,253,133,114,181,137,172,255,139,170, 87, 1,198, 28,123,148, 51,102,145, 75,101, 14, 4, 65, 67,148,201,233,
-202,177,217, 69, 76, 86, 48, 89,192,108,117,190, 76, 22,176,218, 92,122,252, 30,136, 52,250,232, 35,228, 23,116,164,115,199,104,
- 52, 17, 90, 74,140, 70,182,236,191,192,201,243,249,148,148, 86, 49,184,175, 29,115,141, 13,147,197,142,209,228,224,220,121,168,
- 49,194, 75, 47,189, 20,178,229, 74, 84, 92, 27,181,119,195, 13, 55,144,154,154, 74,110,110, 46, 27, 54,108,144, 85,159, 18,210,
- 3,167,171,179,127,255,254, 68, 68, 68,240,222,123,239,113,255,253,247,243,215,191,254, 21, 81, 20,249,246,219,111,217,190,125,
- 59,135, 15, 31,166,188,188,156,110,221,186, 81, 81, 81,129, 70,227,123,250,242,175,126,245,171,122, 85,177,164,152,253, 85,134,
-170,171,179,153, 40,190,166, 12,247,248,152, 59,249,185,171, 45, 95,241, 54, 95,100, 40,169, 62,167,187, 83,207,170,172,198, 33,
-247,244,244,116,153,252,188,169, 95, 95, 10,216, 27,145,121,130,183,125,239,125,163,154,118, 9, 26,238, 25,161,199,252,255,183,
-119,246,209, 81,149,119, 30,255,220, 36,131,132,183,242, 34, 93, 86,148, 54,145,146,162, 84, 20,216,109,247, 0,234,202, 0, 5,
-195,139, 64,232,233,234,233, 1, 87,153,224,138, 7, 13, 77,168, 71,182, 86,221, 37,161, 38, 96,233,150,204, 84,147, 72, 27,181,
-100,169, 82,114, 64, 93, 60, 69, 16,219,237, 18, 40,136, 98, 8, 68,228, 69, 94,108, 36, 33,228,109, 50,115,239,254, 49,220,225,
-230,230,222,153,123,239,220,201, 12,112,191,231,228,100,230,201,204, 47, 51,247,121,238,243,125,190,191,231,247,251, 61,157, 48,
-160,143, 64,170, 16,154, 44,252, 65,137,142, 78,104,233,144,104,105,151,104,245, 75, 4,197,144, 34,140,100,239,206,172,122,190,
- 53,242, 43,222,126,255, 60, 95, 53,181,243,189, 59, 46,242,143, 95,187,132,171, 87, 7,173,237, 34,167,206, 72,180,180, 11, 4,
-131, 2, 55, 14, 22, 64, 16,157,187,248, 42,132,124,255,170,189, 31,213,213,213,221, 8, 39,210, 94, 95, 74, 74, 10,249,249,249,
-164,165,165,177,113,227, 70,202,203,203, 89,188,120, 49,133,133,133, 8,130,192,241,227,199,105,107,107,163,160,160,128, 64, 32,
- 64,110,110,174,161, 72, 86, 59,149,147,227,234,116,136,207, 22,168,247,137,244,136, 45, 26, 81,168,225,171, 89,162, 32,188, 58,
-170,126,241,217,229,168,206,174,100,104,196,221,105,183,234, 83,239,235,169,191,219,142, 29, 59,200,201,201, 9, 39,141,235, 5,
-223,152, 33, 61, 57,170, 83,207, 94, 80,132,214, 14,137,142, 78,137,198, 22,137,246, 78, 9,215,229, 17, 21, 8,134, 84, 94,171,
- 95,162,161, 89,226,203,139, 18,251,143, 7,144,164,144, 50,109,211,248,127, 65, 17, 78,158,241,115,244,232, 5, 62,220,119, 1,
- 73, 18,248,244,168,200, 15,103, 7, 72,147, 36,206,158,135,119,119, 67,115,171,132, 40,194,125,223, 19, 72,191, 1,102,222, 63,
-135, 96,130,199,164,221, 39,184,199,114,222,162, 18,131, 7,239, 72,170,123, 87,235, 94,245,122,189,140, 27, 55,142,125,251,246,
-177,117,235,214,110,127,143, 22,228, 82, 92, 92,204,192,129, 3,195,170,167,172,172,140,135, 31,126,152,242,242,242, 48,137, 22,
- 23, 23,211,216,216,200,197,139, 23,105,109,109, 53,244, 89, 31,125,244,209, 48,161, 40, 21,155, 36, 73,134,221,156,224,184, 58,
- 29,226,179, 9, 53, 53, 53, 81,163, 3,235,235,235,141,167, 70,220,208,151,170,111,238,130, 64, 13,100,244,101,201,127,100,224,
-219,153, 13,248, 20, 68, 56,213,178,187, 83,157,210,160,151,226,160, 55, 73,200,138, 79,139, 0,101,165, 39,183, 69, 82,124, 74,
-123,118, 77, 98,117,117,117,156,216,243, 11, 36, 73, 68,104,133, 94,105,151,147,135, 3, 18, 65, 41, 68, 82, 29,157, 33, 34, 12,
- 4, 97,246,220, 5,184,221,110, 77, 34,149,237, 29,223,243, 18,183,127, 83,100,215,254, 32, 41, 41,112,246, 75,129,244,222,240,
-206,110,104,109, 21,144, 68, 24,119,155,139, 19, 95,136,220,115,223,253, 76,159, 62,157,109, 31,158, 73,232,100,110, 39,241,217,
-101, 47,154,107, 45, 89, 32, 71,113,102,103,103,135,199,168,236,173,201,207,207,143,248, 94, 81, 20,217,191,127, 63,147, 39, 79,
-238,210, 94, 86, 86, 22, 38,151,206,206, 78,130,193, 32,117,117,117, 12, 29, 58,212,112,209,131,185,115,231,218,162,204, 28, 87,
-231, 53, 70,124, 53, 53, 53, 61, 94,245, 65, 86, 53, 69, 69, 69,225, 61, 45, 45,165, 39, 19, 64, 78, 78,142,165,255,163,140,234,
-148, 97, 86,233,233,145,179,220, 38,187,109,205, 40, 93, 37, 1, 2,154,185,124,118, 97,205,150,246,168,246, 70,142, 28, 73, 89,
-105, 39, 83,198,184, 16,129,206,128, 72,111,151,128, 36, 65,115,187, 68, 71, 32,228,226,172, 57, 22, 36, 32, 74, 81,147,149, 71,
-142, 28,201,198, 95, 7,184,231,206, 84,254, 37, 59, 20, 52,211,212, 12,205, 45, 2, 35,191, 33, 17, 8, 8, 8,244,166,161, 81,
-228,244, 89, 63,115,114,110, 35, 53, 53, 53, 41,149, 76, 44,139, 12,187,236, 37,123,197,146,241,227,199,243,236,179,207,118, 83,
-117,107,214,172, 97,214,172, 89, 81,199,139,223,239, 39, 43, 43,139,246,246,118, 82, 83, 83,233,211,167, 15, 0,155, 55,111,102,
-254,252,249,180,181,181,209,222,222, 78, 71, 71, 7,253,250,245, 35, 24, 12, 26,190, 38,118, 69,119, 58,174,206,107,136,248,226,
- 65,122, 70,108,186,221,238, 48,169,201,123, 90,202,244, 10,181,202,139, 20, 12, 18, 70,170, 0,189, 82, 32, 61, 21,250,165, 65,
- 71, 51, 85,171, 93,144,254, 23,150, 44,200,128,244,193,248,126, 99, 94,229, 69, 82,164,102,115,249,212,164,167,222,243, 51,107,
-207, 40,233, 69,179, 39, 8, 2,171,139, 75,121,114, 89, 46,233, 55,128, 40,194,152, 17,169, 8, 2, 72,210, 21,194, 11, 74,169,
-204,155, 55,207,144,189,231,215,148,146,183, 60,151,160,120, 89, 57, 6, 65, 0,102,254, 51, 52, 53, 11,252,245,227, 54,218, 59,
- 83,152, 61,123, 94,194,115,248, 28, 88,135, 94,146,186,199,227, 33, 59, 59,219, 80,160,139,223,239,167,173,173,141,250,250,122,
-198,142, 29, 75, 32, 16,192,229,114,177,101,203, 22,166, 78,157, 74,123,123, 59,173,173,173,212,213,213, 49,104,208, 32, 67,233,
- 12, 74, 40,183, 84,204,186, 56,101, 56,174,206,107,132,248, 18,161,244, 34,185,130,244, 92,154,118,126, 70, 51,123,123,118,147,
-158,146,228,149,207,149,191,205,218,139,182,215,103,214,222,218,245,165,120, 60, 30, 4, 1, 62,248, 52, 16, 78,109, 8,221,144,
-144,147, 51,207,216, 34,228, 50, 10,127,190,158, 39,158,120, 60,108, 71,146, 96,215,255, 65, 75,171,136, 40,194,236,217,247, 51,
-109,218, 52,231, 14,190,138,161, 69,122,185,185,185, 97,194,219,186,117, 43,130, 32, 68, 36, 64,191,223, 79, 74, 74, 10, 55,221,
-116, 19,205,205,205,236,221,187,151,187,238,186,139, 64, 32, 64, 83, 83, 19, 7, 14, 28, 32, 35, 35,131, 33, 67,134,208,214,214,
- 70, 32, 16, 48,165,130,229,100,246, 88, 84,160,227,234,188, 74,136, 47, 90,174,158, 89, 66, 49,154,251,103,198,174, 92, 14, 76,
-203,182,153, 73,219,183,196, 27,114,103, 30, 33,244,211, 5, 77,151,127, 62,179,245,251,154, 37, 21,117, 61, 78,229, 94,157, 21,
-114, 87,219,171,124,162,111,152, 12, 99, 89, 44,168,251, 68, 14,100,201,204,204, 52,173,204, 92, 46, 23,235,215,255, 23,135, 14,
- 29, 98,195,134, 13, 0, 52, 95, 10, 77, 60,183,222,122, 43, 89, 89, 89, 9,219,191,178, 59,144,197,246,192,152,171, 96, 95, 15,
-186, 7,173,212,215,215, 35, 73, 18,213,213,213,186,175,209, 34, 62, 73,146, 16, 69, 17,191,223,207,136, 17, 35,104,108,108,100,
-213,170, 85, 52, 53, 53, 49,124,248,112, 46, 93,186,132,223,239, 15,239,245,153,129, 29,238,206,179,103,207,198,237, 26,198,211,
-246,117, 69,124,118, 43,185,120, 42,195,204,204, 76, 91,236,219, 25,165,217, 19, 74,216,238,137,210, 76,164,167,145, 62, 81,194,
-140,202,235, 54, 56,211,210, 24, 59,118,108,151,182,236,236,236,112, 2,116,162,188, 13,215,147,189,120, 64,121,146,130,242, 52,
-133,209,163, 71, 83, 86, 86,134, 40,138,134, 79, 84,144, 21,156, 40,138,116,118,118,134,139, 84, 67, 40,240, 37, 25,138, 84, 59,
- 72,194, 49,152,253,208, 42,231,188, 14, 7, 14, 28, 56,112,112,221,192, 57,129,221,129, 3, 7, 14, 28, 56,196,231,192,129, 3,
- 7, 14, 28, 56,196,231,192,129, 3, 7, 14, 28, 56,196,231,192,129, 3, 7, 14, 28, 92, 93,232, 18,213, 57,107,242,205,225,199,
- 90,199,233, 68, 58,110, 71,171, 4,149,210,158, 89, 92,139,246,212,233, 23,202,235,233, 92, 63,167, 63,174,103,123,209, 82,115,
- 18,109,207,233,223,200,246, 98,177,165,247,249,122,140,248,226, 1,235,101,180,122,233,218, 83, 66,235,116, 6,173,215, 36, 2,
-242,196, 90, 80, 80,160,200,109, 11, 5,209, 38, 75,174,213,145, 35, 71, 40, 46, 46, 14, 63,127,234,169,167,200,202,202,186, 38,
- 87,121, 90,253,113,248,240, 97, 32, 20, 74,159, 72,120, 60, 30,230,204,245,176,229, 45,175,230,152,221,182,125, 31, 91,222,242,
- 70, 29,203, 30,143,135, 67,135, 14,113,199,119,198, 32, 74,132, 31, 3, 28,252,168,123,187, 40,153,191, 63,228,251,203,174,251,
- 74,174, 64,164, 85,135,214,234,181, 52, 66,126, 14, 18,135,218,218,218,132,206, 51, 61, 82,164,218, 74, 89,169,143, 79,235,175,
- 0,180,200, 67, 93, 21,193, 40,193, 88,201,137, 51,114, 51,201,118,229, 73, 86, 47, 39, 73,126, 93,164,243,228,212,159,113,120,
-198, 45, 0,156,107,111, 39,208,214, 17,106,108,188, 8,160, 91,191, 84, 15, 74,210, 3, 40, 41, 41, 49, 53, 89,120, 60, 30, 82,
- 4, 16, 37,194,191, 33,242,227, 13,165, 61, 63, 25,169,251, 67, 38, 60,171,253, 97,231,132, 42,147,222,204, 25,227,128, 16,249,
-197,242, 63,100,162, 3, 24, 51,102, 76,151,118,185,159,148,237,137, 94,140, 40,171, 16, 89, 41,118,160,213,127,242,124, 16,203,
-117,212,123,175, 85,155,118,216,179,123,209,145,136, 5, 66,109,109, 45,107,215,174,165,180,180,244,218, 38, 62, 59, 87,115,221,
- 72,208, 14, 27, 38, 74, 24, 25, 81,106,178,202, 45, 44, 44, 4, 8,255,214,122,157,233, 10,250, 3, 7,112,176,254, 13,210,185,
-153, 32,123, 56,255,242, 62, 14, 28,107, 96, 94, 97,121,194, 6,145,150,146, 0, 52,149,135,104,240, 82, 43,107, 36, 70,130,207,
-231, 51,220, 31,139, 22, 45, 2, 8,255,214,156, 84,228,250,104, 17,108, 77,153,178, 29,143,103,134,173,147,197,204, 25,227, 46,
-127,103, 31, 91,222,234,254,119, 89, 9, 26,193, 51,207,252,148,211,103,254, 70, 91,107, 35, 19, 38, 76,224,224,193, 67,108,124,
-245, 21,205,246,138,138, 87, 72, 36,212, 85,142, 98, 57, 63, 83, 73,122,118,144,159,222,123,172,126, 62, 59,236,201, 69,250,141,
-124, 39, 51,115,110, 36,123,118,206,221, 50,233,137,162,136,207,231,163,178,178,146, 7, 31,124,208,240,251,213, 39,175, 91, 61,
-128, 58, 69,189,250,146,127,172, 60, 55,178,170, 51,227,250,136, 68, 62, 50, 89, 8, 58,132,100,182,186,135,207,231,139,250,179,
-112,225, 66, 67, 3, 40, 39, 39, 71,151,236, 86,174, 92,137, 32, 8, 20, 20, 20,152, 34,220,225, 25,183,192,192, 1,252, 62,119,
- 62, 67,132,137,156,121,121, 61,253, 26, 26, 19, 78,122, 90, 10, 67,148, 66, 10, 79,173, 48,196, 56,148, 74,136,166,216,229,254,
-208, 35,187,138,138, 10, 70,143, 30,205,140,137,119,133, 26,250,247, 77,200, 53,220,182,125, 31, 62,159,143,109,219,247,197,108,
-235,228,169, 51,124,126,252, 24,135, 63, 61, 76, 73, 73, 49,223,254,246, 72, 68, 73,187, 61,209,240,122,175,184,111,149,143, 99,
- 37, 61,245,162,214,138,103, 71,239, 61, 86, 43, 39,217, 97,207,237,118,135, 79,156,241,120, 60,236,216,177, 67,115,190, 84,158,
- 80, 99,132, 76,245, 62,135,108,199,142,106, 81, 74,210,203,203,203,163,178,178,146, 15, 62,248,192, 50,233,233,181,153, 86,124,
- 74, 23,131, 86,161,229, 72,127,143,228,154,148,137, 81,175, 56,179,218, 86, 85, 85,149, 46,147,235, 29,100,105,199,138,204, 46,
-108,218,180, 73,147,240,228,213,173, 82, 13,174, 92,185,210,144,205, 83,245, 39,104,121,243,223,233,247,240, 75, 12,207,184,133,
-191, 27,146, 78,253,155,245, 33,210, 27, 56, 32,228,234,116,153, 63,158, 39, 47, 47,175,139,187, 51, 47, 47,207,180, 13, 81,130,
- 17,125,225,151, 15,193, 35, 21, 48,180, 15, 28,110,212,110,255,216,228,249,170,122,139, 23, 51,139,134,231,158,123, 78,147,240,
-228,254, 88,179, 40,155,245,111,255,153, 97,153,127,207,217,207,207, 69, 85,123,128, 33,213,103, 70,105,132, 20,157, 71, 83,217,
-201,100,104,212, 86,122,186, 11,183,123, 10, 18, 46, 94,173, 40, 15, 23,113,215,107,183,107,194, 78,212,125,167,118,111,170,199,
-136, 25,229, 39,191, 70,185, 79, 24,237,117, 70,198,128, 93,246,100,242, 11, 93,239, 11,192, 5, 60,158, 65,150, 73, 79,105, 79,
- 38, 56,229, 81,110,178,157, 88,251,182,182,182,150,146,146,146,112,153,186,201,147, 39,179,123,247,110, 75,177, 14, 75, 10, 66,
-115,167,175,104,165,229,207,211, 35,174,206,170,170,170,240,222,138, 22,161, 42,219,140, 30,210, 26, 45,200,197, 76,103, 25, 81,
-114, 86,161,236, 88, 37,225,169, 93, 59,209,162,154,218, 56,193,165, 7,190,139,212,127, 5,184, 87,113,137,215,225,229,208,132,
- 40, 85,173,192,245,163,245, 4, 2,162,233,207, 55,106,212,168,152, 7,245,249, 50,248, 89, 41,220,114, 51,156,171,238,197,171,
-175,248, 89,244,134,126,187, 25,216,125,158,156, 50,136,229,204, 91,133,244,191,189, 55,253,190,181,156, 77,133,143, 48,118,204,
- 48,178,178, 95, 48,212, 31, 70,198,167, 81,151,168, 60,118,149,164,231,245,122,195, 1, 45,102,241,216, 99, 75, 53, 93,207,122,
-237, 61, 13, 57,200, 40, 26, 97, 24, 41,230,174,165,244,180,182, 15,140,146,159, 82,125, 26,217,147, 51,210,183, 74,123,210,166,
- 65,221,231,136,133, 23, 12,219, 51,226, 37,179, 66, 86,106, 50, 5, 24, 60,120,135, 45,164,183,116,233,210,208, 2, 89, 20, 89,
-177, 98, 5,235,214,173, 11,147,158, 92,128,222,168,218,147, 73, 79,126,236, 43, 90, 73,245,111,159, 55,237,242,236,177, 61,190,
-204,204,204,176,127, 90,233, 47, 86,174, 78,204,250,145,245,130, 92, 34, 41, 5, 61, 98,142, 7,100, 53,167, 69,120,102,212, 30,
-192,219, 63,121,150, 89,171, 75, 8,184, 39,146, 6,244,251,211, 81,254,231, 88, 3, 0, 1,247, 50, 58, 63,186, 17, 97,232, 99,
-182,184, 94,204, 14,244,134,185,175,179, 3,100, 48, 87, 0, 0, 5,154, 73, 68, 65, 84,108,241, 73,142,228,230,211,242,158,159,
- 97, 55, 70,110,183, 67,241, 89, 33,197,138,138,138,208, 13, 51,235,110,254,252,197,121,250,143,237,207,233,119,142, 65,239, 27,
-152,191,236, 71, 12,190, 57,155, 68, 65, 47,138,211,108,159,120,189, 94,246,236,217, 19, 14, 32, 50,242,216,236,103,139, 37,192,
-194,140, 26,137,116,216,116,164,241,107, 36,160,205,234,222, 80, 50, 65,173,244, 66,164, 5, 85, 85,246,169,111, 59,148,158, 36,
- 73, 4, 2,129,112,219,164, 73,147,216,189,123,183, 97,210,139, 7,210,140, 12, 36, 35,127, 55, 50,144,228,213,155,188, 89, 42,
-239,253,201,106, 48, 51, 51,211,176,226,139,215,132, 99, 39,228,208,121,189,253, 62, 51, 27,249,243, 74, 55, 35,205,206,224,220,
- 63,141, 99, 8, 19, 73,159,191,158,192,153, 47, 97,224, 0,210, 26, 94,167,122, 93, 13,152, 60,137, 92, 75, 37, 91,193,129,167,
-126,200,132, 59, 33,115,217, 33,110,239,183,152,218,111,228,192, 47,243,117,219, 19,165,248,138,138,138,152,252, 15, 89,184, 39,
-142, 98,214,119,242, 41, 94,183,129, 79,106, 78,147,123,223, 4,206,110,217, 70,211,133,139,182,140, 7, 45,151,104,180,251, 35,
-146,186, 51, 27,101, 27,239,116,134, 88, 93,146, 70,159,203,139,210,104, 91, 31,202,247, 69, 27, 47,118,141,249, 68, 67,125, 16,
-181, 18, 74, 87,101, 44,176,195,142,236, 78, 79, 75, 75,227,201, 39,159,100,239,222,189,166,246,245,122,132,248, 34, 37,168, 91,
- 73, 96, 87, 95, 64,181,234,147, 73, 46, 51, 51,179, 75,110, 85, 78, 78, 14,109, 22,213,128, 89,159,113,188,210, 25,100, 53, 23,
- 41,200,197, 12,142,253,124, 9,174,249,235,105,251,226, 8,105,127, 90, 79,231,230,101, 8, 51, 95,228, 15,143, 45,224,243, 63,
-124,198,172, 53, 27, 33, 45, 45, 33,131, 40,191, 10,222, 89,243, 38,183,127, 62, 29,254,214,194,143,167,230, 71,108,183, 67,241,
- 89, 85,123, 91,222,124,150,212,225,183,209,143, 81,156,120,223, 71,179, 32,241,151, 35, 39,113, 31, 58,109,176,223, 79,132,159,
- 47, 92,232,237, 66,114, 0,239,189, 55, 67,243,117,145,238,143,104, 46, 77,179, 81,137,201,154,206,224,245,122,187, 40, 62,189,
-115, 38,149,247,165,172,248,180,174, 95, 44,209,149, 61,157, 48, 29,191,107,122, 33,172,254,212, 10,208,170,138,172,170,170,178,
-133,244, 42, 43, 43,217,181,107, 23,210,166, 65, 8, 11, 47,176,118,237, 90, 36, 73, 34, 37, 37, 37,161,169, 12,221,136, 47, 94,
- 80, 18,164,219,237,166,170,170, 42,124, 3,232,145, 98,180,129,105, 36,200, 37, 30,170,194, 40,177,202,106, 79,139,240,100,130,
- 55,243,121, 15, 28,107,160,243,163,159,113,142, 61, 12,155,249, 34, 52, 93,228,152,111, 5,183, 46, 93,203,217,242, 21,224, 74,
-131,148,196, 84,160, 59,209, 2,163,191,254,128,225,246, 68, 40,190,162,162, 34,126,224,254, 46, 95, 19, 7,209,138,139,205,107,
-151,241,171,234,191,242,227,239, 79, 98, 81,201,107, 44,248,207,223, 36, 36, 56, 67,158,224,175,228,241,197,182, 40,131,228, 78,
-103,112,187,221,100,102,102, 26, 58,156,218,236,129,205,122,247,168,221,251,196,201,172, 2,237,120,191,213,173, 39, 37, 94,123,
-173,146,157, 59,119, 34,252,247, 16, 0,222,125,166, 63,211, 94,104,230,238,187,239, 54,149,190,112,205, 16,159,188,138,147, 47,
-174,242,111, 86, 6,185,214,228, 96,101, 2, 51,146, 15, 22, 45,205, 34,146,218,179, 74,120, 50,230, 21,150,243,123,224,251,171,
-239, 71,170, 90,129,176,176,152, 3,199, 26, 16, 6, 15,226,232,169,139, 33,181,151,154,154,144, 65,164,151,175, 23, 75, 30,159,
-145,133,134,209, 9, 77, 86,123,143,220,123, 7,203, 95,124,137,159, 60, 93,192,208, 1, 95,231,227, 79, 78,176,232,147,215,146,
-162,186,135,154,244,212,110, 57, 51,170,239,228,169, 51,156, 60,121,130,134,175,206,179,107,215,251, 60,254,248,191,133,211, 25,
-212,237, 86, 21, 83,172,243,129,209,160, 16,235,179,248,229,200,234, 29, 11, 77,207, 39,241,140,234, 20, 22, 94,136,201,158,158,
- 66, 27, 63,126,124,210, 16,112, 56,136, 71, 38,189,131, 1,202,255,232, 7, 72, 10,210,235, 70,124,234,253, 53,115,207,123,153,
- 38, 66,117, 7,203,170, 47, 22, 85,144, 12,165,192,148,106, 79,157,198, 80, 95, 95,223,133, 64,205,172,170,100,242,123, 96,117,
- 25,210,102,184,113,145,151,157,203, 23, 48,169,168, 18, 92, 46,250,246,238,149,144,239,171,116,155,105, 61,142,197,181,102,199,
-106, 93, 86,123,203,125, 91,121,250, 95,167,113,211,176,123,195, 11, 48,245,130,198,236, 42, 55, 52, 89,205, 96,202,148,237, 10,
- 55,167,117, 18, 81,231,241, 41,203,152, 25,133,221,233, 12, 61,161,120,149,143, 19,185, 16,137,119, 84,103,172,246,244, 20, 90,
- 44,213,110,236,238, 79,241,119,131,120,247, 96, 40,152,165,226,143,126,222,248,208,143, 36, 73, 73, 85, 62,174, 71,242,248,180,
-136, 79,143,224, 18,209,129,241, 74,103,144, 73,216,235,245,118, 75,244,183, 90,154,105, 94, 97, 57, 40, 18,214,239,121,250,138,
-175,188, 37,129, 19, 69,188,174,157, 93,120,228,222, 59,152,186,227,127,121,240,167, 27,195,123, 77,234,113,151, 12,147,135, 90,
-249, 89, 73,104,143, 71, 58, 67, 52,183,171,213,113,160,220,219,151,159, 39, 11,146,177,114,203,213,130,233, 47, 52,219,250, 29,
-179, 31, 90, 69,245,111,159,199, 87,180,178, 91, 30,159,149, 8,221, 30,113,117,234,221, 52,145,194,154,205,124,153, 88, 39,201,
-120,164, 51,200, 17,155,234,202, 10, 86, 38, 88, 89, 41,246, 84,191, 36, 67,113, 95,187,255,255,212,103,126,109, 91,127,232,169,
- 62,171,159, 57, 26,185,205,153,235,233,242, 58, 45,183,168,242,179,216,157,206, 16, 79, 40,247,246,115,114,114, 44,247, 69,183,
- 57, 64,225,226,180, 58, 63, 36, 99,173,206,171,225,222, 75,249,193, 5, 4, 65, 96,246,156, 37,154, 99, 60,210,248, 53,130, 88,
- 18,215,123,140,248,172, 94, 68,163, 81, 87,177,118,146,221, 3, 78,182,103,231, 4, 27, 47, 53,146,220, 43, 77,137, 43, 5,233,
-146,171, 63,236,190,150,177, 78, 4, 87,179,178,135, 43, 1,111, 86,131, 41,226,245,217,174, 22,197,151,124,164,105,207,189,171,
-167,250,172, 10,164, 46, 11,165,236,135, 86, 93, 31, 33, 79, 14, 28, 56,112,224,192, 1,206, 9,236, 14, 28, 56,112,224,192, 33,
- 62, 7, 14, 28, 56,112,224,224,218,197,255, 3,136,241,162,114,145, 99,168,179, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0,
+ 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0, 8, 6, 0, 0, 0,197,144,206,103, 0, 0, 0, 4,103, 65, 77, 65, 0,
+ 0,214,216,212, 79, 88, 50, 0, 0, 0, 25,116, 69, 88,116, 83,111,102,116,119, 97,114,101, 0, 65,100,111, 98,101, 32, 73,109,
+ 97,103,101, 82,101, 97,100,121,113,201,101, 60, 0, 0,178, 60, 73, 68, 65, 84,120,218,236,193, 1, 1, 0, 0, 8,128,160,250,
+ 63,218,134, 4,108, 53, 0,192, 47, 39,128,152, 70,131, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,121, 0, 32,128, 70, 27, 0,
+163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0, 1, 52,218, 0, 24, 5,163, 96, 20,140,130, 81, 48, 10, 70, 32, 0, 8,160,
+209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48, 2, 1, 64, 0,141, 54, 0, 70,193, 40, 24, 5,163, 96, 20,140,130, 17, 8,
+ 0, 2,104,180, 1, 48, 10, 70,193, 40, 24, 5,163, 96, 20,140, 64, 0, 16, 64,163, 13,128, 81, 48, 10, 70,193, 40, 24, 5,163,
+ 96, 4, 2,128, 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81, 48, 10,
+ 70,193, 40, 24,129, 0, 32,128, 70, 27, 0,163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0, 1, 52,218, 0, 24, 5,163, 96,
+ 20,140,130, 81, 48, 10, 70, 32, 0, 8,160,209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48, 2, 1, 64, 0,141, 54, 0, 70,
+193, 40, 24, 5,163, 96, 20,140,130, 17, 8, 0, 2,136,209, 39,166,118,244, 58,192, 81, 48, 10, 70,193, 40, 24, 5, 35, 6,108,
+ 94,220,196, 56, 26, 10, 12, 12, 0, 1, 52, 58, 2, 48, 10, 70,193, 40, 24, 5,163, 96, 20,140, 64, 0, 16, 64,163, 13,128, 81,
+ 48, 10, 70,193, 40, 24, 5,163, 96, 4, 2,128, 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104,
+ 3, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,129, 0, 32,128, 70, 27, 0,163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0,
+ 1, 52,218, 0, 24, 5,163, 96, 20,140,130, 81, 48, 10, 70, 32, 0, 8,160,209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48,
+ 2, 1, 64, 0,141, 54, 0, 70,193, 40, 24, 5,163, 96, 20,140,130, 17, 8, 0, 2,104,180, 1, 48, 10, 70,193, 40, 24, 5,163,
+ 96, 20,140, 64, 0, 16, 64,163, 13,128, 81, 48, 10, 70,193, 40, 24, 5,163, 96, 4, 2,128, 0, 26,109, 0,140,130, 81, 48, 10,
+ 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,129, 0, 32,128, 88, 8, 41,216,178,
+164, 25,133,239, 19, 83, 75, 21,139, 97,230, 82,106, 30,181,221,135,110, 30, 53,253, 76,137,191,177,185,139, 26,238,163, 86,248,
+225,115, 31, 53,205, 29,236,233,101, 52,127,140,230,143,209,252, 65,251,252, 49, 10,168, 3, 0, 2,136,137,212, 68, 75, 40, 33,
+ 19, 50, 15,134,169, 81, 80,208,194,125,228,100, 94,106, 21, 2,244, 6,184,194,111,176,184,147, 30,241, 59,216,204, 27,205, 31,
+163,249, 99, 52,127,140, 2,122, 1,128, 0, 98, 33, 70, 17,172,213, 54, 24, 35, 15,189, 69, 9,203,160,228,246, 32,176,153, 55,
+152, 10, 55, 90,180,160,145,205, 36,215,157,184,220, 69,174,121,200,250,210,202, 59,192,244,172,206, 10,184, 28,185,241, 11, 51,
+139, 82,243,144, 1,186,251, 70,243,199,104,254, 24,205, 31, 67, 35,127,140,116, 0, 16, 64, 76,164,100,120, 74, 27, 2, 32,253,
+ 48, 76,141, 76, 57, 84,134,147,176,101,174,193,226, 38,244, 48,164,102,184, 82, 99, 24, 27, 57,204,168, 29,126,148,152,135, 45,
+ 78, 97,236,209,252, 49,154, 63, 70,243, 7,245,243,199, 40,160, 62, 0, 8, 32,150,209, 32,192,221, 66,167, 70, 6,165,118,225,
+ 54, 84,230,212,168, 53,135, 61, 10, 70,243,199,104,254, 24, 5,163,128, 54, 0, 32,128,134,205, 46, 0,228,185, 57,106, 44, 92,
+ 25, 42, 25,148,154,243,197,131,169,101, 14, 11,119,228, 97, 67, 24,123,180,208, 28,205, 31,163,249, 99, 52,127,140, 2,202, 1,
+ 64, 0, 13,139, 17, 0,228,140, 73,237,196, 79,201,252, 23, 45,134, 54,177,205, 71, 82,195,141,212,240, 47,173,122, 55,212,152,
+ 59, 4,185, 5,228,174,145, 56, 15, 57,154, 63, 70,243,199,104,254, 24, 5,216, 0, 64, 0, 13,249, 17, 0, 90, 20,110,232,243,
+124,228,180,252,169, 93,184, 97,155,123,164,230, 92, 49,178,249,131,109,142, 14, 20,134,212, 8, 71, 90,132,223,104,254, 24,222,
+249, 3,150,246,144,211,224,104,254, 24, 5,195, 5, 0, 4,208,144, 30, 1,160,101,207, 6,185, 85, 76,139,214, 57, 53,122, 18,
+131, 57, 78,168,213, 75, 66, 95, 68, 4, 10, 79, 74,194,110, 36, 21,106,163,249, 99, 52,127,140,230,143, 81,128, 15, 0, 4, 16,
+211, 80,207, 72,212, 74,180,131,109,142,111,168,185,111, 20,140,230,143,209,252, 49, 10, 70,193,208, 2, 0, 1,196, 68,168, 37,
+136,156,169, 6,227,194, 31, 90,186,133,146, 2, 5,125,104, 29,125,136,146, 90,133,242, 96, 48,131,150, 0,219, 34, 39,106, 85,
+ 16,148,164,231,161,178, 8,107, 52,127, 80, 47,253,141,230,143,225,151, 63, 70, 58, 0, 8, 32, 22,122,101, 36,122, 23, 66,164,
+ 38, 50,216,112, 38,173,143, 58,165,133,127,201,205,160,200,139,164,168,225, 95,106, 54, 16,145,221,135, 94,176, 81,243,104, 87,
+106, 23,194,163,249, 99,248,229, 15,106,165,191,209,252, 49, 10, 6, 27, 0, 8, 32, 70, 96, 98,249, 63, 26, 12,163, 96, 20,140,
+130, 81, 48, 10, 70, 10,216,188,184,137,113, 52, 20, 24, 24, 0, 2,104,244, 54,192, 81, 48, 10, 70,193, 40, 24, 5,163, 96, 4,
+ 2,128, 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81, 48, 10, 70,193,
+ 40, 24,129, 0, 32,128, 70, 27, 0,163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0, 1, 52,218, 0, 24, 5,163, 96, 20,140,
+130, 81, 48, 10, 70, 32, 0, 8,160,209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48, 2, 1, 64, 0,141, 54, 0, 70,193, 40,
+ 24, 5,163, 96, 20,140,130, 17, 8, 0, 2,104,180, 1, 48, 10, 70,193, 40, 24, 5,163, 96, 20,140, 64, 0, 16, 64, 40, 39, 1,
+250,218,202,144,109,208,230,195, 79, 48,196,176,153,119,255,234,113, 6, 6,166, 31, 12,146, 50,210, 12,159,191,127,101,120,255,
+246, 43,131,154,166, 13,217,230, 29, 57,119,151,129,225, 31, 59,195,203,167, 79, 25,184, 57,185, 25, 4,133,184, 25,204, 77, 20,
+201, 54,143,218,254,125,250,108, 53, 3, 27,199, 31, 6,118, 14, 22, 6,102, 22,102,134,191, 12,140, 12,124,108,129,100,155, 39,
+ 32,100,204, 32, 40, 40,200,192,201,201,201,192,192,200,200,112,237,242, 38,162,221,199, 41,125,131,108,255,126,127,170,129, 33,
+ 38,197,245,146,108,243,158,125, 19,199, 52,239, 39,249,238,123,198,142,233, 62,233, 95, 55,201, 54,239, 41,155,250,144, 51, 79,
+ 27, 79,252,118,118,174,102, 40, 47, 15,197, 41,127, 21, 75,252,114,202,252, 34, 63,189, 60, 97,195, 76,207,210,228,167,151,205,
+ 79, 49,211,203,143,159,220,100,155,199,193,254, 21,211, 14,191, 41,100,155,231,187, 41, 7, 67,172,248,197, 12,178,205,235,149,
+200, 24,144,242,106, 48,153, 55, 10,104, 15, 0, 2,176,115,254, 46, 9, 69, 81, 28,255,248, 52,239,243,249, 30,254, 28, 42,136,
+220, 10,151,254, 0, 41, 8,140,166,218,154,155,178,161,205,161,169,161,160,161,181,182, 92, 66,131,168, 57, 40, 16,130,150,218,
+ 34, 3, 35, 18, 41,138,106,104,232,151,229, 83,178,103,215, 57, 68,165, 33, 9,191,227,225,242,189,247,158,123,190,231,123,166,
+219,212, 87,192, 51,135,113,108,163,211, 36,170, 67, 45,111,112,149, 77, 75,203,179,208,133,139,141,245, 45,146,201, 85, 34,209,
+ 8,149,143, 34,225,193, 17, 44, 11,230,230,191, 8,135, 7,200,231,111, 40,153, 21,140,158, 72, 93,190,163,211, 71,170,146,241,
+189,108, 50, 27, 95,102,105,109,156,135,243,147,154,164,217, 59,187, 67, 81, 96,117,113,129, 92,238,146, 80,168, 31,225,114, 16,
+240,137,186,124, 23,187,251, 8, 33,208, 52, 13,195, 48,240,122,189, 4,252, 1,252,126, 31, 30,143, 23,221,237,150,198,237,144,
+231,252,194, 52, 77, 10,111, 5, 50,197,215,134,247,206,231,118,164,233,155,232,134,138,170, 9, 28, 78, 59, 54,197,134, 34,135,
+128,170, 61,205,103,197,134,179, 50,214,116, 30,175,111, 21,130,193, 32,170,187, 68,185, 92, 66,177, 43, 53,255,167,183,111,152,
+151,151,103,138,133,236,159, 21, 81, 34,145, 32, 22,139,117,212,212, 6,104,100,244,191, 93, 95, 67,183, 75,227, 94, 14,220, 93,
+170,192,146,186,105, 55, 20,159, 50, 28, 31,108,255,136, 71,167, 86,254,205, 59,111,166, 82, 8,167, 83,246, 37, 11,183,174, 51,
+ 49, 57,217, 41,254, 14, 90,198,183, 0, 34,250, 58,224,255,123, 23, 50,164, 57,147,214, 8, 8,245, 83, 97,248,233, 36,196,240,
+251,203, 7, 6,150,191, 76, 12,102,122, 50, 12,241,241,249,112,121, 80,101,125,226,248, 2, 6, 17, 57,105,134,127, 95, 62, 49,
+216,155,235, 50, 60,123,246,158, 97,207,249, 63, 88,205, 75, 79,111, 99, 96, 96,227,103, 96,228,226, 3, 86,162,255, 25, 46, 94,
+ 75,100,152,183, 98, 39, 92, 30,212,152,240,176,180,100, 96,248,242, 2,200,227,101,184,123,249, 58, 3,171,136, 0,131,181,133,
+ 14, 3,143,128, 24, 78,119, 50,130, 32,176, 54,101, 98,100, 98, 96,102, 98,102, 96, 1, 86,210, 44,172,172, 12,172, 64, 12,162,
+ 89,128, 13,128, 63,192, 10,155, 9, 40, 7, 82, 71, 8, 92, 60, 63, 11,216,120, 96, 97,224, 5,102, 76, 81, 49, 97, 96, 35,128,
+139,225,239,255,191,192, 30,203,119,134,223,127,255, 50,112,241,112, 1,197, 37, 25,254,254,123,192,240,248,134, 2, 94,179,118,
+236,190, 5,108,152,240, 0, 27, 38,130, 12,223,190,113, 2, 49, 23, 3, 7,176,224,101,132, 78,222,128, 26, 37,223,190,125, 99,
+120,243,158,143,225,205,155, 55, 12,111,223,188,100,176,182,148,197,107,230,106, 96,161, 79, 44,112, 73,112, 97, 16, 20, 23,196,
+ 91,249,211,163, 17, 80,213,221, 13,166,219, 74, 75,169, 98, 94,101, 87, 23,152,110, 47, 43, 35,219,140, 43,192, 74,240,214,173,
+ 91, 96,118,144,163, 35, 89,102,204, 92,181, 10,146, 6,145,210,213,255,255,255,193,124, 24, 13, 19,131,169, 75, 11,197, 93, 97,
+131, 42,115, 98, 43,117, 82, 43,127, 69, 65, 33,134,239,191,126,130,217,108,156, 28, 12,191,190,255, 96,248, 7,108,200,191,121,
+241,156, 65, 82, 87,151, 40, 51, 36,149,213, 72, 10, 31,126,121, 77,134, 27,251, 54,146,164, 7, 84,249,219,184, 68, 48,112, 8,
+ 26,144, 30, 33,161,239, 72, 82, 30, 22, 22,198,176, 42,116, 15, 94, 53,142,123, 94,163,240,181, 4, 32,197,238,171, 31,255, 24,
+190,255,129,196,235, 87, 40, 61,211, 92,128, 65,141,151, 21,175,121, 61, 61, 61, 12, 85, 5, 37, 12,254, 65,129, 12, 63,126,124,
+103,152,216,223,199, 48,101,202, 20,134,156,156,156,209, 26,109, 20,144, 4, 0, 2,136,168, 6,192,108,135, 62,134,224, 19,173,
+ 12,255,142,109,101, 72,179, 98, 32,186, 17,240,243,203, 59, 6, 9, 21,103,134,150,210, 32,134, 5, 51, 15,192,197, 15, 30,155,
+193,240,245,219, 79, 6, 47,151,124, 6, 43,235, 4,134,136, 48, 39, 6, 78, 78,118,134, 95,127,255, 48,124,254,246,139, 65,205,
+ 34, 10,135,137, 15, 25, 24,126, 1, 11,219,232,233, 12,169, 69,136, 33, 50, 15, 43, 7,112,165,184, 97,223, 78,134,109, 71,143,
+ 51, 44,154, 63,141,225,199,247,159, 12,108,204, 44, 12, 60, 92,108, 12,124,108,127, 25,238, 60,122,129,189, 97, 3,204,119,255,
+ 65, 16, 78, 67,217,255, 32,236,127,255,255, 49,252, 5, 86,218, 32,252,231,207, 31, 48,198, 7, 78, 30,159,197, 32, 38,202, 12,
+172,180,185, 25,100,101,229, 24,212, 53, 85, 25,120,128, 21,254,187, 15,111, 25,158, 1, 11,202,215,111,223, 48,252, 3,102,118,
+110, 46,110, 6,117, 53, 45, 6,126,129, 71, 12, 87, 78,240, 96, 53,107,211,134, 83, 12, 12, 44,236, 12,223, 89,152, 24,216,216,
+217,128, 21, 61, 7,184, 17, 0,110, 0, 48,254, 7, 55, 93, 64,149,255,183,111, 95,128,248, 43,195, 87, 96, 35,234,237,235,103,
+ 12, 75, 22,156, 99,224, 87, 54,198,235,206,238, 69,221, 4,227,175, 52, 14,127,101,251,254,253,123, 12,190,144,144, 16,188,242,
+ 2, 77, 85,220,189,123,151, 97,245,234,213, 20, 53, 14,216,196, 17,195,191, 32, 27, 5,169, 57,122, 1,116, 91,118,118, 54,195,
+239, 87,175, 72,174,252,197,196,196, 24,130,220,220, 24,126,179,179, 51,244,246,246, 50, 4, 59, 57,193, 43,106, 98, 1, 40,172,
+122, 26, 26,224,252,226,250,122,134,222,198, 70,188,124, 66, 0,189, 17, 0, 98, 27, 27, 27, 51,236,217,115,143,193,197, 69,137,
+172,202, 95, 67, 66,146, 65,128,143, 15,222, 24,225,230,224,100,120,254,250, 21,195,167,247, 31,128,141,107, 65,134,135,167,207,
+ 48,200,155,154, 16,101,150, 95, 90, 9, 67, 76,176, 47,131,170, 2,162,241, 91,223, 59, 25, 69, 77, 99,113, 46,152,126,180,125,
+ 47,131,153,154, 44,201,241, 74, 86,229, 15,111, 33, 11,145,160,216,133, 36,163,185, 89, 24, 25, 46, 54, 38, 51, 48,242,137, 48,
+252,189,119,145,225,231,189,171, 12,183,222,125,101, 48,217, 78, 92,250,155, 49,115, 38, 67, 81,122, 54, 67, 92, 74, 18,195,234,
+165, 43, 24, 20,128, 97,216,210,217,197,192,219,208,194,176, 97,195, 6,134,128,128,128, 97, 93, 97, 81,235,226,178, 81, 0, 1,
+ 0, 1,132,181, 1,144,118,123, 26, 82, 13, 9,174,103,128, 21,226, 23, 96,229,251,147,225,247,129,101, 12,105, 14, 12, 36,140,
+ 4,176, 49,104,105,170, 3,123,207, 7, 24,110, 1, 43, 65, 6,134,235, 12, 31,159,222, 6, 15, 31,110,220, 58,137,225,219,155,
+191, 12,209,137,133,224,222,187,159,175, 37,195, 95, 22, 30,130, 38,222,186,117, 29,172,222, 75, 31,212, 59,146, 2, 98,121, 96,
+239,250, 23, 67,136,135, 27, 3,135, 0, 19,195,162,101, 59,192,163, 11,107, 86, 44, 96, 96,254,243,153, 65, 83,158, 29,216, 0,
+192, 49,178, 1,170,228,129,134,129, 48,184,146, 7, 54, 66,126,253,254,197,240,243,231, 79,134,239,192,214, 53,120,100, 0,104,
+216,159, 63,191, 33,149, 45,176,199,205,128,103,233, 36, 63,223,127,240,200,129,144,144, 48,131,138,178, 42,131,154,138, 6, 3,
+ 19, 51, 35,208,220,127, 12,175, 94,191, 99,248,249,227, 55,176,231,255,149,225,245,203, 55, 12, 50,210,223, 25, 52, 84, 53, 24,
+206,157,223, 0, 26, 88,197, 48,139,157, 9,216, 8,249,247,157,225,247,183, 63, 12, 95,153, 65,243,150,108,224,202,159,149, 21,
+ 52, 37,241, 7,236,182,175, 64, 55,189,122,249,140,225,234,165, 51, 12,111, 95, 61, 3, 79, 85, 48, 49,146,183,182,115,222,244,
+121,112,118, 82,102, 18,225,114,114,245,106, 12,126, 81, 81, 17,195,163, 71,143,192,110,155, 9, 44,172,168, 1,166, 78,157,202,
+240,242,229, 75,134, 53,107,214, 48,120,219,217, 49, 8,138,137, 81,108, 38,168,231,255, 30, 26,255,160,222, 19,120,132, 9,216,
+155, 35, 22,128,122,254,160,202, 31,156,194,217,216, 24,212,212,212, 24,214,238,219, 71,242,104, 0,169, 13, 6, 98, 1,168,114,
+ 7, 85,248,103,207,158, 5,243,145,233,208,208, 80,146, 42,127, 53, 49,113,112,229,207, 12,204, 7, 89, 49,209,192,124,241,147,
+161,119,238, 92, 6, 46, 78, 78, 96, 15,244, 7,176,177,253, 29, 60,181,245,248,252,121, 6, 89, 67, 67,130,230,193, 42,247,219,
+ 15, 30, 96,136, 81, 3,152, 59, 69, 48,236, 89, 93,193,224,234,151,204,240,159, 93,149, 44, 51, 24,195, 16,141,219,255,171, 4,
+ 9,138, 19, 2,160, 94,255,195, 47,127, 25, 14,186,138, 50,176,230,207,100,248, 20,173,200,192, 34, 40, 70, 82,229,191,119,239,
+ 94, 6, 5, 73, 41,134,148,172, 12,134,138,194, 50,134, 41,243,103, 48,152, 25, 25, 49,204,152, 60,131,161,160,172,132, 97,169,
+165, 57,195,229,203,151, 25,116,137, 28,141, 25,234,149, 63, 76,108,180, 17, 64, 62, 0, 8,192,222,217,180,180, 17, 69, 97,248,
+141,215,160, 70, 52, 56, 82, 45,126,208,157,110, 68,130, 27,133, 16,162, 32, 46,164,184,144,116,171,104,169,249, 9,226, 94,186,
+ 12,226,162, 42,146, 72,192,238,154,141, 85, 17, 90, 17, 23,118,167, 11,145,130, 32,148,226, 7, 38,118,140,154,143,105, 38, 97,
+226, 57,183, 78, 45, 68,209, 72, 16, 41, 94, 72, 50, 16,114, 51,225,146,121,158,247,156, 11,147, 35, 0,239,190,141, 33, 41, 74,
+ 97, 16,176, 12, 11, 37,217, 44, 1, 47,253,155, 28,128, 8, 84,223, 4,171,158, 64,246,107, 0, 35,221,195,247,148, 0, 3, 66,
+136,171, 99, 78, 16, 13,176,215, 55,227,231,238, 39, 76,205,204,161, 40,101, 67, 79,151, 19, 43,171, 27, 4, 88,192,166,216,111,
+157,169,204,214, 12, 45,185, 43, 65,125, 61, 56,217, 31, 17,100, 59, 49, 48,248, 22, 70, 73, 2,139, 75, 1,146,137, 97, 80,200,
+ 70, 82,141,222, 8,215,191,103, 39, 19,190, 33,147,125, 58,157, 38, 64,167,232, 60, 52, 9,113, 22, 31, 93,215, 37, 80,249,125,
+ 22,128,120,156, 68,200,126,115,223,115,125,109, 6, 47,107, 45,176,208,133,178, 88, 88, 9,244, 89,156,170,231,208, 51, 58,194,
+199, 42,206,162, 49, 36, 19, 58,160,101, 8,212,199, 16,197, 59,168,107,120,133,114,222,208,119,219,133,136,159,232,243, 90,244,
+ 4, 17, 45, 14,131,214, 66,176, 80,144,144, 68,194,135,248,190,189,137,240,209,190, 4, 9,183, 40, 88, 86, 96,121,156, 27, 93,
+153,169,158,203,255, 30,143, 7, 14,135, 67,238,167,240,249,124, 5,251, 14, 51,253,119,180,180,160,150,142, 25,214,175,221,110,
+212, 21, 64, 2,170,174,160,111,165,185,120, 94,126,205,167, 18,192,201,223, 74,162, 24, 10,133,114,170, 1, 15,109, 9, 20,114,
+152,208,255, 87,196,188, 94,175, 20,181,124, 4,128, 37,243,133,162, 96,136,214,248,236,252, 2, 39,167,170,148, 80,110,141,241,
+131,255, 43, 37,101, 54, 92,168,191, 16,219, 63, 64, 69,227,221,155,193, 24,254,243,161,207, 57, 2, 96, 86, 2,218,219, 90,209,
+219,229,206,243, 23,199,192,173,191,138,106, 7,186,251,202,241,101,193,255, 39,163, 63,129,222,255,118,112, 2,169,149, 57,212,
+204,110, 73, 25, 16,149, 10, 50,209,136,132, 63, 87, 5,184, 5, 32,238,240,246, 31,123,123, 88, 94, 88, 66,112, 54,136, 73,255,
+ 7, 76,251, 38,160, 84, 43, 24,127, 63, 78,161,231, 35, 92, 29, 78, 4,252, 1,244,191,233,135,203,233,250, 47,225, 63, 50,122,
+189,150,230,109,134,159, 37,224,225,227, 82, 0,118,173,223,165,141, 48, 12, 63,137,209, 72, 65,145, 38, 14, 46, 74, 7,205, 42,
+ 58,168, 73,151,254, 5,197,191,192, 73,135, 58, 20,138, 52,163, 58,117,172, 8, 78,173, 91,177,198,193,128, 80, 16,132,186, 20,
+ 49,209,180,233,149,134, 96, 98, 2,213, 24, 80, 46, 23, 79,107,114,167,177,190,239, 23, 46, 94, 45, 73,174, 82, 40,136,207,144,
+187,203,193,119, 9,223,123,239,243,227,251,254, 40,185, 55,222, 87,120, 55, 48,137, 5,239, 52, 90,125,195,194,245,219, 30,118,
+ 0, 47, 3,216, 26, 93, 38,155,254,140, 40,157,200,241,211,123,140,217,191,213, 28,124,229, 35,175,167,169,120, 58,242, 92, 56,
+118, 32, 39, 94, 80,106,157,232,242,244,145,163,117,160,116,161,225,151, 94,142,213,121, 19,158,156, 83,170,142, 55,243,250,133,
+ 56,198, 54,231,133,195, 55, 4,134,248, 44,124, 71, 81, 59, 71, 67, 99, 51,108, 77,229, 53,180, 19, 85,133,203,229,170, 45, 79,
+132,251, 47, 9, 66,213, 52, 93,184,126, 38,249, 99,106,116,121, 37, 79, 4,158,131, 44,203,244,187,100, 40,121, 5,199,106,245,
+ 13,128, 78,167, 46,196,132, 78,255, 71,201,171, 72, 38,211,216,142, 68, 17, 14,127, 65, 60,190,139,131,204, 17,141,173,225,244,
+164,136,163, 67, 5,177, 88, 2,161, 80, 4,153, 76,245,221,209,102,127,168, 23,206,144, 73, 39, 32,133, 55, 16, 12,204, 99,117,
+101, 17,251, 63, 82, 36, 52, 74,101,210,183,153, 68,131, 69,212,139,249,235, 42, 72,199,181,134,228,200,159,231,208,239,247,255,
+179, 2,101,247,207,226,130,241,168,189,221,210, 30,140,191,133, 65,250, 70, 18, 80, 15, 28,255, 51,152,232, 19,217,172, 32,254,
+199,189,229,200, 89,146, 36,113, 92, 94, 95,183,252,124,142,245, 39,166,166, 42,241,190,113,110, 92, 27,231, 86,226,127, 3,236,
+254,111,146,191,249,218,184, 95, 15,109, 52,191, 69,234, 1, 44,226,227,169, 93,164,246,247, 16,138,126,165, 26, 63,135,157, 42,
+141,231,159,231,228,146, 68,121,225,231, 25,214,150, 2,150,198, 53,147, 63, 47, 7,220, 68,232,179,244, 91, 66, 96, 13, 45,166,
+151,177,187, 66,252,156, 6, 52, 94, 36,254,111,167,205,101,209,212,217,131,195,113,175, 16, 3, 14,119, 71,229, 22,127,231,110,
+182,163,213, 81,187,182, 61,221, 30, 60, 32, 87, 51,251,118, 14, 79, 72, 4, 15, 12, 13,146, 40, 72, 35,158,220, 97, 39, 67,253,
+212, 9, 95,191, 15, 31, 72, 36, 4,131,193, 59, 79, 94,102, 49,112,143,219,225, 74, 0,225, 92, 3,144,198,120,145,225,255,193,
+101, 12,140,204, 64, 37,185,115, 25,242, 31, 72, 50, 76,234, 91, 8,204, 99, 60, 12,211,107,111, 50,164,182,169, 51, 48,239,153,
+197,144, 38,171,201, 48, 75, 53, 11, 50,244,204,196,140, 97,142, 10,159, 12,195,149, 75,235,144,218, 27, 95,193, 13, 0, 48,254,
+253,147,129,229, 31,176,215, 10,173,196,215,111,216, 5,166,173, 61,113, 15,197,238,184,252,159,193,195, 80, 7,173,143, 12,242,
+ 6,176,210, 7, 86,254,127, 24,255, 2, 77,131,100,164,240,232, 60, 48,253,240,216, 44,188, 13,128, 63,192,194,139,233,247, 31,
+160,251,127, 66,122,208, 64,253,127,255,254, 1,175,182,103, 97, 97, 5,215,173,160, 81, 7,208,104, 0,104,132,128, 93, 86, 18,
+171, 89,224,202,255, 55,208, 47,223,127, 49,188,121,243,158,225,219, 55, 80,193,201, 2, 46, 44,127, 2,245,254,254,251, 27, 60,
+226,240, 31,100, 32,211,111,134,207, 95,126, 49,188,126,253,153,225,235,119, 80, 3, 72,141, 64,245,143, 96,255, 4, 54, 82, 62,
+126,120, 7, 93,148, 8, 93,196, 72, 65, 34,184,249,240, 38,131,186,188, 58, 81,195,254, 40,163, 19, 64,203, 57,145, 70, 47, 64,
+149,193,189,123,247, 24, 58, 59, 59,161,195,208,229, 12,252,252,252,192,198,212, 71,134, 15, 31, 62,144, 60,220, 13,235,253, 75,
+ 72, 32, 70,112, 64, 11,157, 38, 79,158, 76,181, 81, 0,100,115,137,105, 0, 32,207,253, 51, 2, 27, 59, 32,191,150,149,149,129,
+123,193,191,223,191, 7,251,183, 2,104, 22, 41, 35, 1,232,115,252,132,214, 4,224, 2,157, 36, 44,238, 4,141, 14,192, 70, 8,
+ 64, 0, 87, 15,234,253,187,119, 12, 60, 64,127,190, 1,250,109,255,201,147, 12, 44,192, 52,247,243,247,111,240, 84, 24, 40,239,
+192,214,123,252,249,253, 11,216, 87,248, 73,116, 28,227, 26,242, 7,137,195, 70, 1, 64,107, 4, 30,221,187, 67, 81,188,130, 26,
+ 1, 95, 95,159,100,216,190,126, 46, 85, 70, 2, 72, 25,246, 71, 6, 23, 86,205,102, 48,136, 47,100, 96, 87,212, 3,243,255,188,
+121, 14, 30,254, 7,183, 85, 44,125, 24, 30, 1,203, 27,174, 41, 39,241,154,241, 9,216,161, 97,231,228, 96, 80, 81, 84,100,184,
+ 15,108,136,189,125,253,150, 33, 60, 38,154, 97,219,222,221, 12, 19, 59,122, 25,214,111,219,196,160,170,168,202, 16, 23, 28,203,
+112,252,220, 81,134,245,107,215, 50, 4, 6, 7,143,214,114,163, 0, 39, 0, 8,192,190,185,188, 36, 16, 69, 97,252, 27,200,222,
+132, 84,174, 34, 19,139,118,109,218,244, 64,202,157,129, 72,255, 70,127, 68, 66, 68,203,160,104,213,174,135, 61, 54, 21,110, 52,
+ 36,140,194, 32, 8, 34, 90,180, 8,164,192, 16,194, 50, 34, 43,167,113, 70, 59,231,218,200, 32, 99, 73, 69,171,206,202,185, 92,
+102,198,153,185,243,253,206,249,206,212, 84, 20,255,253,101, 78,105,129, 86, 59, 94, 59, 7,176, 48,179, 72, 10, 71, 15,236,237,
+ 19, 38, 55, 15, 49, 49, 62, 65,104,189,130,196,237, 29,173, 84, 18, 82, 77, 53, 5,128, 56, 61,180,189,214, 22, 80,162,143,248,
+193, 26,122,220, 30, 26, 45,206,203,145, 48, 90, 72,254,159,229, 98,103,241,152,187, 31, 13,109, 29,159,158,240, 88,159,132,240,
+121,129,181,158,136,218, 3, 37, 17, 43, 85, 1, 44,181,117,132, 21, 50,154,105,145,136, 10, 68,120, 19,217,244, 13, 6,187,173,
+159, 0, 64,161,232,253, 75,124,254, 82, 9, 10, 88,236,185,195, 94,207,112, 5, 40,168,170, 24,183, 85,216,151, 44,171, 31,229,
+249, 60,193,131,134, 76, 38, 43, 26, 10,121, 59,151,211, 4,255,176, 87, 10, 58, 78, 65,188, 56,105,110,254, 5, 89, 89,171,238,
+229, 99,228, 0, 73,175,244, 27, 51,127,125,176, 58, 28,248,105,246,207,209,104,248, 12,172, 92,252,157, 78, 39, 93,131,140,184,
+110,186, 80,124, 39,251,119,180,183,151,198,248,183,244, 71, 22,135, 89, 24,189,255, 2,253, 55,191,223,143,183,116, 90, 32,173,
+ 0,222, 15, 88, 97,107,192,231,243, 33,153, 74,161,227,143, 62,149, 51,150,245,141,254,191, 89,112, 83,160,222, 16,200,113,145,
+ 52,159,167,190, 41,120, 84, 30,132,215,111, 37,184,169,231, 53, 70,107,157,239,165, 14,197,108,157,229, 85,173,234,251,203,153,
+189,177, 1,176,220, 14, 40,111, 16,252,105, 52,217, 6, 56,189,248,149,125,125,183, 7, 96,116,239, 14, 41,199,150,168, 2, 72,
+ 4, 1, 93, 75,103,184,151,243,162,252,175, 28, 5,113,121,117,253,165,115,151, 85, 21,156, 30,159, 96,126,118, 14,195,110, 23,
+ 38,167,167, 16,217,141, 96,125, 53,128,161, 17, 23, 58, 29,118,212, 52, 90, 16,141, 69,177,177, 18,192, 78,112, 27,161, 80, 8,
+ 94,175,247, 95,233,254,195, 52,222, 5, 96,231,106, 94, 33,136,195,240, 35, 66,173,175,104, 19, 73, 92,148, 18, 41, 23, 23,185,
+144, 36, 78,108,142, 14, 14, 14,146,219,198,127,224,232,127,240,177,229, 32, 89, 81, 98,217,164,144,156,212,106, 21, 18, 34,118,
+ 62,118,118,198, 90,187,222,247, 55, 59, 26,100,119,113, 80,242,212,123,152,217,153,217,221,102,127,251,188,207,243,190,239,124,
+ 40, 1,176,173,159,240,207, 0, 68,162,103, 10,215,171,101,228,197, 35,104,108,160, 63,139,251, 8, 16,141,161,189,169,206,156,
+185,227,122,116, 86,210,130,143,127, 70, 98, 18, 78,164, 11,110,102, 71, 87,239, 56,102,167, 57, 11,167,235,146, 58,126,214,129,
+197,205, 35,172,239, 31,139, 35,171,170,107, 77,130, 76, 3,110,254,163,183,198,146,119, 21, 45,157,163,166,250,167,200, 38, 49,
+ 58,208,211,143,238,182, 62,113,220,229,249, 41, 18, 79,169,201, 53,145,136, 39, 93,128,152, 80,233, 6,169,126, 93,143, 64,211,
+194,130,188, 88,189, 42,178, 66,217,183, 42, 74, 3,220, 7,240, 25, 52, 45, 78,231,198, 68,104, 90,148,206, 55,160, 80, 18,160,
+134, 13, 97,253, 43,178, 65,251, 30,161, 42,102,200, 50,133,164, 35, 20,210, 83,125, 64, 27,241,139, 57, 5,177,207,212,252, 89,
+118, 57,254,234,135,124, 5,245,173,245,216, 89,217,193,218,198,218,107, 82,192,142, 64, 38, 96, 91, 56,199,118,191,166,146,163,
+117,110,183, 91,144,191,229, 18,152, 95,227,123,234,191,188,252,227, 3, 96,184,107,223,187,189,141,171, 47,118,238,167, 2,171,
+255, 76, 19, 11, 86,247, 22, 60, 30, 15,130, 55,230,132,201,178,207,247,230,181, 64, 32, 0,167,211,249, 43, 11,219, 34,119,174,
+249,219, 97,109,219,201, 63,101,130, 87, 84, 40,236,125,229, 33,100,142,153, 74, 33,209, 19,192,161,210,122,208,104,109,168,146,
+ 4,131,214, 76,148,146, 4, 78, 4,210,225, 61,185,219,201,223,218,126, 63, 21,144, 41,194,164,246,217,242,183,131,159, 11,240,
+219,184,118,213, 8,210,103,242,127,220, 90,192,249, 80,179, 32,127,127,135, 19, 49,249, 14, 45,171,183, 72, 83, 1, 16,201,240,
+240,216, 8,130,244,187,218,245,249, 81, 92, 88,140, 65,215, 32, 74,202, 74,113,184,119,128,130,220,124, 56, 28, 14, 84,212, 84,
+ 98,110,126, 14,238,201, 9,132,233,222,252, 5, 88, 14, 21,215,253,237,241,143,159,225, 69, 0,118,174,237,149,161, 56,142,127,
+218, 9,203,139,100,137, 55, 43,181, 69,194,131, 7, 94, 36,138,198,202,131, 7,182, 23, 74, 60,224, 63,192, 11, 15, 74,188,241,
+ 44, 45,143,174, 15,228, 18, 37,164, 92,178, 23,183,194,120,144, 75,174,155,251,204,239,251, 61,206,156, 49,118, 38, 41,229, 83,
+167,118,218, 58,173,179,181,207,229,251,249, 46, 32, 1,168,217,234,134,239,100, 15,119,194, 94, 79, 30, 71, 51,153, 36, 93, 28,
+ 66,234,111,197,104,109, 11,218, 83,146,145, 24,171, 71,131, 89, 48,109,215,170, 32,215, 7, 28, 72, 9, 31,211,234, 0, 80,171,
+223,205,143,214,156, 35, 72,207,176,162,185,177, 23, 67,253,157, 24,159, 94, 71, 94,118,170, 32,145, 40, 76,204,174,192, 71,113,
+185,215,171,249,205, 23,101,154, 49,182,188, 1,116,180,161,204,106, 65, 73,137, 85, 16,217, 0,158,132, 58, 40, 46,172,128,206,
+251,136, 8,233,107, 65, 65, 9,128,146, 32,240, 10,224,179,188, 21, 32,241, 72, 64, 39,167, 2,228, 94,121, 45, 80, 22, 11,159,
+ 10,128,155, 72,241, 82, 42, 16,202,127,250, 3,222, 48, 0,188,156, 30,208, 33,136, 91,122,146,175, 7,114,255,164,167,158, 57,
+ 1,136,142, 13,233,253, 63,156,113,252, 31,204,241,107,224, 49, 34,122, 34,127,191, 99,236,153,228,131, 64,130, 0, 22,109,159,
+129,124,255,192, 13,125,229, 71,202,104, 52,250, 83, 19,114,135,148, 0,132, 35, 0,136,252, 21,247,111,252, 5, 2,141,120, 29,
+ 37, 20,231,134, 46,157,229,164,165,113,180, 79,238,158, 8,158, 18,129,210, 2,121, 21,204,100, 50, 5, 60,231,114,185, 96, 16,
+130, 32, 65,149, 96, 4, 3,197,250,234,132,132, 58, 0,234,251, 21,206,236, 95, 13,106,251, 83,225,143, 72,159,102,255, 10,249,
+147,251,215,138,243,211, 75,250,166, 10,167,127,143,187,163, 27, 68,234,245,156,138, 41, 9,192,173, 16, 1,247, 30, 15,111,205,
+ 16,217, 20,217,237, 33,175,169,144,187, 50, 6,160,194, 31,205,252,213, 8,214, 11, 8,133,107, 65,254,139, 51, 3,200,183,148,
+191, 9,130,203,109,108, 58,231,126,196,245,127, 55,254,231,228,232,204,131,253,234, 44,248,118,157, 92, 4,164,210, 31,109, 2,
+196,244,237,226,170, 42,142,201, 95,167, 65,128,214,213,215,163,169,173, 21,241,113, 6, 60, 10,211,181,125,176, 3,123,133, 13,
+189, 14, 7,134, 6,135, 97,179,219,120, 76, 57,187, 52, 47,140,136, 27, 53,149,149,152, 90, 88,192, 87, 69,232,191, 36, 2,212,
+155, 0,239,207,255, 17, 62, 94, 4, 16, 74, 3, 96,150, 90, 22,131,195,215,153, 12,183,158,188,103,120,238, 11,109, 93,157,172,
+ 96,248,191,101, 58,131,212,203,251, 12,253,246, 65,192, 14,253, 59, 6,134,182, 5, 12,255,159,222, 96,248,203,201, 13,228, 66,
+ 6, 63, 25,153,176, 47, 97, 61,120, 96, 35,131,189,131, 51,164,130,252,247,155,225,206, 7,208,126,188,191, 12, 42,124,138, 12,
+142,142,122, 12,226, 34, 18, 12,111,129,189, 8,240, 88,193,175, 63, 12,207, 63,124,101,208,196,227, 96, 25, 57, 75,134, 39,143,
+142, 67,115, 38, 11,131,135, 62,100, 13,192,142,203,191, 25,118,110, 89,195,240,242,205, 51, 6, 97, 1,200, 78, 2, 1, 54, 86,
+ 6, 73, 1,252,219, 10, 65, 61,106, 72,157,254, 15,122, 6, 0,164, 1,240,151,233, 47,184, 18, 7, 21,204,140, 12,208,243, 2,
+254, 67, 26, 1,184, 64,100, 84, 62,195,226, 69,141, 12, 28,160, 99,127,153, 25,225, 21,228,191,191,255, 25,254, 0,241,239,223,
+192, 70, 0,168,194, 4, 45,154, 2,175, 51,248,207,240, 19, 40,150,159,217,136,245, 40,204,255,104,238, 68, 22, 64,174,248,225,
+ 44, 18, 22, 1, 34, 87,254,216,248,224, 70, 0, 1, 0,170, 0, 64, 5, 63,168,162,134, 53, 0, 64, 52, 8,131,196,148,149,149,
+193,238,156, 56,113, 34,120, 84,224,221, 59,226, 14, 89, 41, 41, 41, 1,227, 29, 59,118, 48,124,125,137,185, 64, 18,212, 40,184,
+127,255, 62,152, 77,204,193, 64,184, 14,253, 1, 85,252,160,134, 6, 40, 94, 65,107, 10,164,137, 88, 83, 0,170,204,173,244,244,
+ 24,222, 62,120, 0,174,220,111, 49, 32,118, 3,168, 74, 74,130,183, 65, 30, 61,122, 20,188, 45, 80, 71, 90,154,112,229,130,229,
+ 28, 0,114,215, 0, 32, 3,216, 62,127, 16,190,119, 15,209,243, 71, 62, 27,128,152,157, 0, 60,210, 98, 12,223,159,191, 0,247,
+236,191,126,252,200,240,241,205,107,160,155,153,192,249, 0, 52, 45, 0,203, 51,247,175, 93,103,248, 13,108, 36, 16,179, 3, 0,
+ 99, 68,207,209, 30,140,145, 23,253,145, 58, 5,240,229,205, 41,112,229, 15,118, 51,176, 23,188, 17,109, 20,192,196, 54,112, 64,
+ 11, 90,208,106,255, 51,158, 12, 12, 6,198, 46,224, 69,127, 18,211,142,129, 27, 5,130,108,140,224,133,207, 44,192,116,192, 66,
+228,240, 93, 92, 92, 28, 10,127,243,230,205, 12, 94,222,158, 12, 91, 54,109, 97, 88,181,106, 21, 67, 67,117, 45,195,174, 3,123,
+193, 71,143, 75,203, 72,131, 71, 49, 25,216, 36,134, 69,133, 53,186,218,159,186, 0, 32,128, 48,214, 0, 28, 48, 4, 22, 20, 72,
+ 91,121,183,188, 18, 96,240, 17, 5,246, 78,206,108, 99,248,127,124, 19,100,164, 25,216, 11,248,193,197,203,176, 91,192,129,225,
+133,165, 11,116, 56, 24,251,233, 85, 55,111,253, 98, 56,114,162, 13, 82, 25, 50,115,192, 6,143, 25,238,124,122,206, 80,151,147,
+ 4, 94, 40,247,233, 59,100, 13,192, 47, 38,118, 6, 39,143, 16,188, 14,174,173, 78, 96,216,177, 21,122,224,200, 95,216, 89,229,
+127,192,107, 3, 34,178,250, 24,184,184,216, 25,248,160,107, 0, 88,255,253, 96,144, 22, 37, 80,168,131, 10, 48, 70, 72, 69, 13,
+235,133,253, 99, 4, 86,207,255, 24,225, 39, 4, 66, 90, 0,208,106,152, 64, 71, 22,116, 80,207,247,239,159,193,163, 0,160, 65,
+ 0, 80,125, 15, 50, 27, 50, 2,240,143,225,219,247, 63,224,222, 63, 72,252, 55,176, 23,240,159,137, 17,159,211, 32,149,249,127,
+228, 70,192,127,156,195, 45,176,165,128, 49,137,129, 4,207,214,190,126,252, 58,197,137, 7, 20, 86,160,117, 18,160,125,199,160,
+ 33,255, 7,192, 2,124, 21,244,100, 59, 88,131, 0, 6, 58, 58, 58, 72,106, 4,128, 64, 70, 70, 6, 78,185,224,248,120, 72, 15,
+149,129,248,131,129, 96,167,238,161, 3, 95, 7, 7,146, 22, 20, 74, 32,237, 44, 65, 31, 17, 0,245,250, 77,212,213, 25,216,190,
+126, 37, 58, 12,169, 13,208, 43,119,244,243, 26, 96, 13, 1, 98, 27, 1,156,146, 18, 12,223,110,223, 97,248,251,231, 15,248,224,
+ 31,200,136, 14,164, 33,252,254, 37,232, 48,160,247, 96,127, 16,211,251, 71, 7,176,249,127,244,109,127,232,235, 4,240,103,186,
+139, 12, 39,246,175,131,115, 55,174,134,108,255, 51,178,143, 96, 16, 18, 51, 24,192,226,245, 63,102, 35,128, 97, 54,131, 65, 70,
+ 29,195, 11, 96, 39, 67,127,193, 41,134, 83, 30,226, 12,218, 91, 94,130, 43,127, 94, 86,242,206,239, 0,165,189,125, 7,246, 49,
+ 56,185, 58, 51,108, 90,187,129,161,185,179,131,161, 28, 88,233,255, 7,218,177,114,229, 90,240, 17,226,143, 62,141, 86,118,163,
+ 0, 19, 0, 4, 16,193,147, 0, 65, 35, 1,115, 47,239, 97,208,249,123,149, 65,130,245, 35,195,143,255, 44, 12,183,255, 11, 48,
+ 48,191,254,196,240,194, 2,113, 10, 22, 19,158,161,118, 81, 33, 67, 6,175,132, 56,134,191,255,121, 80, 50,199,151,175,159,128,
+173, 84, 96,111,157,137,139,161,172,135,248, 67, 99, 60,188,117, 24, 54, 76, 5,182,240,153,190,193, 70,239, 33, 45,127, 30,126,
+134,191,191,129, 85,194,255,175,224,149,255, 38,122,114,196,101,209,255,144,211,142, 64, 21, 44, 35,184,131, 14,157, 99,103, 68,
+174, 86,177,103,106,116,144,158, 81,198, 48,101,114, 27,195,231,207, 31, 25, 88, 88,152,224,163, 0,127,161, 35, 0, 95,190,252,
+ 2, 15,251,255, 3,182, 58,152,129,242, 93,237, 19,112,154,229,233,111, 1,166,119,110, 62, 1, 44,124,255,194,109,135,212, 25,
+176, 85, 0, 8,119,198,167,132, 16, 21,126, 41,205, 41, 12, 15,238, 62,160, 74, 2, 2,141, 0,188,135,174,126, 7, 13, 45,155,
+153,153, 49,188,126,253, 26,124, 2, 32,120,123, 24,176, 16, 2,237,147, 39,165, 17,144, 3,172,220, 57,129, 21,178, 15,158, 33,
+249, 28,104, 3,128,147,136,138,187, 20, 58, 74,128,205, 60,105, 44,107, 12, 72, 1,160, 17, 1,107,232,136,128, 24, 39, 39,131,
+142,149,213,128,102,104,108,149, 58, 40, 94,176, 45, 8, 36,165, 17, 32,172,170,194,240, 25, 24,207, 44,236,108,224,221, 49,127,
+127,255, 1,199, 45,175,160, 32,195, 71, 96,124,130, 42,127, 98,123,255,200, 7, 1,193,230,255, 65, 83, 0,160, 6, 0,242,220,
+ 63,161,195,129,212, 36,223, 51,188,121,251,134, 97,213,234,229, 40,226, 97,209,201, 12,239,126,169, 82, 20,142,184,134,251,177,
+139, 19,191,242, 6,124,232,207,118,196,145,189, 42, 27, 17, 39,148,126,252,253,151,108,247, 58, 57, 56, 49, 92, 20,188,200,224,
+230,237,193,144, 26,155,204,160,167,175,203,176,105,227,102,134,227, 23,206,130,207,235,120, 52,196, 47,219,129, 13,245, 35,143,
+ 0, 96, 19, 27, 5,164, 1,128, 0, 34,234, 40,224,127,186, 46, 12,151, 24, 64,152,124,160,163, 99,205, 48,105,210, 34,134,188,
+252, 72, 6,105,121, 80,230,252,201,192,202,206,193,240,228,249, 39, 6,123,223, 56,146,205, 51, 52, 84, 98, 72, 72, 8, 99, 88,
+ 48, 15,216,242,255,247, 16,236,149, 63, 63,190, 51, 72, 75,242, 51,200,241,253, 33,169, 23, 11,170, 68,255, 51, 66, 42,127, 88,
+255,154, 17,220,219,102, 4, 55, 6, 72,237,163,229,228, 86,129,233,170,202, 60, 6,102,102, 38,176,126, 80, 3,224, 15,176, 18,
+255,242,229, 15,184, 65, 0, 90, 91, 48,125, 58,113,183,133,185,251, 66, 26, 2,219, 54, 28, 69, 58, 19,158, 1,190,240, 47, 57,
+ 61,146, 36,247,125,252,242, 17,239,249,254,164, 0, 80, 37, 0, 26, 5, 0, 77, 7,128,182, 41,129, 22, 6,130,216,160,173,123,
+160,249,127,244,125,232,160, 70, 0,161, 99,129, 97,189,113, 65, 42,109,243, 19,130,205,173, 82, 88,217,227, 2,226, 4,206,154,
+ 32, 4,168,185, 6, 0, 91,101,142,111, 55, 0, 41, 7, 2, 41,152,153,130,233, 27, 7, 15, 50,252,248,246, 29,188, 56, 80, 19,
+216,184,208,181,178, 3, 79, 21, 16,151,225, 24, 25, 30,222,191, 11,102,130,238, 11, 76, 10, 66, 44, 54, 1,137,163,243,241, 45,
+141,191,245, 92, 16, 60,254, 19, 30,157,194,240,240,241, 11,134, 19,135,182,128,197, 87, 45,157,203, 96,110,231,195,192, 43,110,
+ 67,114, 92,132,129, 79,131, 36,237,120,223,191,140,236,120,229, 31, 5, 74, 48,108,127,246,131,230,133,185,190,190, 62, 24,159,
+ 57,115,134, 97,239,137,131, 12,194, 34,194,195,238,146,174,209, 57,127,234, 2,128, 0, 98,161,167,101,202, 26,166, 12, 91,119,
+222, 97, 8,240,230, 98, 16,147,150,101,120,247,249, 15,131,189,119, 44,217,230, 89,154,106, 0,113, 21, 67,122,122, 29,144,247,
+146, 65,144,151,133, 65, 78,232, 31,105,102, 68,135,211,204,191,109,237,147,192,116, 94, 94, 46,195,239, 95,191,192,195,254,160,
+109,115,253,253,253,100,153,231, 21, 0,185, 37,113,235,250, 35,224,121,216,180,172,152, 65,145,136, 64,149, 21,104, 36, 0,180,
+ 37, 12, 86,145,193, 42,176,209, 91, 2,241, 3, 82,142, 31, 38, 23,144,122,219, 31, 33,160, 97,111, 79,182,222,231,247,110, 50,
+152,171,202, 80,213, 61,111,127,169, 48,240,136,171, 48,184,132,218, 80,108, 22,161,139,125, 80, 1, 19,195, 31, 96,229,255,157,
+ 9,255, 66,213,187,192,114, 78,141,151,152,162,150, 58,219, 91, 77, 76, 76,134, 93, 62,193,181,224,111,180,247, 79, 25, 0, 8,
+ 32, 70, 96, 0,254, 31, 13,134, 81, 64, 41,224,252,121,131,225, 59,187,198,104, 64,140,130, 81, 48, 10, 6, 61,216,188,184,137,
+113, 52, 20, 24, 24, 0, 2,136,105, 52, 8, 70, 1, 53,192,104,229, 63, 10, 70,193, 40, 24, 5, 67, 11, 0, 4,208,104, 3, 96,
+ 20,140,130, 81, 48, 10, 70,193, 40, 24,129, 0, 32,128, 70, 27, 0,163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0, 1, 52,
+218, 0, 24, 5,163, 96, 20,140,130, 81, 48, 10, 70, 32, 0, 8, 32,148,165,169,190,182,228,175,206,197,118,240,204,168,121,163,
+230,141,154, 55, 56,204,131, 29, 7, 60, 26,126,163,230, 13, 21,243, 70, 1,237, 1, 64, 0,177, 96, 43, 40, 72, 5,248, 10, 22,
+106,155, 55, 10, 6, 31, 32, 84,185,140,130,193, 27, 23,132,212,179,131,142,171,102, 70, 93, 48,253,232,209, 35,134,167, 79,159,
+ 50,176,179,179,131, 79,153,147,147,147, 27, 84, 97,128,124, 43,229,112, 43, 87, 94,189,122, 5, 14,123, 98,129,180,180, 52,248,
+250,106,122,153, 55, 10,134, 22, 0, 8, 32,172,155, 83, 73, 57,158,148,152, 27,212,176,153,135,235,122,216,129,188,234,117,176,
+ 22,232,196,130,130,130, 2, 6, 77, 77, 77,170,154, 9,186, 80,198,197,197,133,160, 89,180,110, 4,184,187,187,131,233,157, 59,
+119, 14, 10,243,190,126,253, 10, 62,225, 16,116, 25, 16, 8, 4, 7, 7, 51, 24, 26, 26,146, 29,191,200,233, 30,124, 56, 21, 52,
+127,160,223,166, 8,226,207,152, 49, 3,111,227,153,216,184, 32, 70, 29,114,229, 15,170, 44, 64,231, 61,128,220,192, 1, 58, 14,
+252,199, 15,112, 99,224,244,233,211,224, 3,104, 84, 84, 84, 8,218,105,109,109, 77, 82,248, 60,127,254, 28, 92,161,147, 2, 64,
+149, 63,236, 58,106, 82, 1,169,231, 86,128, 14, 14,194,151, 63,176,229, 55,121,121,121, 48, 13,186,109, 20, 20,158,176,244, 68,
+ 76,126, 3, 85,214,160,251, 38,136, 1,160, 19, 58,205,205,205,241,198, 49,200, 60, 45, 45, 45,162,204,123,249,242, 37,248,250,
+235,209,198,254,240, 1, 0, 1,196, 50, 26, 4,131,191, 39,187,113,134, 7, 65, 53, 1,153, 59,168, 62,202, 66,168,161,176,103,
+207, 30, 12, 62,114,225, 5,186,176, 7,116, 36, 48,232, 44,122, 74,194,245,242,229,203,240, 10, 27,221, 14, 74, 1,232,190, 1,
+208,245,194,160,251, 12, 72, 1,160,202, 31,212, 19, 2, 93,204, 2, 42,104, 65,247, 1, 40, 40, 40, 48, 8, 10,146,118,194, 34,
+168, 50,221,190,125, 59,156,239,225,225, 1,190, 4, 9, 31,159,152,184, 69, 78,203, 32, 54,232, 56,224, 89,179,102,193, 43, 56,
+ 82,211, 58,232, 66, 25, 88,207, 15,212, 24,225,228,228, 4, 55, 8, 62,124,248, 0, 62, 6,250,212,169, 83, 96, 57, 98, 26, 1,
+ 58, 58, 58,224,138, 14,185,130, 70,239,177,131, 42,112, 16, 56,113,226, 4, 67, 84, 84, 20,201,241, 74, 78,229, 15, 3, 19, 38,
+ 76,160, 89, 94, 6, 93,215,123,237,218, 53, 6, 86, 86, 86,240,193, 89,160,184,189,125,251, 54, 67,101,101, 37, 73,230,188, 68,
+187, 36,203,214,214,150,225,240,225,195, 40, 98,160,235,155,201, 49, 11, 23,120,128,116, 89,211, 64, 1,244,195,128, 70, 15, 2,
+162, 12, 0, 4, 96,239,236,109, 24, 6,161, 32,220,177,129,171, 48,132,139,244, 30,196,141, 87,160,167,204, 8,222,198,242, 6,
+150,188, 82,244, 61,233, 18,139,252, 25, 66,138, 68,185,198,152, 2, 11, 25,184,123, 15,233,221,207, 8,128,117, 93,139, 34,176,
+111, 17, 1, 41, 14,199,211, 85,197, 47,177,202,152, 16, 68, 78, 36,148,154,204,240, 14, 57, 79,211,100,196,118,207,132,166, 4,
+ 56,246,113, 72,201,101,176, 6,136,252,231,121, 54, 50, 27,199,113,183, 40, 18,136,252,229,202,230,156, 51,247, 63, 68, 64,110,
+ 54,224, 19,102, 64,154, 11,255, 83,101,128,245,100,125, 67,190, 57,115, 69,224, 32,108,176,199, 30,134,193, 34,127,178, 16,136,
+ 0,218,148,130,166, 4, 52,223,104,154,198, 4,193, 51,136,220,183,145,189,250,106,128,177,152,103,105, 22, 0,132, 16, 46,237,
+109,229,206, 71,253,175, 64,212, 15, 33,199, 24, 77, 4,176,150,187,174, 43, 34,255, 20,144,127,223,247, 55, 34, 64,217,133, 61,
+123,161, 38,218,182,181,171, 2,132,142, 92, 59, 5,239,189,237, 21,206, 7,246,223, 59,228,175,190,191, 8, 40,199, 89, 0,246,
+206, 38,133, 65, 24,136,194,129,230, 6, 46, 60,144,184,202, 5,114,130, 94,161, 5, 47,208, 94, 36,247,240, 64,217,102, 93,190,
+ 41, 83, 66, 17, 77,140,148, 46,124, 16, 52, 46, 70, 48, 63,239,205, 27, 33, 63, 17, 0, 57,177,148, 60,223, 3, 54, 36,178,185,
+ 86, 17,192, 66, 58,107,218,117, 46, 2,223, 11, 98, 30,199, 81,250,223, 39, 1,182,128,236, 31, 32, 44,250,190, 23,178,230, 90,
+155,177, 47, 97, 24, 6,105,188,131,184, 92,107,226, 42, 49, 30,229, 6, 28, 13, 37,253,124, 46, 51, 86, 42,212, 74,145, 82, 50,
+ 93,215, 25,239,189, 56, 1, 49, 70,201, 96,173,181,210,184, 71, 12,112,200, 19,229,128,146,216,144,127, 46, 16, 85, 0,168, 19,
+128, 99,177,215,233,129,244,137,167,177,254, 97, 45,147, 61,207,243,108,156,115, 34, 6,248,119,130, 62,228,143, 32,160, 4,112,
+ 89, 57, 80,109,141,252,167,105,250,236, 93, 75, 78,192, 22, 66, 8, 69, 46, 0,229, 2,230,192, 22, 56, 11, 4, 1, 64, 99,156,
+213, 41,164, 76, 68, 73, 66, 5,244, 94,242,191,222, 30,111,254,120,222, 79, 17,208,136,151, 0,236,157,203, 13,195, 32, 16, 68,
+ 93, 19, 77, 68,112, 77, 27,105,131, 14,210, 70,196, 57, 55,106,224, 76, 49,214,179, 52, 18, 78,226,132, 95,114,202, 92,140,176,
+252, 89,140,216,217, 89,228,253, 9, 1, 56,146,146,123, 54, 8,126,155, 4, 56,231,134,149,128, 22,187, 90,158,113,190,220,151,
+219,245, 52,253,219,204, 94, 32,203,197,119, 70,244,175,168, 31,231, 76,228,192, 98, 53,131, 0, 8,186, 23, 36,224,211, 88, 40,
+247, 15,112,244, 68,251,101,125,246,148,210,238, 92,205, 92, 68,214, 47,247,196, 88,107,119,202, 64,141,236,127, 68,174, 31,237,
+ 81,122,160, 76, 7,188, 67,206,121,139,252,113, 78,180,121, 47,202, 30,171,238, 3, 4,128, 35,139, 62, 68, 33,132, 80,229,184,
+ 75,231,143, 34,241,138,188,140,200,248, 92, 43, 91, 71,213,128, 25,160, 48,150, 49,102,137, 49,110,255,234,103, 30, 41,181, 67,
+ 31, 41, 46,202, 44,183, 58,127,224,189,127,234,111, 37, 1, 51, 1,145, 70, 21,131,196, 49,230,216,205,124,145,243,135, 20, 96,
+115, 15,228,252,213, 22, 9,248,163, 15,171, 0,236,157,193, 13,195, 32, 12, 69,179, 0, 67,244,192, 37, 19,148,157, 24,131, 13,
+152,129, 21, 24, 1,117,130, 94,187, 74,245,144, 44, 57, 81,211,150,196,138,122,168, 47,145, 66, 68, 64,178,205,247,231, 75, 62,
+ 5, 0,156, 41, 2,180, 0, 1, 84,111, 71,152, 0, 73, 60,165,148,151,227,181,214, 62,182,103,238,219, 99,158,174,151,187, 25,
+237, 47, 1, 73,160, 90, 52,238,209, 10,108, 73,186,163, 34,174,117,245, 79,103, 65,177, 24,227,148,115, 54, 99, 1,244,188,114,
+ 21,240,206,116,181, 79, 18,103,175,222,251, 94, 5,163,138,135,254, 78, 41, 13, 49, 1,235, 59,254, 79,154, 0, 11,224,201, 1,
+171,191,223,170,160,168,234,157,115,253,217, 90,235, 64,128,100, 14,237, 79, 39, 72,137, 99, 14, 56, 40,231,111,175, 52,182, 40,
+127, 13, 30,241, 29,116, 6, 71, 89, 42,241, 73, 11,160,187,183,145, 23,190, 64, 91,106,201, 75,172, 9,250, 31,227, 29,160,106,
+ 84, 93,111,125,200, 11,160,176,248, 23,254,133,159,132, 16, 22,205,137,216, 39,204,199,223,126,195,158, 2,176,119, 6, 41, 0,
+194, 48, 16,244,105,253, 64,207,253, 94,175,253, 71, 31, 38, 19, 9,132, 98,161,196, 90, 69,220,139, 21,209,131,148,236,102,147,
+146, 79, 54, 1,190, 69, 4,240,190,218,115,214, 10,244,144, 63,217,255, 42,103,102, 38,249,107, 32,191,146,253,211, 52,166, 96,
+125,135, 11, 48, 10, 91,251,199,186,165, 43, 26,242, 87, 80,255, 4,144,126,140,113,171,181,202,117, 5,236,158,178,245,255, 51,
+144,157, 89,193,215, 59,135, 77, 16,135,252,169,245, 35,110, 16, 57,100,170, 16, 61, 89, 63,207, 33,127,214,163,228,175,130,211,
+222,183,142,192,204,108,125,230,183,188, 61, 0,136, 66,236,127,226, 10, 19, 65, 67, 8,242, 95,217, 67,136,197,156,179, 56, 45,
+ 79, 2,146,183, 37, 5,141, 85, 94,161,129,128,231,148, 72, 74,199,196,213, 82,138,148,144, 60,208,105,128,100,252,109, 9,224,
+183,255,253,216, 5, 96,239,108, 82, 24, 6,161, 32,236,186,167,105,123,129, 94,203,149, 7,240, 22,110,130,151,104,122, 5,207,
+ 34, 30,160,249,132,151,218,144, 66,252,129, 66,233,128, 40,196,141, 16,222,204, 27,135,228, 39,191, 4, 56, 34, 11, 0, 90,187,
+244,178, 32,151,246, 92, 43,249, 11,174,151,179,186,207, 15, 53,205,167, 85, 20,224, 8,244, 0, 34,224,142, 78,238,233, 16, 5,
+117, 29,251,171,232, 91,107,243,172,181,238, 46,186,210,253,211,233,111, 65,106,159,156,129,236, 25, 1,186,255,163,238, 19, 5,
+ 91, 64, 81, 11, 33,228,181,247,254,237, 25,221, 14,161,184,111,160, 76,251,239,137,190,163,110, 15,221, 63,228,206,185, 8,177,
+ 49, 99,245, 51, 82, 74, 42,198,152,139, 58,142, 0, 14, 0,123,107, 9,121, 47, 76,218,122,133,196,187,187, 61,115,171, 3, 53,
+ 18,206,185, 76,250,144, 63,225, 56, 44,112,200,223, 24,147, 69, 34, 89,128, 90, 1, 0, 89,127, 26, 61, 34,128,154,213, 75,254,
+ 0,129, 46,228, 15, 88,223, 58,126, 37,189,138,219,133,248,255,214,255, 24, 60, 5, 96,231, 12,114, 24, 4,129, 40,234, 85, 92,
+113, 9, 54,237, 21,220,234, 17,219, 38, 30,132, 59,176,230, 18,245, 97,126, 66, 73,173, 5,113,211,116, 18, 35, 9,201, 68, 29,
+224,207,252,153,241,103,138, 0, 91,131, 63,155,160, 5,101,168,116, 0,108, 64, 45,248, 3,244,128,191,228,118,127, 44,215, 58,
+198, 33,232,174,151,101, 84,214, 6,168,214,176,244,208,213, 65, 92,214,106,183,130,166, 10,255,136,216,251,190, 63, 12,254,138,
+254, 63, 69,249,173, 88, 0, 57, 18,164, 1,118,109, 49, 12,145,206, 37,170, 7,224, 97, 4,198,113,140,115,198,152,151, 57,239,
+125, 55, 77,211,174,206, 51,106, 0, 20, 73, 99, 83,177, 88, 2,198,212,238,123, 66,241, 31, 69,127, 68,250, 33,132,200, 0,144,
+247, 23, 3, 64, 26, 4,103, 0,240,199, 17,120,151,207,207, 37,101,137,244, 60, 57, 91,241,141,158, 45, 6, 42, 77, 47,108,253,
+ 20,168, 38,234,175,165,255, 17,232,126,214, 4,223, 10, 90,156, 59,182, 1, 20,231,121,142,169,149, 82, 7,160,117,196,158,235,
+ 61,162, 7,155,106,157, 57,231,226,251, 90,107,227, 30,129, 49,203, 91,136,139,156,219,140, 1,248, 75,189, 60, 5, 96,231,236,
+ 82, 32, 6, 97, 32,124, 1,111,225, 73, 60,147, 30,194,139,249,230,161,150, 47, 16, 8,161, 22, 77,251,176, 44, 43, 72, 43,165,
+165,224,207, 76,226,140, 63, 37, 2,252, 54,240,247, 36,224, 73,228,127,215, 22, 18, 16,152,160,119,237,147, 9, 10, 80, 43, 1,
+224,170,118,189,156,179, 0, 91,239, 93,178, 2,187,196,160,181, 38,213,238,125,251,200, 66,237, 69, 59, 22,166,213,161, 63, 74,
+ 52, 0, 51,192,223,110, 53,172, 10,227, 11, 21,247, 24, 67,236, 76, 16, 0,117, 3,248,103, 86, 28,184,164, 79, 23,231, 0, 68,
+ 53, 0,126,110, 49,222, 32,114,244,165,206, 53,235,220,216, 25,143,216,182, 16,255, 1,246, 68,251,164,251,149,172,176, 45,192,
+213, 10, 3, 35,153, 31,254,145,106, 35,245,211,239, 88,160,231, 93,191,182,188,105, 51,140, 20,181,250,213, 90, 37,250, 47,165,
+ 8, 41, 72, 41, 73,154, 60, 66, 0, 44, 88,107,128,241,150, 46,224,105,228,175,235, 9,253, 50,231,148,123,128, 31, 33, 32,253,
+ 67, 54,228, 68, 8,168, 46,128, 43, 17,224,223, 5, 16, 47, 31, 1,216, 57,123, 28, 0, 65, 24, 10, 47, 46, 58,114, 79,206,193,
+ 93,184, 13,103,208,193, 99,152,207,164, 6, 27, 81, 64,140, 14,190, 77, 99,186, 96,233,235,207,107,151,186,148, 90,226,200,249,
+ 52, 83,215,217,193, 91,193, 31, 71,122, 66, 54,116,199,230, 56,205,151,223,244,253, 80,100,243,172, 63, 92,115,129,227,212,100,
+ 32,222,251, 93, 69, 64, 80, 74, 2,228, 76, 83,144,165, 36, 37,213,138, 20,225,180,214,102, 5,127,129, 49,102,235,235,147, 17,
+235,172, 31,173,119,174, 15, 61,177, 7, 64, 7,247,163,125, 12, 37,164,148,178, 45,131,171,244,254, 89,252, 35, 51, 0,128,170,
+ 0,239,120,174,233,221, 75,255, 95,203,254,244,156, 64,110,240,143,207,249,107, 82, 94, 33, 1,248, 1,131,112,252, 51,206,185,
+149,236, 82, 85, 97,187, 98, 14,226, 54, 83,139,140, 93,219,187, 11,200, 12,146, 65,189, 7, 32,132,176, 86,147, 32,199, 53,146,
+199, 31,237,177, 8,192,206,217,165, 0, 8, 2, 65,248,165, 3,120, 78, 15,224,137,197,115,196, 39,108,136, 89,174,174, 81, 15,
+ 13, 8, 17, 36, 81,178,191,179,179,105, 29,118,175,156,247, 54, 86, 56,255, 47, 26, 13,200, 67, 90, 69,175,145,128,108,101, 95,
+ 20,103, 71,182,207, 98,174,158,189, 81, 0,228, 62, 76,113, 25,155,211, 6, 1,176,165, 1, 14,165,230, 0, 72,246, 25, 66, 80,
+ 59,207,187,253,172, 45,132,153,172,255,233,106, 91,125,134, 91, 37,246,145, 32,128,111, 14,129,141, 12,147,241, 46,202,253, 4,
+ 1,252, 91,231, 92,118, 32, 61, 9,219,150,125, 41,201,127,188, 31,207,151,246,164,103,135,228, 12,183, 84, 4,173, 28,148,171,
+114,191,165, 13, 32, 65, 64, 41,252,227,189, 63,174,169,176,104,144, 82, 58,137,252,192, 63, 25,209,244,239,237,103, 1,156, 24,
+225,197,212,136, 49,230, 53,139, 22, 9,240,199, 60,118, 1,196, 66,143, 74, 29,151,121,131,165,241, 48, 88, 43,127, 16, 0, 45,
+ 34,163,246, 66, 50, 80,225, 72,203, 61,209,200,230,163,247,186, 65,141, 0, 66,225, 76,205,163,126,105, 97, 30,190, 17, 1,114,
+ 0, 53,215, 0, 96, 11, 91,124,163, 61,164,164,121,208,232, 24,168, 97,183,127,255,126,240,162, 63,208,180, 0,104,215, 3,232,
+ 60,124, 82,210, 19,232,120, 95,228,209, 5,100,113,116, 62,161,116,134,220,160,133, 53, 38, 64,229, 10, 41, 13, 18,100, 0,242,
+203, 96, 46, 87, 64,135,235, 4, 6, 6, 18,173,190,185,185,153,174,230,209, 10,192,118, 1, 96,171,248, 71,135,255,201, 7, 0,
+ 1,196, 66,235, 74,112,244, 68,189,145, 13, 70,227,127,224,195,135,154,118,192, 70,122,200, 5,160,145, 18,114,206,246, 39,166,
+193, 73,141,134, 30,173, 27,139,148, 2,208, 89, 1,212,140, 79,106,155, 71,175, 70,192,104,229, 79, 29, 0, 16, 64,140,192, 0,
+252, 63, 26, 12,163,128, 26,128,243,231, 13,134,239,236, 26,163, 1, 49, 10, 70,193, 40, 24,212, 96,243,226,166,209,107,103,129,
+ 0, 32,128,152, 70,131, 96, 20, 80, 11,140, 86,254,163, 96, 20,140,130, 81, 48,116, 0, 64, 0,141, 54, 0, 70,193, 40, 24, 5,
+163, 96, 20,140,130, 17, 8, 0, 2,104,180, 1, 48, 10, 70,193, 40, 24, 5,163, 96, 20,140, 64, 0, 16, 64,163, 13,128, 81, 48,
+ 10, 70,193, 40, 24, 5,163, 96, 4, 2,128, 0, 66,217, 5,224,107, 43, 67,182, 65,216, 46, 19,193,103, 30,161,253,199,164,154,
+ 71,109,247,141,154, 55,106,222, 72, 55,111,179,223, 20,178,205,243,221,148, 67,115,243, 54,250,146,111,158,255,102, 76,243,124,
+108,164,193, 52,104, 75, 38,232,196, 67,208, 33, 54,160,211, 13, 65,135,244,128,246,174, 71,242, 43, 48,236, 60,115,134,225,187,
+158, 44,131,133,133, 5,248, 48, 27,216,118,205, 45, 71,158,210, 60, 62, 96,238, 67, 6,176, 3,167,174, 94,189,202, 32, 37, 37,
+ 5,190, 96, 8, 68,115,114,114,130,197,241,185, 15,159,121,143,175, 44, 97, 72,183,125,196,176,236,140, 26, 3,139,152, 27, 3,
+ 15, 47, 31, 65,243,168,237,223, 81, 64,123, 0, 16, 64,100, 31, 5, 76,236,105, 91,164, 30,129, 75,206,145,185, 18, 39,174, 49,
+220,121,245,156,129,147,141,131, 65,157,139,159,225,142,157,206,160, 10,100, 92,231,145,143,110,145, 27,120, 0, 58,189, 15,116,
+184, 75,111, 21,132,191,225, 48,228, 88, 85, 98,192,131, 39,143, 25,158, 2, 43,134,155, 55,110,128, 15,195, 1, 29, 8,196,195,
+203,203,224,225,234, 70,180,253,187,119,239, 38,201,189,160, 19, 22,201, 77, 55,176,147, 21, 65,183,101, 82, 4, 66,223, 65, 25,
+160,202, 0, 88, 97,172, 22, 34,223, 44,227,126, 6, 6,165,120,104, 70, 89,192,192,112,182,136,242, 72, 13,121,131,234,190, 53,
+ 34, 68,105, 3, 85,126,160,187, 13,118,237,218, 5,206,179,161,172,194, 12, 18,178,162, 12, 63,190,126,103,224,252,246,135,193,
+186, 36,149,193,206, 55,156, 97,203,220, 25, 12,155,247,238,101,112,115,115, 27, 20,105, 24,116, 30, 3,200,189,250,250,250,224,
+195,168, 64,103,239,131,142,105, 6, 93, 83,141,235,218,117,124, 0,116,200,211,197, 51,231, 25,100,146, 13, 25,202,204,180, 25,
+ 78,236,234, 97, 88,123,217,129, 65, 85,199,137, 44,243, 70,193,224, 5, 0, 1, 68,114, 3,128,212,243,251, 73, 57,114,148,212,
+202, 95,245,220, 93, 6,193,183, 95,128, 89,252, 63,195,175,191,204, 12,191,223,125, 97,120,242,230, 35,195,131, 41,103, 25,120,
+ 28,205, 25, 68,180,137, 91,149,126,118,127, 58,131, 6,124,107, 51, 51,195,250, 93,255, 24, 14,159,254,207,144, 22,193, 0, 22,
+ 47,106,165,172,226,134, 29,123, 76,141,195,119,208, 27, 19,212, 50,151,162,250, 32, 20,114, 0,139,144, 16,238,251, 3,222,189,
+115,129,198,177,224,160,217,107,141,168,252,255, 67, 43,127, 59,240,205,108,196, 52, 0,244,244,119, 49, 60,123,182,150, 97,209,
+124,132,216,173, 27, 55,193,116, 74,226, 58,134,143, 95,114, 24, 62,127, 32,174, 33, 10,186, 81,144, 88, 64,238, 17,170,184,242,
+109, 6, 80,124, 6, 25, 13, 10, 88, 79,145,226,202, 0, 88,249,163, 92,182, 67,141, 6, 0, 82, 56, 17,115, 59, 33, 12,128, 14,
+ 57, 58,176,106, 21, 67,147, 75, 24,131, 65,116, 22, 3,155,184, 32, 3, 3, 11,104,150, 20,136,255, 1,253,249,143,149,225,223,
+207,255, 12, 94,241,105, 12,143, 38,117, 48, 28, 59,118,140,193,202,202,106,192, 43, 68,208, 29, 2,160, 3,153, 64,103,235,131,
+ 26, 1,102,102,102, 12, 47, 94,188, 0, 31,189,171,167,167, 71,242,209,238,160,176,115,118,114,101,104,239,219,196, 80,158,112,
+153,193,194, 35,147,193,194,124, 15, 67,201,228, 39, 12,106,166,113,120,205,131,165, 51, 98, 27, 10, 32,117, 20, 55, 72, 71, 1,
+217, 0, 32,128, 88,200, 42, 64, 92, 86, 49,204, 12, 37,254,252,104,244, 70, 0,236, 38, 58,208,109,128,200,215,150,146, 82,177,
+202,220,125,201, 96,196, 41,200,192, 38,201,207,240, 23,216, 0,224,252,192,197,240,226,245,107,134, 23,159, 63, 50, 40,178,243,
+ 48,220,216,121, 4,220,254, 23, 37,162, 17, 0,170,228,111,220,101, 2, 38, 88, 14,134,191,140,236, 12, 1,174,191, 25, 2,221,
+190, 3,101,254, 33,245, 36, 40, 44,231, 40,172,164,145,111, 58,131, 93,174, 97, 82, 1, 20, 3, 29,242,214, 25, 70, 82, 67,128,
+148, 70, 28, 41, 39,170,129,226, 20,183, 27,200, 59,111,252,246, 94, 62,134,158, 85,145,112,126,113,232,114, 6, 53,151, 79, 20,
+199, 7,168,242,239,235,235, 3, 23,158,197,109, 12,240,179,212,137, 41, 44, 65,149,191,133,249, 90, 32,102, 96,104,108, 68,149,
+ 3,157,113,227,229, 5, 98, 77, 97, 88,190,138,184, 70, 0,168,192,133, 93,168, 4,170,176, 64, 55,196,193,238, 82, 32,165, 2,
+195,215,243,135, 29,203,140,236,191,140, 12,242, 42,127,170, 1,227, 62, 48, 53, 97,194, 4, 68, 3,192,168,151,129,225, 92,241,
+128, 56,103,223,190,125, 12,211, 3,211, 24, 20,129,149, 31, 3,243, 79, 6, 70, 86, 38, 6, 70, 96, 3,128,145,153, 21, 88, 54,
+ 0,195,239,235, 31,134,255,192,248,248,255,235, 47, 67,106,124, 22, 67, 86, 93, 62,195, 93,113,113,138, 14, 70,162, 6, 0,149,
+ 7,146,146,146,224,248, 5,221, 49,112,227,198, 13, 6, 87, 87, 87,240,173,131, 39, 79,158,100,208,214,214, 38,201,188, 35,123,
+151, 51, 4, 25,124, 99, 56,251,153,153, 33,170,254, 11,131,141,225, 68,134,156,130,112,134,158,242, 15, 12,229, 61, 75, 25,148,
+ 12,163,136,170,208,145,203,116, 80, 26,196, 38, 78,108, 89,132,126, 0, 16, 58, 24, 61, 16,136, 60, 0, 16, 64, 68, 53, 0,208,
+ 43,127,176,216,106, 65,146, 27, 1,160, 10, 31,118, 44, 41,140, 6,153, 13,170,100, 72,169,252, 21,110, 60, 99, 80,103,227,102,
+ 96,251,255,135,129,179,167,148,225,207,183, 95, 12, 28,197,173, 12,252,108, 28, 12, 63, 88,191, 51,124,253,241,157,129,147,129,
+145,225,249,193, 19, 12,108, 50,146, 12,252,252,252,120,205,187,113,151,129, 97,214, 10, 80,101,255, 13,138,129, 21,130, 41, 19,
+176, 17,192,136,212, 8, 96, 0,143, 8,204, 90, 65,122, 32,131, 42,103,144, 63,201,237,173,195, 42,127, 88,197, 15,171,252,145,
+227,164,147,196, 70,192,221,142,187, 4,213, 40, 87, 16, 87,176,129,122,254,160,202, 31,223, 29,243, 66, 66,233, 80, 53,196, 93,
+243,250,230,178, 36, 67,205, 20,127, 96,211,235, 63,131,165, 80, 13,131,181,139, 54,195,145,221, 87, 25,122, 87, 3, 11,159,213,
+255, 25,234,139,166, 49, 72,169,147,215, 27,254,242, 48,157, 65,154, 3, 24,211,111,175,130,123, 41,188, 98,122,240,202,127,250,
+244,233,120,245,242, 10, 92, 1, 87,254, 48, 0, 44, 95, 25,204,205, 17,242,200, 39,165, 70,134, 77, 97,152, 49,167,154,129,233,
+159, 44, 65, 55,161, 95,158, 68, 45, 0, 74,119,176,202, 31,181, 81, 0,172,252,103,224,207,115, 76, 97,239, 81,154,191,140, 80,
+226, 95, 40, 22,117,140, 80,133,140, 16,134, 55,150, 65, 20,166,240,247,240, 81,121, 16,248,247, 47,129,161,160,160, 0, 46, 15,
+ 98,131, 26, 3, 76,170,201, 8, 91,161,234,177,153,199, 18,142,221,125,127,254, 96, 81, 71,132,251, 64,195,230, 18,242, 10, 64,
+135,253, 98, 96, 98, 7, 42,101, 97,102,248, 3,236, 80,252,184,119,159,225,245,147,167, 12, 50, 86, 14, 12,140,108, 2, 12,140,
+191,127, 1, 27, 8, 76, 12,157,153, 37, 12,174,179, 26, 24,138,138,138,168, 30,103,196, 84,104,176, 94, 54,232, 88,102,208,113,
+212,160, 70, 45, 40,158, 65,107, 23, 22, 44, 88,192,160,169,169, 9,190,168,137,148, 81, 29,144,121,242, 76, 39, 25, 36,229, 60,
+ 24, 62, 28,188,204,240,241, 61, 59,195,226, 45,127, 24,182,157, 88,194,144, 23,202,201,192,242, 13,148,142,112, 55, 0, 70,167,
+ 7,134, 22, 0, 8, 32, 22, 98, 43,126, 80,196, 50,186, 34,221, 42,182, 39, 12,216, 61, 36,173,247, 0,171,244,191,125, 91, 10,
+206,169, 63,126,204, 3, 87, 30,160, 51,188, 73, 25, 22, 22,123,254,142, 65, 76,156,131,129,163, 62,139,225,239,155,119, 12,127,
+158,189, 97, 96, 97, 99,101,224, 98,100,102,224, 6, 97,102, 22, 6, 33, 86, 14,134,247,159, 63, 48, 60,223,119,140,129, 63,208,
+ 19,175,121,216, 42,245,195,167,255, 65, 27, 0, 12, 12,125,213,192,140, 1,100, 50,254, 39,111, 52, 0, 84, 41,131, 42,103,216,
+208, 61, 57, 83, 8,200,149, 63, 86, 0,109, 4, 80,178,174, 64, 48, 13, 17,223,239,103,205, 36,217,143,212, 28, 5,169,158,226,
+ 7,175,248,173,180, 67,192, 98, 32,250,216, 85, 72, 67,160,177, 47, 27,232, 87,242,134, 14, 65,117, 64,122,225, 21,120,161, 7,
+186,167, 28,212, 0, 32, 84,249,131,128,157,205,105, 20,190,169, 41, 3,195,236,217, 12, 12,251,247, 51, 48,168,170,130,252,136,
+ 58,130, 96,160,123,157,225,210, 69,252, 13, 0,244, 94, 62, 41, 83, 2,196,140,240,160, 87,254, 32, 64,168,242, 7,171, 1,166,
+ 37, 88,125,141,175,113,247, 15,169,208,159, 9,108,228,131,194,119,243, 33,204, 69, 93,211,129,118,194, 66, 71, 65, 65, 1, 92,
+166, 76,156, 56, 17, 46, 15, 98,131, 26, 0,160,107,155,145,111,145, 99,192, 97, 30,108,244, 2,100, 78,106,106, 42, 78,247,253,
+ 65, 10,223, 89,192,200, 2,185,111,203,225,167, 88, 43, 47, 22, 94, 94, 6, 6, 86,102,134,191,223, 62, 48, 92,223,182,151, 97,
+233,170, 53, 12,211,158, 65,220,114,170,145,143, 65,213,206,139,225,231,163,199, 12, 87, 47,158,101,184,124,255, 22,195,199, 23,
+ 47, 24,174, 92, 1,165, 37, 9,170, 20,200,184, 46,209,193, 85, 89,131, 46,242,169,173,173,101,232,233,233, 1, 47, 88, 4,141,
+ 38,241, 2,253, 0, 90,203,112,234,212, 41,162,243, 28,204,188, 15, 79,142, 50, 52,206,127,196, 48,183, 64,138,225,221, 87, 54,
+ 6, 54, 22, 38, 6, 25, 65, 14,134, 23,111,126, 49,164,119,253, 97,208, 55, 49,102,144, 35, 98,196, 9,214, 16, 64, 78,139,184,
+216,196, 0, 92, 13, 34, 66, 35, 3,163, 0, 63, 0, 8, 32, 38, 66,133, 8,236,190,111, 20,176,135,244, 11, 51, 64,189,127, 72,
+229,191, 12, 94,249,131, 0,108,110, 24, 38, 79,176,197,114,224, 44, 3,255,187,207, 12,255,216, 88, 24,126,157,189,202,240,243,
+250, 61,134, 31,187, 14, 51, 48,124,255,201,192, 6,116, 39, 23, 3, 51, 3, 11,208,252,159,255,254, 48,188,251,249,131, 97,218,
+238, 45, 4,205,236,171,134,244,238,145, 1,132, 15, 43,254,254, 51,220,188,243,159,161,168,149,252,214, 45, 40, 35, 34, 15,123,
+ 17,123, 27, 31, 72, 29,236,110,109,172,189,127,180, 70, 0, 53,111,249, 27, 40,112,247,252, 23,112,184, 35, 87,254, 32, 16, 84,
+207, 10,158, 14,176,113,213, 6,199, 9, 68, 29,105, 96,217,178,101, 12,197,109,140, 12, 60,162,186,224,216,245, 8,204, 4,207,
+251, 19, 3,254, 49, 61,102,144,150,194,188,160, 70, 95, 31, 82,249,199,197, 97, 78, 31,200,202, 18,190,161, 13, 84,104,131, 48,
+104,232, 31,198, 70,198,200,226,196, 2,172,249,150,156,198, 18, 90, 37, 1,195,184,196, 24,241,180,145,145,205, 2, 45,160,195,
+214,115, 6,141, 2,128,134,175, 81, 61,131,221,188, 13,192,252, 4,170,124, 97,118, 35,135, 25,122,216,194,196,240,185, 15, 84,
+126, 48,113,177, 51,252,126,241,144, 97,102, 77, 13,195,130,175, 31, 24,222,219, 91,192,229,231, 46, 89,192,208, 80,146,194,160,
+ 86, 20,201,208,116,121, 31,195,170,247,247, 25, 92,253,252,200, 26,213, 3, 85,244,160,114,224,252,249,243,104, 13,179, 25,120,
+167,161, 96, 97,125,249,242,101,240,112,127,100,100, 36,195,148, 41, 83, 24,190,124,249, 2,191,166, 25, 52,146,193,195,195, 3,
+190,216,200,218,218,154, 96,197, 15, 54,239,248, 90,134, 91, 59,139, 24,138, 42,123, 25, 54,215, 75, 49, 92,127,202,194,240,241,
+ 11, 51,195, 63,160, 83,222,126,249,197,240, 95, 88,153,161,176,170,149,193, 39, 32,134,112,195, 17,232, 7, 88, 89, 7,162, 9,
+177,201, 5,176,202,127,116,248,159,124, 0, 16, 64, 44,248, 42,126,106, 12,101, 97, 3,176,202, 31,125,116, 0, 89, 61,174, 72,
+101,121,251,129,225,221,127, 86, 6,182,183,239, 24, 56, 54,236, 3,207,209, 49,252, 0, 38,208,207, 95, 25, 24,129, 25,128, 21,
+212,163,250,255,143,225,199,223, 63, 12,159,255,252, 2,150,218,132,231, 80, 97,139,252, 64, 13, 1, 92, 69, 23,100,145, 32,229,
+ 97, 2, 74,244,176, 33,125, 98, 50, 0,182,222,255,153, 14, 37,156, 13, 2, 98,205,133, 1,208, 48, 63, 49,211, 1,244, 4, 93,
+ 51,138, 25, 44, 4,107, 80, 42,127, 24,128,137, 91, 10, 93, 5,171, 35,197,175,160,235,108, 15, 29, 58,196,240,246,173, 51,131,
+176,240, 94, 6, 30, 17, 29,112, 58, 7,173, 3, 32,102, 33,210,163, 71,160, 6, 25,122, 69,203,192, 96,102, 6, 97,223,190,205,
+192, 48,117, 42, 66,238,221, 59, 96,122,101, 33, 60, 77, 70,202, 60, 63,181,238, 81, 71,206,107,196,134, 97,126,126, 62, 74,143,
+ 29,189,226, 38, 22,192,174,131,134,205,253, 35, 3,216, 40, 0, 72, 13,202, 40, 0, 22,144, 44,173,198,112,235,234, 53,134,167,
+130,130,224, 56,204,203,203, 99,152, 52,105, 18,217,238,179,253, 41,192,240,255,223, 23,134,148,182,106, 6,221,144, 16,134,153,
+109,109, 96,115,225,225,116,251, 10, 98,132,240,240, 97,240, 14, 14,144, 27, 33,101,229, 55,146, 42,127,216,104, 19, 40,236, 65,
+ 61,102,208, 34, 62, 80, 99, 0,100, 86,102,102, 38,195,227,207,184, 27,118,160, 45,137,254,254,254,224, 48,218,182,109, 27,195,
+199,143, 31,193,211, 0,224,209, 14,232,252,135,187,187, 59, 81, 11,241, 64,242,247,110, 94, 96,104, 40, 75, 98, 16, 86, 93,205,
+112,126,117, 60,195,165,199,140, 12,143, 94, 2,171,134,255, 76, 12, 63,127,253, 6,150,183,194, 12,217,201, 89, 84,219, 1, 64,
+234,162,196,209,202,159,118, 0, 32,128,104,122, 16, 16,172,149, 7,194,136, 94, 44,246, 4, 4,146, 71, 86,143, 11, 92,123,242,
+136,225,244,155,103, 12, 87,239,223, 99,120,121,255, 1,195,167, 7, 79, 24, 62, 63,126,202,240,231,219,119,134,223,191,129,149,
+254,223, 95, 12,223,128,149,255,207,255,127,193,139, 3,255,147,144,216,144, 87,251,131,214, 5,128,248,160, 94, 63,164,231,207,
+196,208, 91,205, 66,149,112, 33,181,199, 0,170,224,145, 43,121, 24, 31, 93, 28,189, 97, 64,244,232,204,123,200,232, 11,104,216,
+ 31,134, 7, 26, 64,122,249,208,184,120,181, 19, 76,175,107,252,205, 80, 86, 80, 15,102,131, 70, 7, 72,237,249, 7,218, 29, 2,
+143, 56, 9,158,216,203,208, 95, 13, 41,252,236,236,236,136, 26,250, 7, 1, 5, 25, 89, 6,208,122, 47,100,124,227, 6,100,225,
+ 31, 8,168,170,254,103, 0,213,105, 66, 66, 16,172,162,194,192,224,234, 78,124,165,142,220,227, 71,239,189,194,196,104,145, 55,
+137, 1,160,202, 14, 91,133, 13, 31, 69,235,235, 35,122, 75, 35,104,186, 15,182,242, 31, 27, 0,201, 97,140, 2, 96, 1,135,174,
+ 61, 98, 72, 74,206,102, 56, 11,140,219,202,202, 74,156,141, 19,152,251,246,238,221,139,183,242,177,211,146, 99,152, 55,119, 42,
+131, 49, 48, 66,219,219,219,241,186, 17,212,160,112,118,118, 38,171, 66, 4,165, 55,144, 59, 64, 97, 15,210, 15,107,124,194,122,
+255,160,198, 0, 62, 0, 58,163, 96,203,150, 45, 12,215,174, 93, 3, 54, 58,111,131,135,251, 65, 98, 32, 0,154, 6, 8, 8, 8,
+ 32,169, 19,247,243,231, 79,134,179,107,163, 24,126,220,154,204,176,243,224, 93,134,251,207,153, 25, 62,125,101, 2,118,164, 24,
+ 24,158,126,229,100,200, 46,170, 38,201, 60, 80,227, 18,182,229, 20, 68,195, 26,155, 32, 26,132, 65,230,192,216,163, 96, 96, 1,
+ 64, 0, 49,225, 42, 24,208,135,250,208,135,154, 73, 5,176, 57, 68, 46, 46,212,213, 55,176,173, 99,248,230, 24,145, 1, 43, 27,
+ 51, 56, 97, 62,249,250,129,225,209,199,119, 12,175, 63,189,103,248,248,227, 7,195,251, 95,223, 25, 94,255,252,206,240,252,199,
+ 55,134,167, 63,190, 48,188,251,253,147,225,253,191,223, 12,191,176,204,127, 98,180,252, 77,177, 84,138, 72,235, 2, 82,194,121,
+128, 77, 9, 54, 48, 38, 21,128,122,251,232, 9,157,220, 97,122,156, 67,255,100, 86,254,196, 46,242, 27, 8,112,116,207, 85, 56,
+ 91, 67,204, 29, 60,252,143,140,123, 87, 69, 49, 48, 50, 48, 18, 93, 32,249,219, 28,100,136, 47,130, 84,254,160,116,189,241,168,
+ 3, 88,142,216, 61,255, 48,160,166,161,142,214,176, 96, 96,152, 50,133,129,225,206, 29,200, 72, 64, 99,227,127,248,240, 59, 8,
+ 11, 2,123,167,196,142, 0,128,104, 16,134,173, 1,128,241,145,197, 6, 10,192,122,227,216,122,210,160,145, 1, 80,152, 18,234,
+177, 35,247, 0,241, 53, 38,240,201, 33,131,195,236, 31, 24, 24,153,120, 24,230, 84,181, 50,240,108,217, 3, 46, 67,144,175, 26,
+ 78, 87,213, 97,200, 55,182, 2,150, 57, 92,224,134, 30,104,174,124,207,158, 61,224, 51, 27,176,129,185, 79,111, 49, 60,215,214,
+ 98,144,150,150, 6,175,155,192,215,160,192, 39, 71, 40, 45, 34,175,148, 7,245,246, 97, 21, 37, 50,141, 47,236,100,101,101, 25,
+ 30, 61,122, 4, 30,133, 80, 1,182, 50, 65, 7, 21,193, 26,145,160, 3,138, 72,237,141, 43,107, 24, 50,204,218, 37,192,112,105,
+ 91, 61,131,173,165, 38, 3, 55, 7, 19, 3, 55,215, 95, 6, 78,246,159, 12,158,254,164, 79,247,130,234, 15,228, 70, 13,181,167,
+ 0, 70,123,255,212, 3, 0, 1,196, 68,168,135,128,220, 16,248,191, 59,148,228, 97, 67,100, 0, 90,237,143, 92,233,195,104,244,
+ 57,110,124, 64,211,202,138,225, 15, 15, 23,195,123, 96, 15,255,218,215,247, 12, 87, 62,190,101,184,250,233, 13, 16,191, 3,242,
+223, 49,220,249,246,158,225,237,207, 31, 12, 95,254,252, 97,120,246,237, 43,220, 78,124, 0,180,216,175,175,154, 25,140,255, 51,
+ 0, 49, 35, 19, 67, 90, 4, 35, 67,106, 4, 27, 67,114,184, 40,176,167, 39,206,240, 15, 60,185, 64,218,208, 21,242,214, 61,116,
+ 49, 98, 1,178, 94, 88, 37,143,171,178, 7, 45,166, 68, 86, 79, 12, 0,133, 61,168, 80,172, 56, 91, 1,111, 20,192, 70, 4, 6,
+ 10,148,132, 45,103, 56,254,174,149,225,216, 85,196,202,120, 80,239, 31, 52,252, 15, 3,173,217, 91, 24,102, 16,177, 8, 16, 84,
+224,246, 3,181, 37, 20, 57, 51, 8,156,216,195,224,216,101,207,192,228,205, 0,222, 51, 77, 78, 26, 6, 29,246,131, 12,156,156,
+ 24, 24, 4, 4, 64,163, 58, 12, 12,158, 88,214,154,154,152,154, 18, 53, 2,128,171,231, 15, 19, 39,117, 4, 0,219,124, 61, 50,
+ 0,237, 2, 32, 21,128,122,248,224,173,122, 88, 42,108, 82, 15, 52, 66,110, 36,161,139,253, 35,162,209, 14,238,237,130,118, 55,
+124,251,201,192, 42, 33,207,144,222,210,194,144,192, 45,192, 32,112,224, 56, 92, 62, 57, 38,129,161,161,103, 14,195,237,190,229,
+ 12,117,186, 78, 12, 97,130,138, 12,187, 55,109,194,217, 0, 15, 0,134,137,182,142, 14,124, 81, 35,114, 3, 12,185,177,134, 46,
+134, 11,128,134,250, 65, 21, 58,108, 97, 31,108,190, 31,185,146, 7,245,246, 97,139,230, 64,141, 1, 66,189,127,144, 58, 86, 86,
+ 86,112, 47, 31, 52,244, 15,106,204,128, 78,253, 19, 21, 21, 5,166, 67, 1, 6, 14, 14, 14,146,227,129,157,157,157, 33, 56, 99,
+ 18,195,130,211, 38, 12, 15, 30,127, 98, 16,231,103,102,176, 84,103,100,208, 83,252,207,192,205,199, 55, 90, 75, 14, 99, 0, 16,
+ 64, 4,199,180, 97,133, 36, 74, 65, 66,198, 8, 0,108,239, 39,104,248, 15, 84,225, 8, 9,173, 70, 49,159,216,115, 0,190,232,
+171, 48,124,187,117,139,225,219,159,159, 12,159,190,126, 99,184,251,251, 55, 3,235, 63,200,196,194,199,223, 63,192,153, 23,196,
+222,246,242, 62,195,215, 63,191,137, 28,110,103,100, 40,106, 69,205,208,144,245, 0,255, 24,254, 50,252,100,184,126,231, 51,195,
+188,149,164,237, 61, 71,174,232, 65,110, 64, 31, 5, 32,182,162, 6,187,191, 51, 12,111,152,195, 26, 4,164,204,255,131, 42,122,
+228,134, 23,168,241, 0,194, 32, 0,138, 31,134, 1, 60,171, 71,213, 25, 24,214,171,254,195, 71, 1, 96,107, 1, 64,195,255,160,
+ 93, 0, 61,192,222,127,213, 84,111,162,253, 10,234,249, 35, 14, 41, 58, 0, 38, 65, 83, 1,255,255,175,134,166,235,255, 64,191,
+ 19,183, 61, 49, 36, 40,152, 97,247,206, 93, 96, 54,168,179,233,232,200,200, 0,203, 26,160,194,116,203, 22, 96,207,196, 7,194,
+ 55,183,180, 96,208,211, 38,124, 14, 0,122,101, 66,233,222,127,228,112, 1,165, 59,208, 60, 54,122,165, 10,218, 5, 64,234, 33,
+ 64,176,249,110,228,181, 0,176, 17, 1, 98,123,255,224,209, 53,164, 5,191,232,171,247,137, 93, 12, 12, 43,147,254,124,254,204,
+192, 42, 34,196,192,204,197,195,160, 29, 28,194,208,228,230,202, 80, 5,219,182,103,104,196,240,247,251, 15, 6, 86, 97,113, 6,
+ 93, 11, 7, 6, 5, 25, 69,134, 73,215,143, 51,232, 0, 43,249,231,167,223, 96, 54,138,192,121, 20, 18,153, 89,160, 74, 26,186,
+117,240, 15, 90,124,176,176, 48,131,197,145,183, 31,122, 99,233,141,130, 42,115,216, 16, 63,172, 39,140,109,136, 31,196, 39,166,
+242,135,249, 25, 84,209,131,122,250,160,253,254,160, 83,255, 64,233,133,155,155,155,225,219,183,111, 36,167, 21,144,121,226,226,
+226,224, 53, 5, 39,142,156, 98,152,176,122, 55, 3, 31, 35, 27,131,186,248, 79,134, 59,111,184, 25,108,212,127,163, 52, 22, 8,
+205,223,131,228,145,203, 58, 98,118, 4,140,246,254, 7, 14, 0, 4, 16, 11,169,133, 10, 56,226, 72,220, 2,136, 94,185,195, 42,
+ 26,116,243,137,109, 4, 72,137,137, 51, 92,254,241,128,225, 35,211, 63,134, 23, 63,190,128, 38,197, 24,254,130, 18, 39, 80,238,
+250,151, 15, 12, 79,191,125, 2, 39, 58, 80,239,159,184, 6,192,127,112,143,127,214, 10, 68,111, 4,180, 6, 64, 67,249, 15, 3,
+ 51,195, 87,138, 42,127,228,196, 78,238,144, 23,100, 11, 33,104, 40,238, 12, 74,165, 15,154, 18,128, 85,254, 38, 38, 38, 36,245,
+254,209, 71, 93,208,249,224, 70, 0,145, 0,178,147,227, 61,131,171,235, 44, 68,163, 5,135,154,244,244, 61, 68,109,249,108, 3,
+246,240,171,167,250, 50, 28, 95,245, 31,188,224, 15,118, 14,192,137,247, 45,224,161,255,214,236,205, 64, 85,207,136,114, 31,168,
+242, 7, 21, 76,129,129,129, 12,179,103,127,130, 87,216,140, 72, 75,194, 97,167, 25,194,192,230,195,150, 56,205,203,206,203,101,
+152, 58,105, 50,184,247,143,238, 85,208, 33, 64,117,117, 12, 12, 59,119, 91, 48, 56, 17,185,181, 21, 54,124, 11, 58, 12, 8, 52,
+212,143,239, 96, 32,114, 26, 3,176,131,128,208,231,112,103,128,229,210,137,218, 18,136,156, 46, 64, 61,126, 88, 3, 0, 52, 34,
+ 64,106,239, 31,189,194, 32, 23,128,122,187, 47, 30, 62, 96, 80, 84, 86,101,248, 7,236, 16, 48,254,249,203,192,194,203,199,192,
+107,100,194,192, 99,104, 10, 62,184,231,239,183,159, 12,255,129,226, 12,127,255, 49,148, 79,239, 97, 8,143, 10,199,217, 75,254,
+179, 66,144, 40,123,177,169,243,223,140, 93, 45,168, 98, 7, 85,254,176, 50, 32, 43, 43, 11,171, 58, 98, 43,127, 16, 80, 87, 87,
+103,152, 60,121, 50,195,235,215,175,193,107, 37, 64,139,132, 65,149, 63,200, 12,208, 72, 0,169, 97,111, 97,110,206,144,145,156,
+193,112,255,201,125,134, 88, 32,125,114,247, 66,134,231,159,223, 49,152,216,187, 50,136,203,168, 97, 29, 53,192, 55,162,128, 92,
+ 87,224, 58,252,135,212,131,128, 70, 1,109, 0, 64, 0,177,144, 83,160,144,211,243, 71,175,108, 96,103, 2,144,211, 8,248,105,
+111,204,160,198, 96,204,240,116,230, 2, 6, 6, 78, 14,134,247,255,255, 48,252,250,243, 7,216,251,255,199, 32,204,207,207,240,
+228,235, 71,146, 78,176,195,182,189, 15,177, 6,128,180,222, 24,182, 33,126, 74,143,235,133,157, 35, 0,171,228, 97,211, 26,232,
+149, 63, 41,118, 96, 11,127, 74, 1,250, 33, 79,168,113, 75,218,144,130,176,222, 83,240, 16,255,173, 61,124, 12,189,171, 35,129,
+ 13, 1, 6,112,197, 15,154, 30, 0,143, 16, 16, 89,249,195,210, 18,164,130,255, 4, 45,164, 24, 24,176,213, 59, 11,122,247,130,
+105,110, 57, 80,161,133,251,114, 18, 80,175, 30,100,174,136, 24,104, 36, 96, 29, 74,129,250,249,179, 26,131,161,177, 14,176,224,
+116,101, 96,249, 79, 92,229, 70,104, 4, 0,121,254,159,156, 93, 0,160, 66, 24,212, 8, 64, 94,209,142, 60, 18, 64, 10, 64, 94,
+ 11, 0,171, 8, 72,233,253, 83, 19, 56, 1, 91, 96,217,171,102, 49, 52,125,254,192, 96, 96,111,195,192, 36, 46, 8,113,211,239,
+255,144,163,123, 25, 88, 25, 24,153, 89, 24, 24,217,152, 25,102,207,232, 99,224,115, 54, 1,159,218, 71,207,195,106, 96, 67,252,
+160,133,127, 32, 26,116, 84, 47, 37, 0,116, 92, 49,104, 49, 35, 40, 29,128, 78,175, 4,197, 41,182,121,127, 80, 26, 2,165, 71,
+108,113,142, 12, 64, 35, 8,139, 22, 44,100, 96, 99,102,103, 8,137, 12, 1,171,183,241, 74,193,108,244, 0,203, 87,152,121,212,
+ 88,197, 63, 10, 6, 7, 0, 8, 32, 22, 90, 91,128,173, 50,199, 87,249,144,210,192,112, 76, 79, 96,184,119,247, 30,195,185,237,
+ 59, 25,190,254,252, 5, 30,170, 83, 54, 51, 98,240,144,139, 36,169, 50,164,230,165, 60,176,202, 26,212, 16,128,141,116,128, 26,
+ 4,164, 52, 72,112,153, 11,219, 66, 8,170,240,145, 27, 23,164,186, 31,230, 62,106, 1,208,249,254,132,194, 17,212,243, 39, 7,
+128,142,253,157,233,130,108, 46,121,199, 0, 67, 42,119, 70,134,248, 34,196,133, 38,176,114, 12, 36, 7,170,244,185,229, 66, 73,
+ 50,243,229,115, 55,134, 89,179,220,192,231, 3,240,243,125, 4,139,193,142,254, 37, 37, 99, 81,107,107, 31, 49,141, 0,106, 0,
+228,181, 0,148,244,254,137,233, 81,226, 3,160,202, 92, 34, 47,143, 97, 2,232,242,158,230, 13,224,203,123, 4,160,151,247,124,
+255,246,135, 33,191,164,146,129,153, 75,136, 97,219,194,153, 12, 23, 69, 24, 25,220, 40, 56,183,255,239,223, 63, 12,164,174, 1,
+ 66,110, 4, 16, 59,196, 79, 40,156,110,221,186, 5,166, 53, 52, 52, 24,222,190,125, 11, 94, 0, 8,170,156,133,133,133,225,141,
+ 80,208,174, 0, 54, 54,200,130,101,124, 13, 0,144, 57,160,195,130,254,253, 97,100,176,178,214, 7,111, 47, 4,233, 3,237, 36,
+144,145,145,129,171, 1,173, 53, 0,141,154,128,204, 6,173, 23, 32,166,211, 7,107, 36,160,179,209, 71, 69, 73, 1,163,195,255,
+212, 7, 0, 1,196, 50, 16,150, 82,181,194, 85, 86, 98, 80,202,201, 28, 84,129, 10,170,172, 65,152, 22,151,222, 32, 31, 40, 68,
+169,251,168, 5,136,241,231, 64, 95, 0, 4,233,213,131,142,220,197, 38, 23, 74,145,217,160,163,126, 63,127,144, 37, 75, 47,104,
+ 8,151,152, 45,111,212,106, 4, 80, 3,128,122,252,164,204,213,227, 3,148,152, 3,170,156, 64, 43,252, 65, 83, 59,176,235,123,
+ 31, 33, 93,223,123,116,239,110,248,245,189,206, 22,206, 4,205,155,253,190,157, 33, 85,176, 18, 83,130,200,219, 4, 9, 53, 2,
+168, 1, 76, 77, 77,225,123,253, 65,235, 58, 64,149, 53, 8,128,166, 3, 64, 0,116, 0, 16, 8,192,196, 65, 11, 6,241,133,159,
+143,143, 15, 92, 45,200, 60,208, 33, 66, 32, 0,218,101, 0, 2,176, 93, 44, 48,113, 80, 3, 1,223, 8,192,232, 13,167, 67, 11,
+ 0, 4, 16, 35,176, 53, 53,122,120,243, 40, 24, 5,163, 96, 20,140,130, 17, 3, 54, 47,110, 26,157,199, 0, 2,128, 0, 98, 26,
+ 13,130, 81, 48, 10, 70,193, 40, 24, 5,163, 96,228, 1,128, 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0,
+ 4,208,104, 3, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,129, 0, 32,128, 88, 70,131, 96, 20,144, 3, 12,169,112, 13,231,249,
+209,213,188,163, 96, 20,140,130, 81, 48, 96, 0, 32,128, 80, 26, 0,190,182, 50,100, 27,180,249, 48,230,190,233,193,110,158,145,
+204, 77, 6, 14,198,235, 12, 44, 76,207, 24,152, 24,190,129,247,153,131,142, 2,254, 7, 61,243,159, 17,116,170, 32,227,127,248,
+ 49,192,204, 12,191, 24, 74, 91, 33,231,136, 99,219,138, 50,210,194, 79,134,130, 21,191, 79,176,108, 3, 26,105,225, 55,106,222,
+168,121,163,230,225, 54,111, 20,208, 30, 0, 4,208,136, 30, 1,104,234, 88, 5, 62,239, 95, 83,249, 55,195,141,187,255,225,135,
+255,244, 85, 51, 49, 20,181,162, 30,157,218, 91,195, 4,110, 16,160,159, 24,136, 19, 0,213,254,122,241,128,225,227,175,127,144,
+227,137, 25,153, 24, 4,196,165, 72, 62,171, 27, 29,240,242,242, 50,124,254,252,153,225,199,155, 91, 12, 28, 34,106,163, 41,120,
+ 16,128,235, 55,207, 49,252,250,241,141, 65, 95,223,134, 34,115,240,237,141, 38,103,123, 21,181,205,131, 1,208, 53,180,176,173,
+139,176, 43,113, 41, 1,232, 23,129, 81,107,139,225, 40, 24, 5,163, 0, 63, 0, 8, 32,172, 13,128,133,139,230, 18,109, 64,124,
+ 92, 50, 65, 53,212, 54,143,154, 96,246,138, 95,224,115,255,145,111,255, 3,221, 1,128, 82, 64, 1, 43,125, 70,240, 1, 34,255,
+ 25, 52,148, 33,247, 4,236,123, 72,192,224, 63,191, 24, 60, 46, 76, 99, 56,245,230, 47,195,211,239,255, 24, 94,253, 98,100,120,
+200, 38,192,192,170,108,204,160,101,229,204,192,193,201, 73,178, 91,183, 28,184,193,176,105, 26, 48,202,126,130,246,237,254, 97,
+ 96, 96,191,198,112,236,216,119,134, 51, 87,121, 25, 56,248, 41,107, 12,252,120, 5,108, 80,136,141, 54, 40, 72, 1,151, 46,238,
+ 97, 80,144,249,201,160,171, 12,186,192,230, 47,195,199,215, 43, 24,158,190,100, 98,248,242, 83,146,193,196,216,150, 44, 51, 63,
+190,158,195,192,204,140, 56,236,232,206,132, 10, 6,131,166, 95,100,187, 17,189,114, 94,187,118, 45, 67, 73, 73, 9, 69,254, 6,
+ 85,254,160,147, 0, 65,251,193, 65, 7, 2, 81,163,194,134, 95, 56,246,127,116, 87, 50,189, 1,177, 55,177,194, 58, 54,179,102,
+207, 38,216,232, 68, 62, 43, 0,118,135, 0,242, 93, 2,176,120, 70,190, 25,113, 20,208, 31, 0, 4,208,160, 26, 1, 96, 98,160,
+239,214,204,222,106,118,160,141, 63,161,149, 60, 3,184,114,135, 0,102, 6, 91,211,127, 12,135, 79,255,135,138,255,103, 40,106,
+ 69,213,235, 19,131,223,108,208, 68,130,162, 8, 15,195,231,111,175, 25,152,255,252,101, 96,252,243,159,225,239,231,239, 12, 47,
+ 78,108,102,216,121,241, 4,131,109,124, 33,131, 16,244,244, 46, 98,192,146,253,207, 24, 24, 21,252,128,172,109,160,227,189, 24,
+ 24, 88,185,128,150,176, 48, 88, 57,240, 48,232,106,189, 96,152,191,225, 33, 3, 7,151, 60,105,149,254,251, 91, 12, 38,234,159,
+ 25,172,204,129,141,145,159,160,195, 69,174, 49, 88, 77, 48,101, 16,121,115,150,193,199, 78, 99, 88, 38,248, 11,231,247, 48,176,
+179,188, 99, 96, 97,250,197,240,227, 7,176,210,254,202,201, 96, 99, 71,218,149,167,215,110,156, 99,224,229,120,203,224,100,205,
+206,160, 32,175,204,192,199,199,207,240,251,207, 31,134,215,175,223, 48,136, 63,122,204,112,251,238, 61,134, 99, 71,223, 49, 88,
+ 89,251,147,236, 62, 80,229,255,247, 78, 43, 85,253, 76,205, 99,159, 65,189,127, 16, 64,190, 11, 0, 36, 54, 80,199, 1,211, 11,
+128,238, 64, 0, 53,158, 48,238, 83, 24,176,202,235, 63,116,202,146, 10, 38, 61, 90,199,192,120, 50, 5,185,142,135,158,146, 9,
+189, 13, 9, 9,164,204,248,202, 96, 22, 62, 25,111, 67,110,251,246,237,112,190,135,135, 7,195,142, 29, 59,240,242, 73,234, 4,
+161,173, 61, 26, 61, 21,144, 50, 0, 16, 64,120, 27, 0, 71,143,156,100,176,182, 49,167,155, 99,254,145,144,156,145,135, 55,201,
+ 29,206,252,199,200,196,112,251, 14,164,226, 7,225, 27,119,153,128,137,159,131,225, 47, 35, 59, 67,128,235,111,134, 64,183,239,
+ 72,163, 1,164,103,181, 7, 79,158, 49,108,121,193,192,240,228, 27,176,191, 14,212,206, 3,172,183, 89, 88,153, 25,216,190,188,
+102, 56,176,114, 54, 67, 64, 70, 25,193,179,186, 65, 96,197,250,125, 12,140, 6,233,240,227, 61,193, 35, 0,160,219,221, 88,254,
+130, 27, 3,188,130, 66, 12,193, 14,175, 24,214,238,252,201,192, 33, 72, 92, 47,254,199,215,135, 12,137,126, 31, 24,120,197, 37,
+192, 23,165,128, 71, 20,126,255, 97,224, 20, 87,100,248, 40, 36,205,176,228,240, 1,134, 24, 91,169, 65,155,112, 65, 87,171, 26,
+ 26, 26, 18,173,254,202,181,115, 12,255,127, 62, 96,144,151,252,193,192,207,199, 14, 12, 54, 46,134,239,223,255, 48,188,125,247,
+157,225,224,158, 9, 12, 28,124, 70, 12,230,102,118, 68,153,197,193,252,154, 65, 77,241, 63,131,182,182, 38,195,243, 23,239, 25,
+206,158, 63,199,240,229,203, 87, 6,126,126, 94, 6, 37, 37,121, 6, 38,102, 86,134,191,127, 31, 49,156,191,112,132,193,208,192,
+102, 88, 21, 24,160,222,127, 97, 97, 33,156, 15, 26, 9, 0, 53, 2,102,227,233, 21,146, 84, 25, 13,210, 17, 0,216, 73,150,160,
+ 75,153,176, 93,172, 68, 79,128,220,203,158, 57,115, 6, 3,165, 78, 97,146, 15,134,155,247,119,165, 0,210, 61, 25,255, 7, 85,
+252,109,193,178,240,120,244,120, 96,202, 0, 64, 0, 17, 28, 1, 0, 53, 2, 64,128,210,134,192,145,188,219,120,229,109, 38,169,
+146,157,216, 96,195, 74,164, 54, 4, 74, 91,190,131,105,208,144, 62,232,246,191, 89, 43, 64, 21,225, 55, 40,102, 96,176, 53,101,
+ 2, 54, 2, 24, 25,144,167, 4, 32, 35, 2,140, 4,167, 0,126, 51,177, 50,204,144, 10,102,120, 38, 0,212,203,196,204,192,203,
+240,147, 65,237,222, 62,134, 71,239,190, 49,124, 0,242, 63, 62,187,207,240,248, 49,176, 66,146,199,127, 36,239,105, 96,239,237,
+141,128, 41,131, 24, 43, 43, 3, 43, 27, 43, 67,192,172, 8,134,159, 43,130,224,242, 9,153,150, 12,225,190,162, 12,210, 18, 28,
+ 12,202, 34,239, 25,158, 18,113,119,209,143,183,183, 24,130, 29, 63,130, 27, 14, 12, 63,126, 66, 26, 19,160, 27,211,128, 13, 0,
+ 54,118, 54, 6, 38,160,151,127,169,218, 51,172,216, 56,147, 33,194,223,105, 80, 86,254,176,235, 85,137, 5, 63,191, 62,101, 80,
+148,254,206, 32, 34,204,205, 32, 35, 45,193,192,197,205,197,240,240,225, 83, 96, 69,253,143, 65, 90,138,151,225,234,245,227, 12,
+ 23, 56,185, 25, 12,116,141,241,154,115,249,242, 17, 6, 61,181, 95, 12,114,114,138, 12,215,174, 63, 4,246,174,175, 51,188,126,
+243, 25, 92, 8, 11, 10,114, 50,124,251,246, 5,216, 48,209,102,248,240,225, 35,195,211,179,231, 25, 46, 94,230,100,208, 39, 96,
+230, 80, 1,176,222, 63,232, 54, 64, 24, 0,141, 4,128,248,164,142, 2,128,134,157,177, 93, 47, 11,226, 35, 15, 73, 83, 99,122,
+161,185,185,153,193,215,215,151,226,227,120, 65,141, 0,144,251, 86,173, 90, 69, 84,195, 29,116,247, 2,182, 17,130, 11, 23, 46,
+192, 47, 7,194,214,136, 5, 85,240,184, 42, 52,228,251, 28, 64,225,151,158,158, 65,209, 40, 4,186,121,204,225, 31, 24,254, 1,
+ 27, 1,131, 25, 32,135,205, 22, 42,236, 70, 26,201, 0, 32,128,136, 62, 7, 0,212, 16,128, 53, 6,200, 1,248, 42,120,114, 42,
+127, 24, 56,120,240, 32,195,211,167, 79,193,152,146,171, 37, 81,215, 0, 64,192,225,211,255,224,173,224,190,106, 70,134,222, 26,
+ 70,112,229,255,159,129,149,112,192, 50,179, 48,168,154,187, 49,216, 59,122, 48,216,219,187, 50, 24,218,121, 49,240,248,229, 51,
+ 56, 8,255, 7, 55, 40, 88,128,229,222,149,203,132,195,243,206,221,251, 12,188,194, 50,192,202,159,133,129,141, 21,114,105, 12,
+123,196, 58, 56,190,114,233, 30,232,160,110, 48, 54,144,251, 72,148, 95,149, 5,223, 51, 72,139,115, 48, 48,124,255,193,240,225,
+213, 39,134, 5, 75, 47, 50,168,155, 78,101,152, 61,235, 36,195,239,175, 31,193, 13, 13,208, 25,226,111, 68, 76,193, 13,144,193,
+ 88,249,147, 2, 64,189,127, 14,150,231, 12,156,156,172, 12, 28,192, 6,142,162,162, 2,131,137,153, 25,248,156,115,208,221,238,
+108,108,204, 12, 66,130, 28, 12, 79,129, 13, 50,130, 45,230,255, 79, 25,120,121,128, 21,253,247, 63, 12, 87,174,220,102,120,246,
+226, 35,195,163, 39,159, 24,110,221,251,197,240,252,197,103,134,215,175, 63, 48,220,190,117,143, 65, 69, 89, 25,216,176,224, 99,
+120,251,250,209,176,234,253,131,122,252,232, 0, 52, 34, 64,206,125, 6,176,155,229,144, 27, 1, 48, 62, 53,111,156, 3, 85,108,
+160, 10, 23, 84,241, 82, 2, 64,183,240,129, 46,248,130,221,198, 73, 76,111, 23,148, 94,177, 85,254,176, 14, 11,186,155, 8,185,
+ 17,102, 39,232,114, 33,106,142,184,172, 42,228,198,175, 14, 18, 59, 68,153, 9, 26,214,247,244,244,132, 15,239,195,216, 48, 62,
+140, 77,202,240, 63,174,158, 62,136, 63,218,251, 39, 31, 0, 4, 16,201,107, 0,168, 53, 34, 64, 77,112,251, 54,100,116, 1,212,
+ 8,144,150,150, 38, 99, 74,128, 17, 88,193,255,135,142, 2, 48,160,244,246, 33, 73, 31, 50, 23,118,243, 14, 76,254, 23,193, 53,
+ 0, 24, 54, 48, 50, 49,252,231, 19, 99, 80, 23,230, 96, 96,124,244, 3,124,201,240,247,239,159, 9,234,123,242,232, 17,131,164,
+ 54, 19, 3, 11,176, 65,193, 12, 30, 90,254,141, 34,255,248,238,103,112, 69, 14,114, 31,223,127,226, 22,139, 25, 72, 2, 27, 10,
+223,153,192,254,186,123,235, 53, 67,215,188,135, 12,118,129, 9, 12,159,164, 52, 25,216,158,191, 96, 96,229, 23, 98,248,255,239,
+ 47, 3,175,168, 12,195,157, 11, 59, 25, 76,141,233,223,131,197, 54,196,143, 92,249,147, 82, 0,190,127,247,138, 65,132,151,145,
+225, 15,176,183,255,235,247, 31, 96,143,253, 29,176,145,195,193,240,243,231,111,134,223,127,254, 50,252,249,243, 15, 40,247,159,
+225,195,251, 55, 4,205, 98, 99,253,202,192,193, 41,195,240,246,237, 71,134, 79,159,191, 49,188,123,255,157,129, 79, 88,159,193,
+ 74, 79,143,225,212,209, 29, 12, 82,191,254, 48,124,252,244,145, 65, 93, 93,153,129, 29,216,104,251,250,249,221,176,233,253,131,
+ 42, 11,216,220, 63, 50, 0,141, 0,144,179, 22, 0,212,152, 64, 30, 77, 64,151, 35,118, 56, 25,114,213, 51,172, 71, 43,196,224,
+236,140,122,241, 15,168, 92, 0,129, 77,155, 54, 49,188,121,243,134,172,139,169, 64,107, 0, 96,149, 63, 76, 63,104, 77, 0,161,
+202, 21,125,164, 10, 84,249,195, 22,190,129, 58, 44, 32, 26,185, 65, 11, 98, 19,106,252,192,110, 22, 4,209,176,145, 4,124, 97,
+ 69,168, 60, 4,249, 41,196,114, 15, 3,232,210,233,240,254,175, 12, 76,225, 31,240,154,103, 22,142, 63,172,208,231,248, 9,173,
+ 9, 24, 5, 3, 7, 0, 2,176,119,109, 41, 13, 3, 81,244,244,129,175,146,212,143,128, 66, 45,248, 64,180,203,240,215,239,124,
+184, 1, 93, 64, 86,232, 6,196, 5, 8,126, 73, 32,216,160, 54,157,214,201,180,214,185, 19,174,166, 33,216, 76,139, 10,226,192,
+ 37,144, 27,146,129, 73,114, 30, 51,201,253,209, 63, 1,150, 41,253, 85,212, 63,149,169, 44, 18, 1,122,161,216, 56, 1,151, 23,
+ 13, 3,158,180,200,143,192,157,166, 3, 56, 62, 23, 5,102, 36,129,212,191, 5,181,134, 51,142,225,142,251,216, 20, 49, 90,226,
+ 17, 39,209, 13,110, 99,173,186,223,106, 52,227,142,246,110,149,239,102,103,152,202, 68,131,127, 29,141,230,252,112, 29, 95, 95,
+225,252,236,224,195, 1,184, 15,215, 43,117,205, 16,133,209,171, 33, 14, 15,119, 17,118, 58, 93,156,246,122, 38,183,221,156,152,
+106,106, 25,225,168, 27, 2,242, 27,224, 95, 84, 71,188,143,109, 75, 27, 59,119,170,217,150, 24, 41, 8,145, 98, 48,144,136,162,
+ 39,132, 97, 31, 73, 34, 49, 28, 42, 29,169,206, 41,188, 60, 47,118, 80,164,156,152,197,131, 74,165,112,156, 53,116, 59, 46,182,
+ 90,153,122, 58, 60,218,199,158, 86,253,109,119, 67, 15,191, 62, 70, 19, 11, 41,197,159, 81,255, 65, 16,124, 9,230, 54, 46, 64,
+190,164,112, 89,163, 28,129,238, 50,138,150,158,255,124, 48,160, 18, 17, 32, 16,183,117, 10, 73,249,211,220,127, 30,252,105,235,
+251,254, 66,160,166,107,243,125,204,110, 0,219,238, 76, 98,243,121,234,127,245,178,205,179, 57, 21, 95, 70, 28,170, 56, 41,158,
+231, 25,137, 83, 43,184, 2,203,158,239,187, 27,185, 1, 28,255,109,181,246, 46,128, 72, 30, 1, 24, 76, 61,127, 68, 1,255,151,
+172, 59,213, 83,195,217, 25, 52,149,127,129,123,254, 48, 0,106, 8,128, 42,127, 16, 64,140, 8,192,166, 1,152, 25,122,171, 25,
+129,189,119, 30,134, 67, 4,214, 0,252,251,243,155, 65,237,216, 76, 6,118,198,127, 12,175,127, 1, 43,238,191,127, 24, 30, 63,
+127,202, 48,231, 41, 19, 3, 43,208,188,143,204,140, 12,230,134,132,183,138,201,200, 72, 51, 28, 90, 84,202,224, 85,177,158,129,
+137,131, 3,188,226,124,145,118, 62,208, 73, 63,129,173, 39, 41,200,114,221,159, 63,192,203, 20, 78, 95,227,101, 96, 80, 33,236,
+239,123, 47,216, 25,244, 69,126,128,179,188,187,169, 56,131,200,219,219, 12,103,127, 60, 99, 80, 22,122,203,112, 68,166,156,129,
+149,249, 47,184,242,255,251,227, 51, 3, 3, 3,253, 23, 59,193,122,254,176,222, 13,242, 86, 33, 92,243,166,248,128,160,144, 40,
+195,179,251, 87,128, 61,114,102,134, 95,191,255, 49,252,248,249,132,225,241,147,183,192,222,251, 39,134,119,239,190,129, 23, 2,
+130,176,128,144, 2, 65,179, 94,190,249,207,240,226,229, 27, 6, 77, 77,101,134, 15,239,223, 51,176, 2, 27,101,159, 62, 63, 97,
+248,250,225, 31,131,150,202, 87, 6,113, 81, 81,240, 21,181,236,236,156,224, 41, 1, 70,102,193, 97, 83, 88,224,234,173,131, 0,
+108, 45, 0,177, 0, 54, 82,144,159,159,143, 49,170, 0,155,102, 32,119,103, 65, 88, 88, 24, 74, 15, 22, 84,233,195, 42,175,224,
+224, 96,112, 67,133,216,131,103,176,245,252, 97, 0,125,164, 1, 99,164, 13,216, 72,133,141, 2,192, 70, 2, 64,110,128, 53, 94,
+ 97,242,160,116, 14,146,131,245,254, 65,226,143,241,184, 15,164, 62, 43, 43, 19,168,126, 38, 82, 67,226, 63,188, 10, 7,153, 3,
+243, 63, 49,141, 9,144,121, 83, 29, 5, 25,194, 39, 64,214, 62,161, 79, 7,128,196, 97,230, 37, 57,178, 14,104, 26, 68,175,244,
+ 65,252,209, 41, 0,242, 1, 64, 0, 17,221, 0,160, 86,197, 15,234,241,195, 22, 4, 82,210,251, 71, 6,232,149, 63,104, 88, 9,
+212,202, 39, 52,244,165,161, 2,153,227, 7,245,244,109, 77, 65,115,254,168,242,200,211, 1, 41,225, 60,160,190, 56,120,243, 13,
+211,127,194, 3, 39,160, 33,244,141,151, 31, 49,188,253,253,159,225, 7,176,187,255, 21,216, 11,125,247,135, 9,168,255, 63,195,
+155,239,255, 25,212, 61,124, 25,248,120,120, 9, 87,134, 70,134,224,187,205,159, 93,221,207,160, 96,228,193,192,198,198, 14,217,
+ 5, 0, 90,132,244,247, 23,188,217,190,233,208, 47,134,127, 42, 62, 68,133,215,233, 91,108, 12,250,202,159,193,122, 57,152, 24,
+ 25,172, 61,149, 24,172,127, 95, 4,242,217, 25, 86,190,100,101,248,245,235, 31,176,242,255,194,112, 98, 78, 41,131,157,185,254,
+128, 36, 76, 80,193, 5, 43, 24, 97,139,197, 72,237,249,195, 0,104, 17,222,245, 43,103, 25,254, 63,253,196,240,237,251,111,134,
+247,236, 63,128,177,240, 30,216,147,255, 3, 30, 17,120,245,230, 27,195,179,231, 95, 24,108, 29, 9,111,163,252,254, 75,132,225,
+222,253,215, 12, 74,138,114, 12,138,138,160,169,128, 55, 12,130, 2,127, 25, 84, 85,249, 25,196, 68,149,192,231, 59,124,248,240,
+133,225,236,185, 27, 12, 79,128,246, 73,200,104, 15,217,194, 1, 92,165, 48, 50,192, 87,153, 35, 87,170,248,246,237,227,108, 50,
+162,237, 42, 3,141, 2,128, 26, 13,232, 13,128,190,190, 62,134, 93,187,118, 17, 52, 15,150, 46,210,211, 5,145,220,244, 31,163,
+ 98,134, 53, 0, 64, 61,118, 98,134,255, 81,167, 20,246, 98,173,252,137, 5,160,202, 25, 54,220, 15, 2, 89, 89, 89, 88,229, 97,
+ 21, 53,161, 10, 27,182, 3, 97,218,180,233,240,181, 18, 6, 6,250, 12,200,243,243,136, 30, 60, 3,193,252, 2, 51,143, 41,236,
+ 61,220,188, 80, 75,118,148, 80, 15,235,255, 10, 55,143, 24, 0, 42,127,145,119, 74,128,214, 0, 32,167, 19, 74,134,253,211,202,
+ 59, 80,203,232,206,138,209, 70, 0, 5, 0, 32,128, 8, 54, 0, 6, 99,143, 31, 6, 34, 34, 34, 40,210,207,136, 52,191, 15, 90,
+237, 31,232,198,132, 40,112, 24, 65,103, 0,252, 7, 47,248,251,247,159,159, 65, 89,153, 15,216,201,126,205, 0,234,255,255, 99,
+252, 79, 68,225,201,200,240,241, 31, 51,195, 27, 96,143,243,207,191,255, 12,159,128, 13,129,207, 64,246, 47,102, 22, 6, 37, 71,
+103, 6,123, 59, 79,162,220,168,161,166,206,240,220,228, 25,195,153, 51, 75, 25,110,125,122,195,160, 98, 25, 4,233,229,255,250,
+ 5,118,251,133,123,159, 25,206,223,231,102,248,173, 26, 69,180,191,255,105,216, 51,108, 58,176,130,193,207,146, 13, 81,194,130,
+ 26, 53,255, 32,107, 8,126,127,255,204,240,236,210,126, 6, 37,105, 97,112, 3,100, 32, 0,168,224, 66, 94, 69, 13, 42, 64, 41,
+ 89,197, 45, 35,175,206,112,230,196, 78, 6, 49, 17, 46, 96, 15, 29,146,236,127,254,252, 11,236,189,255, 2,207,227,203, 42,106,
+ 51,216, 88,217, 19, 52,199,203, 43,152, 97,215,246,249, 12, 39, 78, 93,101,176,181,214,103,144,151,151,103,248,253,235, 7,131,
+161,129, 30, 3, 55, 63, 63,195,195,123,143, 24,158, 62,251,192,112,244,248,117,134,247,159,249, 25, 2, 45,237,135,108,225,144,
+153,145, 14,207, 41,153,160, 10, 12, 90,129,255, 67,171,244,153, 64,219, 70,254, 35,170, 12,144, 50,111, 44, 5,114, 6,200,140,
+255,200,117, 21, 35,195,191,127,255, 80, 70, 1, 64,108, 80,229,225,225,225,142,212, 10, 1,154, 23, 93,139,181,242, 2, 1, 66,
+149, 51, 72, 29,177,149, 63, 58, 0,233, 35,212,211, 39, 38, 29,195, 70,179,244,245,245,113,202,195,230,246,241, 1,228,198, 4,
+168, 82,133,244,254, 25, 49, 26, 21,196, 2,116,243, 86, 21,242, 96, 52,185,144,197,118, 94,252, 77, 48,172,209,231,252, 71,215,
+ 0, 12, 94, 0, 16, 64,120, 27, 0, 86,214,102, 52,153,243,161, 86,207, 31, 57, 33,145, 3,174,223,253,207,160,169,140, 40,140,
+138, 90, 81,247,208, 65,166, 2,128,189, 97,134,159, 12,215,239,124,102,152,183, 18,114, 66,155,141,233,111, 6, 1,117, 66, 13,
+ 0, 96,207, 31,104, 28,168,242, 7,101, 44, 54, 41, 85, 6, 41, 9,121, 6, 29, 83, 75, 6, 25, 41,210,206,204,118,116,112,100,
+224,225,225, 97, 56,176,127, 7,195,198,125, 11, 25, 24,182, 90, 32, 90,192,151, 12, 24, 12,140, 76, 73,246,251, 11,249, 8,134,
+249,187,151, 49, 24,202,126,101, 48, 80,224, 5,119,243, 62,124,249,205,240,249,245, 35,134, 59, 71,214, 49,252,184,177,147,193,
+196,196, 24,220, 0, 25, 40, 0, 26,234,135,245,136, 72, 29,246,199, 72,115,208,202,253,214,141,107, 12,207,238, 61, 4, 87, 90,
+127,255,254, 7,246,216,133, 24,212, 52,117, 24, 2, 3, 66,137, 54, 75, 76, 90, 15,216, 0,216, 1, 30, 65,208,213, 81, 98,144,
+150, 18, 97,120,244,248, 37,195,251,203,119, 25,110,222,122,196,176,119,223, 37,134,135, 79,255, 51,164,164,230,146,229,214,251,
+ 91, 62, 83, 53, 28, 31, 60,120, 64,150,190,127, 43, 5,201, 86,231,187,137, 72,243,238,206, 71, 25, 5, 0, 79, 35,220, 91,128,
+161, 22,155,121,248, 70, 5,208, 43, 57,138, 58, 10, 20,150,129,176, 5,123,184, 42,119, 66,242,216, 70, 21,144,245, 98, 51,143,
+164,120,126,184,150, 97,205,132, 56,200,232,135, 37,230, 16, 63,178, 24,161, 6,192,232, 73,142, 67, 11, 0, 4, 16, 11, 45, 19,
+ 62, 45, 1, 37,103,153,195,192,236, 21,127,145, 42,122,204,115,254, 65,107, 0, 52,148,255, 48, 48, 51,124,133, 87,254, 32,112,
+228,244, 47, 6, 31,130,245, 34, 35,195,231, 95,127, 24,128,136,225, 37,176, 99, 29, 22,153, 10,158,191, 39, 23,152,154,152,130,
+241,233, 51,160,121, 10,196, 2, 4,114, 42,127, 24,248,173, 29,197, 48,235,220,105, 6,230, 99, 87, 25, 62,188,190,195,112,230,
+ 37, 63,195,205, 71,254, 12,202,178,226, 12, 14,142, 14, 96,251, 6, 26, 80, 90,241,163, 55, 2, 64,248,194,229,179, 12, 47, 95,
+188,100,224,230,230, 38,170,215,143, 81,192,234, 25,131,241,210, 37, 51, 25,174,221, 60,201, 32, 41,206,195,192,193,193, 10, 94,
+ 76,248,244,249, 39, 6, 70, 22, 89, 96,229, 31, 71,150, 27,121,132,138,168, 26,126,176,189,251,131, 22,156, 43,102, 96, 80, 78,
+ 68,221, 94,120,150,252, 48,160, 70,153, 5,218, 73,128,104, 72, 80,167, 66, 35, 84, 41,147, 82,105, 83,122,158, 1,182, 48, 67,
+ 31,246, 31,172, 0, 52,228,143, 62, 13, 48, 10,200, 7, 0, 1,132,181, 1, 64,237,243,248,233,125,190, 63,169, 0,116, 2, 32,
+228, 52,192,255,208,173,127, 16,128,216, 5,240,143, 33, 45,156,133, 97,214,202, 63,196, 7, 44, 27, 59,195, 15, 65, 25,134,175,
+159,127, 48, 48,112,255, 7, 47, 12,163, 6, 0, 85,202,154, 89, 7, 24, 76,100, 62, 50, 8, 8,171, 48,232,186, 82,102, 30,164,
+ 1, 1,169,232, 65, 75, 18, 65, 13,140,193, 80,241,211, 18,128, 15,251,209,165,220,156,232,152,116,134, 35,199, 14, 50,188,126,
+251,154,225,251,139,111,192, 70,128, 48,131,140,162, 30, 89,141, 10,106, 53,106,105,105, 30,106, 79,239, 31, 3, 3,181,142,238,
+ 6,246,248,225, 59, 2,238, 45, 28,240,244, 65,201,144,255, 80, 4,110, 62,225, 36,245,220,205, 8,200,211, 98, 13, 0,104,142,
+ 31,182, 0, 16,212, 8, 64,151, 27, 5,228, 1,128, 0, 98, 25, 13, 2, 80,187, 23, 22, 12,127, 48,206,253,135,140, 14, 48, 51,
+168,170,128,110,241,251, 66, 82,171,218, 35,139, 54, 9,179,176,164,148,102, 97, 49,220, 43,127,106, 3,114, 43,251,161, 0,102,
+189,239, 96, 72, 19,172,192,148, 88, 45, 68, 93,243, 64, 61,254,179, 69,163,137,105,128, 64, 72,246,148, 33,209,232, 68,110, 4,
+140, 86,254,212, 1, 0, 1,196, 8, 12,192,209, 73,155, 81, 64, 50, 48,164,194, 30,220,243,163,153,119, 20,140,130, 81, 48, 0,
+ 96,243,226, 38,198,209, 80, 96, 96, 0, 8,160,209, 17,128, 81, 48, 90,121,143,130, 81, 48, 10, 70,193, 8, 4, 0, 1,196, 52,
+ 26, 4,163, 96, 20,140,130, 81, 48, 10, 70,193,200, 3, 0, 1, 52,218, 0, 24, 5,163, 96, 20,140,130, 81, 48, 10, 70, 32, 0,
+ 8,160,209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48, 2, 1, 64, 0,161,172, 1,240,181,149, 33,219, 32,108,103,107, 83,
+219, 60,123, 51,105,130,250,190,190,123, 1,103,115, 11, 73,192,217, 7, 79, 61,197, 80,251, 83, 84,156,160,121,187,251,115,224,
+108,215, 66,196,106, 89,246,215, 47,201,114, 31, 46, 64,174,251,112, 1,108,238, 51, 49,148, 34,168,239,205,253,171,112,182,136,
+ 34,226, 24,219, 51,231,159,209, 60,252, 60,118,227,191,251,157, 95, 74,138, 33, 22,233,122,213, 41,226, 8,251,119,184,166,209,
+ 60,253,161,155,119,243,230, 77,140, 11,109, 64, 87,227,170,171,171, 15, 72,254, 24, 53,111,232,153,119,249,242,101, 56, 91, 87,
+ 87,151, 98,243,144, 47, 58, 66, 94,145, 63, 20,195,111, 20,208, 30, 0, 4, 16,193, 69,128,176,203, 48, 96,128,146,115,177,105,
+ 97, 30,168,194, 7, 85,244,176,138, 95, 66, 86, 1, 76,191, 32,226,110,119, 92, 21, 22,168,162,130, 85, 92, 83, 55,157, 2,211,
+217,126,102,195, 50, 1,128, 42,124, 80, 69, 15,171,248,181, 77,172,193,244,213, 51, 71, 7, 60,252, 54,127,249,194,176,243,235,
+ 87, 6,119,110,110, 48,205,240,242, 37,195,169,242, 50,176,156, 89,103,215,128,134,219,129, 3, 7, 24, 86,172, 88,193,240, 3,
+116, 19, 35, 18,224,224,224, 0, 31, 81,237,224,224, 48, 90,186,140, 2,172, 21, 62,168,162,135, 85,252,148,230, 55,216,157, 39,
+176,138,159,146,252,134,126, 75, 34,181,182,244,225,106,148,140,130,129, 7, 0, 1, 68,176, 1, 0,170,172,121, 52, 67, 81,248,
+148, 84,216,224,155,181,184, 69, 41, 54, 15, 86,225,115,242, 11,131,217,176,138, 31,223,136, 0, 49, 61, 85,179,232, 10, 48, 27,
+150,145,112,169,195,183,255, 20,221, 78, 54, 54,200,153,251,160,195, 48, 64,103,159,131, 0,232, 6, 67,152,251,153,152, 89,137,
+238, 69,131,128,164, 24,164,231,251,235,211, 7,134,159,127, 32,135, 19,125,249,243, 23,238,126,126, 49,194, 45,113, 88,133,207,
+ 47,165, 12,102,195, 10, 34,220, 35, 2,130,116, 11, 63, 16,200,121, 9, 25, 33,128, 85,254,176,138, 31,220,243,222,181, 27, 67,
+157, 15,145,233,230, 35,247, 27,134,183, 60,175, 25, 62,188,189,195, 32, 38,160,201, 32,243, 70,133,228,180, 7,234,249,175, 92,
+185, 18,163,242, 7, 1,144, 24, 39, 39, 39,131,164,164, 36,214,145,128, 81, 64,124, 71,129,146,114,134,152,203,192,232, 93,241,
+195,242, 27,136,141, 43,191, 33, 70, 4, 4,137,170, 84, 65,249, 13,196,198,149,223, 96,234, 8,229, 55,144,186,233, 11,150,163,
+138, 37, 68, 82, 28,134,232,141,138,193, 22, 47, 35, 29, 0, 4, 16, 11,161,200, 67,174,252, 65, 0,196, 39, 55, 18, 65,250,144,
+ 43,127,240, 8, 0,144, 79,170,121,160, 10, 22, 84,113,242,243, 65,110,211,131,209,216,212,129, 26, 6,132, 70, 3, 64,149, 18,
+ 40, 35,197,135, 7,129,249, 48, 26,155, 58, 80, 70, 35,165,117, 13,186,169, 80, 70, 70, 6, 76,255,250, 5,186,119,254, 43,184,
+242,127,255,254, 61, 89, 17,198,195,194,204, 48,111,194,122, 6,118,126, 96,135, 24,232,173,211, 95,158, 50,188,126,113,135, 97,
+113,127, 37, 73,189,126, 80, 65, 36, 35, 5,153, 34,129,209,184, 43,127, 6,170,133, 31, 49,135,171,130, 42,117, 80,197,223,156,
+147, 13,230, 55, 35, 85,252, 75,110,221, 66,173,252, 73, 56,173,245,193,255,195,192, 18,243, 41, 67,132, 92, 12,195,207,127, 42,
+ 12,236,255,254, 51, 92,127,179,151,225,252,238,155, 12, 42,255,178,136, 14, 63,208,176,255,247,239,223, 25, 22, 44, 88,192,144,
+144,144, 0, 23,135,241, 65,114,160,145, 0, 74,207,160, 31,201,149,255,170, 85,171,128,121,196, 21,216, 65, 8, 37, 89,255,121,
+232, 52,209, 96,169,108, 64,149, 58, 40,191,221, 58,127, 12, 92,241,163,231,183,125, 91,215, 49,136,139,139,163, 76, 7, 16, 42,
+ 71,137,201,111,224,202, 23,249, 58, 71, 18, 42,127, 16, 0,137, 81,163, 17, 64, 13,176, 5,207,185, 35,163,135, 1,145, 15, 0,
+ 2,104,200, 45, 2, 68,175,252, 49,122,120,159, 62,131, 43,124,144, 26, 92,163, 2,248, 42, 47,116,176,112,229, 58,112,133, 15,
+ 82,131,171,149,141, 13,128,122,253,160, 74,159,143,143,143,225,222,189,123,224, 10, 31,212,251, 39,183,242, 7,245,250, 65,149,
+127, 96,110, 11,131,103,148, 21,195,150, 43, 79, 25, 94,124,103,160,184,242, 71, 7, 79,158,189, 0, 15, 71,138, 10,242, 65,155,
+136,204, 84, 9, 63,143,224,120, 72,191,134,133,149,164,202, 31, 4,106,167, 76, 5, 99, 88,229, 15, 26, 17, 40,117,131,246,249,
+ 69,217,136,171, 20,248,183, 49,184,133, 72, 49, 36,202,103, 49,176, 50,241, 48,112, 51,112, 49, 48, 49, 48, 51, 72,139, 91, 51,
+216, 4, 59, 51,220,147,234, 39,202, 28,208,208, 63,216, 95, 11, 23,194, 43,125,108, 52,178, 90,114,192,225,195,135, 7,117, 62,
+ 76, 75, 75, 3, 95,155,187,116,233, 82,154, 85,254, 66, 66,123,200, 50, 3, 84, 97,129, 48,232, 52,206,243, 72,107, 70, 6,178,
+242,111,173, 42, 4,143,118,206,153,220,131, 81,249,131,196,167, 76,153, 66, 84,126, 67,175,252,113,229, 55, 79,107,232, 29, 26,
+188,220,100, 85,254, 40,141, 0,180, 94,252, 40, 24, 62, 0, 32,128, 88, 8,245,254,123,107,146, 25,210,162,220,225,226,179,150,
+237,100, 40,110, 33,189,117,141,220,251,215,242,176, 96,104, 88, 3,185,222, 43,140, 71,140,228, 81, 0,108,149, 63,168,226,255,
+254,241, 45,152,141,220, 64, 0,137, 19, 2,216, 50, 19, 40, 35,157, 90,218, 1, 31,102,131,169, 1,137, 19, 3,148,149,149, 25,
+222,190,125, 11,198,160,198, 0, 19, 19, 19,184,103, 8,170,252, 65, 13, 3, 80, 67,128,148,139, 75,214,110, 88,207,176,237,220,
+119,134, 9, 5,110,224,198, 0, 23,183, 16,195,227,175, 79,193,149, 63,168, 97, 0,154, 2, 96, 38,210, 60,108,149, 63,168,226,
+255,248,236, 46,152,173, 33, 35,198,240,224,245, 7, 6,118, 46,118,134,159,223,127, 82, 28,126,149,179,183, 48, 44,105, 43, 98,
+208, 81,210, 98,184,126,255, 58, 65,243, 96,149, 63,122,143, 31,188, 14, 0, 8,238,165, 55, 50, 4,110,157,203,160,109,166,196,
+112,245,236,125,130,230, 93,100,219,194, 96,237, 32,206, 32,202,173,201,240,253,255,103, 6,230, 95, 95, 25,216,254,252,100,248,
+200,244,151,225, 7,227,127,134,127,108, 60, 12,210,182, 38, 12,107, 42,219, 24, 66, 12,170,240,154, 5,155,247,103,103,103,135,
+ 87, 54,200, 67,157, 48, 62, 72, 13,104, 20,128,220,181, 0, 75,150, 44, 99,176,181,181, 29,180, 5, 7,168,130,166,101,207, 31,
+ 84,249, 87, 85, 85,145,221,251, 7, 1,216, 85,183, 3,221,131, 5,229, 55,208, 90, 39, 80, 69,127,246,236, 89, 6, 37, 96,165,
+175,102,104, 5, 30, 17,128,173,135, 2,201, 83, 43,191,117, 37,248, 48, 76,222,113,130, 65, 66, 73,146,225,197,195,151, 3,234,
+119,228,245, 9,200,249,131, 92, 48,218,219,167, 46, 0, 8, 32,130,107, 0, 96,149, 63,175, 86, 24,195,231,107,171,192,252,226,
+150,185, 20, 89, 10,171,252,169, 1,144,135,247,177,141, 12,128, 26, 5,144,221, 0, 79,137, 50, 15,121,120, 31, 91, 75, 27,148,
+201,192,171,217, 95,227,207, 88,127,254,252, 1, 95, 0, 4,170,248, 5, 5, 5, 25,190,125,251, 6, 30,254, 7,119, 90, 69, 69,
+193, 13, 3, 82, 46,224,248,241, 30,232, 30, 78, 78,134,210,201,135, 25, 92,245, 25, 24, 30, 2,203,185,211, 80, 57,144,216,164,
+ 66, 71,134,191,255,254,146, 28,126,200,139,143,156,141, 53, 24, 88,120,153, 24,118, 30,184,198, 96,168, 33,203,192,199,195,206,
+112,240,204, 29,240, 34,193, 7, 88,118, 1, 16, 10,191, 77,215,128,254,123,206,192,224,231,204,200, 48,123,203, 61, 6, 97, 65,
+ 69,134, 32,107, 70,162,194, 15, 86,249,195, 42,125, 16,248,223, 0,236,165, 75,127,100, 96, 76,173,103,248,223,216,204,192,192,
+244,157,129,241, 84, 27,120, 55, 0,190,139,161,127,104, 60,100,144, 23,240, 98,248,244,247, 11,195,207,247,119, 24, 22, 63, 90,
+198,112,196,239, 61,131, 86,138, 35,131, 91, 46, 15, 3,167,160, 58, 3, 7,139, 32, 3,139,223, 71,134,211,235,136,187, 12, 9,
+ 20,175,200,241,135,206,167, 4,128,122,255,160,198,225,145, 35, 71, 24,108,108,108,168, 98, 30, 8, 80,179, 65, 17, 16,240,139,
+230,149,191,188,188, 60, 89, 21, 14,242,212, 11,108, 20,128,154,183, 74,146, 3,156,188,131,192, 35,129,160, 6, 0,168,210, 55,
+134,178, 65,192,216,216,152,193,195,222, 4,158,223, 64,139, 4, 31, 16,185, 42, 30, 57,191, 61,223,208,193,192,171,205,193,192,
+163, 90,192,176,170, 35,133, 65, 95, 71,130, 65,221,167, 5, 28, 38, 3,185,202,126,116,206,127,240, 2,128, 0, 98,193,215,251,
+135, 85,252,216, 0, 41,107, 1,176,205,253,163, 3,208, 72, 0,232,238,119, 82,230, 77, 97,189,123, 92, 83, 2,196,244,254,209,
+ 91,209,184, 42,126, 82,122,255, 32,240,230,205, 27, 6, 49, 49, 49,120, 79,241,247,239,223,240,133,127,252,252,252, 12,172,172,
+172, 12,143, 31, 63,102, 96, 37,210,188,249,123, 14, 50,164,248,216, 51,192,250,147,183,254, 64,134,255, 65,192, 65,141,129,129,
+175,101, 63, 67, 97,137, 21, 73,254, 5,245,250, 65, 64, 78, 76,136,225,253,207,159, 12, 44,124,204, 12, 63, 94,127, 3,213,102,
+ 12,146,242, 50, 12,187,246,157, 38, 43,252,226,139, 91, 25,238, 31,221,203,192, 2, 52,254,131, 56, 3, 3, 23,208, 60, 11, 5,
+ 69, 6, 39,123,226,182, 53,162,247,252,151,132,167, 48,172,253,121,147,129, 65,229, 7, 3,195, 73, 22,208, 66, 8, 6, 6, 95,
+ 99, 6, 25,223,120,226, 70, 99,164,133, 24,126,253,122,199,192,250,231, 55,184,242, 63,158,192,207, 96, 23,232,207,160, 33,166,
+201,112,101,215, 1, 6,195,208,175, 12,172,191,190, 50,252,209,248, 7,108,151, 16,183,104, 20, 86,217,195,214, 0,160,243, 41,
+ 1,160,222,255,204,153,211,129,249, 33,139,226, 6, 0,168,242, 95,186,116, 57,220,125,228, 54, 2, 64, 67,254,160,202, 25, 84,
+241, 71, 71, 71,131,241, 96,171,252,177, 13,247, 15,150, 81, 0, 16,240, 8,142, 97, 80, 82, 82,130,143, 4,192,122,254,226,146,
+146, 20,229,183, 52, 95, 59,134, 19,207, 94, 49,240,234,243, 50, 60,221,121,151,129,129,131,157, 33, 56, 55,142, 65, 72,198,103,
+ 64,253,139,107,234,128,146,184, 24,189, 12,136,186, 0, 32,128,136, 94, 3, 0, 27, 9, 0, 77, 1, 80, 11, 52,132,248, 49,112,
+242,242, 66,134,194,129, 24,212,139, 34, 5,128,122,247,248,214, 3, 32,122,255,196, 1, 80,239, 30,223,252, 26,188,247, 79, 4,
+248,244,233, 19,195,231,207,159, 25,126, 2, 43, 86,208,220,255,235,215,175,225,195,255,160,209,128, 47, 95,190,144, 52, 5,176,
+126,114, 13,195,129, 43,192, 70,205, 3, 96, 99,226, 59, 3,195,164,114, 71,248,240,255, 57, 96,185,119,225,249, 81, 6,102, 18,
+195, 31, 52,228, 47,196,207,205, 32, 44,196,205,160,174,166,201,112,239,254,107,134, 91, 79,223, 50,200, 9,243, 51,252,124,249,
+138,225,207,239, 63, 40,103, 1, 16, 19,126, 86, 14,254, 12, 54,142,145, 12,235, 55,175, 98,216,127,104, 21,195,178,190, 98,134,
+224,226, 54,134, 75,191,129, 13,150,183,175,136, 10, 63,228,185,254, 68, 43,115,134,104, 45,121,134, 85,235,247, 49, 92,186,244,
+128,161,239,242, 89,134, 21,174,113, 12, 12,115,143, 49, 60,125,250, 26,229, 44, 0,156, 67,176, 63,216, 25,254,254,122, 3,108,
+ 4,124, 4,243,197,165,101, 25, 52, 52, 53, 25, 62,113, 66,214, 98,124,255,247,141,129,233,231, 87, 6,206,175,204, 12, 47,159,
+227,111, 0,192,226, 12, 52,196,143,188, 11, 0,157, 79,105,239, 31,214,168,160,100, 45, 0, 72, 47,168, 49, 49, 99,198, 52,112,
+131, 2,212, 16, 32,215, 60, 90, 12,249, 83,179,242, 71,239,253,195,214, 40, 32,143, 2, 12, 52,128, 77,177,161, 3,228,252,134,
+124, 22, 0, 49,249,205,214, 84,157,193,197, 90,141,161,181,169,135,161,119,194, 54,134,186, 37,251, 24, 50,156, 76, 24, 94,108,
+220,198,240,241,253, 39,130,149, 45, 72, 62, 51, 33, 18,167,124, 38, 5,139, 0,233,209,232,218, 66,133, 75,201, 70, 50, 0, 8,
+ 32, 38,124,189,127,228,202, 31,180, 22, 0, 50,255, 63, 23, 99, 20,128,220,222,255,253,163,144, 85,230, 76,192, 74,145, 5,216,
+ 35, 14, 23,144,100, 40, 42, 34,238, 90, 80, 88,239, 30,223, 98, 64,178,122,175,120, 22,215,144, 2, 64,195,254,160, 74, 31, 52,
+ 2, 0,106, 8,128,134,253, 97,139, 2, 65, 21,197,135, 15, 31, 72,106, 0,164,181,174, 0, 87,250,252, 10, 12,224,134, 64, 94,
+231,126,112,229, 31,148,223,206,240,228,223, 11,134,165,125,101, 12,204, 76,196,155, 7,235,253, 27, 27,171, 49,136, 42, 41, 48,
+136,137,138, 48,176, 1,245,255, 97,252,207,240,250,235,119,134,247,159,127,144, 21,126,189, 29, 27, 24, 2, 52, 21,129,254, 20,
+102,224, 18,149, 98,248,253,238, 61,195,249, 45,203, 25, 62,188,123, 68, 86, 2,157,215,145,195,192, 80,232,194,192,242,231, 23,
+131,194, 87, 6,134, 87,204,159, 24, 38, 61, 7,246,148,216,248,136, 54,227,199,221, 79, 12,111,152,190, 51, 60, 98,251,198, 96,
+162,226,200,160, 21,199,195,112, 79,240, 0, 48, 78,206, 51,200, 90,220, 99,248,200, 4,108,168,253,255,206,240,109,201, 63, 6,
+ 14, 30, 94,162,122,254,180, 2,160, 10, 59, 58, 26, 82, 32,199,196, 68,129,249,228, 2, 80,133, 15, 50, 3, 6, 64,230,130,196,
+200,235,205, 9,226, 28,246, 39,119, 65, 32, 53, 43,127,244, 10, 30,185,193, 2,106, 20, 12,244, 8, 0, 40,191, 29, 63,126, 28,
+ 62,231, 15, 26,246, 7, 1, 16,127,229,166,109,100,231,183,141,235, 27, 24,220,203,115, 25,188,188,156, 25, 68,216,153, 25, 62,
+ 3,243,239,206, 91,143, 25,142, 95,121, 74,180, 89,184, 26, 1, 48,177,193,180, 8, 16,212,227,135,225,209, 70, 0,229, 0, 32,
+128,136,234,114,131, 42,127, 16,160,116,238, 31,163, 96, 6,246,240,126, 1, 43, 67, 38, 96, 69,198,204,202,194,192,202,198, 14,
+ 94, 56, 69, 74,239, 31, 91,197, 15, 90, 23, 64,110,239, 31, 91, 70, 3,205,179,145,210,251, 7, 1,208,112,191,132,132, 4,120,
+ 4,224,229,203,151, 12,207,158, 61, 3, 55, 10, 64, 21, 63,172, 87, 66, 74, 3, 0, 52,220, 95,211,178, 31, 60, 2,208, 93,108,
+203, 80,159,111, 5,110, 20, 44,237, 5, 86,252, 44,108, 12, 44, 64,179, 88, 72, 48, 15,212, 27,145, 20, 17, 96, 96, 5, 66,160,
+ 75, 24,158,223,191,202,240,240,213, 71, 6, 41,126, 94,134,239,223,126, 48,156,187,251,148,228,222,127,112, 82, 17, 3,171, 16,
+168, 65,199,192,176, 96,219,125,134,181,211, 74, 25,220,147, 11, 24,174, 92,191,200,144,237, 44, 79, 82,248,129,122,255,189,126,
+ 97, 12, 12, 31,128,233,129,145, 21,152, 8,123, 24, 66, 78, 31,102,232, 48, 11, 96, 56,118,226, 50, 3, 99,127, 25, 81,189,127,
+ 16,184,248, 66,132,129,241,251, 71,134, 47, 12, 95, 25,190, 1,211,151,114, 48, 31,131, 76, 16, 43,195, 71,119, 30,134,159, 50,
+106, 12,127,254,126, 99,248,253,230, 41,195,209,201, 31, 25, 84, 84,148, 7, 44, 51,130,230,252, 65,105, 2, 54, 76, 15,163,201,
+233,181,131,244,128, 26, 43,200, 67,254, 48, 54,200, 30, 82, 1,104, 79, 62,174,161,127,114, 70, 7,168, 89,249,163,247,254, 33,
+ 21,107, 40,198, 22,194,129, 28, 5, 0, 45,248, 67,158,243,207, 74, 10, 3, 15,255,131, 0, 72,124,251,177,115, 36,247,254,195,
+ 93,204, 25,248,255, 9, 50, 48, 1,243,240,218,254, 92,134,105, 91, 46, 48,132,153,106, 51,220,191,243,136, 33,164,109, 49, 73,
+141, 30, 88, 35, 0, 25, 35,235, 31,232, 70, 0,122,165, 15, 19, 27, 5,148, 1,128, 0, 98, 34,212,251, 7, 1,208, 58, 0, 66,
+107, 1, 72,233,253,131,230,251,195,249, 36,192, 67,254,172,236,192,202,139, 21,130,217, 56, 57, 24, 66,133,101, 24,218,218,218,
+ 72,238,253,163, 87,252,164, 84,254,216,122,255,232, 21, 63, 41,149, 23,164, 80,124, 15, 30,230, 7,205,245,195,122,255,160,169,
+ 0, 24, 77,106, 3, 0, 52,220,127,238,233, 65, 6, 30, 9,200,162, 63, 94, 96,163, 9,212, 40,224, 99,103, 5,246,174,159,128,
+123,255, 44, 68, 78,161,192,122,255,178, 66,188, 12,215,238,221,103,248,243,235, 23, 3, 59,176, 17,241,229,203, 15,134,139,247,
+159,129, 43,126, 82, 42,127, 88,248,249,231, 52, 51, 44,157, 52,145,225,219, 63,160,217,202, 50, 12, 87,174,158, 96, 40,242,213,
+ 39, 43,252, 64,160, 72,217,132, 97,243,237,125,192,200,253,195,192,192, 33,194,176,251,212, 53, 6,198,246, 92,112,197, 79,108,
+229, 15, 2,250,191,124, 24,142,238, 62,197,192,240,235, 51,195, 23,198,207, 12,239,153,190, 48,124,100,249,205,240,251,239, 39,
+ 6,246, 31,223, 24, 56,158,221,103, 88, 81,117,155, 65,193, 64,141,168, 5,128, 32, 0, 58,236, 7, 6, 64,141, 86,228,134, 43,
+178, 28, 41, 21,246,226,197, 75,193,195,245,200, 32, 54, 54, 26, 60, 10, 64, 74, 35, 0, 54,239,143,220,251, 71, 30, 5, 0,217,
+ 67,201,212, 2,172,199, 15,170,196, 65, 0, 52, 50, 64,202,162, 64,106, 87,254,160,138,157,208,200, 12,168,113, 48, 80,231, 50,
+128,242, 27,242,106,255,154,218, 66,112,126, 3,237,253,135, 53, 2,144, 79, 71, 37, 54,191,165, 56,232, 49, 20,244, 76,100,248,
+252,242, 21,131, 40,159, 24,195,213,107,143, 24, 18,250,150,193,183, 65,146,211,136, 66,198, 48,177,193,210, 8, 24, 5,212, 7,
+ 0, 1,196, 66,140, 34,208,234,127, 88, 67,128, 26, 96,213,151, 87,144,194, 72, 68, 22,226, 8, 96,239,159,133,141,141,225, 59,
+176,194, 20, 4,102, 10, 46,102, 46,162,123,255,232,219,255, 88,255,255,102, 96,248,243, 13,209, 19,103,225, 34,169,247,143,190,
+253, 15,108,199, 43,196, 10, 90, 98, 78,217, 67,110, 4,128, 0,104, 36, 0, 4,222,189,123, 7,158, 2,128, 13,255,147,210, 0,
+128, 53, 2, 24, 24,218, 25, 50, 67,237, 25, 24, 38, 29,102,152, 86,237,205, 16, 82, 60,145, 97, 89, 71, 54,184,247,207,198, 78,
+220,232, 9,172,247,127,237,209, 43, 6, 21, 89, 17,134,189,123, 78, 64,252, 38, 5,233,253,254,254,137, 24,142,100, 37,194, 76,
+ 88,239,191, 37,201,153, 33,175,126, 1,131,172, 18, 35, 69,225, 7,235,253,187,173,159,199,176, 11, 88, 97, 49,202, 88,128,197,
+ 65,231, 3,128, 0,232,136, 96, 24,240,229,225, 33,202,207,122, 63,203, 24, 46,110,223,194,240, 67,253, 24,131,130,170, 14,195,
+ 39, 96, 29,125,159,225, 33,195,231, 7,175, 25, 94,183,253,101,248,242, 94,134,161, 48,174,152,232,184,152, 62,125, 58,184,162,
+ 7,109,237, 68,174, 88, 64, 98, 32, 57, 82, 43,127, 80,133, 13,154,167, 71, 7,160, 69,128,160,202, 13, 36, 15, 74, 47,132, 22,
+ 5,130, 22, 14,130,212,131, 42,127,108, 11,254, 96, 98, 32,243, 64, 24,189,193, 65, 92,186,134,244,248, 95, 66, 79, 97, 36,117,
+ 65, 32,104, 52,129, 90,149, 63,172,114, 39,182,130,162,244,132, 65,114, 0, 40,191,181, 54,212, 48,172,219,188,157,193,221,198,
+ 8, 37,191,129, 48,104, 71, 0,104,129,224,163,183,223, 24,228,132,137, 43,175, 64,189,255,130, 89,155, 25,170,146,221, 24,164,
+ 36, 28,224,141, 11,152, 31,145,195,154, 82,128,188,149,111,160, 22, 84,194,134,249, 71,123,253,212, 5, 0, 1, 68, 84, 3,128,
+ 26, 21, 63, 7, 15, 55,184,151, 15, 2, 73,178,234, 12,172, 28,236, 12, 60,130,144,227, 46,191,127,254,204,240,251, 23,164, 7,
+ 1, 26, 5,224, 4,246,206,136, 1,176, 45,128,160,222,254,191,191,191, 33,149, 63, 20,252,102,100, 37,120,196, 46, 58,128,109,
+169, 1,245, 86,145, 43, 45,114, 42,127,228, 70, 0,242,193, 63,160, 70, 0,201, 17,128,214, 8, 88,140,116,102,205,236, 54,164,
+ 19,236,126,127, 97, 80, 36,210, 28, 80,239,255,212,155, 15, 12, 23,110, 67,134,250,145, 43,125, 82, 42,127, 24, 0,245,254,215,
+ 26,113, 51,228, 4,106, 80, 37,252, 64,189,255,226, 77,171, 24, 24, 91,235, 25,182,139,155, 51, 76,248,114, 5, 69,222,144,133,
+149, 65,134,131,157,164,176, 3,141, 4,108,223,244,131,225,201,251,187, 12,175,223, 62,103,120,121,139,135,129,249, 47, 31,131,
+181,158, 45,131, 99,156,227,128,100, 64,228, 10, 27, 23,128, 85,218,160,158, 59, 8, 99,107, 40, 32, 42, 67,194, 21, 58,200, 60,
+ 74,182, 4, 82, 99, 11, 32,104, 77, 1, 53, 42,127,244, 94,234, 96, 5,160,252,102,105,105,137, 53,191,129, 42,127, 16, 32,166,
+242,135, 1, 80,239,223,117,207, 73,134,232,250, 69, 12,118,118,118,224,209, 4,108, 13, 45,106, 1, 88, 35,128,212,179, 95,112,
+137, 83, 35,206, 70,231,254, 41, 7, 0, 1,132, 82,255,192, 14,171, 32, 21,128,244,125,199, 33, 14, 55,239,235,107,132,165, 44,
+ 44,224,161,113,208, 2, 57, 16, 6,245,154, 96,244,205,255,223, 25,188,188,188, 24, 46, 60, 96, 32, 56, 10, 0,170,248,153, 65,
+189,125, 32,102, 70,171,248, 73, 61,226, 16, 54,212, 15,170,184,208, 43, 47, 82, 43,126,126, 81, 41,134, 95,191,126, 82, 45,146,
+162,155, 23, 51,220,190,113,149,170, 17,127,234,214, 99,120, 65,132, 94,249,147, 82,241,195, 64, 28,176,242,167, 86,248,129, 0,
+104,142, 31, 86,241, 35, 87,254,228, 84,252,200,192, 83, 49,132, 1,222, 74, 34, 99, 97, 59,168,183, 9, 59,237, 15,212,211, 71,
+ 62,249, 15,196,134,245,254, 65,108, 98,134,156,137,237,129, 83, 90,105, 83, 19, 80, 99, 11, 32,189,123,225, 3, 13,240,229, 55,
+ 82, 42,126, 24,112,173,153, 77,151,138,159,146,134, 22, 45, 26,102,216, 42,253,209, 81, 1,242, 1, 64, 0,177,160, 39, 28,114,
+ 19, 15,182,131, 38, 40, 49,239,194, 3,236, 7, 87,192,230,246, 97, 21, 63, 3,133, 21, 63,108,110,154, 90, 21, 23, 8,252,249,
+251,143,228,209, 7,124,224,213,187,143,100,187, 5, 29,192,230,246,169, 85,241, 83, 59,252, 96,115,251,160, 97,126,106, 86,252,
+163, 96, 20, 12, 4,128, 45,236, 3, 13,239, 83,163,226,135, 85,170,200,195,252, 35,161, 81, 5,170,228, 71, 43,127,234, 3,128,
+ 0, 98, 4, 6,224,255,209, 96, 24, 5,163, 96, 20,140,130, 81, 48, 82,192,230,197, 77,140,163,161,192,192, 0, 16, 64, 76,163,
+ 65, 48, 10, 70,193, 40, 24, 5,163, 96, 20,140, 60, 0, 16, 64,163, 13,128, 81, 48, 10, 70,193, 40, 24, 5,163, 96, 4, 2,128,
+ 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,
+129, 0, 32,128, 80,118, 1,248,218,146,191,210, 28,219, 46,128, 81,243, 6,151,121, 63, 94, 60, 38,219, 60, 14, 9, 89,186,249,
+151,249,255,127, 6,150,127, 12, 12, 63,153,241,175,211, 97,253,203,192,240, 7,216,132,253,207, 56, 26,191,163,230,141,154, 55,
+220,204, 27, 5,180, 7, 0, 1, 52,236, 70, 0, 40, 61,174, 18,116,103, 55,104,139, 13, 12,131,248,163,128,126,128,253,239,127,
+134,191,140,140, 40,149,255,163, 71,143,192, 23,169,156, 59,119, 14,204,134,129,223,204,144,202,159, 92, 64,235,139,125, 70,193,
+ 40, 32, 5,220,188,121,147, 34,189,160,235,212,169,233, 22,106,154, 55, 10, 6, 39, 0, 8, 32,150,225,228, 25, 74, 43,107,144,
+254,142,142, 14,134,176,176, 48, 12, 51, 65,247,120,147,107, 38, 8,131, 14, 68, 2, 29,140, 4, 50,135, 20,179, 64,231,174,147,
+ 2, 64,110,199,183, 31,120,247,238,249, 36,155,247,254, 61, 55,221,226, 16,185,226,127,245,234, 21,248, 50, 37,208, 17,184,160,
+179,246, 65,183, 40,130, 26, 0,167, 79,159,102,208,215,215,103, 80, 81, 81,161,200, 46, 82,143, 98,134, 52, 48, 51, 73,214,131,
+239,228, 62,234,155,151, 78, 64,239, 76, 12, 53,196, 30,216, 2, 74,199,109, 34,193, 12,255,183,222,101, 96, 57,128,121,123,220,
+223,174, 83, 12,255,183,221,101,136, 20, 93, 7,108,201,105,144,228, 39,119,119,200,117,227, 59,119, 82,231,186,113,216, 85,192,
+160, 19, 7,169,189, 63, 30, 84, 57,246,247,247,147,116,183, 64,106,106, 26, 3,168,189,137, 43,201,149,148, 20,147,108, 38,114,
+ 58,158, 48, 97, 2,131,189,189, 61,184,210, 94,182,108, 25,248, 58,114, 82,220,134, 81, 49,176, 48, 51, 68, 88,177, 49,164,103,
+164, 51,116,237,232,102, 40,113, 45,129,203,205,158, 61,107,180,230, 28, 38, 0, 32,128,240, 54, 0,112,157,155, 61, 16,231,105,
+211,163, 1,128, 92,249,131,252, 7, 59,108, 3,100, 46, 57, 13, 0, 88,131, 2, 86,209,192, 78, 69, 44, 47, 47, 39,205,188,213,
+ 66, 36,216, 74, 56, 94,190,250,102, 17,111, 28,137,247,218,224,170,128, 72, 61, 21,236,227,199,143, 12, 98, 98, 98,240,158, 58,
+232,148, 72, 80,131, 0,116,143, 2, 63, 63, 63,195,169, 83,167,192,114,164, 54, 2, 64,113, 10,139, 7, 80,188, 4, 7, 7,131,
+227,154,148,198,192,166, 77, 27,224,108, 63,191, 0,130,124, 66,224,251,177, 28, 68,112, 91, 77, 65,225,163,139,129,216,132,192,
+142, 29, 59, 48,196, 14, 29, 58, 4,191,100, 11, 57, 46,150, 44, 89, 66,116, 90,238,236,236,100,104,117, 48, 0,215, 98,160,198,
+ 44,122, 25,240,127,249, 93,220, 53, 28, 9,241, 51,152, 15,180,129, 85,254,160, 48,132,220,209,176, 20,124,187,162, 87, 84, 53,
+ 65,189,199, 78, 97, 23, 95,191, 26, 82,249,131, 46, 9,155, 53,107, 22,216, 76, 62, 57,123,188, 21, 62,242,232,213,141, 27, 55,
+192, 98,145,145,144, 70, 89, 84, 84, 20,201, 13,137,158,221, 61,112,246,139,157,207,193,230, 45,203, 7, 29, 84,196,200, 80,238,
+ 81, 6, 76, 84, 16,185,229, 11,151, 49,100,216, 15,158,145,129,209, 59, 2, 40, 3, 0, 1,196,132,175, 32, 7, 21,148,160, 4,
+137,173, 0, 37,103,168,157,218,195,233,232,230,193,122,217,228, 2,144, 95,145, 79, 47, 4,209,228,246,252, 97, 13, 10, 70,104,
+ 97, 9, 42, 48, 96,110, 35, 39, 28, 24,195,222,195, 49, 49,226,132, 0,207,150,233,112, 76,140, 56, 41,149, 63,168,112,130, 21,
+ 80,228, 12,179,131,238, 78, 0, 85,242,160,219, 34,147,146,146,192, 71,207,178,177,177,129, 27, 1,160,145, 0, 80,152,130,110,
+ 85, 4, 93,163, 10,106, 40, 16, 3,174, 93,187, 6,118,223,154, 53,107,224,113, 2,114,219,218,181,107,193,189, 38,144,252, 96,
+ 4,216, 26, 4, 3,209,176, 6, 85,254,160, 52, 28, 37,182,158, 33, 82,100, 45,214,184,175, 54,191,192,192,178, 63,130,100,243,
+ 65,225, 95, 90, 90,202,160,168,168, 72, 21,247,130,204, 3,245,252,133,133,247,210,172,231,143, 92,249, 83, 2,144, 43,255,226,
+226, 98,162,204, 68,207, 83,160,222, 63,232, 88, 96, 16, 0, 53, 2, 64, 35, 1,164,148,207,216,204, 11,183,132,244, 13,151,229,
+115,130, 71, 2,202,220, 75, 7, 93,222, 24,189, 11,128,114, 0, 16,128,189, 51,182, 97, 16, 6,162,104,148, 38, 67,165,241, 16,
+ 20,102,137,244, 94,194, 18,236,144, 1,216,195,115,120, 4,215,201,187,232,196, 9,129,136,129, 34,138,184,142,194,150, 37,227,
+255,238, 14,228,127, 93,110,161,141, 94,213, 90, 9,219,234,169, 22,180, 42, 34, 71,139,210, 52, 25,216, 3,236, 37,136,239, 13,
+155, 80, 80,253,111,241, 91,248,245,176,240,159, 19,152, 26, 65, 42,165, 8,252,189,247, 2,248,156,179,120, 71,224, 33,161, 62,
+ 18,234,196,199,231,128,111, 4,174,235, 58, 1,127,211, 52, 34,224,236, 5, 64,227,153,232,251,254, 84,131, 21,248, 19, 64,122,
+122,197, 55,123,107,187, 90, 91, 42,120,198,176, 47,156,141,163,254,205, 8, 33,200,124,115,215,230,110,129,127,140, 81,222, 33,
+ 18, 12, 64,173,150,202,181,238,143, 22,254, 58, 39,239,123, 74,169,218,166,153,117, 49,158,179,162, 65, 18,224,156,147,117, 14,
+195,176, 94, 92,152,174, 13,213,255,187,232,191, 60, 31,227, 53,197,116, 2,218,251,237,211, 9, 56,225,255, 87,241, 18, 64, 44,
+248, 50, 36, 40,243,131, 26, 0,160, 76, 4, 99,131,128,177,177, 49, 73,153,156,214,149, 63, 45, 27, 0,212, 6,160, 6, 5, 53,
+195, 98, 48, 1,106, 20,220,119,238,220, 1, 23,134,160, 30, 62,136, 13, 50, 19, 84,200,253,250,245, 11, 92, 80,129, 26, 0, 32,
+250,239,223,191,224,134,194,250,245,235, 9,166,197,189,123, 33, 61, 65, 80,101,143,174, 22,198,135, 85, 20,196,164,107,244, 97,
+125, 66,124, 98,122,249, 48,128,107, 58,128,152,161,127,116, 0, 26,246,135,245, 12,201, 5,160, 57,127,208,176, 63, 75, 58,182,
+ 57,255,147, 12,255,183,221, 99,184, 71,234,148, 22, 90,111, 29,214, 8,131, 85, 70,160,248, 34,119, 26, 0,102,158,170,170, 42,
+ 70,229, 70, 46,200,204,132,172,211,128, 53,130, 64,124, 80, 69, 13, 50,155,220,202,223,222, 26,114,125, 25,168,231, 95, 82, 82,
+ 2,238,117,195,204,244,245, 75,101,248, 75,164, 57,200,189,127,100, 0,155, 14,216,182,109, 27,131,134, 6,104, 61, 6, 55,209,
+230,133, 91, 98,222, 99, 2,153, 14, 96, 96, 88,190,236, 60,195, 77,137,155, 68,155, 71,203,202, 63,173,188,131, 97, 86,103,197,
+104, 45, 78, 1, 0, 8, 32,188,107, 0, 64, 11,208, 96,189,126, 88,229,143,109,238,143,148,202, 26, 95, 79,144,152,121, 98, 66,
+230,161,203, 15,212, 85,161,160,112, 67,190, 67, 27,221,189,212,154,235,252,191, 74,144,170,238,254,226, 67,218,162, 52,100,191,
+ 97, 43,108,145,197, 96,106,241,197, 9,232,186,100, 94, 94, 94, 48,125,236,216, 49,112, 67, 0, 84,249,131,122,251,160,194, 18,
+ 54,255,249,251,247,111,240, 2, 65, 98, 26, 29,176, 17, 23, 92,225, 13, 18, 7, 77, 13,128,212, 17, 19, 39,180, 90, 3, 0,170,
+228,209, 43,122, 24,159,156,134, 0,168, 98,160,180, 17, 0, 90,240, 7,234, 18,194,242, 61,242,122,152,255, 43,238,131,229,200,
+ 93, 35,131,222, 8, 3, 1,208, 40, 0, 40,157, 80,107, 29, 0,104, 20, 0,182,246,129, 92, 51, 65,105, 12,121, 78,221,198,198,
+ 6, 92, 89, 83,210,243, 7,153,249,231,207, 31, 12, 51, 15, 30,253,203,208,211, 73,220, 28, 59,172,247, 15,171,236,113, 1,208,
+ 20,131,119,116, 13, 65,243, 80,231,254,177,140, 20,144,104, 30,173, 43,255, 81, 64, 57, 0, 8, 32, 22, 98, 50, 39,172,247, 63,
+ 24,123,254,200, 0, 84, 72, 13,150,109,123,232,195,252,232,171,175,137,173,108, 8, 14,223, 33,205,253, 83,163, 49,128, 60,247,
+ 79,108, 99, 96,211,166, 77, 88,197, 23, 47, 94,204, 16, 27, 27,139,214, 59,246, 3,135, 3,174, 69, 59,160,202, 30, 84,249,131,
+ 86,252,131,214, 1,128,174,137, 6, 21,148,160, 2, 19,212,235, 7,201,131, 42,127, 16,155,148, 17, 7, 66, 83, 86,160, 94,227,
+ 96,152,154, 33,180, 32,144, 84, 0,107, 4,144, 93, 64, 28,136,196, 25,118,160,181, 0,148,172,187, 65,239,253, 35, 55, 26,201,
+105, 32,163,247,254,241, 53, 76,137, 5,160, 21,245, 48,179, 65,141, 0,106,204,251,195, 58, 83,160,209,172,194,194, 66,240,208,
+ 63,194, 76,226,211, 52,104, 90, 11,219, 21,209, 43, 86,172, 96, 56,120,240, 32, 56,127,192, 26,219,196,236,179,159, 48,113, 2,
+ 67,132, 5,102,239, 63,122,210, 55,134, 21,199,126,131,205, 51,140, 50, 4, 47, 2, 28,221,183, 63, 60, 0, 64, 0, 17, 60, 7,
+ 0,148, 17, 97, 9, 22,121, 61, 0, 49, 0,212, 43, 0,205, 13, 82, 11, 16, 50, 15, 36, 79,110, 33,142,188,247, 31, 25,195,118,
+ 5, 80, 58,143, 72,234,118,190,161, 6, 64, 21, 59, 8, 35, 3, 88,229,143, 44,135,171,177, 0, 3,160,222, 63,168,114, 7, 45,
+ 4,124,243,230, 13,152, 6, 13,245,131,240,151, 47, 95,192,219,155, 64,235, 2, 64, 35, 2,160, 17, 0,144, 90,130,141, 36, 96,
+ 5, 0,234,225,147,210, 96, 27,202, 0, 84,225, 35, 99,100, 0, 10, 83,100, 64,204,156, 51,174,107,189,145,215,182, 80,163,247,
+143, 60, 10, 0,138, 47,106,174, 5, 0,153, 71,106, 30, 6, 85,246,160,138, 20,182,232, 15,212, 8,128,133, 39, 57,219,245, 64,
+160,186,220, 30,108,230,191,149, 2, 96, 51, 65,189,105,152,153,135,142,253, 67,234,103, 19,238,253,131, 27, 97, 72,189,255,229,
+203,151,130,167, 39, 64,230, 23, 20, 20,144,228, 70,112,239, 31, 8,151, 34,245,254,163, 38,126, 99, 96,142,248,200,176,252,216,
+ 47,176,121,157, 59,186, 6, 52, 93,143,246,254,169, 15, 0, 2, 8,239, 8, 0,104, 85, 60,242,188, 63,242,122, 0, 98, 43, 52,
+ 88,165, 13,235,185, 83, 58, 36,143,205, 60,216,200, 0, 72,142, 90, 67,254,200,219, 0, 7, 27,128,245,250,169, 53,252, 15,235,
+245,147, 58,252,143, 92,249, 35,179,145, 43,121,124,114,216,128,176,176, 48,195,219,183,111,193, 61,253,215,175, 95,131, 71, 0,
+ 64, 61, 37,216, 8,192,215,175, 95,193,141, 1, 80,229, 15,106, 8, 16,211,251,132,245,238,241,109,107,133,169, 35,206,191,180,
+ 91, 3, 64,142, 60, 58,128, 13,121, 99,173,128,170,171, 25, 90, 91, 91, 25, 68, 68, 68, 6, 52, 13,227,234,253, 35, 3, 82,214,
+ 2,224,234,253, 83,210,243, 7,237, 62,137,137,137, 1,167, 61, 80,152, 86, 85, 85,129, 71, 84, 64,226,228,128,154, 10,123,134,
+ 3, 7, 14, 48, 48,174, 17, 6,243,119,213,240, 50,184,181,124, 6,155,217,218, 9,233,177, 19, 59, 90, 1,219,247, 15,233,241,
+ 47, 3, 86,250,135, 25,254, 51,254,103, 40, 44, 40,100, 80, 87, 87, 39,217,109, 32,243, 34,172, 88, 81,123,252, 12, 16,243,196,
+221, 36,168,178,150, 98,180,242, 31,124, 0, 32,128, 88,136,233,249,131, 42,127,244,245, 0,164, 12,209,161, 87,218,212, 26, 9,
+128,153, 71,139, 97,127,152,127,169, 86,105, 51, 14,207,235,167, 97, 83, 27,176,138, 24,148, 62,208, 71, 2,240,201,161, 3, 25,
+ 25, 25,240,226, 63, 80,101, 15,234,237,131,134,251, 97,243,254,160,105, 1,216, 22, 67,216,194, 64, 98,230,158, 65,233, 20,100,
+ 55,108, 20, 0, 57,221,130,226, 24,155, 56, 62, 64,239, 53, 0,232,211, 2,132,226, 3, 31, 0,111,215, 3, 54, 2,194,195,195,
+ 25, 86,174, 92, 73, 86,156,163,231, 55, 24, 31,180, 96, 48,217, 97, 57, 67,228, 30,252, 7, 1,129, 14,253,185,127,255, 62,214,
+243, 10, 96, 0, 36, 15, 2,196, 28, 12, 4, 58,244, 39, 52,212,153,193,213,245, 30,206,245, 8,111,223, 58, 3,201,247, 64,255,
+ 19, 46,183, 64, 97, 4, 11, 71,216, 40,196,174, 93,187, 32,149, 35,153,149, 63, 19, 19, 35,164,193, 14,171,252, 47,253, 97,152,
+191,255, 23,152, 13,170,252, 73, 45, 35, 96,121, 2,212,227, 7,209,133, 69,192,138, 95, 77,157, 44,183,149,150,149, 64,205, 99,
+ 0,247,248, 97,230, 73,184, 73, 66,102, 36, 6, 81,209,133,107,209, 31,168,129, 48,122, 22, 0,233, 0, 32,128,112, 54, 0,144,
+183,251,161, 15,245,129,228, 72,157,195,166,229,116, 0,165,251,255, 71, 1,229, 0,121, 8, 29,185, 18,130,157, 39,129, 46,135,
+111, 14, 17,212,179, 1,173, 94, 6,205,253,131, 14,254,129,173, 1, 0, 1,208,168, 0, 72, 12,196,135,157,172, 72, 12,200,207,
+207, 7,207,153,194, 26, 2,232,115,254, 32,249,129,110,164,129, 42,122, 82, 43,124,124,149, 23,174, 6, 2,168,183, 76, 78,229,
+143,171,114, 69, 44, 10, 36,173, 33,142,239,168,217, 7, 15, 30,192, 27,104,196,150, 51,200, 83,149,152,254,118, 33, 57,252, 64,
+ 35, 81,160,138, 31,125, 62,157, 84, 0, 50,243,223, 74, 65,112,165, 15, 2, 11,128, 21,255,138, 99,191,192,102, 30, 62, 78,254,
+ 52, 7,104,234, 0, 52, 52, 79, 78,143, 31, 25,192,242,214,202,227,191,193,230, 73,184, 75, 34,181, 52, 70,203,182,225, 12, 0,
+ 2,136, 5, 95, 65, 1, 59, 24, 7,189, 55, 69,202, 20, 0,182,130,130,154,141, 0, 90,153,141,124, 28, 48, 57, 0, 84, 57,225,
+155, 87, 38,181,193,130,107,184,159,220,105, 0, 92,195,253,228, 76, 3, 32, 47,112, 68, 47, 36,241,201,225,235,221,120,123,123,
+131,231, 96, 65, 7, 0,129,134,251, 65,141, 0,208, 46, 0, 1, 1, 1,240,186, 0, 82,119,163,104,105,105,129,237,223,189,123,
+ 55,124,197, 63,236, 92,128,193,124,242, 28,181,193,190,125,251,192, 97,187,101,203, 22,170, 84,254,200,149, 28,104, 59, 32, 49,
+163,113,160, 67,127,208, 59, 23,232,160,172,172,140,232, 53, 0,160, 67,127, 8,153, 7,234,249,147, 90,105,147, 50,178, 66, 12,
+112,111,249,140,194,167,164,242,159, 54,109, 26,213,210, 68, 79,119, 47,164,183, 63,136, 1,174,222,253,232, 73,128,148, 1,128,
+ 0, 34,184, 13,144, 20,241,129, 4,131,109,255, 63,174,133, 83,228, 53, 68,168, 87, 65,129,205,227,164,158, 63, 97,211, 36,176,
+ 6, 13,182,105, 19,116, 57, 98,195, 5, 52,220,122,247,238, 93,134,253,251,247,131, 23,253,129,166, 5, 12, 12, 12,192,126, 32,
+ 55,190, 93, 93, 93,193, 24,214,243, 33,167,215, 79,235, 53, 0,132,248,196, 84, 94,216, 86,135,147,122,200, 12, 8,128,207,247,
+ 95, 14, 58,223, 31,179, 1,144,242,201,144, 33,217,113, 5, 3, 75,122, 4,252, 32, 32,152, 26,124, 35, 60,196,196,191,179,179,
+ 51, 73,121,141, 26,106,144,195, 15,148, 46, 2, 3, 3,225,119, 20, 80, 10,152,194,223,131,205,244,243, 79,131, 55,114, 97,219,
+253,208,143,246,165, 55, 48,142, 49, 26,173, 9, 71, 40, 0, 8,160, 97,113, 25, 16, 53, 90,231,131,181, 23, 72,109,119, 81,251,
+ 98, 31, 90,135,155,178,178, 50, 24, 99, 3,160, 53, 0,160,115, 2, 64,152,126,105,109,250, 32, 55, 15,119, 94, 0, 45,104, 35,
+ 21,128, 46,247, 1,157,239, 15,155,246, 67, 6,160,202, 31, 52, 71, 76,202, 84,204, 72, 40, 75,176,155, 73,218,100, 58, 61,183,
+217, 13,166,179,253, 71, 1,125, 1, 64, 0, 49,250,196,212,142,222,137, 58, 10, 70,193, 40, 24, 5,163, 96,196,128,205,139,155,
+ 70, 87, 55, 0, 1, 64, 0, 49,141, 6,193, 40, 24, 5,163, 96, 20,140,130, 81, 48,242, 0, 64, 0,141, 54, 0, 70,193, 40, 24,
+ 5,163, 96, 20,140,130, 17, 8, 0, 2,136,101, 52, 8, 70,193, 40, 24, 5,163,128, 62,128, 17, 23,231, 63, 10, 53, 10, 70, 1,
+ 93, 0, 64, 0,141, 54, 0, 70,193, 40, 24, 5,163,128, 94,149, 63, 35, 3,248,200, 93,220,235, 1,255,195,208, 40, 24, 5, 52,
+ 7, 0, 1,132,210, 0,240,181,149, 33,219, 32,108,171, 86, 71,205, 27, 53,111,212, 60,250,153, 23,231,167,139,194, 7, 93,171,
+ 12,219,230,136,188,213, 12,118,154, 34,242,214,179, 69,155, 46, 99,152,247,225,193,126, 6, 14, 14, 14,184,126,216, 53,205,232,
+230,193, 46,102, 2,157,211, 0, 2,160,211, 27,121,101,237, 70,227,151, 36,243, 24, 25,152, 89,216, 25,254,255, 3,157,119,241,
+135, 97,203,145, 39, 12,232, 59, 3, 9,153, 7,138,131,151, 47, 95, 50, 72, 72, 72, 80,197,125,212, 54,143,212,240, 27, 5,180,
+ 7, 0, 1, 52,226, 71, 0,170,171, 79,161,240, 91, 91,205, 6,151,121,167,170, 33,230,152,181,162,176, 41, 5,132, 78,140, 35,
+ 36, 79,169,249,163, 0, 19, 48,253,250,202,192,242,246, 62,131,234,143, 75, 12,210,127, 30, 51,220,250,175,200,240,132, 87,139,
+225, 27,159, 60, 3, 27, 55, 47, 65,253,160, 27,229, 64,215,202,194, 42,126, 88,133, 13, 98,163, 87,216,160,202, 26,134, 31, 62,
+124,136,213,188,115,231,206,129,143, 1,231,228,228, 4,223,199, 0, 50, 11,217, 76, 88,165, 15, 50, 15,134, 65,135, 54,129, 78,
+226,115,144,181, 27,182,241, 4,242, 55,232,148,192,227,199,143,131, 15,166,194,118,230, 2, 73, 35, 3,140, 76, 12,236, 28, 66,
+ 12, 2,130,234, 12, 95,191, 60,101,248,242,249, 49,116,148,128,248,209, 0, 80, 60,128, 14,184,186,117,235, 22,152, 15,138,179,
+226,226, 98,178,221, 4, 51,239,222,221, 59,224,248,102, 99,103,103, 40, 40, 40, 28,208,243, 10, 70, 1,245, 1, 64, 0, 13,217,
+ 6, 0,161,219,221, 64,128,152,203, 93, 96, 21, 52,122,197, 77, 46,160,182,121,163, 0,179, 97,129, 12,134, 69, 35, 3, 88,168,
+126,126,120,157,225,227,161, 85, 12,223,190,253,100, 80, 48,103, 98,224,148, 97,100, 80,125,116,137,193,148,225, 34,195,251,159,
+ 60, 12, 23,184,226, 24,222, 48, 74,227, 53,230,218,181,107,224,194, 26, 84, 33,129, 42,108, 24,134, 53, 8, 96,189,126,208,169,
+138,160,202, 26,212, 83, 7, 85,254,160,211, 1,153,133, 77, 48,204, 3, 93,186,116,254,252,121, 6, 11, 11, 11,240,137,140,172,
+172,172, 40,102,130, 42, 9,144, 89, 32, 12, 50, 11,116, 88, 19, 72, 61,232,214,198,225, 6, 64, 23, 1,161,151, 45,159, 63,127,
+ 6, 31, 76, 69, 13,243, 22, 47, 59, 11,172,180,197,128,241,199, 6,105, 0, 48, 50, 64, 70, 0, 64, 3, 56, 68,212,185,207,158,
+ 61, 3,135,123, 84, 84, 20,248, 76, 6,216, 49,198, 66, 66, 66, 12, 38, 38, 38,120,245, 38,184, 99, 30,186,116,249,198, 13,134,
+ 3,188, 92, 12, 69,253, 77, 12,134, 70, 58, 12,207,159,188, 98,216,181,237, 0,131,130,142, 33,195,167, 79, 31, 71, 11,162, 97,
+ 2, 0, 2,136, 5, 95, 33, 11, 43, 92, 9,241, 7,162,242,207,202,202,194,171, 6,116, 92,236,242,229,203,137,106, 4,192, 42,
+107, 74,123,235,180, 48, 15,185,231, 79,141,222, 63,114, 5,138, 94,153, 18, 74, 7,244,174,232, 97,199, 8, 35, 31, 39, 12, 2,
+239,222, 65, 14, 31, 18, 18,218, 51, 44, 50,225,175,199,215, 24,216,143, 45,102,248,249,237, 31, 67,144, 10, 51,131,186,232, 31,
+134,127, 66,255, 25, 88,133,152, 25, 62,191,101, 99,224,252,252,157, 65,243,226, 20,134,179,106, 25, 12,223,184,228,241,244, 36,
+ 25, 25,174, 95,191, 14,174,172,157,156,156,224,149, 54, 8,131, 42,108, 80,229, 15,170,168, 65, 21, 54,168,167,254,248,241, 99,
+240, 41,139,160,198, 0,182,163,148, 64,122, 64,234, 47, 94,188, 8,110, 84,128,122,149,160,219, 25, 97,230,193, 26, 0, 32,179,
+ 64,149,207,229,203,151,193, 23, 54,145,114, 48, 19,232,204,127,144, 59, 64,149, 41,200,189,226,226,226,224, 27,253, 96, 83, 15,
+164, 2,106,155, 7,242, 99, 77, 77, 13,202, 13,139,160,202, 27,212,216, 18, 19, 19, 3,223, 94, 73, 78,229, 63, 47, 41,137,193,
+203,208, 16,204,151,200,205,101,224,228, 18,103,248,242,233, 17,195,167,143,119,129,241,244, 23,114,121,208, 63, 6,162,123,220,
+160,138, 30,116,195,227,162, 69,139, 24,226,227,227,193,183,110,130,196, 64,247, 5,128, 14,204, 98, 96,144,195,171,255,109,123,
+ 17, 10,159,231,215,111, 6,169, 63, 63, 24, 10, 74,235, 25,250,123, 26, 25,186,123,166, 49, 72, 51,253,101,152,214,211,199,224,
+ 20, 17, 69,208, 60, 90, 1,216,209,191,200, 96,244, 24, 96,242, 1, 64, 0,225, 29, 1, 64, 63,255,155, 16,159,158, 96,176, 94,
+213, 75, 43,128,220, 8,160, 4, 32, 55,226,230, 7, 46,194,169, 46,113,125,220,128,246,174, 97,118,163,211,132, 26, 45, 67, 13,
+252,248,240,134, 65,237,254, 86,134, 87,204,127, 25, 84,248, 25, 24,228,229,254, 51, 48,235,177, 49,176, 0,243, 21,219,207, 31,
+ 12, 63,143, 62,102,248,249,145,133,129,249, 31, 43,195,143, 61,139, 25,152,188,242, 25,254,177, 96,159, 14,128, 13,207,131,110,
+ 83, 20, 20, 20,100,112,116,116, 4, 87,124,160,138, 16,212,107,135,245,250, 65,149, 52,168,199, 8,186,228, 6,164, 7,132,241,
+153, 7,210,119,245,234, 85,240,244, 2, 31, 31, 31,216, 76,144, 56,168,242, 7, 85, 46,160, 91, 27, 79,159, 62, 13,110, 8,128,
+236,129,173, 5, 32, 4, 46, 93,186,196,112,236,216, 49,240,205,127, 32, 51, 64,238, 4,205, 55,131,122,172, 86, 86, 86, 12,220,
+220,164,157, 90, 73, 77,243, 64,126, 0,249,237,221,187,119, 24,114,176,171,129, 65,157, 11, 82, 27, 22, 76,192, 30, 62, 58,120,
+ 49,121, 50,131, 68,128, 12, 67,119,247, 68, 96,252,124,133,134, 61, 35,195, 63, 80,229,255, 31, 50, 4, 64,168, 25, 0,154,254,
+ 57,121,242, 36, 67, 69, 69, 5, 56,110,130,130,130, 24,100,101,101,193, 13, 60,208,197, 90,230,238, 36,156,246, 7,108, 72, 46,
+185,243,156, 97,237,237,167, 12,155, 54, 46, 4,154,199,200, 80,148, 27,203,160, 47, 33,194, 48,171,160,158, 97, 54,169,230,209,
+176,242,135,137,143, 54, 2,200, 3, 0, 1, 68,246, 20,192, 64,223,156,166,167,167, 71, 80, 13,108, 62,108,168,246,254,113,141,
+ 2, 12,102,128,109,132,129,156,134, 4,190, 53, 4,195,165,231, 15, 30,205,184,122,142,225,217,211, 79, 12, 82, 2, 44, 12,172,
+255,126, 51,176,136,252, 99, 96,177,244, 96,224,144,168,101,248,247,231, 17, 3,195,149,120,134,255,119, 63, 49,188,253,198,198,
+ 32,199,252,141,225,226,165, 99, 12,252, 70,238, 56, 43,108, 80, 5, 12,234,161,223,190,125, 27,220, 35, 4,157,169, 15,170,248,
+ 96, 21, 51,104,152, 30,116,149, 50,168,103, 8,170, 40, 96, 13, 3,108, 0, 38, 15,170, 72, 65,106, 64,249,201,193,193, 1,220,
+179, 4,217, 1,106, 76,124,252,248,145,225,204,153, 51, 96, 54, 72, 12, 54, 37, 64, 76, 79, 29,116, 49,211,139, 23, 47,192, 71,
+ 61,131, 42,234,175, 95,191, 50,220,184,113, 3, 60, 37, 1,114,179,145,145, 17,209, 21, 44,216,188, 61,123, 25, 94,126,252,197,
+192,167, 98,193, 32, 33, 42,203,240,251,235, 71,134, 55,183,207,128,197, 73, 49, 15, 20, 78,160, 6, 4,200,191, 32,115, 65,101,
+ 13,168,194,135,141, 2,192,134,239, 73,169,252, 65, 21, 63, 39,167, 8,176,167, 47,193,176,116,197, 37,134,232, 8, 61,240, 40,
+ 0, 8, 36,205,155, 7,166, 97,149, 63, 88, 61, 35, 8, 51, 50,252,101, 36,188, 8, 0, 84,193,131, 48,232,154,103, 94, 94, 72,
+227, 16,116,145, 27,168,225,243,230, 13,176,129,169,166, 70, 82,154,156,120,254, 54,195,196,115,183, 24, 54,206,239, 98, 96, 97,
+254,206,192, 8,140,251,174, 9,243, 24,252,188,156, 25,158, 49,177, 80,124,251, 32, 37,149, 63,122, 69,143,171, 81, 48, 10,136,
+ 3, 0, 1,196, 66,110, 5, 63,220, 22,131, 12,149,134,192,144,168,212,222,185, 80, 92, 89,227,170,252,145, 71, 2,134,195,252,
+ 63,223,143,183, 12,219, 30,253, 96,144,126,207,204, 96,200,199,200, 32,250,154,129, 65,133,133, 31, 88,248, 11, 51,252,255,241,
+146,225,235, 75, 70,134,171,143,254, 49,188,248,250,131,129, 5,212, 83,255, 7,108,212, 18,209, 0, 0, 13,213,131, 46, 82,146,
+150,150, 6, 95,126, 4,170,204, 65, 21, 27,104,110, 24,212, 91, 4,169, 1, 85,236,176,251, 20,254,225, 48, 15,102, 38, 72, 45,
+ 40,207,131, 70,253, 84, 84, 84, 24,248,249,249,193,195,254,160, 57,127, 80,227, 0,100, 31,104, 4, 0,132,137,233, 28,128, 70,
+ 12,158, 60,121,194,160,175,175, 15,110, 84,200,200,200,128, 27, 0,162,162,162,224,209, 61,208, 2, 59, 82,134,238, 65,230,189,
+124,247,145, 65, 72,205,130, 65,201, 54,156, 65, 64, 70,141,225,231,215, 15, 12,143, 78,110,101,184,189,119, 33, 73,230,193,214,
+ 62,128, 70, 73, 64, 83, 8,160, 10, 20, 52,186, 0,171,248,145, 27, 2,200, 83, 3,184, 0, 51, 11, 7,120,129,159,128,144, 58,
+ 48, 60, 89,193, 21,253,220,249,251, 25,146, 18, 29,225,230,165,166,166,130,253, 14, 51, 15, 18,134,208, 50, 22,207, 58, 0, 80,
+ 92,110,222,188, 25, 60, 37, 42, 41, 9,185,209,111,239,222,189,224,134, 11,104,202, 6,132, 65,183, 63, 30,187,246,157,168,112,
+ 92,118,243, 49, 67,239,233, 27, 12,115, 58,202, 25,100,212,229, 25,190,126,121,207,176,113,251,105,134, 75,151,111, 50, 8,252,
+255,199,192,246,226, 37,131,119, 78, 52,195,209,171,223, 25, 70,193,208, 7, 0, 1,196,130,171,144, 69,190,214,147, 16,127, 40,
+ 3,106, 86,208,180, 48, 15,220,152, 24,196,189,127, 98,134,228,201, 89,184, 55, 82,118, 17,188,126,243,152,225,216,243,239, 12,
+222, 92, 92, 12,135, 31,255, 99,144, 50, 98,103, 80,252,121,150,225,253,181, 44,134,245, 93,151, 24,254, 61,248,200,240,229,215,
+127,134,167,159,255, 50,112,178, 48, 49,252,249,248,130,129, 31, 79,163, 29,185, 17, 0,170,236, 64,139,252, 64,189,106,109,109,
+109,240,186,152, 19, 39, 78,192,231,242, 9,205,215,131,204,131,141, 2,192,204, 3, 53, 2, 64,115,236,186,186,186,224,138, 26,
+212,168, 0,137,131,228, 97,187, 4,112, 77, 41, 32,131, 71,143, 30,129,237, 7,237, 50, 0, 85,254, 32,189,160,233, 5,115,115,
+115,176, 27, 65,242,160,198, 4,177, 0,164,254, 31, 19, 27,131,180,129, 11,184,242,103, 98,102,101,224,228, 19,101,144, 51,247,
+102,120,120, 98, 19,209,230,129,252,247,225,195, 7,134,167, 79,159, 50,200,201,201, 49, 88, 91, 91,131,221, 6, 27,246, 7,205,
+175,195, 0,168, 17, 68, 12,224,224, 16,102, 16, 22,213,103,248,245,243, 35,195,155,183,231,129,238,120, 15,108, 4, 64, 22, 74,
+194,204,123,249,226, 5,138,121,160,250,159, 80, 59,234,249,243,231,224, 43,179, 65,183,102,130,226, 3, 4, 64, 11,255, 64,163,
+ 1,149,149,149,224,198, 11, 2, 16,222,102,119,235,211, 55,134,242,131, 23, 24, 58, 74,210, 25,108,125, 92,128,149,255, 27,134,
+ 85,235, 14, 50,204,156,187,150, 97,123, 81, 2,131,210,171, 39, 12,157,159, 94, 0, 27,245,194, 68,153, 71, 77,128,109,136,127,
+244, 42, 96,202, 1, 64, 0,225, 28, 1, 64,159,219, 39,196, 31,142,128, 86, 91,240, 72, 5, 45,166, 45, 3, 62,229, 66,108, 79,
+ 29, 91,131,128,118, 55,172, 13,125,112,241,221,119,134,143,191,254, 49, 92,124,253,135,225,217,135, 63, 12,226, 39, 88, 24,244,
+ 86,221, 97,120,248,224, 42,195,205,147,191, 24,254,176, 48, 51, 0,165, 25,126, 0, 27, 1,239,129, 61, 48, 81,193,255,120, 43,
+108,228,237,127,176, 21,251,160,189,220,242,242,242,224, 94, 33,108, 59, 31,136,134,169, 39, 53,109, 33,159, 33, 0,163, 7,107,
+250, 36, 21,128, 26, 52,160,145, 8, 16, 80, 84, 84,196,104, 32,129,166, 59, 64, 0, 52, 12, 14,186, 2,185,179,179, 19, 76,227,
+ 3,160,109,126, 32,240,253,219, 75,240, 10,255,191,127,127, 96,152,183, 9,136, 65,107, 55, 64,163, 43, 96,243,254, 51, 48,224,
+ 27,100, 5, 53,230, 38, 79,158, 12,238,221,131,214,102,128,192,209,163, 71, 25, 54,108,216,192,144,157,157,141, 86,249, 19, 6,
+207,191,253,100,136,221,118,130,161, 32,204,155, 33, 36, 54,152,225,219,143, 79, 12,235, 55, 29, 96,152, 48,109, 25,195, 34, 55,
+ 83,112,229, 63, 88, 0,242,176,255,104,229, 79, 25, 0, 8, 32,186,108, 3, 28,236,187, 10, 6, 59, 24,106,133, 43,165,115,244,
+176,244,128, 47, 93, 12,151, 17,130,239,127,249, 24,126, 51,190, 96, 56,243,230, 39, 3, 11, 48,154,247,222,251,193, 32,177, 26,
+ 88, 9, 73,138, 49,220, 97,251,194,192, 2, 44,232,127, 50, 48, 49,112, 49,131,107, 91, 6,118, 97, 9,130, 21, 51,108,127, 63,
+104,104, 30, 52, 31, 15, 90,169,206,195,195, 3,110, 4, 92,185,114, 5, 46,142,237, 64, 32,116,243, 96,251,251, 65,234, 65,235,
+ 7, 64, 98,160,197,101,160, 30, 50,104,200, 25,180, 56, 16,212,179, 6, 77, 37,192,236, 37,102,122, 16,212,187, 6, 77, 1,128,
+206, 12, 0,205, 91,195,166, 0, 64, 11,217, 64, 83, 11, 32,121,208, 40, 5,177, 0,164,254,229,197,171, 12, 79,207,239, 97, 96,
+231, 21, 70,153, 2,248,245,245, 61,209,230, 33,187, 29, 52, 21, 0,242, 15,108, 68, 3, 54, 10, 0, 3,160, 70, 0,104, 13, 4,
+ 33,240,231,207,119,134, 63,192, 30, 63, 39,183, 4, 3, 7,167, 16,176,103,253, 28,100, 19,134,121,179,103,207,134,155,247, 15,
+ 28, 47,168,230,128,166,111,182,110,221, 10,142, 7,208,168, 78,120,120, 56,120,139, 38,108, 52, 0, 52, 21, 80, 90, 90, 10,110,
+184, 16, 3, 64,230,129, 70, 11,118,108, 92,207,176,111,255, 65,134,166,148, 48,134,128,132,112,134,111,191,190, 48,220,191,255,
+ 24,152,191, 86, 49,108,240,181, 98, 48, 18, 19, 28,180,249,103,116, 1, 32,101, 0, 32,128,232,122, 14,192, 96,221, 85, 0,154,
+175,199, 54,116, 79,238, 22, 60, 92,230,157,170,134,152,101,214,218,138,149,143,111, 36, 2,155,221,228,154, 71,143, 17, 1, 74,
+ 43,104, 66, 91,253,134, 75, 99, 81, 69, 85,133,225,213,195,187, 12, 79,190,254, 99,248, 4, 44,241,175,191,255,197,176,244,206,
+127,134,239,247,159, 49,188,251,242,135, 65,158, 19, 52, 22,252,151,225, 57,176, 50,224, 2,230, 86,103,101, 21,156,107,194, 96,
+149, 63,108,117, 62,168,162, 0, 85,210, 58, 58, 58,208,176, 20, 98, 48, 51, 51, 3,111,163, 5,201,195, 42,109, 92, 21, 54,172,
+ 66, 7, 45,240, 3,169, 5, 53, 68, 65, 11,246, 64, 67,228,160,202, 26,100,143,130,130, 2,120,154, 1, 36, 15,106, 8,192,244,
+ 16, 2,166,166,166,224, 97,121, 80, 3, 2, 52, 21,128,188, 8, 16,212,235,182,180,180,132, 47,104, 35, 6,128,205,123,252,132,
+225,197,189, 11, 12,191,127,126, 99,224, 17,147, 99,248,253,245, 19,120, 17, 32, 59,211, 63,162,205, 3,141,140,128,122,207,160,
+233, 8,208,246, 71,208,116, 9,104, 49, 37,104,154, 3,121,106, 3,212,115, 7, 97,208,212, 10, 33, 0, 26,250,255,248,225, 14,
+131,144,136, 46,131,128,144, 6, 80,132, 9, 40,246, 30,220, 48,128,129,103, 39,167, 2, 49, 3,131,171, 6, 52,236,255, 67,215,
+254,255,103,128,207,255,131, 42,127,144,123, 64,101, 36, 40,204, 96,149, 63,108, 52, 32, 38, 38,134,232,202, 31, 4,182,109,219,
+ 10,244, 39, 47,131,157,189, 57,195,187,143,239, 24, 2,179,146, 24,190,126,255,200,240,250,229, 59,134,140,220,102,134, 78, 19,
+149, 65, 89,249,195, 42,124,216, 72,192,104, 35,128,124, 0, 16, 64,131,230, 32,160,193,220,203,165,214, 28, 60,168, 98, 6, 85,
+210,176,138,154,210,202,154, 28,243,144,135,232, 65, 91,253, 72, 25,185, 25, 40,128,236, 14,244,243, 1,134, 58,144, 86,211, 98,
+208,189,122,150, 65,254,253, 71,134, 55,127,129,141,128, 31,127, 24,216, 65,189,191,159,127, 24,228,120, 88, 24,222, 3, 43,217,
+167, 95, 33,171,234,189, 85,197, 25,184, 21,180, 24,112, 29,179, 3,235,245,195,182,250,129,230,133, 65,139,236, 64, 21, 4,108,
+ 23, 0,168, 18, 4, 85, 28,235,215,175,135,159, 9, 0, 18,103,196, 97, 30,236,144, 31, 80,254, 4, 45,134, 3, 53, 42, 94,191,
+126, 13,223, 61, 0,178, 7, 36,254,234,213, 43,184,121,184,118, 21, 32, 3, 80,195, 1,180, 56, 17,182,109, 15, 84,217, 34,111,
+219, 3,185,155,148, 85,246, 96,243, 92,156, 33,230,221, 61,201,240,236,252,110,132,121,214, 78, 36,153, 7,170,252, 65, 59, 6,
+ 64, 67,234, 32,243, 64, 11, 41, 65,230,131,118, 18,128,122,236,147, 38, 77, 2,143,166,128,220,217,215,215, 7,158,131,199, 7,
+254,253,251,205,240,241,253, 29,112, 69,206, 47,164,198, 32, 33,101, 9, 12,199, 55, 12, 95, 62, 61,100,232,238,153,196,208,216,
+ 80,197, 32, 37,195,192,176, 60,159,139,129, 49,236, 61,131, 99, 28, 72, 15,100, 4, 0,121, 3, 32,104, 87, 2,104, 87, 7,104,
+200, 31,100, 63,104,132, 2,212,120,155, 50,101, 10,120, 52, 0,214,208, 35, 22,220,188,121,139, 33, 36,216,159, 33, 34,194,143,
+ 65, 71, 87,157,225,237,231,143, 12, 95, 62,190, 97, 72,203,107,102,104, 14,116,102,112,254,247,109, 80,231, 29, 80,165, 63,186,
+ 11,128, 50, 0, 16, 64,116,107, 0, 80,115, 87, 1,104,255, 45,181, 78, 2, 36, 4,168,189, 5, 15, 86,105, 83,171,167, 78,170,
+121,196,246,208, 7,186,130, 69,238,249, 35,187, 3,253, 92,128,161, 14,164, 20,149, 25,126,152,217, 50,252, 57,181,141,225,193,
+ 71, 6, 6, 30, 70, 86, 6,121, 30, 38,134,167,127, 25, 25,152,217, 89, 24, 14,189, 2, 86,178,192, 14,181, 40, 59, 51,131,178,
+137, 29,195, 23, 65, 5, 60, 21, 13,164,183, 14,234, 65,131,122,130,160, 74, 12,180,157, 13, 84, 73,195, 26, 0,160,158, 58,104,
+ 36, 0, 84,137,128,134,140, 65,234, 65, 21, 54,182,130, 0, 36, 14, 59, 69, 80, 83, 83, 19,204,135,153, 7,203,207,176,145, 4,
+144, 60,104,207, 60,104,248,158,216,188, 12,218, 94, 7,170,108,169,117,112, 15,181,204, 3,249, 89, 74, 74,138,193,221,221, 29,
+220, 56, 1,141, 74,128, 70, 43, 64,141, 39,208,209,191,160,134,203,156, 57,115, 8,158,176,135, 12,254,252,249,198,240,225,253,
+ 77, 96,216,189, 99, 16, 16, 84, 99,224,225,149,101,224,229,147, 99,248,250,249, 41, 67, 71,231, 92,134,200, 8, 23,112, 3, 0,
+ 17,151,208,169, 25,164, 93,128, 94, 94, 94,224, 33,123,208,212, 9, 40,172,253,252,252, 24, 22, 46, 92, 8, 30,213,209,208,208,
+ 32, 57,188,188,189,189,128, 13,193,205, 12,159, 62,188,101,120,242,236, 57, 67,126,118, 28, 67,105, 69, 27, 67,160,147, 21,131,
+205,207, 79, 12, 12,172,131,231,160,216,209, 5,127,180, 1, 0, 1, 68,151, 24,166,197,174, 2,106, 84,238, 48,240,230,205, 92,
+ 96, 37,191, 17,165,210,199,214, 16, 32,197,188, 83,213, 27,177,246,202,145,123,235, 32, 54, 49,149,246,155,185,111, 24, 78,109,
+172,166,154,121,131, 29,140,180,181, 32, 10, 86,142, 12,151,128, 61,254,215,251,246, 50,176,254,249,206,112,233,243,127,134, 61,
+159,255, 48,176, 1, 43, 89, 97, 96, 37,224, 40, 41,192, 96,239,230,204, 32,100,236, 64,160,167, 9, 25, 1, 0,245, 86, 65,149,
+ 2,168,183, 14,170,224, 65, 21, 33,172,194,134,245,210, 65, 91,206, 64, 43,220,119,238,220,137,115,200, 30, 36, 14,106, 56,128,
+122,207, 32,253,160, 30, 39,108,116, 1,214,104,135,157, 46, 8, 82, 11, 26,113, 0,173,224,135,156, 60, 71,124,207, 29,132,169,
+ 22,150, 84, 50, 15,212, 8, 0, 85,246, 32, 63,129, 70, 0, 64,163, 40,160,145, 15, 16, 0,173,127,240,244,244, 4,247,254, 73,
+ 1,127,255,254, 4,159,245,255,235,215, 71, 6,206, 79, 15, 24,248, 4,148, 25,184,120,164,192,120,215,222,151, 12,140,206,226,
+ 72, 29, 34, 40,141,164, 31,116,152, 17, 40, 46, 65,149, 63,168, 49, 0, 90,219, 17, 23, 23,199,112,224,192, 1,178,252,104,105,
+105, 5, 94, 23,193,119,237, 44, 67,118,118, 50,131,140,154, 42, 67, 87, 65, 50,195,130,105, 11, 25,166, 48,255, 24,244,249,102,
+180,247, 79, 57, 0, 8, 32,186, 53,241, 6,243,174, 2,124, 21, 14, 57,189,127, 92,230, 97,155,179, 39,166,210,166,182,121,196,
+ 84,178,148, 86,194,163, 11, 58, 73,171,108, 12,156,221, 25,132,165,100, 24, 94, 95,191,194,192,252,240, 30,131,202,239,231, 12,
+188,194,226, 12, 86,186, 26, 12,218,198, 58, 12,223, 37, 8, 31,190, 2,170,140, 65, 61,127, 80,239, 30, 54, 31, 15, 26, 13, 0,
+177, 97, 71,247, 34, 79, 19,128, 22,243,129, 26, 1,184, 42, 16,208,124, 51,232,172,123, 80, 35, 0, 84,169,195,244, 33,175,140,
+ 71,190, 8, 8,100,135,161,161, 33,120, 97,223,176, 41, 32,129,126, 7, 29,249, 11,194,160, 69,127,160,240, 3, 53,132, 64, 97,
+ 10, 10,231,234,106, 82,203, 7, 96,131,233,215,103, 32,254, 2,108,160,189, 6, 86,192,130, 12,172,108,188,192,176, 99, 97, 88,
+178,116, 43, 67, 76,180, 55,162,113,133, 69, 55,108,212,161,183,183, 23,220,192, 3, 1,208, 20, 12, 41,199, 47, 35, 3, 35, 35,
+ 99, 6,102, 83, 83,134,164, 6,152,121,255,129,230,169, 51,168, 5, 4,128,253, 62, 88, 0,108,184,127,244, 40, 96,234, 2,128,
+ 0, 98, 25, 13, 2,252,128,154,219,254,208, 43,102, 74,123,235,212, 54,111, 20, 12, 44,144,213,212, 6, 99, 16, 64,190, 75,143,
+216, 35, 87, 66, 67, 67,193, 71, 0,195, 86,248,195, 86,176, 35,111,245,131, 45,250,131,221, 8, 8, 90,212, 7,146, 59,114,229,
+ 43,134,121, 19, 38, 76, 96, 88,189,122, 53, 92, 45,248,206, 0, 2,215, 1,131,122,168,164, 12,141, 15,197,198, 26,104, 71, 5,
+ 8, 83,214,208,133, 53, 4, 62,131, 43,127,208,194, 64, 96,236,192,205, 35, 52,137, 2,187,233, 15,121,151, 2,185,224,239,223,
+127, 12,133,133,133, 84, 51,143,214,141,128,209,202,159,122, 0, 32,128, 24,129, 1, 56,122,191,227, 40, 24, 5,163, 96, 20,208,
+171,208,133, 19, 24,109, 2,134,209,194,152, 62, 96,243,226, 38,198,209, 80, 96, 96, 0, 8,160,209, 17,128, 81, 48, 10, 70,193,
+ 40,160, 35,248, 79, 76, 23,127, 20,140, 2, 58, 0,128, 0, 98, 26, 13,130, 81, 48, 10, 70,193, 40, 24, 5,163, 96,228, 1,128,
+ 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81, 48, 10, 70,193, 40, 24,
+129, 0, 32,128, 80,214, 0,248,218,202,144,109,208,230,195,152,151, 69,140,154, 55,106,222,168,121,163,230,141,154, 55,106, 30,
+ 57,230,141, 2,218, 3,128, 0,194, 88, 4,136,239,122, 87,114,182,188, 12,101,243,200, 49,115,176,251,119,168, 2, 98,142, 37,
+ 38,246,150, 48,122,221, 88, 56,216,194,111,244,108,134, 81, 48, 10, 70, 1, 50, 0, 8, 32,172,187, 0,254,175,194,188, 0, 2,
+116, 70, 53,185, 0,215,109,110,131,197, 60,108,254,165,196,207,131,221,191, 48,240,238,245, 29,134,215,175,159, 51,188,124,243,
+133,225,227,199,223, 12,252,252,172, 12,226, 34, 60, 12,162,162,146, 12, 66,162, 42, 36,155,119,238,248, 52,134,123,119,111, 49,
+220,125,240,131,225,241,243,255, 12,178,146,140, 12,202, 10, 28, 12, 74,202,106, 12, 70,150, 89, 52, 79,204,200,149, 62,168, 49,
+224,107, 59,147,168,134, 4, 72,108, 48, 84,144,160,211, 48, 65,215,203, 34, 3,208,213,176,131,233,234,109,106,134,211, 80,240,
+239, 40, 24, 5,195, 25, 0, 4,208,232, 54, 64, 44,149, 61,232,204,148,127, 43, 5,135,173, 95,127,255,250,202,240,248,209,101,
+134, 95,191,126, 51,168, 40, 10, 48, 56,216,200, 49, 8,240,179, 51,188,255,240,131,225,233,243, 47, 12,183,239, 61,103,248,240,
+241, 13,131,172,156, 46, 3, 43, 27, 55, 65,243,222,191,185,197,112,236,224,108, 6,102,134, 79, 12,225,222, 12, 12,214,198, 12,
+ 12,202,242, 12, 12,119, 30,252,103, 56,114,230, 59,195,182,253, 23, 25,182,174, 45,101,176,178, 79,101, 16, 20, 81,163, 90, 35,
+136,216,198, 0,161, 81, 4,216,229, 66, 3,217, 8,192,213,160,131, 85,144,131,161,247,142,124, 77, 51,165,238, 25, 10,254, 29,
+ 5,131, 15,140, 30, 4, 68, 93, 0, 16, 64,163, 13, 0,164, 81, 0, 88, 35, 96, 56, 87,254, 32,240, 4, 88,249,139,139,112, 48,
+152, 26, 42,130, 27, 59,160, 83,221, 64,151,143,240,241,176, 51,112, 43,179, 49, 40,200,242, 51, 92,187,249, 6,172, 78, 81,197,
+130,160,121,160,202,223,214,248, 19, 67, 65, 34, 3, 3,232,160, 56,144,153,191,255, 48, 48,112,115, 49, 48,104,170, 48, 48, 88,
+ 24, 0, 51,238,254, 79, 96,117,222,193,221, 20, 85, 24,180, 58,162, 24,214, 8, 24,232,202, 31,221,125,212,168,116,169,105, 6,
+ 53, 70, 2,168,233, 95,108,102, 17, 43, 54, 10,134,110,197,143, 44, 62,218, 8, 32, 31, 0, 4,208,232, 46, 0,244,145,128, 97,
+238, 63,208,176, 63,232, 60,119, 51, 35, 73,212,132,192,196,200,192,198,198,204,192,201,193,194,192,202,202,196,160,172, 40, 8,
+ 30, 33, 0,169,199, 7, 64,195,254,160,158,127, 97, 18, 3,195,143,159, 12, 12,247, 31, 51, 48,188,255,200,192,240,225, 19, 3,
+195,178, 77, 12, 12,185, 13, 12, 12, 85, 61, 12, 12, 86, 70, 64, 59,254,127, 2,171, 31, 5, 8,128,126, 41, 22,190, 6, 11,169,
+ 23,102,161,143,106, 32,143,116, 80,218,112, 66,159, 66,161,196,191,187,119,239,102,216,179,103, 15,217,254, 37, 20,110,163, 21,
+255,240, 1,160,202, 30, 25,227,107, 28,140, 2,194, 0, 32,128,134,228, 8, 0, 45,123,106,255,105,232, 62,106, 13, 49, 35,247,
+146, 72,233,229,130,192,235, 55,207, 25,212,149,133,224,149, 62, 54,192,193,206,194,240,225,227, 79, 6, 53,160,186, 91,247,158,
+227, 93, 15, 0,154,243, 15,135,220, 95,194,176,227, 16, 3,195,212,197, 12, 12,110,182, 12, 12, 94, 14, 12, 12, 55,128,109,135,
+243, 87,255, 3, 27, 21,140, 12,134,218, 12, 12,238,246, 12, 12,235,118,222, 98, 48,178,164, 94,207,157,156,176,163,213,154, 10,
+114, 0, 49, 67,222,176,138, 27,164,150,212,112,192, 53,221, 65,238,232, 9,122,248,145,218, 99, 71,247, 47,168,242, 71,190,218,
+219,197,197,133,100,255, 98,243, 15,177, 98,163, 96,232, 84,252,163,128,250, 0, 32,128,176, 54, 0,112, 45,126, 35,167,194, 33,
+ 84, 33,146,106, 30,189, 91,241,228,172, 24,199,183,168,144, 28,243,176,233, 33,119,225,226,203,215, 95, 24, 28,173,229,192,215,
+141, 30, 62,254,152,225,219,247,223, 96,113, 35,125, 9, 6, 81, 97, 78,134,199, 79, 63, 51,220,185,255,158,129,133,133,137, 65,
+ 85, 73,144,225,232,201,175, 12,234,154,184,205, 3, 45,248, 3,205,249,255, 4, 26,179,253, 32, 3,195,254,227,255, 25,164,196,
+ 25, 25,148,228, 24, 24,156,109, 24, 24, 52,148, 25, 25, 88,152, 33, 87,139,131,166, 2,186,103,254, 32,202,175,200, 21, 21, 49,
+108, 98, 10, 8,244, 30, 48,250,240,240,112,234, 33,226,171,144,177, 85,228,228, 52, 40,168, 49, 45,128, 92,249,131, 46, 30, 2,
+ 53, 0, 40,109, 24,142,246,254, 71,193, 40, 32, 14, 0, 4, 16, 73,187, 0,200,221, 29,128,171,199, 69, 78, 79, 12, 95,163,129,
+220, 6, 10, 62,127,227,154,163, 36, 4,112, 45, 42, 36,199, 60,124,122, 96,246,128,250,242,255, 86, 17, 94,187, 0, 89,237,207,
+ 14,102, 63,126,246,137,225,251,247, 63, 96,182, 10,176,178, 7, 53, 0, 46, 94,125,197,112,243,246, 59, 6, 14, 14,102, 6,101,
+ 69, 1,134,247, 31,241,223,237, 14, 90,237, 15, 90,240, 7,178,223,195,142,129,193, 64,139,145,129,157,141,129,225,207, 31,200,
+ 72,128, 0, 47, 3,195,189, 71,192,222, 63, 80, 78, 94, 6,162,126, 32, 1,114,165, 63, 28,231,133,145,253,132,173,130,198,213,
+216,162,100, 68,128,146, 48, 4,221, 96, 8,170,248, 65, 32, 36, 36,132,162,145, 20,208, 14, 2,114,229, 71,193,208, 2,196,110,
+249, 29, 5,248, 1, 64, 0, 13,201, 41, 0,124, 21, 34, 57, 21, 44, 37, 91, 28,241,154, 75,227,221, 4, 32,119,147,106, 7,104,
+171, 31,104,181,191,136, 16, 23, 67,168,159, 6,195,159,191,255, 24,216,217,153, 25,152,153,152,192, 87,186,250,184, 41, 51,120,
+187, 42,131,205,125,251,254, 59, 88, 61, 62, 0,218,234,119,247,225,127, 96, 79,159,129,193,201, 18, 50,133, 2, 26,250,215,211,
+ 96, 96, 16,228, 99, 96,240,116, 0, 93, 49,202, 0, 30, 5,184,117, 31,162,158,216,184, 37,133, 77,233, 65, 34,131, 97, 27, 32,
+ 54, 55,144,234, 46,228, 6, 14,122,111, 29, 31,159, 92,119, 82, 50,154,128,172, 15,148,246, 92, 93, 93,201, 50, 11,125, 43,225,
+104, 35, 96,180,242, 31, 5,196, 1,128, 0, 26,221, 5, 64,226, 8, 5, 41, 0, 52,204,206, 20,254,158,102,141, 0,216,206, 5,
+ 38, 32, 38,166,247, 15, 2,160,125,254,160, 97,126, 80, 3,160,111,250,105, 6, 59, 43, 89, 6, 35, 61,113, 6, 70, 86, 70,248,
+142, 0,232,213,241, 96,117, 32,245,248, 0,104,159,255,209,179,223,193, 13, 0, 17, 99, 6,134,138, 76, 6,134,252, 4, 96, 67,
+131, 23, 50,236,223, 56,137,129,161, 33, 31,162,246,232, 89,136,122, 74,122,182,212, 92, 67, 49, 24,206, 2, 0, 85, 72,160,138,
+ 9,230, 38,208,194, 55,216, 62,120,216, 34, 56,152, 28, 41,149, 23,190,138,153,218, 59, 10, 72, 49, 11,155,127, 97,195,254,228,
+248, 23,185,242, 39,166, 33, 48,218, 8, 24,173,252, 71, 1, 2, 0, 4,208,104, 3,128,198,128,214, 91, 10,225,141, 0, 34, 27,
+ 26,160, 67,126,238,220,127,198,160,175, 45,198, 80,145,111,193,176, 96,249,101,240,202,127, 3, 29, 49,112,229, 15,119,247,191,
+255,224,181, 0,226, 98, 82,120,205, 3, 29,242,179,117,223, 69,134,132, 96,160, 91,128,229,183, 69, 16, 80, 76,150,129, 97,233,
+ 70, 36, 69,192, 6,192,223,191, 12, 64,117, 16,245, 3,217,195,198,213,232, 27,168,109,128,232,135,222, 96,107, 0,224, 82, 75,
+206,168, 2, 37,126,164,198,156, 63,181,253, 11,107, 80, 16,106, 48, 16,163,102, 20,140, 86,254, 35, 13, 0, 4,208,232, 54,192,
+ 33, 12,192, 83, 0, 36, 78, 3,128, 86,244,179,179,179, 49,156, 60,251, 12, 92,201,123,186, 40, 49, 92,186,250,138,161,181,239,
+ 56, 67, 75,239, 49,120,229, 15,146, 7,169, 35,116, 34, 32,232,132,191,191, 12,124, 12,253,243, 32,149,252,140, 22, 6,134, 69,
+235, 24, 24, 28, 45, 24, 24, 12,181, 24, 24, 14, 44,135,136,131,229,129,234,200, 61, 17, 16, 84,209, 80,210, 59, 71,238,245, 15,
+166, 93, 0,232,149, 30,108, 62, 28,157,141, 77, 45,177, 97,134,222,107,167,100,206, 31, 31,127,160,252, 75,108,165, 62, 90,249,
+143, 86,254,163, 0, 21, 0, 4,208,104, 3,128,134, 61,243,255,171, 4,233, 98, 7,169,163, 12,160, 19,254, 94,191,251,201,176,
+118,203, 77,134,103, 47,190, 48,120,187, 41, 51, 84, 22, 90, 48,100, 36, 26, 48,156,191,252, 18, 44, 14,146, 7,169, 35, 6,128,
+ 78,248, 59,124,150,143, 33, 52,155,129,225,236, 21, 6,134,217,237, 12, 12, 85, 64,118,122, 20, 3,195,220, 85, 12, 96,113,144,
+ 60, 72, 29, 37, 21, 56,185,149, 52,161,233,131,129,220, 5, 64,236,252, 53,169,106,177, 85,212,212,240, 31,165,102,209,202,191,
+132, 42,247,209,202,127,120,128,209,202,159,186, 0, 32,128, 72,218, 6, 72,238, 98, 57, 82,183, 1,146,107, 30,185,102, 82,219,
+125,248,194,137, 90,238,163,100,225, 34,232,120, 95, 37, 21, 11,240, 33, 63,247, 30, 60,103, 56,126,230, 9,202, 93, 0,160, 97,
+127, 82,238, 2, 0, 29,239, 11, 58,225, 15,116,200,207,202,173,183, 24,218,166, 14,204, 93, 0,164,244, 94, 7, 67,229, 79,200,
+222,193,186, 51,129, 18,119, 13, 69,255,142,130,193, 57, 18, 48,218, 48,160, 28, 0, 4, 16, 11,173, 51, 33, 61,205,163,116, 95,
+243, 80,243, 47,165, 0, 84,201,131,176, 58,149,204, 3, 85,242,228, 28,242, 51, 90,233, 12,238, 74,123, 20,140,130, 81, 48, 60,
+ 1, 64, 0, 49, 2, 91, 78,255, 71,131, 97, 20,140,130, 81, 48, 10, 70,193, 72, 1,155, 23, 55, 49,142,134, 2, 3, 3, 64, 0,
+141,174, 1, 24, 5,163, 96, 20,140,130, 81, 48, 10, 70, 32, 0, 8,160,209, 6,192, 40, 24, 5,163, 96, 20,140,130, 81, 48, 2,
+ 1, 64, 0,141, 54, 0, 70,193, 40, 24, 5,163, 96, 20,140,130, 17, 8, 0, 2,104,180, 1, 48, 10, 70,193, 40, 24, 5,163, 96,
+ 20,140, 64, 0, 16, 64, 40,187, 0,124,109,101,200, 54, 8,219, 89,236,163,230,209,198, 60, 98, 46, 96, 25, 72,243, 64, 7,184,
+128, 48,232, 96, 23,106,152,119,255,254,125,134,187,119,239,130,205,155, 53,107, 22, 88, 12,116,118,252,104,122, 25, 53,111,212,
+188,225,107,222, 40,160, 61, 0, 8, 32,130, 71, 1,147,115, 91, 29, 61,205,163, 39, 72, 11,253,200,192,192,198,198, 48,107, 41,
+ 39, 81,234, 65,149, 32, 49,135,153, 16,235, 95,100,243,208,175,182,165,212,188, 43,125,124, 12, 58, 69,159, 40, 50, 15, 2,254,
+ 51,232,125,159,194,240,255,215, 95, 48, 15, 84, 97,167,165,165, 81, 16,234,255, 25, 76,153, 87, 48,252,254,253,137,129,147,147,
+147, 97,213,170, 85, 12, 9, 9, 9, 12,127,255,254,101,248,245,235, 23,195, 63,208, 77, 67,116, 4,228,156,227,128, 47,252, 6,
+187,121, 67, 5,128,142,177,102, 98, 98, 2, 99,216,145,214,160,244,193,204,204, 12, 78, 35,232, 13,198, 81, 48, 10, 70, 1, 3,
+ 3, 64, 0,177, 16, 42,236,240,101, 28,228,179,227,137, 45, 56,169,101, 30,169, 61, 88,106,130,221,187,119, 51, 48,112,104, 18,
+ 85,185,130, 78, 32,195,117,166, 57, 41,133, 53,204, 60, 88,197,191,103,207, 30, 12,255,146, 99,222,255, 11,181, 12,140, 6,205,
+ 12,139, 14, 66,174,253, 5,241,225,241, 97,208, 76, 82,184,240, 94, 43, 2, 95,128,180,252, 40,196, 44, 79, 67, 86, 6,109,233,
+171,240, 94, 59,169, 13, 1, 57,161,147, 12,247, 47,191,100, 56,242, 92,158,225, 43, 15, 55,131,135,195, 7, 6,105, 81, 70,134,
+131, 7,118, 51,124,250,252,131,193,203,203,139,225,231,207,159,116, 47,220, 7,178,193, 75,140,121,164,132, 7,185,121,142, 82,
+ 0, 74,127, 93, 93, 93, 12,165,165,165, 12,202,202,202, 20,153, 5,170,228, 89, 88, 88,192, 24,196, 6, 53, 2, 64,105, 27,100,
+ 54,168,161,248,231,207, 31, 48, 6,177, 7, 2,108,221,186,149,232,176, 7,165,105, 82,192,182,109,219, 40,210, 63, 10, 70, 54,
+ 0, 8, 32, 22, 74, 42,127, 99, 99, 99,134,179,103,207,146, 84, 96,225, 43,112,136, 49, 15,155,249,160, 74, 22, 54,228, 76,205,
+ 27,221,210,124,129, 21, 23,167, 26,195,172, 85, 14,144,222,236,106,126, 72,229, 79, 66,101,141,235, 60,115,152,187,137, 25, 33,
+ 64, 54, 15, 4, 64,119,168,131,110, 80,131,221,162, 70,174,121,176,202, 30, 70,119, 54, 50,160, 84,254,101,254, 28, 12, 93, 27,
+127, 16, 21, 86,252, 55,139, 25,180,229,152, 25,190,254,248,207, 80,228,195,193,112,226,246, 31,134,239, 63,255, 51,124,255,205,
+192,224, 8,108, 4, 92,121,244,151,164,209,128,199,151,250, 25,206,190,230,102,224,227,102,100, 16, 23, 19,103, 16,147, 86, 97,
+120,248,228, 39,131,186,218, 31, 6,118,230, 87, 12,155,183,188, 97, 88,190,124, 57, 67, 80, 80,208,104, 46, 30,130, 0,148,254,
+124,125,125,193,141, 0,108,249,213,200,200,136,161,177,177, 17,172, 6,111, 1, 6,172,244,217,216,216,224,248,241,227,199, 12,
+170,170,170,224,134, 0, 47, 47, 47,195,157, 59,119, 24,120,120,120, 24, 78,159, 62,205,112,252,248,113,134,236,236,108,194,249,
+ 30,154, 70,145,203, 63,228,114, 11, 38, 14, 18,131, 53,110,241,129, 77,155, 54,225, 52, 3, 89, 28, 36, 70,106, 5,190,113,227,
+ 70,138,244, 15, 85, 0, 59, 17,112,244, 4, 64,202, 0, 64, 0,177, 80, 82,249, 19, 11, 72,189,214,147,212,202,191,163,163,131,
+161,162,162, 2, 69,156,220, 70, 64,154, 49, 48, 67, 11, 3, 43,253, 93, 14, 40, 61,126,208, 93,229, 32, 0,163,113,205, 89,161,
+ 87,214,248,220, 77,236,237,110,176,176, 65,110, 76,161, 95,156, 66,142,121,248,122,248,160,202,159, 24, 0, 74, 39, 34,183,139,
+ 25, 84,165,152, 25, 56,217, 24, 25, 20, 68,153, 24, 94,127,250,207,240,231, 47, 51,195,155,207,255, 25, 62,126,251,207,112,247,
+229, 63,240,133, 69, 34,255, 46,161,220,254,134,179,247,250,122, 13,131,138,156, 18,195,235,215, 47, 25, 20,100, 68, 25,116,181,
+149, 24, 88,120, 4, 25,148,100, 62, 48,124,255,251,145,225,249,243,191, 12, 79,223,255, 96,224,252,121,143,225,238, 93,125,178,
+110,201,163, 38,192,213, 43,167,244,202, 93, 74,205,195,213,216, 30,232,225,112, 80, 26, 0,185, 77, 75, 75,139, 97,243,230,205,
+ 24,105, 2, 84,182, 16, 83,249,131, 0, 43, 43, 43, 3, 7, 7, 7,195,155, 55,111, 24,212,212,212, 24, 12, 13, 13,193,141,130,
+ 73,147, 38,129,123,252,186,186,186, 12,235,214,173, 3, 55, 0, 46, 93,186, 4,110, 24, 16, 26, 9,240,247,247,135,135, 31,161,
+114,144,152, 10, 23, 84, 73,195,194, 29, 95, 7, 8, 36,255,242,229, 75,146, 27, 0,148,232, 31,138,149,254, 40,160, 30, 0, 8,
+ 32, 22, 92,133, 15,161,158,250, 96, 1,160,194, 3, 84,249,147,123, 81, 10, 46, 0,233,233,167,129,233,213,179,204, 24, 24,216,
+190, 19, 53,247,143,173,178,198,214, 32, 34,181,210, 66, 46,252, 65,195,255,232,189,127, 82,205, 91,154,199, 3, 42, 50,176,202,
+ 69, 79,250, 74,180, 57,160, 66,135, 3, 88,241, 51, 51, 49, 48,112,177, 51, 48,124, 0, 86,248,191,254,254,103,224,230, 96, 4,
+247,254,191,255,250,207, 32, 45,200,196, 0,154,170,191, 5,172,184, 65,110,199, 55, 10,240,249,197, 73, 6,126, 86,110, 96,193,
+254,159, 33, 53,212,140,225,239,159,255, 12, 47,222,255, 98,120,116,255, 35, 3, 19,195, 99, 6, 1,129,159, 12,175, 94, 62, 96,
+ 96, 99,254,200,112,237,193, 7,134,167, 63,246, 80,184,198,128, 58, 0,189,114,166,228,242, 34,112,184,162, 93, 36, 5,186,251,
+129, 28,243,222,189,115, 65,225, 11, 9,237, 33, 88,177,209,163,247,239,227,227, 3, 79,179, 87,175, 94,133,179, 97, 61,127,144,
+ 60, 49,128,157,157,157,225,235,215,175, 12,154,154,154, 12,142,142,142, 12,197,197,197, 12,201,201,201, 96,185,223,191,127, 51,
+ 44, 88,176, 0, 60,170,120,238,220, 57,134,149, 43, 87, 50,124,255,254,157,224,186, 17,111,111,111,170,250,119,238,220,185, 68,
+ 55,216, 72,237,193, 35,155, 77,142,254, 81, 48,178, 1, 64, 0,177,144,218, 99,167,118, 69, 75, 41, 64,239, 9,147,220,227,159,
+ 5, 44, 84, 37, 25, 24,102,249, 66, 10,240, 89,103,211, 80,134,249, 33, 61,254,143, 24, 35, 1,196, 86, 6,232,189, 27,114, 42,
+107, 82,123,142, 32,154,240,208, 24,225, 10, 0, 54,252,143,203, 60, 80, 37,242,250, 64, 17,131,132, 28, 51,195,151,239,255,193,
+243,255,160,118,227, 55, 96,165,255,253, 23,176, 0,254, 3,177,227,207,191,255, 12,255,160, 21,206,229,139,103,161,211, 34,108,
+ 88,237,252,240,242, 42, 3,155,168, 32,131,168,128, 0,195,135,247,223, 25, 62,124,124,207,112,226,234, 75, 96,143,255, 63, 3,
+ 23,215, 55, 6,101,249, 47, 12,223,191,188, 97,208, 83,253,205,160,165,240,147, 97,214,242,179,224, 97, 94, 6, 6,142,209,220,
+ 60, 4, 0,172,247, 15,194,160,222, 63,168,162,223,178,101, 11,131,182,182, 54,120,106,139,148,202, 31,214, 0,120,253,250, 53,
+ 48,109,112, 49,216,217,217, 49,244,244,244,128, 71, 5, 64,105,118,225,194,133,224,202,255,196,137, 19, 12,123,247,238,101,184,
+124,249, 50,131,136,136, 8,120, 61, 0,193,114, 1,216,168, 36, 52, 5, 48,123,246,108,162,220, 72,203, 41, 0,144,217, 35,101,
+ 10, 0,185, 12, 26, 29, 13,160, 14, 0, 8, 32,150,161,236,120,228,187,206,241,245,198,136,237,241,175,174,184,207,192,192,204,
+198,144,230,166,192,192, 32,160,192, 48,107, 21, 68,142,216,185,127, 90, 85,232,176, 94, 63, 8, 32,247,252,209, 1,108,109, 0,
+ 53,111, 55, 92,154,199,141,115, 68,128,247, 90, 49,195,253,159,192, 30,250, 7,208, 16, 63, 19, 3,247, 15,200, 16,231,159,191,
+255, 25,126, 0,123,255, 63,128,141,128,159,191, 33,248, 7,184, 65,128,212, 3,196,210,160,224,185, 90,196,240,244,153, 28,131,
+130, 28, 15, 3, 19, 7, 51,195, 91, 96,111,109,239,233, 39, 12,183, 30, 63,101,120,251,238, 11,131,137,222, 95,134,159,223,254,
+ 0,205,250,203,240,253,199, 63,134,135,143,129,141,141,239, 12, 12,221,221,221,163,115,129, 67, 4,192,122,255,160,225,127, 80,
+ 67, 24,212, 32, 0, 53, 0, 96,163, 0,164, 84,254, 32, 0,170,236, 13, 12, 12,192,211, 0,160, 10, 63, 41, 41,137,161,189,189,
+ 29, 92, 25,158, 60,121,146,225,224,193,131,224,161,255,143, 31, 63,130,215, 6,124,250,244, 9,188, 72,144, 16, 8, 8, 8,192,
+ 57, 74, 2, 27, 65, 33,118,164, 96,116, 10, 96, 20, 12, 86, 0, 16, 64, 67,174, 1,128, 62,127,142,222, 8, 64,239,125, 19,154,
+143, 39,212, 40,128,141, 2, 64,166, 1, 64, 91, 0, 7,166,145, 3,170,216, 97,141, 0,124,163, 33,132, 70, 68,240, 85,232,216,
+ 0, 62,181,113, 83,190, 50, 72, 9, 49, 49, 68,217,176,129, 43,121, 62, 46, 70, 6,102, 70, 72,161, 9,154, 6, 0,137,125, 5,
+ 54, 16, 64, 11, 3, 65,163, 2,127,255, 65, 70, 8,240,153,103,160,126,143, 65, 85,229, 29,195,142,131,175, 24,222,125,252,193,
+ 96,161,247,137,193,140,255, 11, 3, 43,219, 79,134,111,192, 74,255,201,115,144,121,140, 12,127,255, 50, 50,136, 8, 1, 13, 99,
+252, 55,154,139,135, 32,128,229, 95,244,209, 48, 80, 99, 0,189,226,197,183, 22, 0, 84,153,151,149,149,129,231,253, 23, 45, 90,
+196, 48,127,254,124,134,196,196, 68,240,186, 32, 80,101,251,224,193, 3,240,176, 63,168,204, 0,245,252, 51, 50, 50,136,218,249,
+ 64,205,158,244,232, 20,192, 40, 24,172, 0, 32,128,134,228, 8, 0,250, 60, 50,174, 10,158, 80,133,137, 14, 64,195,255,136,138,
+255, 54,195,234, 73,247,161,187, 0, 80, 27, 5,196, 76, 3, 80,123, 20, 0,125,222, 31,221,111, 32, 62,104, 4, 0,118,248, 14,
+174, 69,138,164, 84,254,176, 93, 0,184,204, 3, 85,232,223,126,130, 42,250,255, 12, 31,190,130,122,253,255, 25, 88,161, 41,234,
+207, 95, 72,175, 31, 84,241,191,253,252, 31,188, 48,240,252,131, 63,224,105, 2,144, 59,191, 99,177, 15,100,222,227,231,191, 24,
+238,220,121,207,112,236,220,123,160, 90, 70,134, 27,119,254, 49, 68,250,253, 97, 96, 1,106,124,241,138,129, 97,215, 97, 6,134,
+207,223,254,131,215, 20, 56, 89, 48, 50,112,178, 3, 11,107,111,127,134,191, 3,156, 38, 41,153,239,199, 90, 25,132,189,167,138,
+ 57,160, 57,255,193, 4,176,229, 85,144, 24,104,238, 31, 52, 79, 15,154, 22, 64, 7,132, 22, 3,246,246,246, 50, 8, 8, 8,192,
+123,193,243,230,205, 3,143, 4,128, 26, 3,176,198, 4, 72,205,135, 15, 31,192, 35, 0,223,190,125, 35,202,173,169,169,169,240,
+138, 21,185, 7, 15,162,137, 29,254, 7,129,209, 41,128, 81, 48, 88, 1, 64, 0, 13,201, 6, 0,104, 94,143,208,106,114,144, 60,
+209, 91, 10,217,185, 25, 86, 43, 28, 2,214, 90, 64,245,138,220, 12,105,173,138, 12,179, 14,128,134, 34,103, 33, 53, 8, 92,201,
+158, 6, 64,223, 10,136,107,107, 32,174,194, 18, 54, 2,128,173, 33, 0,235,249,195,196,240,141, 0, 32,155, 71,173,194,252,246,
+237,219, 12,143,142, 78, 2, 22, 62,255, 24, 24,129,229, 42, 27, 11,244, 16,150, 63,192, 30,255,127, 72,101, 13, 26, 9, 0, 53,
+ 8, 64,216, 47, 32, 4,236, 86,108, 13, 10,152,121, 15,142, 78,100,208, 86,248,199,112,232,252, 95, 6,208,104,237,139,215,192,
+138,158,131,129, 97, 39,176,242,255,246, 13, 88, 0, 3, 43,127, 35, 45, 86,134, 71,207,254, 49,216, 59,121, 51,184,187,187, 51,
+108, 59,246,124, 64, 43, 53,106, 54, 0,168,101, 30,161, 33,231,193, 2, 96,171,254, 65,195,255,176, 52, 10, 27,189, 3,245,238,
+241, 1,208,130,190,243,231,207, 51,216,218,218,162,136,131, 26, 1,176, 74, 22,180, 24, 16,180,242, 31,148,182, 68, 69, 69,137,
+ 62, 60, 10, 52, 13, 64,141,158,250,232, 20,192, 40, 24,172, 0, 32,128, 40,106, 0,128, 42, 88,122,159, 34, 6,235,229,130, 10,
+ 7,216,156, 55,182,158, 63,172, 34, 4,169, 33, 7, 32,239, 2,128, 1, 82,123,254,184, 26, 41, 48, 49,216,116, 6, 41, 35, 31,
+200, 13, 1, 16,192,118, 22, 0,181, 0,168,247, 79,200, 60, 21, 21, 21,134,121, 51,126, 51, 56,235,176, 50,128,138,213,223,127,
+254, 49,112,176, 50,130,123,250,159,127, 0, 43,255, 63,144,161,255,179,119,255,130, 23, 3, 18, 58,244, 5,100,222,162,217,127,
+ 24,236, 13,152, 25,162,124, 32,139, 11, 63,126, 6,154,245,149,145, 65, 69,254, 63,195,159, 63,140, 12,140, 12, 28, 12,111, 63,
+252, 99,120,250,226, 23,131,127,168, 22,120,107,215, 96,236,217, 82,210,216,162,150,121,131,253, 4, 60, 80,229,223,208,208,128,
+209,203, 7,157, 15, 0, 18, 35,148, 94, 64,167,253,169,171,171, 51,252,248,241, 3,156, 14, 64,139, 1, 65, 96,237,218,181, 12,
+193,193,193,224,225,127,144, 28,232,192, 40,208,121, 0,160,134, 0,177, 97, 66,173,221, 0,163, 83, 0,163, 96,176, 2,128, 0,
+ 34,187, 1, 64,139,202,159, 24, 51, 65, 21, 30,172,114,135,205,121, 35,111, 75, 68,239,245,227, 91, 52, 7, 7,204,192, 86, 57,
+ 27,176,171,201, 9,172, 72,120,128, 65,242,243, 51,195,234,118, 86, 32,255, 20, 67, 90,136, 34,144, 22, 98,152,181,152,244, 94,
+ 63,190, 17, 10, 82,207, 2, 64,175,252,209,215, 4,144,106, 30,177,149, 63, 33,243, 64,133, 78,123,239, 12,134,194,220, 12,240,
+112, 60,168,115,165, 35,199, 12,158,235, 7,149,179,176,138,255,239,127,102,240,161, 61,196,152,215,220, 53,131,161,184, 32, 3,
+220,112, 0,143, 36,252, 5,138, 3,229,188, 28, 25,128,141, 1, 70,134, 11, 87,129,133,250,111, 38, 6, 63,191,160, 1, 63, 3,
+ 96, 20,144, 15,112, 29,246, 3,222,117,226,227, 67,212,130, 64, 80, 3, 0, 84,201,131,242,155,190,190, 62,120,158, 31,180, 48,
+ 16,212, 51, 6, 53,216, 65,149, 63,104,200, 31,212,251, 23, 20, 20, 36,106, 27, 32, 50, 64,158,106, 36,117,232, 31, 6, 70,167,
+ 0, 70,193, 96, 5, 0, 1, 68, 86, 3, 96, 32,122,254,232,189, 35,228,158, 16,174,161,126,106,186,145,148,185,127,106, 87,254,
+200,141, 29,100, 62, 50, 77,170,121,132,214, 2,144,106, 94,255,228, 25, 96,127,129,202,162, 35, 55,254,192,183, 4, 66, 10, 38,
+208, 72, 76, 16,113,141, 49, 40,232,232,158,204,144,151,151, 3, 55, 7, 68, 31, 58,205,192,240,245,219, 63,112, 35,195,207,207,
+155,193,205,205,109, 52, 7, 15, 97,128,173,242, 7, 45,210,131, 85,252,160,245, 0,160,202, 13, 95, 67, 0,212, 0, 0, 45, 4,
+148,146,146, 98,248,252,249, 51,195,153, 51,103,192,135, 1,129, 26, 2,160,149,255, 23, 47, 94,100, 80, 84, 84,100, 16, 22, 22,
+ 6, 87,254, 32,113, 82, 70, 69, 96,135, 2, 81, 50, 42, 48, 58, 5, 48, 10, 6, 43, 0, 8, 32,172, 13, 0, 66,123,253, 73,173,
+ 88,137, 61, 59,128, 20,115, 97,199,236, 98, 51,155,148,202,107, 86,218, 76,200, 48,255, 45, 6, 8, 70, 1, 31,161,248, 62, 85,
+253, 75,106,229,138,126,222, 63,242, 92, 62, 57,141, 28,116,243, 64, 59, 3, 96,141, 2, 74, 26, 77,232,113, 2, 91,240, 7,242,
+ 43,169, 61,117, 80, 47,110,242,228,169, 12, 87,174, 92, 97,152, 62,125, 58, 88,236,243, 23, 72, 1, 12, 26, 22, 6, 13,251, 14,
+212,252, 54,181, 23,252, 81,125, 1,225, 16,152,247, 7, 1,244,202, 31,148,118, 64,149, 24,104, 39, 0, 46, 53,216, 26, 0, 32,
+ 61,160, 94, 61,136, 45, 39, 39, 7, 94,236, 87, 91, 91, 11,110, 0, 72, 75, 75, 51,124,249,242, 5, 44, 7, 91, 11, 64, 10,160,
+198, 52,192,139, 23, 47,104, 22,134,180, 52,123, 20, 12,127, 0, 16, 64, 44,180,236, 53,211,194, 60,100, 0,170, 84,168, 97, 62,
+ 53, 87,245,211, 99,100,132,218, 21, 6, 41, 59, 3,136,137, 19,100, 64, 74,175, 31, 35,113,178,176,128,135,117,145, 1,168, 55,
+ 8, 59, 72,102,160, 70,159, 70,146,121,180, 0,200, 55,247, 33,223,222, 7, 58,205, 15,180,120, 15, 84,153, 19,123,131, 31,172,
+ 71, 15, 82, 15,170,224, 97,151, 1,129, 0, 72,108, 48, 92, 6, 52, 10, 70,193, 96, 5, 0, 1,196,232, 19, 83, 59,122, 79,230,
+ 40, 24, 5,163, 96, 20,140,130, 17, 3, 54, 47,110, 98, 28, 13, 5, 6, 6,128, 0, 98, 26, 13,130, 81, 48, 10, 70,193, 40, 24,
+ 5,163, 96,228, 1,128, 0, 26,109, 0,140,130, 81, 48, 10, 70,193, 40, 24, 5, 35, 16, 0, 4,208,104, 3, 96, 20,140,130, 81,
+ 48, 10, 70,193, 40, 24,129, 0, 32,128, 70, 27, 0,163, 96, 20,140,130, 81, 48, 10, 70,193, 8, 4, 0, 1,132,178, 11,192,215,
+ 86, 6,206,198,118,141, 45,190,107,110,177, 29,237,138,108, 30,169, 96, 56,154,135,190,109, 17, 57, 60, 71,195,111, 52, 62, 70,
+178,121,132,182,180, 14,180,121,163,241,139,223, 60, 74,204,194,229,190, 81, 64,123, 0, 16, 64, 52,191, 11,128,252,227,105,217,
+112,154,135, 12,176,221, 6,136, 77,205, 64, 0, 88, 5, 3,242, 63, 98,111, 60,100,211,197, 96,217,171,125,235,214, 45,240, 69,
+ 41, 48, 80, 84, 84, 4,222, 99, 63, 28, 1,182,248,184,126,253, 58,152, 6,109, 65, 27, 72, 0, 74,179,254, 1,233, 12, 27, 55,
+204,196,154,102,183,109, 63, 7,150, 35,148,150, 65,230,128,206, 78,208,211,213, 97,248, 7, 76,106, 48, 54, 8, 92,186,140, 41,
+ 14, 98,147,154, 63, 96,249,139, 90,249, 10,118,162, 37,182,123, 46,200, 13, 75, 98, 26, 1,163, 96,224,192,205,155, 55,135,109,
+ 57, 51,148, 0, 64, 0,209,229, 50, 32,114,142,107,189,250, 20,119,139, 16, 91, 37,138,126,202, 22,177, 21, 45, 57,123,234,137,
+ 41, 84, 96,230,194, 42, 27, 92,123,154, 97,234,240,221,103,143,238, 70,105, 69, 89, 48,253,242,199, 15,134, 63,223,127, 66, 4,
+ 63,124, 2, 83,184,238, 71,192, 5,144, 43,127, 16,232,235,235, 35,169,208, 4,185,141, 9, 24,196,160,138, 4, 70,131, 0, 62,
+246,244, 25,244, 47,148,209,227, 3, 86,241,147, 27, 31,212,172, 88, 96,149,191,151,167, 17,136, 7,174,232, 41,177, 3, 86,225,
+131,128,142,142, 14,138, 56, 44,158,144,197, 7,186, 81,134,124,170, 37, 57,135, 70, 97,139, 63, 88,121, 64, 73, 56,226,210, 75,
+174,153,212, 48,143,218,141,175,129,104, 40,129, 42,255,254,254,126,134, 25, 51,102,140,214,192, 3, 12, 0, 2,136,110,183, 1,
+ 82,171,117,143,209, 24,160,134, 25, 36, 28, 13, 74, 76,207, 29, 54,234, 1,186,147, 28, 4, 96, 52, 54,117, 36,223,216, 38,192,
+199,112,233,222, 10, 6, 78, 6, 25,134,191, 12, 71, 25, 94,205, 57,199,112,241,238, 91,134,160,142,249, 3,150,136,176,245, 44,
+ 65, 0, 91, 79,244, 31,145, 65,141,124, 6, 59, 62, 48,107,214, 44,162,227, 35, 33, 33, 1,204,135,209, 88, 11, 87,216,185,195,
+120,204,114,118,222, 14,164, 61,169, 90,104,130, 42,127,136,159,103, 1, 27, 0,152,242,176,145, 1, 98, 64, 77, 77, 61,195,211,
+231,111, 24,190,127,251,192, 96, 98, 98,194,112,233,210, 21,134, 69, 11,231, 98, 21, 95,176, 96,238,128, 22, 64,232,167,102,130,
+248,148, 84,216,200,249,153,210, 70, 0, 46, 61,228,186,143, 26,230,193, 46, 67, 35,198, 79,164,148,185,248,204,163,102,217, 13,
+171,252, 65,135, 52,129,242,238,210,165, 75, 25,162,163,163,137,214,191,101, 73, 51, 10, 31, 95, 67,125, 20, 16, 6, 0, 1,196,
+132,222, 26,135, 97,114,248,196,180,242,137,109, 44, 16,170,132, 97,149, 38, 35,142,138,153,212,211,226, 64,137,145, 16, 14, 11,
+ 11, 35, 42, 35,129, 50, 41,174, 74,191,162,162, 2,236, 46, 80,133, 68, 74,195, 3,220,235, 7, 86,254,235, 50,130, 25,132, 25,
+173, 25,158,207,153,204,192,243,246,195,128, 87,254,216,122,156,160, 74, 30,132,209,123,156,255,104,112,228, 20,161, 17, 28, 88,
+124,224,170,244, 23, 44, 88, 0, 30,254,247,180, 54,132, 8,240,114, 15, 72, 24,130,134,248, 65,105, 12, 68, 83, 10, 30, 63,121,
+206,240,240,193, 93,134,235, 55,174, 51,244,245,245, 50,104,104,168,128,195, 30,155,248, 64, 3, 80,165, 3,171,120,144,217,148,
+ 86,254,232,141,123,114, 70,250,112,233, 33,247, 36, 78,106,152, 7,170,136, 97, 55,156,130,244,129,202, 74,108,229, 37,242,141,
+168,196, 52, 42,112,185, 3,102, 14, 53, 78, 31, 69,174,252,139,139,139,193,149,255,145, 35, 71,200,174,252,113,137,141, 2,226,
+ 1, 64, 0,161,140, 0, 32, 15,189, 97,187,208, 6,159, 60,190, 33,123, 88, 3, 1,215, 37, 56,232,102,129, 18, 28,174,150, 29,
+182, 2, 2, 93,108,160,231,253, 86,173, 90,133,181,226,135,245,118,144, 71, 7, 64,226,196,128, 39,247, 30, 49,124, 93, 95,199,
+192,147, 52, 17,220, 24, 16, 23,230,100,184,183,254, 30,164,242, 7, 54, 12,192, 83, 0,172,164, 95,139, 11,202,136,200,211, 0,
+ 32, 62,169, 0, 84,185,200, 1,235,205, 41, 49, 12, 12, 41, 11, 24, 24, 68,185, 24, 24,174,127,192, 46,126,245, 61,105,102,227,
+106,196,145,210,120,106,106,106,194, 90,241,195,226,163, 43,193,135, 97,242,142, 19, 12, 18, 74,146, 12, 47, 30,190, 36,216,251,
+ 7, 1, 98, 70, 1, 72,233,121, 66,122,248,233, 88,123,250,176, 70, 1,177,102,113,114,178, 2, 43, 10,103,134,255, 12,172, 12,
+ 11, 23,204,135, 95,150,133, 75,156, 90, 21,215, 64,229, 59,244, 97,127,244, 52, 66,202, 72, 0, 76, 13,242, 58, 2, 66,234,136,
+ 73, 3,212, 50, 15,214, 8,128,132, 55, 40, 51,189, 7,234, 17, 36,187,242, 71, 54, 15, 86,209, 35, 95,161, 14, 51,135,210,184,
+ 5, 85,254,160,233, 69,216,241,207,182,182,182, 12,135, 15, 31, 38,107, 45, 84, 90, 57,164,236,156,213, 89,193, 48, 10, 40, 3,
+ 0, 1, 68,151, 41, 0, 80, 34,130,205,189, 98,107, 88, 32,139, 17, 26, 77,192, 87,248,144, 91, 32, 17,211,179, 39, 23, 32, 39,
+112,228,138, 31, 6, 96, 67,158,132, 86,193,126,103,120,196,240, 37,208,156,225, 63,111, 9, 48,199,214, 50,124, 97, 88,206,192,
+ 48, 7, 82, 49,252, 95, 93,194,192, 26, 55,153,225,207,159,127, 36,187, 79, 77, 77,141,226,204,253,106, 30, 3, 67,227, 12, 6,
+ 6, 89, 25, 6,134,151, 91,216, 24, 22,206,253,197,144,176, 2,183, 56, 41,128,218,247,217, 35, 47,246,123,190,161,131,129, 87,
+155,131,129, 71,181,128, 97, 85, 71, 10,131,190,142, 4,131,186, 79, 11, 81,241, 65, 76,250, 36,118,170, 0,150,118,145, 43,127,
+144, 24,108,225, 31,169, 32, 43, 43, 19,235,148, 12, 46,113,122, 3,216, 98, 76, 66, 21, 39, 49,151,102, 97,235,249, 99,155, 86,
+ 35,182, 17,128, 60, 26, 65,204,156, 61, 49,113,139,108,222,255, 85,130,152,101, 68,216,123,162,205, 35,102,212,148,156, 74, 27,
+189, 81, 1, 2, 66, 66,123,168, 82,249,103,102,102, 66, 58, 10,192,158,127, 73, 73, 9,195,132, 9, 19,224,149, 63,236,162, 47,
+ 98,123,255,176,202, 31,198, 6, 53, 2, 64,114,163, 83, 1,228, 1,128, 0,162,219, 26, 0, 80, 70,134,205, 95, 33,207, 39, 33,
+183, 86, 73,157,103,194,181, 24, 16, 95,207, 17, 87, 3,133, 22, 0,214,187,199, 86,241,147,210,251, 7,129, 29,149, 13, 12,190,
+237,125, 12,127, 92,172, 25, 64,145,198,115,252, 14,195,238,187,111,193,114,127, 92,114, 25,126, 95, 22, 97, 96, 20,205,162,202,
+144, 36,169, 25,254,109,192,114,134,220,196,199, 12,183, 50,202, 24,190,238,253,197, 32, 33,130, 95,156, 26, 35, 0,228, 52, 14,
+ 64,189,126,112,193,225,107,199,112,226,217, 43, 6, 94,125, 94,134,167, 59,239, 50, 48,112,176, 51, 4,231,198, 49, 8,201,248,
+ 12, 88, 70,196,181,234,159,212, 56, 1,169, 59,122,244, 40,124,161, 37, 49,108, 82,221, 70,201, 66, 52, 82,122,167,160, 70, 2,
+190, 69,173,184,210, 47, 49, 11,127,135, 67,133,129,222,243,135, 84,222,160,242,140,122,163, 49,212,232,249,131,242, 41,232, 50,
+ 38, 24,176,177,177, 1, 55, 0,136,173,252, 71, 1,237, 0, 64, 0,177, 16,147,161,136,145, 39, 38, 67,193, 90,243,176, 69, 37,
+176,181, 1,176,209, 1,144, 60,177, 35, 0,180, 42,120,169, 9, 96, 91,206,112,173, 7, 32,101,193, 83,208,140,181, 12,255,253,
+ 20, 25, 94, 90, 26, 49, 8, 51, 88, 51,112, 6, 3,123,252,207, 95,131,135,255, 89,222, 46,103,216, 50,225, 44, 3, 3, 51, 51,
+201,126,167,198,220,222,197,162, 72, 6, 19, 3, 96,252,230, 94, 97,208,230, 73,100,184, 41, 31,202,192, 48,165, 12,167,248, 64,
+141, 0,128,194,219,214, 84,157,193,197, 90,141,193, 87,183,140,161,119,194,116,134,107,103,159, 50,100, 56,153, 48,188,216,184,
+141,225,227,251, 79, 84, 73, 15,216,166, 10, 8,229, 15,124,189,125, 82,119,101,208,122, 27, 32, 37,225, 66, 10, 31,214, 56, 39,
+ 52, 37,136,172,143, 80,122,161, 86,154, 31,104, 0, 42, 63,113,173,149, 66, 30,194,167, 4, 80,195, 28,216, 52, 19,232,102,207,
+194,194, 66,134, 51,103,206,144, 52,239, 63, 10,104, 11, 0, 2,136, 5, 87, 65, 67,141,131,128,208, 19, 18,250, 40, 0,172,178,
+ 7,137, 35,239,205, 6,169,249, 78,102,239,144,212, 57, 37, 90,109, 3,132,245,238,241, 45, 6, 36, 5,220,237, 78, 99, 96, 5,
+ 86,250,223,159,221, 98, 96, 57, 62,153,225,247,218, 92, 6, 70,175, 30,134, 77, 89, 33, 12, 15, 55,221,103,240,237, 90, 4,202,
+101, 3,146,136,202,128, 61,142,157, 93,235, 25,180, 31,186, 51, 48,188,249,202, 80,234, 90,134, 87,156, 26, 35, 0,228,246,254,
+ 55,174,111, 96, 96,150,214, 98,224, 97, 80, 99,120,116,112, 22,195,103,198,255, 12,167,110, 61,102,112,185,242,148,200,120,127,
+ 4,231,135,133,205, 68,169,236, 65, 96,239, 94, 79,172,234,240,229, 15, 66, 67,253,164,174, 98, 31,172,219, 0, 65,126, 64, 30,
+ 1, 64,246, 19,186, 31, 97,249, 18, 54, 2,128, 45,252, 40, 89,141, 63, 92, 14,158,129,245,250, 65,163, 1,232, 35, 2,228,142,
+ 42,128,226,135, 26,149, 63,104,145,223,161, 67,135,192,211, 30,160,105, 14,208, 2, 64, 80,190, 5,173, 1, 24,221, 2, 56, 56,
+ 0, 64, 0,209,253, 28, 0, 80,102, 6, 37, 48, 88, 65,128,171,113, 64, 40,131, 18,179, 24,144, 22,189, 76, 98, 27, 24,176,222,
+ 63,182,138, 31,214,208, 33,197,189,160,213,254,191, 47, 55, 50,188,100, 56,202, 32, 1,172,248, 25, 62,126, 98,184, 59,171,132,
+ 65, 57,179,159,225,197,252, 18, 6, 6, 86, 96, 84, 50, 13,204,201,206,143,190, 50, 48,104,138, 5, 18, 45, 62, 16, 35, 0,160,
+ 48, 15,119, 49,103,224,255, 39,200,240,141,129,149, 97,109,127, 46,195,180, 45, 23, 24, 74, 61,108, 24, 18,250,150, 49,132,180,
+ 45, 30,144, 69,108,176,138, 14,113, 14, 0,101,141, 83, 16, 24,204,219, 0, 65,121, 27,148,215,209,183,255, 97, 3,196,172, 1,
+ 32, 38,143, 82,123, 29,201, 96, 30, 21,160,134,126,114,167,100,145,193,178,101, 75, 25, 14, 28, 56,192,192,184, 70, 24,204,223,
+ 85,195,203,224,214,242,153,193,206,206,142,164,109,127,163,128,182, 0, 32,128, 6,228, 32, 32, 88, 69,143, 46, 71, 78,102,199,
+ 86, 72,146, 83,144, 19,179,159,156,208,246, 68,124,189,127,114, 43,126, 24, 0,173,246, 95, 7,164, 61,218,189,193,139,254, 24,
+195,122,193,141, 2, 70, 33, 65,134, 59, 79, 62, 65,122,255,204,204, 3,146,136,112,237,247,167,228, 28, 0, 98, 26, 92,196, 22,
+236,176,222,127,138,131, 30, 67, 65,207, 68,134,202,170,114, 6, 81, 62, 49,134,171,215, 30, 49, 36, 92, 91, 54, 40, 78,139, 67,
+175,252, 97,233,132,156, 83,237, 64,219,253, 30, 63,126,196,240,246,221, 43, 96, 15,236, 32, 67, 78, 78, 54,124, 27, 32,186, 56,
+185, 61,104, 74,203, 3, 98, 23,207,145, 95,155, 65,119,226,236, 9, 35,185, 60,161,229, 46, 0, 80, 79,152, 18,243,112,245,216,
+141,141,141, 7, 77,165, 2, 95,236, 8,171,252, 47,253, 97,152,191,255, 23,152, 61, 90,249, 15, 46, 0, 16, 64, 40, 13, 0,244,
+249,119,210,248,108, 36, 55, 8,208, 19, 58,108, 20,128,146, 94,226, 96, 56, 98, 23,185,247,143,190,253, 15, 20,102,200, 13, 9,
+ 82, 90,217,176, 70, 64, 96,251, 60,134,255,107, 25, 24, 68, 18,102, 50, 28, 40, 8, 97,176,233, 92,202,192,192,202,202,192,205,
+193, 54, 32,254, 69, 30, 78,198,198,166,100,200,153, 26,189, 55, 88,239,191, 96,214,102,134,170,100, 55, 6, 41, 9, 7,120, 67,
+ 20,189, 97, 71,106,175, 7, 82,104,123,130,167, 1, 16,195,255,228, 87,166,232,231, 0, 32, 31, 15, 76, 44,160,246, 54, 64,122,
+140,128, 32,179, 7,178, 65, 70,235, 93, 0,148,154,135,171,199, 78,201,233,137,212,142,207,127, 43, 5,193,149, 62,184,241, 13,
+172,248, 87, 28,251, 5,206,199,163,199, 50, 15, 62, 0, 16, 64,116, 57, 7, 0, 91, 3, 0, 87, 69, 63, 16, 9,153, 86,219, 0,
+ 97,141, 17, 80,194, 71, 63, 48,137,220, 35, 79,193,251,254,145, 14,254,177,175, 66,204,165,125, 29,192, 2,147, 86, 97, 71, 45,
+ 0,234,253,187,238, 57,201, 16, 93,191, 8, 62, 23,141,158,238, 6, 67, 33,138, 62, 18, 64,206,193, 64,180,216, 6, 72,104, 58,
+130,220,116,128,188,246, 7,198, 31, 44, 96, 48,158, 4, 56, 84,128,123,203,103,170,250, 17,180, 8, 20,180,221, 15,180,237, 15,
+253, 28,128,209, 45,128,228, 3,128, 0,162,203, 20, 0,174,194, 3,223,118, 32, 82, 34,149,210,202,130, 22,219, 0, 97, 43,252,
+209, 79,234, 34,167,162,129,141, 28,208, 43, 94, 6,195, 37, 42,212,182,223,181,102, 54,213,226, 3,215, 40, 0,185,110, 38, 84,
+201,131, 70, 1,144,213, 97,155, 46, 64,118, 11,181,183, 1,210, 18, 32,175,253, 1,209,228,198, 5, 70, 25,128, 52,244, 79,110,
+249, 48, 24,239, 2, 24, 10,121,143, 41,252, 61, 56,204,253,252,211,176,166,113,124,233,151, 24, 48,122, 0, 16,245, 0, 64, 0,
+177, 12,214,196, 68,236, 42, 93, 74, 19, 43,181, 51, 30,204, 60,106, 86, 52,180,234,157, 14,238,158, 7,104,232,159,113, 80,198,
+ 7,181,195,146,210, 2,113, 40,143,244,128, 0,108, 97, 48,185,139,206,104,229,182,161, 50, 2, 48,248, 26, 15,212,201,187,184,
+ 70, 1,200,237, 40,142, 2, 76, 0, 16, 64,140,192, 0,252, 63, 26, 12,163, 96, 20,140,130, 81, 48, 10, 70, 10,216,188,184,137,
+113, 52, 20, 24, 24, 0, 2,136,105, 52, 8, 70,193, 40, 24, 5,163, 96, 20,140,130,145, 7, 0, 2,104,180, 1, 48, 10, 70,193,
+ 40, 24, 5,163, 96, 20,140, 64, 0, 16, 96, 0, 40,145,145,213,136,201, 82,122, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
};
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index cb04b9d3faf..19851204466 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -372,7 +372,7 @@ static void decimate_apply(void)
G.obedit= ob;
make_editMesh();
load_editMesh();
- free_editMesh();
+ free_editMesh(G.editMesh);
G.obedit= NULL;
tex_space_mesh(me);
@@ -449,7 +449,6 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
case B_MATASS:
if(G.obedit && G.obedit->actcol>0) {
if(G.obedit->type == OB_MESH) {
- undo_push_mesh("Assign material index");
efa= em->faces.first;
while(efa) {
if( faceselectedAND(efa, 1) )
@@ -458,6 +457,7 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
}
allqueue(REDRAWVIEW3D_Z, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Assign material index");
}
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
nu= editNurb.first;
@@ -563,8 +563,6 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
if(G.obedit) {
if(G.obedit->type == OB_MESH) {
efa= em->faces.first;
- if (event == B_SETSMOOTH) undo_push_mesh("Set Smooth");
- else if (event==B_SETSOLID) undo_push_mesh("Set Solid");
while(efa) {
if( faceselectedAND(efa, 1) ) {
if(event==B_SETSMOOTH) efa->flag |= ME_SMOOTH;
@@ -575,6 +573,8 @@ void do_common_editbuts(unsigned short event) // old name, is a mix of object an
makeDispList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
+ if(event == B_SETSMOOTH) BIF_undo_push("Set Smooth");
+ else BIF_undo_push("Set Solid");
}
else {
nu= editNurb.first;
@@ -1834,16 +1834,17 @@ void do_meshbuts(unsigned short event)
case B_DELVGROUP:
del_defgroup (G.obedit);
allqueue (REDRAWVIEW3D, 1);
+ BIF_undo_push("Delete vertex group");
break;
case B_ASSIGNVGROUP:
- undo_push_mesh("Assign to vertex group");
assign_verts_defgroup ();
allqueue (REDRAWVIEW3D, 1);
+ BIF_undo_push("Assign to vertex group");
break;
case B_REMOVEVGROUP:
- undo_push_mesh("Remove from vertex group");
remove_verts_defgroup (0);
allqueue (REDRAWVIEW3D, 1);
+ BIF_undo_push("Remove from vertex group");
break;
case B_SELVGROUP:
sel_verts_defgroup(1);
@@ -1961,28 +1962,28 @@ void do_meshbuts(unsigned short event)
G.f -= G_DISABLE_OK;
break;
case B_REMDOUB:
- undo_push_mesh("Rem Doubles");
notice("Removed: %d", removedoublesflag(1, doublimit));
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Rem Doubles");
break;
case B_SUBDIV:
waitcursor(1);
- undo_push_mesh("Subdivide");
subdivideflag(1, 0.0, editbutflag & B_BEAUTY);
countall();
waitcursor(0);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Subdivide");
break;
case B_FRACSUBDIV:
randfac= 10;
if(button(&randfac, 1, 100, "Rand fac:")==0) return;
waitcursor(1);
- undo_push_mesh("Fractal Subdivide");
fac= -( (float)randfac )/100;
subdivideflag(1, fac, editbutflag & B_BEAUTY);
countall();
waitcursor(0);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Fractal Subdivide");
break;
case B_XSORT:
if( select_area(SPACE_VIEW3D)) xsortvert_flag(1);
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index d4f29662304..bba7864a6cd 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -958,6 +958,35 @@ static void drawlattice(Object *ob)
/* ***************** ******************** */
+void calc_mesh_facedots_ext(void)
+{
+ EditMesh *em = G.editMesh;
+ EditFace *efa;
+ float mat[4][4];
+
+ if(em->faces.first==NULL) return;
+ efa= em->faces.first;
+
+ areawinset(curarea->win);
+ persp(PERSP_VIEW);
+
+ mymultmatrix(G.obedit->obmat);
+
+ MTC_Mat4SwapMat4(G.vd->persmat, mat);
+ mygetsingmatrix(G.vd->persmat);
+
+ efa= em->faces.first;
+ while(efa) {
+ if( efa->h==0) {
+ project_short(efa->cent, &(efa->xs));
+ }
+ efa= efa->next;
+ }
+ MTC_Mat4SwapMat4(G.vd->persmat, mat);
+
+ myloadmatrix(G.vd->viewmat);
+}
+
/* window coord, assuming all matrices are set OK */
void calc_meshverts(void)
{
@@ -1078,46 +1107,89 @@ void calc_nurbverts_ext(void)
}
-void tekenvertices(short sel)
+static void draw_vertices(short sel)
{
EditMesh *em = G.editMesh;
EditVert *eve;
- float size;
- char col[3];
+ EditFace *efa;
+ float size, fsize;
+ char col[3], fcol[3];
/* draws in zbuffer mode twice, to show invisible vertices transparent */
size= BIF_GetThemeValuef(TH_VERTEX_SIZE);
- if(sel) BIF_GetThemeColor3ubv(TH_VERTEX_SELECT, col);
- else BIF_GetThemeColor3ubv(TH_VERTEX, col);
+ fsize= BIF_GetThemeValuef(TH_FACEDOT_SIZE);
+ if(sel) {
+ BIF_GetThemeColor3ubv(TH_VERTEX_SELECT, col);
+ BIF_GetThemeColor3ubv(TH_FACE_DOT, fcol);
+ }
+ else {
+ BIF_GetThemeColor3ubv(TH_VERTEX, col);
+ BIF_GetThemeColor3ubv(TH_WIRE, fcol);
+ }
if(G.zbuf) {
- glPointSize(size>2.1?size/2.0: size);
glDisable(GL_DEPTH_TEST);
- glColor4ub(col[0], col[1], col[2], 100);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
-
- bglBegin(GL_POINTS);
- for(eve= em->verts.first; eve; eve= eve->next) {
- if(eve->h==0 && (eve->f & 1)==sel ) bglVertex3fv(eve->co);
+
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glPointSize(size>2.1?size/2.0: size);
+ glColor4ub(col[0], col[1], col[2], 100);
+
+ bglBegin(GL_POINTS);
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h==0 && (eve->f & SELECT)==sel ) bglVertex3fv(eve->co);
+ }
+ bglEnd();
+ }
+
+ if(G.scene->selectmode & SCE_SELECT_FACE) {
+ glPointSize(fsize>2.1?fsize/2.0: fsize);
+ glColor4ub(fcol[0], fcol[1], fcol[2], 100);
+
+ bglBegin(GL_POINTS);
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ if(sel == (efa->f & SELECT)) {
+ bglVertex3fv(efa->cent);
+ }
+ }
+ }
+ bglEnd();
}
- bglEnd();
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
}
- glPointSize(size);
- glColor3ub(col[0], col[1], col[2]);
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glPointSize(size);
+ glColor3ub(col[0], col[1], col[2]);
- bglBegin(GL_POINTS);
- for(eve= em->verts.first; eve; eve= eve->next) {
- if(eve->h==0 && (eve->f & 1)==sel ) bglVertex3fv(eve->co);
+ bglBegin(GL_POINTS);
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h==0 && (eve->f & SELECT)==sel ) bglVertex3fv(eve->co);
+ }
+ bglEnd();
+ }
+
+ if(G.scene->selectmode & SCE_SELECT_FACE) {
+ glPointSize(fsize);
+ glColor3ub(fcol[0], fcol[1], fcol[2]);
+
+ bglBegin(GL_POINTS);
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ if(sel == (efa->f & SELECT)) {
+ bglVertex3fv(efa->cent);
+ }
+ }
+ }
+ bglEnd();
}
- bglEnd();
glPointSize(1.0);
}
@@ -1760,14 +1832,14 @@ static void drawmeshsolid(Object *ob, float *nors)
efa= em->faces.first;
while(efa) {
- if(efa->v1->h==0 && efa->v2->h==0 && efa->v3->h==0) {
+ if(efa->h==0) {
if(efa->mat_nr!=matnr) {
matnr= efa->mat_nr;
set_gl_material(matnr+1);
}
- if(efa->v4 && efa->v4->h==0) {
+ if(efa->v4) {
glBegin(GL_QUADS);
glNormal3fv(efa->n);
@@ -2381,7 +2453,7 @@ static void drawmeshwire(Object *ob)
Material *ma;
EditEdge *eed;
EditFace *efa;
- float fvec[3], cent[3], *f1, *f2, *f3, *f4, *extverts=NULL;
+ float fvec[3], *f1, *f2, *f3, *f4, *extverts=NULL;
int a, start, end, test, ok, handles=0;
me= get_mesh(ob);
@@ -2390,7 +2462,7 @@ static void drawmeshwire(Object *ob)
if( (me->flag & ME_OPT_EDGES) && (me->flag & ME_SUBSURF) && me->subdiv) handles= 1;
- if(handles==0 && (G.f & (G_FACESELECT+G_DRAWFACES))) { /* faces */
+ if(handles==0 && (G.f & (G_FACESELECT+G_DRAWFACES))) { /* transp faces */
char col1[4], col2[4];
BIF_GetThemeColor4ubv(TH_FACE, col1);
@@ -2402,43 +2474,17 @@ static void drawmeshwire(Object *ob)
efa= em->faces.first;
while(efa) {
- if(efa->v1->h==0 && efa->v2->h==0 && efa->v3->h==0 && (efa->v4==NULL || efa->v4->h==0)) {
+ if(efa->h==0) {
- if(1) {
- if(faceselectedAND(efa, 1)) glColor4ub(col2[0], col2[1], col2[2], col2[3]);
- else glColor4ub(col1[0], col1[1], col1[2], col1[3]);
-
- glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
- glVertex3fv(efa->v1->co);
- glVertex3fv(efa->v2->co);
- glVertex3fv(efa->v3->co);
- if(efa->v4) glVertex3fv(efa->v4->co);
- glEnd();
-
- } else {
- if(faceselectedAND(efa, 1)) glColor4ub(col2[0], col2[1], col2[2], col2[3]);
- else glColor4ub(col1[0], col1[1], col1[2], col1[3]);
+ if(efa->f & SELECT) glColor4ub(col2[0], col2[1], col2[2], col2[3]);
+ else glColor4ub(col1[0], col1[1], col1[2], col1[3]);
- if(efa->v4 && efa->v4->h==0) {
-
- CalcCent4f(cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
- glBegin(GL_QUADS);
- VecMidf(fvec, cent, efa->v1->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, efa->v2->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, efa->v3->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, efa->v4->co); glVertex3fv(fvec);
- glEnd();
- }
- else {
-
- CalcCent3f(cent, efa->v1->co, efa->v2->co, efa->v3->co);
- glBegin(GL_TRIANGLES);
- VecMidf(fvec, cent, efa->v1->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, efa->v2->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, efa->v3->co); glVertex3fv(fvec);
- glEnd();
- }
- }
+ glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+ glVertex3fv(efa->v1->co);
+ glVertex3fv(efa->v2->co);
+ glVertex3fv(efa->v3->co);
+ if(efa->v4) glVertex3fv(efa->v4->co);
+ glEnd();
}
efa= efa->next;
}
@@ -2457,7 +2503,8 @@ static void drawmeshwire(Object *ob)
}
}
- if(handles==0 && (G.f & G_DRAWCREASES)) { /* Use crease edge Highlighting */
+ if(handles); // then no edges draw
+ else if(G.f & G_DRAWCREASES) { /* Use crease edge Highlighting */
eed= em->edges.first;
glBegin(GL_LINES);
@@ -2471,35 +2518,77 @@ static void drawmeshwire(Object *ob)
}
glEnd();
}
- else if(handles==0 && (G.f & G_DRAWEDGES)) { /* Use edge Highlighting */
+ else if(G.scene->selectmode == SCE_SELECT_FACE) {
+ /* draw faces twice, to have selected ones on top */
+ BIF_ThemeColor(TH_WIRE);
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0 && (efa->f & SELECT)==0) {
+ glBegin(GL_LINE_LOOP);
+ glVertex3fv(efa->v1->co);
+ glVertex3fv(efa->v2->co);
+ glVertex3fv(efa->v3->co);
+ if(efa->v4) glVertex3fv(efa->v4->co);
+ glEnd();
+ }
+ }
+ BIF_ThemeColor(TH_EDGE_SELECT);
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0 && (efa->f & SELECT)) {
+ glBegin(GL_LINE_LOOP);
+ glVertex3fv(efa->v1->co);
+ glVertex3fv(efa->v2->co);
+ glVertex3fv(efa->v3->co);
+ if(efa->v4) glVertex3fv(efa->v4->co);
+ glEnd();
+ }
+ }
+ }
+ else if( (G.f & G_DRAWEDGES) || (G.scene->selectmode & SCE_SELECT_EDGE) ) {
+ /* Use edge highlighting */
char col[4], colhi[4];
BIF_GetThemeColor3ubv(TH_EDGE_SELECT, colhi);
BIF_GetThemeColor3ubv(TH_WIRE, col);
-
- glShadeModel(GL_SMOOTH);
-
+
eed= em->edges.first;
- glBegin(GL_LINES);
- while(eed) {
- if(eed->h==0) {
-
- if(eed->v1->f & 1) glColor3ub(colhi[0], colhi[1], colhi[2]);
- else glColor3ub(col[0], col[1], col[2]);
-
- glVertex3fv(eed->v1->co);
-
- if(eed->v2->f & 1) glColor3ub(colhi[0], colhi[1], colhi[2]);
- else glColor3ub(col[0], col[1], col[2]);
+ /* (bleeding edges) to illustrate selection is defined on vertex basis */
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glShadeModel(GL_SMOOTH);
- glVertex3fv(eed->v2->co);
+ glBegin(GL_LINES);
+ while(eed) {
+ if(eed->h==0) {
+
+ if(eed->v1->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
+ else glColor3ub(col[0], col[1], col[2]);
+
+ glVertex3fv(eed->v1->co);
+
+ if(eed->v2->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
+ else glColor3ub(col[0], col[1], col[2]);
+
+ glVertex3fv(eed->v2->co);
+ }
+ eed= eed->next;
+ }
+ }
+ else {
+ glBegin(GL_LINES);
+ while(eed) {
+ if(eed->h==0) {
+ if(eed->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
+ else glColor3ub(col[0], col[1], col[2]);
+
+ glVertex3fv(eed->v1->co);
+ glVertex3fv(eed->v2->co);
+ }
+ eed= eed->next;
}
- eed= eed->next;
}
glEnd();
glShadeModel(GL_FLAT);
}
- else if(handles==0) {
+ else {
BIF_ThemeColor(TH_WIRE);
eed= em->edges.first;
glBegin(GL_LINES);
@@ -2536,8 +2625,8 @@ static void drawmeshwire(Object *ob)
calc_meshverts();
- tekenvertices(0);
- tekenvertices(1);
+ draw_vertices(0);
+ draw_vertices(1);
if(G.f & G_DRAWNORMALS) { /* normals */
/*cpack(0xDDDD22);*/
@@ -2547,7 +2636,7 @@ static void drawmeshwire(Object *ob)
efa= em->faces.first;
while(efa) {
- if(efa->v1->h==0 && efa->v2->h==0 && efa->v3->h==0) {
+ if(efa->h==0) {
if(efa->v4) CalcCent4f(fvec, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
else CalcCent3f(fvec, efa->v1->co, efa->v2->co, efa->v3->co);
@@ -3678,10 +3767,12 @@ static void drawWireExtra(Object *ob, ListBase *lb)
else BIF_ThemeColor(TH_WIRE);
bPolygonOffset(1);
+ glDepthMask(0); // disable write in zbuffer, selected edge wires show better
if(ob->type==OB_MESH) drawmeshwire(ob);
else drawDispListwire(lb);
+ glDepthMask(1);
bPolygonOffset(0);
}
@@ -3918,7 +4009,7 @@ void draw_object(Base *base)
/* draw outline for selected solid objects */
if(G.vd->flag & V3D_SELECT_OUTLINE) {
- if(dt>OB_WIRE && ob!=G.obedit && (G.f & G_BACKBUFSEL)==0) {
+ if(dt>OB_WIRE && dt<OB_TEXTURE && ob!=G.obedit && (G.f & G_BACKBUFSEL)==0) {
if((G.f & (G_VERTEXPAINT|G_FACESELECT|G_TEXTUREPAINT|G_WEIGHTPAINT))==0)
draw_solid_select(ob);
}
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index f6ed235798b..d80d195988e 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -535,24 +535,14 @@ void countall()
eve= em->verts.first;
while(eve) {
G.totvert++;
- if(eve->f & 1) G.totvertsel++;
+ if(eve->f & SELECT) G.totvertsel++;
eve= eve->next;
}
+
efa= em->faces.first;
while(efa) {
G.totface++;
- if(efa->v1->f & 1) {
- if(efa->v2->f & 1) {
- if(efa->v3->f & 1) {
- if(efa->v4) {
- if(efa->v4->f & 1) G.totfacesel++;
- }
- else {
- G.totfacesel++;
- }
- }
- }
- }
+ if(efa->f & SELECT) G.totfacesel++;
efa= efa->next;
}
}
@@ -1199,8 +1189,6 @@ void mergemenu(void)
if (event==-1) return; /* Return if the menu is closed without any choices */
- undo_push_mesh("Merge"); /* The action has been confirmed, push the mesh down the undo pipe */
-
if (event==1)
snap_to_center(); /*Merge at Center*/
else
@@ -1209,6 +1197,8 @@ void mergemenu(void)
notice("Removed %d Vertices", removedoublesflag(1, doublimit));
allqueue(REDRAWVIEW3D, 0);
countall();
+ BIF_undo_push("Merge"); /* push the mesh down the undo pipe */
+
}
void delete_context_selected(void) {
diff --git a/source/blender/src/editcurve.c b/source/blender/src/editcurve.c
index 1b2c202ae55..fd4bf043eb3 100644
--- a/source/blender/src/editcurve.c
+++ b/source/blender/src/editcurve.c
@@ -50,6 +50,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "BLI_dynstr.h"
#include "DNA_curve_types.h"
#include "DNA_ipo_types.h"
@@ -70,6 +71,7 @@
#include "BKE_object.h"
#include "BKE_main.h"
+#include "BIF_editmode_undo.h"
#include "BIF_gl.h"
#include "BIF_graphics.h"
#include "BIF_screen.h"
@@ -281,7 +283,6 @@ void load_editNurb()
nu= editNurb.first;
while(nu) {
newnu= duplicateNurb(nu);
- newnu->hide= 0;
BLI_addtail(&(cu->nurb), newnu);
if((nu->type & 7)==CU_NURBS) {
@@ -303,12 +304,9 @@ void make_editNurb()
/* make copy of baseNurb in editNurb */
Curve *cu=0;
Nurb *nu, *newnu;
- BezTriple *bezt;
- BPoint *bp;
KeyBlock *actkey=0;
- int a, tot=0;
- if(G.obedit==0) return;
+ if(G.obedit==NULL) return;
lastselbp= NULL; /* global for select row */
@@ -321,26 +319,6 @@ void make_editNurb()
while(nu) {
newnu= duplicateNurb(nu);
BLI_addtail(&editNurb, newnu);
- /* flags zero */
- newnu->hide= 0;
- if((nu->type & 7)==CU_BEZIER) {
- a= nu->pntsu;
- bezt= newnu->bezt;
- while(a--) {
- bezt->f1= bezt->f2= bezt->f3= bezt->hide= 0;
- bezt++;
- tot+= 3;
- }
- }
- else {
- a= nu->pntsu*nu->pntsv;
- bp= newnu->bp;
- while(a--) {
- bp->f1= bp->hide= 0;
- bp++;
- tot++;
- }
- }
nu= nu->next;
}
@@ -357,7 +335,7 @@ void make_editNurb()
}
makeDispList(G.obedit);
}
- else G.obedit= 0;
+ else G.obedit= NULL;
countall();
@@ -1046,8 +1024,6 @@ void switchdirectionNurb2(void)
if(G.obedit->lay & G.vd->lay);
else return;
- undo_push_curve("Switch direction");
-
nu= editNurb.first;
while(nu) {
if( isNurbsel(nu) ) switchdirectionNurb(nu);
@@ -1058,6 +1034,7 @@ void switchdirectionNurb2(void)
curve_changes_other_objects(G.obedit);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Switch direction");
}
void switchdirection_knots(float *base, int tot)
@@ -1113,7 +1090,7 @@ void deselectall_nurb()
if(G.obedit->lay & G.vd->lay);
else return;
- undo_push_curve("Deselect all");
+ BIF_undo_push("Deselect all");
a= 0;
nu= editNurb.first;
@@ -1203,7 +1180,7 @@ void hideNurb(int swap)
if(G.obedit==0) return;
- undo_push_curve("Hide");
+ BIF_undo_push("Hide");
nu= editNurb.first;
while(nu) {
@@ -1260,8 +1237,6 @@ void revealNurb()
if(G.obedit==0) return;
- undo_push_curve("Reveal");
-
nu= editNurb.first;
while(nu) {
nu->hide= 0;
@@ -1295,6 +1270,8 @@ void revealNurb()
makeDispList(G.obedit);
countall();
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Reveal");
+
}
void selectswapNurb()
@@ -1306,8 +1283,6 @@ void selectswapNurb()
if(G.obedit==0) return;
- undo_push_curve("Select swap");
-
nu= editNurb.first;
while(nu) {
if((nu->type & 7)==CU_BEZIER) {
@@ -1341,6 +1316,8 @@ void selectswapNurb()
countall();
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select swap");
+
}
/** Divide the line segments associated with the currently selected
@@ -1361,8 +1338,6 @@ void subdivideNurb()
// printf("*** subdivideNurb: entering subdivide\n");
- undo_push_curve("Subdivide");
-
nu= editNurb.first;
while(nu) {
amount= 0;
@@ -1723,6 +1698,8 @@ void subdivideNurb()
countall();
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Subdivide");
+
}
@@ -1887,8 +1864,6 @@ void setsplinetype(short type)
return;
}
- undo_push_curve("Set spline type");
-
nu= editNurb.first;
while(nu) {
if(isNurbsel(nu)) {
@@ -2015,6 +1990,8 @@ void setsplinetype(short type)
}
nu= nu->next;
}
+ BIF_undo_push("Set spline type");
+
}
/* ******************** SKINNING LOFTING!!! ******************** */
@@ -2269,8 +2246,6 @@ void merge_nurb()
return;
}
- undo_push_curve("Merge");
-
nus1= nsortbase.first;
nus2= nus1->next;
@@ -2310,6 +2285,8 @@ void merge_nurb()
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Merge");
+
}
@@ -2322,8 +2299,6 @@ void addsegment_nurb()
float *fp, offset;
int a;
- undo_push_curve("Add segment");
-
/* first decide if this is a surface merge! */
if(G.obedit->type==OB_SURF) nu= editNurb.first;
else nu= NULL;
@@ -2469,6 +2444,8 @@ void addsegment_nurb()
countall();
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Add segment");
+
}
else error("Can't make segment");
}
@@ -2480,8 +2457,6 @@ void mouse_nurb()
BPoint *bp=0;
short hand;
- undo_push_curve("Select");
-
hand= findnearestNurbvert(1, &nu, &bezt, &bp);
if(bezt || bp) {
@@ -2561,7 +2536,7 @@ void mouse_nurb()
}
-void spinNurb(float *dvec, short mode)
+static void spin_nurb(float *dvec, short mode)
{
Nurb *nu;
float *curs, si,phi,n[3],q[4],cmat[3][3],tmat[3][3],imat[3][3];
@@ -2572,8 +2547,6 @@ void spinNurb(float *dvec, short mode)
if(G.obedit==0 || G.obedit->type!=OB_SURF) return;
if( (G.vd->lay & G.obedit->lay)==0 ) return;
- undo_push_curve("Spin");
-
Mat3CpyMat4(persmat, G.vd->viewmat);
Mat3Inv(persinv, persmat);
@@ -2662,6 +2635,14 @@ void spinNurb(float *dvec, short mode)
nu= nu->next;
}
}
+
+}
+
+/* external one, for undo */
+void spinNurb(float *dvec, short mode)
+{
+ spin_nurb(dvec, mode);
+ BIF_undo_push("Spin");
}
void curve_changes_other_objects(Object *ob)
@@ -2694,8 +2675,6 @@ void addvert_Nurb(int mode)
if(mode=='e' && okee("Extrude")==0) return;
- undo_push_curve("Add vertex");
-
Mat3CpyMat4(mat, G.obedit->obmat);
Mat3Inv(imat,mat);
@@ -2817,6 +2796,8 @@ void addvert_Nurb(int mode)
if(mode!='e') {
/* dependencies with other objects, should become event */
curve_changes_other_objects(G.obedit);
+ BIF_undo_push("Add vertex");
+
}
}
@@ -2839,12 +2820,12 @@ void extrude_nurb()
else {
if(okee("Extrude")==0) return;
- undo_push_curve("Extrude");
ok= extrudeflagNurb(1); /* '1'= flag */
if(ok) {
makeDispList(G.obedit);
+ BIF_undo_push("Extrude");
countall();
transform('d');
}
@@ -2862,8 +2843,6 @@ void makecyclicNurb()
float *fp;
int a, b, cyclmode=0;
- undo_push_curve("Cyclic");
-
nu= editNurb.first;
while(nu) {
if( nu->pntsu>1 || nu->pntsv>1) {
@@ -2961,7 +2940,7 @@ void makecyclicNurb()
}
makeDispList(G.obedit);
curve_changes_other_objects(G.obedit);
-
+ BIF_undo_push("Cyclic");
}
void selectconnected_nurb()
@@ -2971,8 +2950,6 @@ void selectconnected_nurb()
BPoint *bp;
int a;
- undo_push_curve("Select connected");
-
findnearestNurbvert(1, &nu, &bezt, &bp);
if(bezt) {
a= nu->pntsu;
@@ -3011,6 +2988,8 @@ void selectconnected_nurb()
countall();
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select connected");
+
}
void selectrow_nurb()
@@ -3025,8 +3004,6 @@ void selectrow_nurb()
if(G.obedit==NULL || G.obedit->type!=OB_SURF) return;
if(lastselbp==NULL) return;
- undo_push_curve("Select Row");
-
/* find the correct nurb and toggle with u of v */
nu= editNurb.first;
while(nu) {
@@ -3066,6 +3043,8 @@ void selectrow_nurb()
}
nu= nu->next;
}
+ BIF_undo_push("Select Row");
+
}
void adduplicate_nurb()
@@ -3073,8 +3052,6 @@ void adduplicate_nurb()
if( (G.vd->lay & G.obedit->lay)==0 ) return;
- undo_push_curve("Duplicate");
-
adduplicateflagNurb(1);
countall();
@@ -3097,8 +3074,6 @@ void delNurb()
if(event== -1) return;
- undo_push_curve("Delete");
-
if(G.obedit->type==OB_SURF) {
if(event==0) deleteflagNurb(1);
else freeNurblist(&editNurb);
@@ -3107,6 +3082,8 @@ void delNurb()
makeDispList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Delete");
+
return;
}
@@ -3222,6 +3199,7 @@ void delNurb()
makeDispList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Delete");
}
}
return;
@@ -3248,6 +3226,7 @@ void delNurb()
makeDispList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Delete");
}
}
return;
@@ -3350,6 +3329,8 @@ void delNurb()
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Delete");
+
}
@@ -3377,8 +3358,6 @@ void join_curve(int type)
}
else if(okee("Join selected curves")==0) return;
- undo_push_curve("Join");
-
/* trasnform all selected curves inverse in obact */
Mat4Invert(imat, ob->obmat);
@@ -3435,6 +3414,8 @@ void join_curve(int type)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Join");
+
}
@@ -3764,7 +3745,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
makeknots(nu, 1, nu->flagu>>1);
BLI_addtail(&editNurb, nu); /* temporal for spin */
- spinNurb(0, 0);
+ spin_nurb(0, 0);
makeknots(nu, 2, nu->flagv>>1);
@@ -3791,7 +3772,7 @@ Nurb *addNurbprim(int type, int stype, int newname)
nu->resolv= 32;
nu->flag= CU_SMOOTH;
BLI_addtail(&editNurb, nu); /* temporal for extrude and translate */
- spinNurb(0, 0);
+ spin_nurb(0, 0);
BLI_remlink(&editNurb, nu);
@@ -3872,7 +3853,7 @@ void add_primitiveCurve(int stype)
check_editmode(OB_CURVE);
/* if no obedit: new object and enter editmode */
- if(G.obedit==0) {
+ if(G.obedit==NULL) {
add_object_draw(OB_CURVE);
base_init_from_view3d(BASACT, G.vd);
G.obedit= BASACT->object;
@@ -3892,7 +3873,6 @@ void add_primitiveCurve(int stype)
}
else {
cu= G.obedit->data;
- undo_push_curve("Add primitive");
}
if(cu->flag & CU_3D) type &= ~CU_2D;
@@ -3907,6 +3887,10 @@ void add_primitiveCurve(int stype)
countall();
allqueue(REDRAWALL, 0);
+
+ /* if a new object was created, it stores it in Curve, for reload original data and undo */
+ if(newname) load_editNurb();
+ BIF_undo_push("Add primitive");
}
void add_primitiveNurb(int type)
@@ -3931,9 +3915,6 @@ void add_primitiveNurb(int type)
setcursor_space(SPACE_VIEW3D, CURSOR_EDIT);
newname= 1;
}
- else {
- undo_push_curve("Add primitive");
- }
nu= addNurbprim(4, type, newname);
BLI_addtail(&editNurb,nu);
@@ -3941,6 +3922,10 @@ void add_primitiveNurb(int type)
countall();
allqueue(REDRAWALL, 0);
+
+ /* if a new object was created, it stores it in Curve, for reload original data and undo */
+ if(newname) load_editNurb();
+ else BIF_undo_push("Add primitive");
}
@@ -3954,8 +3939,6 @@ void clear_tilt()
if(okee("Clear tilt")==0) return;
- undo_push_curve("Clear tilt");
-
nu= editNurb.first;
while(nu) {
if( nu->bezt ) {
@@ -3979,6 +3962,8 @@ void clear_tilt()
makeBevelList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Clear tilt");
+
}
int bezt_compare (const void *e1, const void *e2)
@@ -4008,148 +3993,53 @@ int bezt_compare (const void *e1, const void *e2)
/* **************** undo for curves ************** */
-#define MAXUNDONAME 64
-typedef struct UndoElem {
- struct UndoElem *next, *prev;
- Object *ob;
- ListBase editnurb;
- char name[MAXUNDONAME];
-} UndoElem;
-
-static ListBase undobase={NULL, NULL};
-static UndoElem *curundo= NULL;
-
-static void undo_restore(UndoElem *undo)
+static void undoCurve_to_editCurve(void *lbv)
{
+ ListBase *lb= lbv;
Nurb *nu, *newnu;
-
+
freeNurblist(&editNurb);
/* copy */
- nu= undo->editnurb.first;
+ nu= lb->first;
while(nu) {
newnu= duplicateNurb(nu);
BLI_addtail(&editNurb, newnu);
nu= nu->next;
}
-
}
-/* name can be a dynamic string */
-void undo_push_curve(char *name)
+static void *editCurve_to_undoCurve(void)
{
+ ListBase *lb;
Nurb *nu, *newnu;
- UndoElem *uel;
- int nr;
-
- /* remove all undos after (also when curundo==NULL) */
- while(undobase.last != curundo) {
- uel= undobase.last;
- BLI_remlink(&undobase, uel);
- freeNurblist(&uel->editnurb);
- MEM_freeN(uel);
- }
-
- /* make new */
- curundo= uel= MEM_callocN(sizeof(UndoElem), "undo curve");
- strncpy(uel->name, name, MAXUNDONAME-1);
- BLI_addtail(&undobase, uel);
-
- /* and limit amount to the maximum */
- nr= 0;
- uel= undobase.last;
- while(uel) {
- nr++;
- if(nr==U.undosteps) break;
- uel= uel->prev;
- }
- if(uel) {
- while(undobase.first!=uel) {
- UndoElem *first= undobase.first;
- BLI_remlink(&undobase, first);
- freeNurblist(&first->editnurb);
- MEM_freeN(first);
- }
- }
- /* copy editNurb */
+ lb= MEM_callocN(sizeof(ListBase), "listbase undo");
+
+ /* copy */
nu= editNurb.first;
while(nu) {
newnu= duplicateNurb(nu);
- BLI_addtail(&curundo->editnurb, newnu);
+ BLI_addtail(lb, newnu);
nu= nu->next;
}
- curundo->ob= G.obedit;
+ return lb;
}
-/* 1= an undo, -1 is a redo. we have to make sure 'curundo' remains at previous step */
-void undo_curve_step(int step)
+static void free_undoCurve(void *lbv)
{
- UndoElem *uel, *next;
-
- /* prevent undo to happen on wrong object */
- uel= undobase.first;
- while(uel) {
- next= uel->next;
- if(uel->ob!=G.obedit) {
- if(uel==curundo) curundo= next;
- BLI_remlink(&undobase, uel);
- freeNurblist(&uel->editnurb);
- MEM_freeN(uel);
- }
- uel= next;
- }
+ ListBase *lb= lbv;
- if(step==1) {
- if(curundo==NULL) error("No undo available");
- else {
-
- /* if we undo, the current situation needs saved */
- if(curundo->next==NULL) {
- undo_push_curve("Original");
- curundo= curundo->prev;
- }
- undo_restore(curundo);
- curundo= curundo->prev;
- }
- }
- else {
- UndoElem *redo;
-
- /* curundo has to remain the undo step, so we load curundo->next->next! */
-
- if(curundo==NULL) redo= undobase.first;
- else redo= curundo->next;
-
- if(redo==NULL || redo->next==NULL) error("No redo available");
- else {
- undo_restore(redo->next);
- curundo= redo;
- }
- }
-
- lastnu= NULL; /* for selected */
-
- makeDispList(G.obedit);
- curve_changes_other_objects(G.obedit);
-
- countall();
- allqueue(REDRAWVIEW3D, 0);
- allqueue(REDRAWBUTSEDIT, 0);
+ freeNurblist(lb);
+ MEM_freeN(lb);
}
-void undo_clear_curve(void)
+/* and this is all the undo system needs to know */
+void undo_push_curve(char *name)
{
- UndoElem *uel;
-
- uel= undobase.first;
- while(uel) {
- freeNurblist(&uel->editnurb);
- uel= uel->next;
- }
- BLI_freelistN(&undobase);
- curundo= NULL;
+ undo_editmode_push(name, free_undoCurve, undoCurve_to_editCurve, editCurve_to_undoCurve);
}
+
/***/
diff --git a/source/blender/src/editmesh.c b/source/blender/src/editmesh.c
index 8b088a9f0bc..a8497b15a1d 100644
--- a/source/blender/src/editmesh.c
+++ b/source/blender/src/editmesh.c
@@ -46,8 +46,6 @@
#include "PIL_time.h"
-#include "MTC_matrixops.h"
-
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
@@ -62,6 +60,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_editVert.h"
+#include "BLI_dynstr.h"
#include "BKE_utildefines.h"
#include "BKE_key.h"
@@ -76,6 +75,7 @@
#include "BIF_editkey.h"
#include "BIF_editmesh.h"
+#include "BIF_editmode_undo.h"
#include "BIF_interface.h"
#include "BIF_mywindow.h"
#include "BIF_space.h"
@@ -95,7 +95,6 @@
#include "blendef.h"
#include "render.h"
-
/* own include */
#include "editmesh.h"
@@ -111,32 +110,31 @@ editmesh.c:
/* ***************** HASH ********************* */
-/* HASH struct quickly finding of edges */
-struct HashEdge {
- struct EditEdge *eed;
- struct HashEdge *next;
-};
-struct HashEdge *hashedgetab=NULL;
+#define EDHASHSIZE (512*512)
+#define EDHASH(a, b) (a % EDHASHSIZE)
/* ************ ADD / REMOVE / FIND ****************** */
-#define EDHASH(a, b) ( (a)*256 + (b) )
-#define EDHASHSIZE 65536
+/* used to bypass normal calloc with fast one */
+static void *(*callocvert)(size_t, size_t) = calloc;
+static void *(*callocedge)(size_t, size_t) = calloc;
+static void *(*callocface)(size_t, size_t) = calloc;
EditVert *addvertlist(float *vec)
{
EditMesh *em = G.editMesh;
EditVert *eve;
- static unsigned char hashnr= 0;
+ static int hashnr= 0;
- eve= calloc(sizeof(EditVert), 1);
+ eve= callocvert(sizeof(EditVert), 1);
BLI_addtail(&em->verts, eve);
if(vec) VECCOPY(eve->co, vec);
eve->hash= hashnr++;
+ if( hashnr>=EDHASHSIZE) hashnr= 0;
/* new verts get keyindex of -1 since they did not
* have a pre-editmode vertex order
@@ -145,15 +143,18 @@ EditVert *addvertlist(float *vec)
return eve;
}
+void free_editvert (EditVert *eve)
+{
+ if(eve->dw) MEM_freeN(eve->dw);
+ if(eve->fast==0) free(eve);
+}
+
+
EditEdge *findedgelist(EditVert *v1, EditVert *v2)
{
EditVert *v3;
struct HashEdge *he;
- if(hashedgetab==0) {
- hashedgetab= MEM_callocN(EDHASHSIZE*sizeof(struct HashEdge), "hashedgetab");
- }
-
/* swap ? */
if( (long)v1 > (long)v2) {
v3= v2;
@@ -161,7 +162,10 @@ EditEdge *findedgelist(EditVert *v1, EditVert *v2)
v1= v3;
}
- he= hashedgetab + EDHASH(v1->hash, v2->hash);
+ if(G.editMesh->hashedgetab==NULL)
+ G.editMesh->hashedgetab= MEM_callocN(EDHASHSIZE*sizeof(struct HashEdge), "hashedgetab");
+
+ he= G.editMesh->hashedgetab + EDHASH(v1->hash, v2->hash);
while(he) {
@@ -178,13 +182,13 @@ static void insert_hashedge(EditEdge *eed)
struct HashEdge *first, *he;
- first= hashedgetab + EDHASH(eed->v1->hash, eed->v2->hash);
+ first= G.editMesh->hashedgetab + EDHASH(eed->v1->hash, eed->v2->hash);
if( first->eed==0 ) {
first->eed= eed;
}
else {
- he= (struct HashEdge *)malloc(sizeof(struct HashEdge));
+ he= &eed->hash;
he->eed= eed;
he->next= first->next;
first->next= he;
@@ -197,8 +201,7 @@ static void remove_hashedge(EditEdge *eed)
struct HashEdge *first, *he, *prev=NULL;
-
- he=first= hashedgetab + EDHASH(eed->v1->hash, eed->v2->hash);
+ he=first= G.editMesh->hashedgetab + EDHASH(eed->v1->hash, eed->v2->hash);
while(he) {
if(he->eed == eed) {
@@ -208,13 +211,11 @@ static void remove_hashedge(EditEdge *eed)
he= first->next;
first->eed= he->eed;
first->next= he->next;
- free(he);
}
else he->eed= 0;
}
else {
prev->next= he->next;
- free(he);
}
return;
}
@@ -223,27 +224,6 @@ static void remove_hashedge(EditEdge *eed)
}
}
-void free_hashedgetab(void)
-{
- struct HashEdge *he, *first, *hen;
- int a;
-
- if(hashedgetab) {
-
- first= hashedgetab;
- for(a=0; a<EDHASHSIZE; a++, first++) {
- he= first->next;
- while(he) {
- hen= he->next;
- free(he);
- he= hen;
- }
- }
- MEM_freeN(hashedgetab);
- hashedgetab= 0;
- }
-}
-
EditEdge *addedgelist(EditVert *v1, EditVert *v2, EditEdge *example)
{
EditMesh *em = G.editMesh;
@@ -267,7 +247,7 @@ EditEdge *addedgelist(EditVert *v1, EditVert *v2, EditEdge *example)
if(eed==NULL) {
- eed= (EditEdge *)calloc(sizeof(EditEdge), 1);
+ eed= (EditEdge *)callocedge(sizeof(EditEdge), 1);
eed->v1= v1;
eed->v2= v2;
BLI_addtail(&em->edges, eed);
@@ -284,12 +264,6 @@ EditEdge *addedgelist(EditVert *v1, EditVert *v2, EditEdge *example)
return eed;
}
-void free_editvert (EditVert *eve)
-{
- if (eve->dw) MEM_freeN (eve->dw);
- free (eve);
-}
-
void remedge(EditEdge *eed)
{
EditMesh *em = G.editMesh;
@@ -300,12 +274,12 @@ void remedge(EditEdge *eed)
void free_editedge(EditEdge *eed)
{
- free(eed);
+ if(eed->fast==0) free(eed);
}
void free_editface(EditFace *efa)
{
- free(efa);
+ if(efa->fast==0) free(efa);
}
void free_vertlist(ListBase *edve)
@@ -365,7 +339,7 @@ EditFace *addfacelist(EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4, Ed
if(v1==v2 || v2==v3 || v1==v3) return NULL;
if(e2==0) return NULL;
- efa= (EditFace *)calloc(sizeof(EditFace), 1);
+ efa= (EditFace *)callocface(sizeof(EditFace), 1);
efa->v1= v1;
efa->v2= v2;
efa->v3= v3;
@@ -392,19 +366,131 @@ EditFace *addfacelist(EditVert *v1, EditVert *v2, EditVert *v3, EditVert *v4, Ed
BLI_addtail(&em->faces, efa);
- if(efa->v4) CalcNormFloat4(v1->co, v2->co, v3->co, v4->co, efa->n);
- else CalcNormFloat(v1->co, v2->co, v3->co, efa->n);
+ if(efa->v4) {
+ CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n);
+ CalcCent4f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
+ }
+ else {
+ CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n);
+ CalcCent3f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co);
+ }
return efa;
}
-/* ********* end add / new / find */
+/* ************************ end add/new/find ************ */
+
+/* ************************ stuct EditMesh manipulation ***************************** */
+/* fake callocs for fastmalloc below */
+static void *calloc_fastvert(size_t size, size_t nr)
+{
+ EditVert *eve= G.editMesh->curvert++;
+ eve->fast= 1;
+ return eve;
+}
+static void *calloc_fastedge(size_t size, size_t nr)
+{
+ EditEdge *eed= G.editMesh->curedge++;
+ eed->fast= 1;
+ return eed;
+}
+static void *calloc_fastface(size_t size, size_t nr)
+{
+ EditFace *efa= G.editMesh->curface++;
+ efa->fast= 1;
+ return efa;
+}
+/* allocate 1 chunk for all vertices, edges, faces. These get tagged to
+ prevent it from being freed
+*/
+static void init_editmesh_fastmalloc(EditMesh *em, int totvert, int totedge, int totface)
+{
+
+ if(totvert) em->allverts= MEM_callocN(totvert*sizeof(EditVert), "allverts");
+ else em->allverts= NULL;
+ em->curvert= em->allverts;
+
+ if(totedge==0) totedge= 4*totface; // max possible
+
+ if(totedge) em->alledges= MEM_callocN(totedge*sizeof(EditEdge), "alledges");
+ else em->alledges= NULL;
+ em->curedge= em->alledges;
+
+ if(totface) em->allfaces= MEM_callocN(totface*sizeof(EditFace), "allfaces");
+ else em->allfaces= NULL;
+ em->curface= em->allfaces;
+
+ callocvert= calloc_fastvert;
+ callocedge= calloc_fastedge;
+ callocface= calloc_fastface;
+}
+
+static void end_editmesh_fastmalloc(void)
+{
+ callocvert= calloc;
+ callocedge= calloc;
+ callocface= calloc;
+}
+
+void free_editMesh(EditMesh *em)
+{
+ if(em==NULL) return;
+
+ if(em->verts.first) free_vertlist(&em->verts);
+ if(em->edges.first) free_edgelist(&em->edges);
+ if(em->faces.first) free_facelist(&em->faces);
+
+ /* DEBUG: hashtabs are slowest part of enter/exit editmode. here a testprint */
+#if 0
+ if(em->hashedgetab) {
+ HashEdge *he, *hen;
+ int a, used=0, max=0, nr;
+ he= em->hashedgetab;
+ for(a=0; a<EDHASHSIZE; a++, he++) {
+ if(he->eed) used++;
+ hen= he->next;
+ nr= 0;
+ while(hen) {
+ nr++;
+ hen= hen->next;
+ }
+ if(max<nr) max= nr;
+ }
+ printf("hastab used %d max %d\n", used, max);
+ }
+#endif
+ if(em->hashedgetab) MEM_freeN(em->hashedgetab);
+ em->hashedgetab= NULL;
+
+ if(em->allverts) MEM_freeN(em->allverts);
+ if(em->alledges) MEM_freeN(em->alledges);
+ if(em->allfaces) MEM_freeN(em->allfaces);
+
+ em->allverts= em->curvert= NULL;
+ em->alledges= em->curedge= NULL;
+ em->allfaces= em->curface= NULL;
+
+ G.totvert= G.totface= 0;
+}
+
+/* on G.editMesh */
+static void editMesh_set_hash(void)
+{
+ EditEdge *eed;
+
+ for(eed=G.editMesh->edges.first; eed; eed= eed->next) {
+ if( findedgelist(eed->v1, eed->v2)==NULL )
+ insert_hashedge(eed);
+ }
+
+}
/* ************************ IN & OUT EDITMODE ***************************** */
+
static void edge_normal_compare(EditEdge *eed, EditFace *efa1)
{
EditFace *efa2;
@@ -415,7 +501,7 @@ static void edge_normal_compare(EditEdge *eed, EditFace *efa1)
if(efa1==efa2) return;
inp= efa1->n[0]*efa2->n[0] + efa1->n[1]*efa2->n[1] + efa1->n[2]*efa2->n[2];
- if(inp<0.999 && inp >-0.999) eed->f= 1;
+ if(inp<0.999 && inp >-0.999) eed->f2= 1;
if(efa1->v4) CalcCent4f(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co, efa1->v4->co);
else CalcCent3f(cent1, efa1->v1->co, efa1->v2->co, efa1->v3->co);
@@ -455,7 +541,7 @@ static void edge_drawflags(void)
}
eed= em->edges.first;
while(eed) {
- eed->f= eed->f1= 0;
+ eed->f2= eed->f1= 0;
eed->vn= 0;
eed= eed->next;
}
@@ -466,10 +552,10 @@ static void edge_drawflags(void)
e2= efa->e2;
e3= efa->e3;
e4= efa->e4;
- if(e1->f<3) e1->f+= 1;
- if(e2->f<3) e2->f+= 1;
- if(e3->f<3) e3->f+= 1;
- if(e4 && e4->f<3) e4->f+= 1;
+ if(e1->f2<3) e1->f2+= 1;
+ if(e2->f2<3) e2->f2+= 1;
+ if(e3->f2<3) e3->f2+= 1;
+ if(e4 && e4->f<3) e4->f2+= 1;
if(e1->vn==0) e1->vn= (EditVert *)efa;
if(e2->vn==0) e2->vn= (EditVert *)efa;
@@ -482,9 +568,9 @@ static void edge_drawflags(void)
if(G.f & G_ALLEDGES) {
efa= em->faces.first;
while(efa) {
- if(efa->e1->f>=2) efa->e1->f= 1;
- if(efa->e2->f>=2) efa->e2->f= 1;
- if(efa->e3->f>=2) efa->e3->f= 1;
+ if(efa->e1->f2>=2) efa->e1->f= 1;
+ if(efa->e2->f2>=2) efa->e2->f= 1;
+ if(efa->e3->f2>=2) efa->e3->f= 1;
if(efa->e4 && efa->e4->f>=2) efa->e4->f= 1;
efa= efa->next;
@@ -496,17 +582,17 @@ static void edge_drawflags(void)
eed= em->edges.first;
while(eed) {
- if(eed->f==1) eed->f1= 1;
+ if(eed->f2==1) eed->f1= 1;
eed= eed->next;
}
/* all faces, all edges with flag==2: compare normal */
efa= em->faces.first;
while(efa) {
- if(efa->e1->f==2) edge_normal_compare(efa->e1, efa);
- if(efa->e2->f==2) edge_normal_compare(efa->e2, efa);
- if(efa->e3->f==2) edge_normal_compare(efa->e3, efa);
- if(efa->e4 && efa->e4->f==2) edge_normal_compare(efa->e4, efa);
+ if(efa->e1->f2==2) edge_normal_compare(efa->e1, efa);
+ if(efa->e2->f2==2) edge_normal_compare(efa->e2, efa);
+ if(efa->e3->f2==2) edge_normal_compare(efa->e3, efa);
+ if(efa->e4 && efa->e4->f2==2) edge_normal_compare(efa->e4, efa);
efa= efa->next;
}
@@ -524,21 +610,11 @@ static void edge_drawflags(void)
}
}
-
-void free_editMesh(void)
-{
-
- EditMesh *em = G.editMesh;
- if(em->verts.first) free_vertlist(&em->verts);
- if(em->edges.first) free_edgelist(&em->edges);
- if(em->faces.first) free_facelist(&em->faces);
- free_hashedgetab();
- G.totvert= G.totface= 0;
-}
-
-void make_editMesh_real(Mesh *me)
+/* turns Mesh into editmesh */
+void make_editMesh()
{
EditMesh *em = G.editMesh;
+ Mesh *me= G.obedit->data;
MFace *mface;
TFace *tface;
MVert *mvert;
@@ -551,7 +627,7 @@ void make_editMesh_real(Mesh *me)
if(G.obedit==NULL) return;
/* because of reload */
- free_editMesh();
+ free_editMesh(G.editMesh);
G.totvert= tot= me->totvert;
@@ -562,6 +638,9 @@ void make_editMesh_real(Mesh *me)
waitcursor(1);
+ /* initialize fastmalloc for editmesh */
+ init_editmesh_fastmalloc(G.editMesh, me->totvert, me->totedge, me->totface);
+
/* keys? */
if(me->key) {
actkey= me->key->block.first;
@@ -620,7 +699,9 @@ void make_editMesh_real(Mesh *me)
for(a=0; a<me->totedge; a++, medge++) {
eed= addedgelist(evlist[medge->v1], evlist[medge->v2], NULL);
eed->crease= ((float)medge->crease)/255.0;
+
if(medge->flag & ME_SEAM) eed->seam= 1;
+ if(medge->flag & SELECT) eed->f |= SELECT;
}
}
@@ -647,16 +728,19 @@ void make_editMesh_real(Mesh *me)
if( tface->flag & TF_SELECT) {
if(G.f & G_FACESELECT) {
- eve1->f |= 1;
- eve2->f |= 1;
- if(eve3) eve3->f |= 1;
- if(eve4) eve4->f |= 1;
+ EM_select_face(efa, 1);
}
}
}
efa->mat_nr= mface->mat_nr;
efa->flag= mface->flag;
+
+ /* select face flag, if no edges we flush down */
+ if(mface->flag & ME_FACE_SEL) {
+ efa->f |= SELECT;
+ if(me->medge==NULL) EM_select_face(efa, 1);
+ }
}
if(me->tface) tface++;
@@ -664,42 +748,32 @@ void make_editMesh_real(Mesh *me)
}
}
- /* intrr: needed because of hidden vertices imported from Mesh */
+ /* flush hide flags */
- eed= em->edges.first;
- while(eed) {
+ for(eed= em->edges.first; eed; eed= eed->next) {
if(eed->v1->h || eed->v2->h) eed->h= 1;
else eed->h= 0;
- eed= eed->next;
}
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->e1->h || efa->e2->h || efa->e3->h) efa->h= 1;
+ else if(efa->e4 && efa->e4->h) efa->h= 1;
+ }
MEM_freeN(evlist);
-
- countall();
-
+
+ end_editmesh_fastmalloc(); // resets global function pointers
+
if (mesh_uses_displist(me))
makeDispList(G.obedit);
-
- waitcursor(0);
-}
-void make_editMesh(void)
-{
- Mesh *me;
+ /* this creates coherent selections. also needed for older files */
+ EM_selectmode_set();
- me= get_mesh(G.obedit);
- if (me != G.undo_last_data) {
- G.undo_edit_level= -1;
- G.undo_edit_highest= -1;
- if (G.undo_clear) G.undo_clear();
- G.undo_last_data= me;
- G.undo_clear= undo_clear_mesh;
- }
- make_editMesh_real(me);
+ countall();
+
+ waitcursor(0);
}
-
-
/** Rotates MFace and UVFace vertices in case the last
* vertex index is = 0.
* This function is a hack and may only be called in the
@@ -805,10 +879,11 @@ static void fix_faceindices(MFace *mface, EditFace *efa, int nr)
}
}
-
-void load_editMesh_real(Mesh *me, int undo)
+/* makes Mesh out of editmesh */
+void load_editMesh(void)
{
EditMesh *em = G.editMesh;
+ Mesh *me= G.obedit->data;
MVert *mvert, *oldverts;
MEdge *medge=NULL;
MFace *mface;
@@ -822,19 +897,22 @@ void load_editMesh_real(Mesh *me, int undo)
MDeformVert *dvert;
int usedDvert = 0;
+ waitcursor(1);
+ countall();
+
/* this one also tests of edges are not in faces: */
- /* eed->f==0: not in face, f==1: draw it */
+ /* eed->f2==0: not in face, f2==1: draw it */
/* eed->f1 : flag for dynaface (cylindertest, old engine) */
/* eve->f1 : flag for dynaface (sphere test, old engine) */
edge_drawflags();
- /* WATCH IT: in efa->f is punoflag (for vertex normal) */
+ /* this sets efa->puno, punoflag (for vertex normal & projection) */
vertexnormals( (me->flag & ME_NOPUNOFLIP)==0 );
eed= em->edges.first;
while(eed) {
totedge++;
- if(me->medge==NULL && (eed->f==0)) G.totface++;
+ if(me->medge==NULL && (eed->f2==0)) G.totface++;
eed= eed->next;
}
@@ -844,8 +922,7 @@ void load_editMesh_real(Mesh *me, int undo)
/* new Edge block */
if(totedge) {
- Mesh *mesh= G.obedit->data;
- if(mesh->medge==NULL) totedge= 0; // if edges get added is defined by orig mesh, not undo mesh
+ if(me->medge==NULL) totedge= 0; // if edges get added is defined by orig mesh
else medge= MEM_callocN(totedge*sizeof(MEdge), "loadeditMesh edge");
}
@@ -905,10 +982,8 @@ void load_editMesh_real(Mesh *me, int undo)
eve->vn= (EditVert *)(long)(a++); /* counter */
mvert->flag= 0;
-
- mvert->flag= 0;
if(eve->f1==1) mvert->flag |= ME_SPHERETEST;
- mvert->flag |= (eve->f & 1);
+ mvert->flag |= (eve->f & SELECT);
if (eve->h) mvert->flag |= ME_HIDE;
eve= eve->next;
@@ -928,9 +1003,12 @@ void load_editMesh_real(Mesh *me, int undo)
while(eed) {
medge->v1= (unsigned int) eed->v1->vn;
medge->v2= (unsigned int) eed->v2->vn;
- if(eed->f<2) medge->flag = ME_EDGEDRAW;
- medge->crease= (char)(255.0*eed->crease);
+
+ medge->flag= eed->f & SELECT;
+ if(eed->f2<2) medge->flag |= ME_EDGEDRAW;
if(eed->seam) medge->flag |= ME_SEAM;
+
+ medge->crease= (char)(255.0*eed->crease);
medge++;
eed= eed->next;
@@ -949,9 +1027,12 @@ void load_editMesh_real(Mesh *me, int undo)
if(efa->v4) mface->v4= (unsigned int) efa->v4->vn;
mface->mat_nr= efa->mat_nr;
- mface->puno= efa->f;
+ mface->puno= efa->puno;
mface->flag= efa->flag;
-
+ /* bit 0 of flag is already taken for smooth... */
+ if(efa->f & 1) mface->flag |= ME_FACE_SEL;
+ else mface->flag &= ~ME_FACE_SEL;
+
/* mat_nr in vertex */
if(me->totcol>1) {
mvert= me->mvert+mface->v1;
@@ -966,28 +1047,28 @@ void load_editMesh_real(Mesh *me, int undo)
}
}
- /* watch: efa->e1->f==0 means loose edge */
+ /* watch: efa->e1->f2==0 means loose edge */
- if(efa->e1->f==1) {
+ if(efa->e1->f2==1) {
mface->edcode |= ME_V1V2;
- efa->e1->f= 2;
+ efa->e1->f2= 2;
}
- if(efa->e2->f==1) {
+ if(efa->e2->f2==1) {
mface->edcode |= ME_V2V3;
- efa->e2->f= 2;
+ efa->e2->f2= 2;
}
- if(efa->e3->f==1) {
+ if(efa->e3->f2==1) {
if(efa->v4) {
mface->edcode |= ME_V3V4;
}
else {
mface->edcode |= ME_V3V1;
}
- efa->e3->f= 2;
+ efa->e3->f2= 2;
}
- if(efa->e4 && efa->e4->f==1) {
+ if(efa->e4 && efa->e4->f2==1) {
mface->edcode |= ME_V4V1;
- efa->e4->f= 2;
+ efa->e4->f2= 2;
}
@@ -1003,7 +1084,7 @@ void load_editMesh_real(Mesh *me, int undo)
if(medge==NULL) {
eed= em->edges.first;
while(eed) {
- if( eed->f==0 ) {
+ if( eed->f2==0 ) {
mface= &((MFace *) me->mface)[i];
mface->v1= (unsigned int) eed->v1->vn;
mface->v2= (unsigned int) eed->v2->vn;
@@ -1017,9 +1098,8 @@ void load_editMesh_real(Mesh *me, int undo)
tex_space_mesh(me);
- /* tface block, always when undo even when it wasnt used,
- this because of empty me pointer */
- if( (me->tface || undo) && me->totface ) {
+ /* tface block */
+ if( me->tface && me->totface ) {
TFace *tfn, *tf;
tf=tfn= MEM_callocN(sizeof(TFace)*me->totface, "tface");
@@ -1029,14 +1109,14 @@ void load_editMesh_real(Mesh *me, int undo)
*tf= efa->tf;
if(G.f & G_FACESELECT) {
- if( faceselectedAND(efa, 1) ) tf->flag |= TF_SELECT;
+ if( efa->f & SELECT) tf->flag |= TF_SELECT;
else tf->flag &= ~TF_SELECT;
}
tf++;
efa= efa->next;
}
- /* if undo, me was empty */
+
if(me->tface) MEM_freeN(me->tface);
me->tface= tfn;
}
@@ -1046,7 +1126,7 @@ void load_editMesh_real(Mesh *me, int undo)
}
/* mcol: same as tface... */
- if( (me->mcol || undo) && me->totface) {
+ if(me->mcol && me->totface) {
unsigned int *mcn, *mc;
mc=mcn= MEM_mallocN(4*sizeof(int)*me->totface, "mcol");
@@ -1154,183 +1234,12 @@ void load_editMesh_real(Mesh *me, int undo)
void remake_editMesh(void)
{
- undo_push_mesh("Undo all changes");
make_editMesh();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Undo all changes");
}
-/* load from EditMode to Mesh */
-
-void load_editMesh()
-{
- Mesh *me;
-
- waitcursor(1);
- countall();
- me= get_mesh(G.obedit);
-
- load_editMesh_real(me, 0);
-}
-
-
-
-/* ********************* TOOLS ********************* */
-
-
-
-
-
-/*********************** EDITMESH UNDO ********************************/
-/* Mesh Edit undo by Alexander Ewring, */
-/* ported by Robert Wenzlaff */
-/* */
-/* Any meshedit function wishing to create an undo step, calls */
-/* undo_push_mesh("menu_name_of_step"); */
-
-Mesh *undo_new_mesh(void)
-{
- return(MEM_callocN(sizeof(Mesh), "undo_mesh"));
-}
-
-void undo_free_mesh(Mesh *me)
-{
- if(me->mat) MEM_freeN(me->mat);
- if(me->orco) MEM_freeN(me->orco);
- if(me->mvert) MEM_freeN(me->mvert);
- if(me->medge) MEM_freeN(me->medge);
- if(me->mface) MEM_freeN(me->mface);
- if(me->tface) MEM_freeN(me->tface);
- if(me->dvert) free_dverts(me->dvert, me->totvert);
- if(me->mcol) MEM_freeN(me->mcol);
- if(me->msticky) MEM_freeN(me->msticky);
- if(me->bb) MEM_freeN(me->bb);
- if(me->disp.first) freedisplist(&me->disp);
- MEM_freeN(me);
-}
-
-
-void undo_push_mesh(char *name)
-{
- Mesh *me;
- int i;
-
- countall();
-
- G.undo_edit_level++;
-
- if (G.undo_edit_level<0) {
- printf("undo: ERROR: G.undo_edit_level negative\n");
- return;
- }
-
-
- if (G.undo_edit[G.undo_edit_level].datablock != 0) {
- undo_free_mesh(G.undo_edit[G.undo_edit_level].datablock);
- }
- if (strcmp(name, "U")!=0) {
- for (i=G.undo_edit_level+1; i<(U.undosteps-1); i++) {
- if (G.undo_edit[i].datablock != 0) {
- undo_free_mesh(G.undo_edit[i].datablock);
- G.undo_edit[i].datablock= 0;
- }
- }
- G.undo_edit_highest= G.undo_edit_level;
- }
-
- me= undo_new_mesh();
-
- if (G.undo_edit_level>=U.undosteps) {
- G.undo_edit_level--;
- undo_free_mesh((Mesh*)G.undo_edit[0].datablock);
- G.undo_edit[0].datablock= 0;
- for (i=0; i<(U.undosteps-1); i++) {
- G.undo_edit[i]= G.undo_edit[i+1];
- }
- }
-
- if (strcmp(name, "U")!=0) strcpy(G.undo_edit[G.undo_edit_level].name, name);
- //printf("undo: saving block: %d [%s]\n", G.undo_edit_level, G.undo_edit[G.undo_edit_level].name);
-
- G.undo_edit[G.undo_edit_level].datablock= (void*)me;
- load_editMesh_real(me, 1);
-}
-
-void undo_pop_mesh(int steps) /* steps == 1 is one step */
-{
- if (G.undo_edit_level > (steps-2)) {
- undo_push_mesh("U");
- G.undo_edit_level-= steps;
-
- //printf("undo: restoring block: %d [%s]\n", G.undo_edit_level, G.undo_edit[G.undo_edit_level].name); -
- make_editMesh_real((Mesh*)G.undo_edit[G.undo_edit_level].datablock);
- allqueue(REDRAWVIEW3D, 0);
- makeDispList(G.obedit);
- G.undo_edit_level--;
- } else error("No more steps to undo");
-}
-
-
-void undo_redo_mesh(void)
-{
- if ( (G.undo_edit[G.undo_edit_level+2].datablock) &&
- ( (G.undo_edit_level+1) <= G.undo_edit_highest ) ) {
- G.undo_edit_level++;
-
- //printf("redo: restoring block: %d [%s]\n", G.undo_edit_level+1, G.undo_edit[G.undo_edit_level+1].name);-
- make_editMesh_real((Mesh*)G.undo_edit[G.undo_edit_level+1].datablock);
- allqueue(REDRAWVIEW3D, 0);
- makeDispList(G.obedit);
- } else error("No more steps to redo");
-}
-
-void undo_clear_mesh(void)
-{
- int i;
- Mesh *me;
-
- for (i=0; i<=UNDO_EDIT_MAX; i++) {
- me= (Mesh*) G.undo_edit[i].datablock;
- if (me) {
- //printf("undo: freeing %d\n", i);
- undo_free_mesh(me);
- G.undo_edit[i].datablock= 0;
- }
- }
-}
-
-#ifdef WIN32
- #ifndef snprintf
- #define snprintf _snprintf
- #endif
-#endif
-
-void undo_menu_mesh(void)
-{
- short event=66;
- int i;
- char menu[2080], temp[64];
-
- TEST_EDITMESH
-
- strcpy(menu, "Undo %t|%l");
- strcat(menu, "|All changes%x1|%l");
-
- for (i=G.undo_edit_level; i>=0; i--) {
- snprintf(temp, 64, "|%s%%x%d", G.undo_edit[i].name, i+2);
- strcat(menu, temp);
- }
-
- event=pupmenu_col(menu, 20);
-
- if(event<1) return;
-
- if (event==1) remake_editMesh();
- else undo_pop_mesh(G.undo_edit_level-event+3);
-}
-
-/* *************** END UNDO *************/
-
/* *************** SEPARATE (partial exit editmode) *************/
@@ -1344,13 +1253,12 @@ void separatemenu(void)
waitcursor(1);
switch (event) {
-
- case 1:
- separate_mesh();
- break;
- case 2:
- separate_mesh_loose();
- break;
+ case 1:
+ separate_mesh();
+ break;
+ case 2:
+ separate_mesh_loose();
+ break;
}
waitcursor(0);
}
@@ -1383,7 +1291,7 @@ void separate_mesh(void)
* 1. add a duplicate object: this will be the new one, we remember old pointer
* 2: then do a split if needed.
* 3. put apart: all NOT selected verts, edges, faces
- * 4. call loadobeditdata(): this will be the new object
+ * 4. call load_editMesh(): this will be the new object
* 5. freelist and get back old verts, edges, facs
*/
@@ -1397,12 +1305,12 @@ void separate_mesh(void)
base= base->next;
}
- /* testen for split */
+ /* test for split */
ok= 0;
eed= em->edges.first;
while(eed) {
- flag= (eed->v1->f & 1)+(eed->v2->f & 1);
- if(flag==1) {
+ flag= (eed->v1->f & SELECT)+(eed->v2->f & SELECT);
+ if(flag==SELECT) {
ok= 1;
break;
}
@@ -1410,7 +1318,7 @@ void separate_mesh(void)
}
if(ok) {
/* SPLIT: first make duplicate */
- adduplicateflag(1);
+ adduplicateflag(SELECT);
/* SPLIT: old faces have 3x flag 128 set, delete these ones */
delfaceflag(128);
}
@@ -1420,7 +1328,7 @@ void separate_mesh(void)
eve= em->verts.first;
while(eve) {
v1= eve->next;
- if((eve->f & 1)==0) {
+ if((eve->f & SELECT)==0) {
BLI_remlink(&em->verts, eve);
BLI_addtail(&edve, eve);
}
@@ -1429,7 +1337,7 @@ void separate_mesh(void)
eed= em->edges.first;
while(eed) {
e1= eed->next;
- if( (eed->v1->f & 1)==0 || (eed->v2->f & 1)==0 ) {
+ if((eed->f & SELECT)==0) {
BLI_remlink(&em->edges, eed);
BLI_addtail(&eded, eed);
}
@@ -1438,7 +1346,7 @@ void separate_mesh(void)
efa= em->faces.first;
while(efa) {
vl1= efa->next;
- if( (efa->v1->f & 1)==0 || (efa->v2->f & 1)==0 || (efa->v3->f & 1)==0 ) {
+ if((efa->f & SELECT)==0) {
BLI_remlink(&em->faces, efa);
BLI_addtail(&edvl, efa);
}
@@ -1466,19 +1374,14 @@ void separate_mesh(void)
BASACT->flag &= ~SELECT;
makeDispList(G.obedit);
- free_editMesh();
+ free_editMesh(G.editMesh);
em->verts= edve;
em->edges= eded;
em->faces= edvl;
/* hashedges are freed now, make new! */
- eed= em->edges.first;
- while(eed) {
- if( findedgelist(eed->v1, eed->v2)==NULL )
- insert_hashedge(eed);
- eed= eed->next;
- }
+ editMesh_set_hash();
G.obedit= oldob;
BASACT= oldbase;
@@ -1513,7 +1416,7 @@ void separate_mesh_loose(void)
* 1. add a duplicate object: this will be the new one, we remember old pointer
* 2: then do a split if needed.
* 3. put apart: all NOT selected verts, edges, faces
- * 4. call loadobeditdata(): this will be the new object
+ * 4. call load_editMesh(): this will be the new object
* 5. freelist and get back old verts, edges, facs
*/
@@ -1541,35 +1444,30 @@ void separate_mesh_loose(void)
}
/*--------- Select connected-----------*/
- //sel= 3;
- /* clear test flags */
- eve= em->verts.first;
- while(eve) {
- eve->f&= ~1;
- eve= eve->next;
- }
+ EM_clear_flag_all(SELECT);
+
/* Select a random vert to start with */
eve= em->verts.first;
- eve->f |= 1;
+ eve->f |= SELECT;
while(check==1) {
check= 0;
eed= em->edges.first;
while(eed) {
if(eed->h==0) {
- if(eed->v1->f & 1) {
- if( (eed->v2->f & 1)==0 ) {
- eed->v2->f |= 1;
+ if(eed->v1->f & SELECT) {
+ if( (eed->v2->f & SELECT)==0 ) {
+ eed->v2->f |= SELECT;
vertsep++;
check= 1;
}
}
- else if(eed->v2->f & 1) {
- if( (eed->v1->f & 1)==0 ) {
- eed->v1->f |= 1;
+ else if(eed->v2->f & SELECT) {
+ if( (eed->v1->f & SELECT)==0 ) {
+ eed->v1->f |= SELECT;
vertsep++;
- check= 1;
+ check= SELECT;
}
}
}
@@ -1582,14 +1480,14 @@ void separate_mesh_loose(void)
/* If the amount of vertices that is about to be split == the total amount
of verts in the mesh, it means that there is only 1 unconnected object, so we don't have to separate
*/
- if(G.totvert==vertsep)done=1;
+ if(G.totvert==vertsep) done=1;
else{
/* Test for splitting: Separate selected */
ok= 0;
eed= em->edges.first;
while(eed) {
- flag= (eed->v1->f & 1)+(eed->v2->f & 1);
- if(flag==1) {
+ flag= (eed->v1->f & SELECT)+(eed->v2->f & SELECT);
+ if(flag==SELECT) {
ok= 1;
break;
}
@@ -1597,19 +1495,19 @@ void separate_mesh_loose(void)
}
if(ok) {
/* SPLIT: first make duplicate */
- adduplicateflag(1);
+ adduplicateflag(SELECT);
/* SPLIT: old faces have 3x flag 128 set, delete these ones */
delfaceflag(128);
}
-
-
+ EM_select_flush(); // from verts->edges->faces
+
/* set apart: everything that is not selected */
edve.first= edve.last= eded.first= eded.last= edvl.first= edvl.last= 0;
eve= em->verts.first;
while(eve) {
v1= eve->next;
- if((eve->f & 1)==0) {
+ if((eve->f & SELECT)==0) {
BLI_remlink(&em->verts, eve);
BLI_addtail(&edve, eve);
}
@@ -1618,7 +1516,7 @@ void separate_mesh_loose(void)
eed= em->edges.first;
while(eed) {
e1= eed->next;
- if( (eed->v1->f & 1)==0 || (eed->v2->f & 1)==0 ) {
+ if( (eed->f & SELECT)==0 ) {
BLI_remlink(&em->edges, eed);
BLI_addtail(&eded, eed);
}
@@ -1627,7 +1525,7 @@ void separate_mesh_loose(void)
efa= em->faces.first;
while(efa) {
vl1= efa->next;
- if( (efa->v1->f & 1)==0 || (efa->v2->f & 1)==0 || (efa->v3->f & 1)==0 ) {
+ if( (efa->f & SELECT)==0 ) {
BLI_remlink(&em->faces, efa);
BLI_addtail(&edvl, efa);
}
@@ -1655,19 +1553,14 @@ void separate_mesh_loose(void)
BASACT->flag &= ~SELECT;
makeDispList(G.obedit);
- free_editMesh();
+ free_editMesh(G.editMesh);
em->verts= edve;
em->edges= eded;
em->faces= edvl;
/* hashedges are freed now, make new! */
- eed= em->edges.first;
- while(eed) {
- if( findedgelist(eed->v1, eed->v2)==NULL )
- insert_hashedge(eed);
- eed= eed->next;
- }
+ editMesh_set_hash();
G.obedit= oldob;
BASACT= oldbase;
@@ -1677,16 +1570,230 @@ void separate_mesh_loose(void)
}
/* unselect the vertices that we (ab)used for the separation*/
- eve= em->verts.first;
- while(eve) {
- eve->f&= ~1;
- eve= eve->next;
- }
-
+ EM_clear_flag_all(SELECT);
+
waitcursor(0);
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
}
+/* ******************************************** */
+
+/* *************** UNDO ***************************** */
+/* new mesh undo, based on pushing editmesh data itself */
+/* reuses same code as for global and curve undo... unify that (ton) */
+
+/* only one 'hack', to save memory it doesn't store the first push, but does a remake editmesh */
+
+/* a compressed version of editmesh data */
+typedef struct EditVertC
+{
+ float no[3];
+ float co[3];
+ unsigned char f, h;
+ short totweight;
+ struct MDeformWeight *dw;
+ int keyindex;
+} EditVertC;
+
+typedef struct EditEdgeC
+{
+ int v1, v2;
+ unsigned char f, h, seam, pad;
+ float crease;
+} EditEdgeC;
+
+typedef struct EditFaceC
+{
+ int v1, v2, v3, v4;
+ unsigned char mat_nr, flag, f, h, puno, pad;
+ short pad1;
+} EditFaceC;
+
+typedef struct UndoMesh {
+ EditVertC *verts;
+ EditEdgeC *edges;
+ EditFaceC *faces;
+ TFace *tfaces;
+ int totvert, totedge, totface;
+} UndoMesh;
+
+
+/* for callbacks */
+
+static void free_undoMesh(void *umv)
+{
+ UndoMesh *um= umv;
+ EditVertC *evec;
+ int a;
+
+ for(a=0, evec= um->verts; a<um->totvert; a++, evec++) {
+ if(evec->dw) MEM_freeN(evec->dw);
+ }
+
+ if(um->verts) MEM_freeN(um->verts);
+ if(um->edges) MEM_freeN(um->edges);
+ if(um->faces) MEM_freeN(um->faces);
+ if(um->tfaces) MEM_freeN(um->tfaces);
+ MEM_freeN(um);
+}
+
+static void *editMesh_to_undoMesh(void)
+{
+ EditMesh *em= G.editMesh;
+ UndoMesh *um;
+ Mesh *me= G.obedit->data;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+ EditVertC *evec=NULL;
+ EditEdgeC *eedc=NULL;
+ EditFaceC *efac=NULL;
+ TFace *tface= NULL;
+ int a=0;
+
+ um= MEM_callocN(sizeof(UndoMesh), "undomesh");
+
+ for(eve=em->verts.first; eve; eve= eve->next) um->totvert++;
+ for(eed=em->edges.first; eed; eed= eed->next) um->totedge++;
+ for(efa=em->faces.first; efa; efa= efa->next) um->totface++;
+
+ /* malloc blocks */
+
+ if(um->totvert) evec= um->verts= MEM_callocN(um->totvert*sizeof(EditVertC), "allvertsC");
+ if(um->totedge) eedc= um->edges= MEM_callocN(um->totedge*sizeof(EditEdgeC), "alledgesC");
+ if(um->totface) efac= um->faces= MEM_callocN(um->totface*sizeof(EditFaceC), "allfacesC");
+
+ if(me->tface) tface= um->tfaces= MEM_mallocN(um->totface*sizeof(TFace), "all tfacesC");
+
+ //printf("copy editmesh %d\n", um->totvert*sizeof(EditVert) + um->totedge*sizeof(EditEdge) + um->totface*sizeof(EditFace));
+ //printf("copy undomesh %d\n", um->totvert*sizeof(EditVertC) + um->totedge*sizeof(EditEdgeC) + um->totface*sizeof(EditFaceC));
+
+ /* now copy vertices */
+ for(eve=em->verts.first; eve; eve= eve->next, evec++, a++) {
+ VECCOPY(evec->co, eve->co);
+ VECCOPY(evec->no, eve->no);
+
+ evec->f= eve->f;
+ evec->h= eve->h;
+ evec->keyindex= eve->keyindex;
+ evec->totweight= eve->totweight;
+ evec->dw= MEM_dupallocN(eve->dw);
+
+ eve->vn= (EditVert *)a;
+ }
+
+ /* copy edges */
+ for(eed=em->edges.first; eed; eed= eed->next, eedc++) {
+ eedc->v1= (int)eed->v1->vn;
+ eedc->v2= (int)eed->v2->vn;
+ eedc->f= eed->f;
+ eedc->h= eed->h;
+ eedc->seam= eed->seam;
+ eedc->crease= eed->crease;
+ }
+
+ /* copy faces */
+ for(efa=em->faces.first; efa; efa= efa->next, efac++) {
+ efac->v1= (int)efa->v1->vn;
+ efac->v2= (int)efa->v2->vn;
+ efac->v3= (int)efa->v3->vn;
+ if(efa->v4) efac->v4= (int)efa->v4->vn;
+ else efac->v4= -1;
+
+ efac->mat_nr= efa->mat_nr;
+ efac->flag= efa->flag;
+ efac->f= efa->f;
+ efac->h= efa->h;
+ efac->puno= efa->puno;
+
+ if(tface) {
+ *tface= efa->tf;
+ tface++;
+ }
+ }
+
+ return um;
+}
+
+static void undoMesh_to_editMesh(void *umv)
+{
+ UndoMesh *um= umv;
+ EditMesh *em= G.editMesh;
+ EditVert *eve, **evar=NULL;
+ EditEdge *eed;
+ EditFace *efa;
+ EditVertC *evec;
+ EditEdgeC *eedc;
+ EditFaceC *efac;
+ TFace *tface;
+ int a=0;
+
+ free_editMesh(G.editMesh);
+
+ /* malloc blocks */
+ memset(em, 0, sizeof(EditMesh));
+
+ init_editmesh_fastmalloc(em, um->totvert, um->totedge, um->totface);
+
+ /* now copy vertices */
+ if(um->totvert) evar= MEM_mallocN(um->totvert*sizeof(EditVert *), "vertex ar");
+ for(a=0, evec= um->verts; a<um->totvert; a++, evec++) {
+ eve= addvertlist(evec->co);
+ evar[a]= eve;
+
+ VECCOPY(eve->no, evec->no);
+ eve->f= evec->f;
+ eve->h= evec->h;
+ eve->totweight= evec->totweight;
+ eve->keyindex= evec->keyindex;
+ eve->dw= MEM_dupallocN(evec->dw);
+ }
+
+ /* copy edges */
+ for(a=0, eedc= um->edges; a<um->totedge; a++, eedc++) {
+ eed= addedgelist(evar[eedc->v1], evar[eedc->v2], NULL);
+
+ eed->f= eedc->f;
+ eed->h= eedc->h;
+ eed->seam= eedc->seam;
+ eed->crease= eedc->crease;
+ }
+
+ /* copy faces */
+ tface= um->tfaces;
+ for(a=0, efac= um->faces; a<um->totface; a++, efac++) {
+ if(efac->v4 != -1)
+ efa= addfacelist(evar[efac->v1], evar[efac->v2], evar[efac->v3], evar[efac->v4], NULL);
+ else
+ efa= addfacelist(evar[efac->v1], evar[efac->v2], evar[efac->v3], NULL, NULL);
+
+ efa->mat_nr= efac->mat_nr;
+ efa->flag= efac->flag;
+ efa->f= efac->f;
+ efa->h= efac->h;
+ efa->puno= efac->puno;
+
+ if(tface) {
+ efa->tf= *tface;
+ tface++;
+ }
+ }
+
+ end_editmesh_fastmalloc();
+ if(evar) MEM_freeN(evar);
+}
+
+
+/* and this is all the undo system needs to know */
+void undo_push_mesh(char *name)
+{
+ undo_editmode_push(name, free_undoMesh, undoMesh_to_editMesh, editMesh_to_undoMesh);
+}
+
+
+
+/* *************** END UNDO *************/
+
diff --git a/source/blender/src/editmesh_add.c b/source/blender/src/editmesh_add.c
index 2c8d1b9613a..2186735ecd3 100644
--- a/source/blender/src/editmesh_add.c
+++ b/source/blender/src/editmesh_add.c
@@ -123,6 +123,9 @@ void addvert_mesh(void)
EditVert *eve,*v1=0;
float *curs, mat[3][3],imat[3][3];
+ // hurms, yah...
+ if(G.scene->selectmode==SCE_SELECT_FACE) return;
+
TEST_EDITMESH
Mat3CpyMat4(mat, G.obedit->obmat);
@@ -130,15 +133,14 @@ void addvert_mesh(void)
v1= em->verts.first;
while(v1) {
- if(v1->f & 1) break;
+ if(v1->f & SELECT) break;
v1= v1->next;
}
- eve= v1; /* prevent there are more selected */
- while(eve) {
- eve->f&= ~1;
- eve= eve->next;
- }
+ eve= v1;
+ /* prevent there are more selected */
+ EM_clear_flag_all(SELECT);
+
eve= addvertlist(0);
curs= give_cursor();
@@ -148,7 +150,7 @@ void addvert_mesh(void)
VecSubf(eve->co, eve->co, G.obedit->obmat[3]);
Mat3MulVecfl(imat, eve->co);
- eve->f= 1;
+ eve->f= SELECT;
if(v1) {
addedgelist(v1, eve, NULL);
@@ -168,34 +170,34 @@ void addedgeface_mesh(void)
EditVert *eve, *neweve[4];
EditFace *efa;
float con1, con2, con3;
- short aantal=0;
+ short amount=0;
if( (G.vd->lay & G.obedit->lay)==0 ) return;
/* how many selected ? */
eve= em->verts.first;
while(eve) {
- if(eve->f & 1) {
- aantal++;
- if(aantal>4) break;
- neweve[aantal-1]= eve;
+ if(eve->f & SELECT) {
+ amount++;
+ if(amount>4) break;
+ neweve[amount-1]= eve;
}
eve= eve->next;
}
- if(aantal==2) {
+ if(amount==2) {
addedgelist(neweve[0], neweve[1], NULL);
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
return;
}
- if(aantal<2 || aantal>4) {
+ if(amount<2 || amount>4) {
error("Incorrect number of vertices to make edge/face");
return;
}
efa= NULL; // check later
- if(aantal==3) {
+ if(amount==3) {
if(exist_face(neweve[0], neweve[1], neweve[2], 0)==0) {
efa= addfacelist(neweve[0], neweve[1], neweve[2], 0, NULL);
@@ -203,7 +205,7 @@ void addedgeface_mesh(void)
}
else error("The selected vertices already form a face");
}
- else if(aantal==4) {
+ else if(amount==4) {
if(exist_face(neweve[0], neweve[1], neweve[2], neweve[3])==0) {
con1= convex(neweve[0]->co, neweve[1]->co, neweve[2]->co, neweve[3]->co);
@@ -227,7 +229,7 @@ void addedgeface_mesh(void)
CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n);
- inp= efa->n[0]*G.vd->viewmat[0][2] + efa->n[1]*G.vd->viewmat[1][2] + efa->n[2]*G.vd->viewmat[2][2];
+ inp= efa->n[0]*G.vd->viewmat[0][2] + efa->n[1]*G.vd->viewmat[1][2] + efa->n[2]*G.vd->viewmat[2][2];
if(inp < 0.0) flipface(efa);
}
@@ -237,71 +239,6 @@ void addedgeface_mesh(void)
makeDispList(G.obedit);
}
-void adduplicateflag(int flag)
-{
- EditMesh *em = G.editMesh;
- /* old verts have flag 128 set, and flag 'flag' cleared
- new verts have flag 'flag' set */
- EditVert *eve, *v1, *v2, *v3, *v4;
- EditEdge *eed;
- EditFace *efa;
-
- /* vertices first */
- eve= em->verts.last;
- while(eve) {
- eve->f&= ~128;
- if(eve->f & flag) {
- v1= addvertlist(eve->co);
- v1->f= eve->f;
- eve->f-= flag;
- eve->f|= 128;
- eve->vn= v1;
-#ifdef __NLA
- /* >>>>> FIXME: Copy deformation weight ? */
- v1->totweight = eve->totweight;
- if (eve->totweight){
- v1->dw = MEM_mallocN (eve->totweight * sizeof(MDeformWeight), "deformWeight");
- memcpy (v1->dw, eve->dw, eve->totweight * sizeof(MDeformWeight));
- }
- else
- v1->dw=NULL;
-#endif
- }
- eve= eve->prev;
- }
- eed= em->edges.first;
- while(eed) {
- if( (eed->v1->f & 128) && (eed->v2->f & 128) ) {
- v1= eed->v1->vn;
- v2= eed->v2->vn;
- addedgelist(v1, v2, eed);
- }
- eed= eed->next;
- }
-
- /* then dupicate faces */
- efa= em->faces.first;
- while(efa) {
- if( (efa->v1->f & 128) && (efa->v2->f & 128) && (efa->v3->f & 128) ) {
- if(efa->v4) {
- if(efa->v4->f & 128) {
- v1= efa->v1->vn;
- v2= efa->v2->vn;
- v3= efa->v3->vn;
- v4= efa->v4->vn;
- addfacelist(v1, v2, v3, v4, efa);
- }
- }
- else {
- v1= efa->v1->vn;
- v2= efa->v2->vn;
- v3= efa->v3->vn;
- addfacelist(v1, v2, v3, 0, efa);
- }
- }
- efa= efa->next;
- }
-}
void adduplicate_mesh(void)
{
@@ -309,8 +246,9 @@ void adduplicate_mesh(void)
TEST_EDITMESH
waitcursor(1);
- undo_push_mesh("Duplicate");
- adduplicateflag(1);
+
+ adduplicateflag(SELECT);
+
waitcursor(0);
countall(); /* for G.totvert in calc_meshverts() */
transform('d');
@@ -327,6 +265,7 @@ void add_primitiveMesh(int type)
float q[4], cmat[3][3];
static short tot=32, seg=32, subdiv=2;
short a, b, ext=0, fill=0, totoud, newob=0;
+ char *undostr="Add Primitive";
if(G.scene->id.lib) return;
@@ -361,11 +300,7 @@ void add_primitiveMesh(int type)
me= G.obedit->data;
/* deselectall */
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) eve->f&= ~1;
- eve= eve->next;
- }
+ EM_clear_flag_all(SELECT);
totoud= tot; /* store, and restore when cube/plane */
@@ -396,6 +331,7 @@ void add_primitiveMesh(int type)
fill= 1;
if(newob) rename_id((ID *)G.obedit, "Plane");
if(newob) rename_id((ID *)me, "Plane");
+ undostr="Add Plane";
break;
case 1: /* cube */
tot= 4;
@@ -403,6 +339,7 @@ void add_primitiveMesh(int type)
fill= 1;
if(newob) rename_id((ID *)G.obedit, "Cube");
if(newob) rename_id((ID *)me, "Cube");
+ undostr="Add Cube";
break;
case 4: /* circle */
if(button(&tot,3,100,"Vertices:")==0) return;
@@ -410,6 +347,8 @@ void add_primitiveMesh(int type)
fill= 0;
if(newob) rename_id((ID *)G.obedit, "Circle");
if(newob) rename_id((ID *)me, "Circle");
+ if(G.scene->selectmode==SCE_SELECT_FACE) notice("Circle is not visible in face mode");
+ undostr="Add Circle";
break;
case 5: /* cylinder */
if(button(&tot,3,100,"Vertices:")==0) return;
@@ -417,6 +356,7 @@ void add_primitiveMesh(int type)
fill= 1;
if(newob) rename_id((ID *)G.obedit, "Cylinder");
if(newob) rename_id((ID *)me, "Cylinder");
+ undostr="Add Cylinder";
break;
case 6: /* tube */
if(button(&tot,3,100,"Vertices:")==0) return;
@@ -424,6 +364,7 @@ void add_primitiveMesh(int type)
fill= 0;
if(newob) rename_id((ID *)G.obedit, "Tube");
if(newob) rename_id((ID *)me, "Tube");
+ undostr="Add Tube";
break;
case 7: /* cone */
if(button(&tot,3,100,"Vertices:")==0) return;
@@ -431,27 +372,32 @@ void add_primitiveMesh(int type)
fill= 1;
if(newob) rename_id((ID *)G.obedit, "Cone");
if(newob) rename_id((ID *)me, "Cone");
+ undostr="Add Cone";
break;
case 10: /* grid */
if(button(&tot,2,100,"X res:")==0) return;
if(button(&seg,2,100,"Y res:")==0) return;
if(newob) rename_id((ID *)G.obedit, "Grid");
if(newob) rename_id((ID *)me, "Grid");
+ undostr="Add Grid";
break;
case 11: /* UVsphere */
if(button(&seg,3,100,"Segments:")==0) return;
if(button(&tot,3,100,"Rings:")==0) return;
if(newob) rename_id((ID *)G.obedit, "Sphere");
if(newob) rename_id((ID *)me, "Sphere");
+ undostr="Add UV Sphere";
break;
case 12: /* Icosphere */
if(button(&subdiv,1,5,"Subdivision:")==0) return;
if(newob) rename_id((ID *)G.obedit, "Sphere");
if(newob) rename_id((ID *)me, "Sphere");
+ undostr="Add Ico Sphere";
break;
case 13: /* Monkey */
if(newob) rename_id((ID *)G.obedit, "Suzanne");
if(newob) rename_id((ID *)me, "Suzanne");
+ undostr="Add Monkey";
break;
}
@@ -475,7 +421,7 @@ void add_primitiveMesh(int type)
Mat3MulVecfl(imat, vec);
eve= addvertlist(vec);
- eve->f= 1;
+ eve->f= SELECT;
if(a==0) {
if(b==0) v1= eve;
else v2= eve;
@@ -500,8 +446,8 @@ void add_primitiveMesh(int type)
vdown= v1;
vtop= v2;
}
- if(vtop) vtop->f= 1;
- if(vdown) vdown->f= 1;
+ if(vtop) vtop->f= SELECT;
+ if(vdown) vdown->f= SELECT;
/* top and bottom face */
if(fill) {
@@ -587,9 +533,10 @@ void add_primitiveMesh(int type)
vec[1]= dia*phid;
Mat3MulVecfl(imat, vec);
for(a=0;a<seg-1;a++) {
- extrudeflag(2,0);
+ extrudeflag_vert(2);
translateflag(2, vec);
}
+ recalc_editnormals(); // does face centers too
}
else if(type==11) { /* UVsphere */
float tmat[3][3];
@@ -626,7 +573,7 @@ void add_primitiveMesh(int type)
Mat3MulMat3(cmat, imat, tmat);
for(a=0; a<seg; a++) {
- extrudeflag(2, 0);
+ extrudeflag_vert(2);
rotateflag(2, v1->co, cmat);
}
removedoublesflag(4, 0.0001);
@@ -677,7 +624,9 @@ void add_primitiveMesh(int type)
float v[3];
v[0]= (monkeyv[i][0]+127)/128.0, v[1]= monkeyv[i][1]/128.0, v[2]= monkeyv[i][2]/128.0;
tv[i]= addvertlist(v);
+ tv[i]->f |= SELECT;
tv[monkeynv+i]= (fabs(v[0]= -v[0])<0.001)?tv[i]:addvertlist(v);
+ tv[monkeynv+i]->f |= SELECT;
}
for (i=0; i<monkeynf; i++) {
addfacelist(tv[monkeyf[i][0]+i-monkeyo], tv[monkeyf[i][1]+i-monkeyo], tv[monkeyf[i][2]+i-monkeyo], (monkeyf[i][3]!=monkeyf[i][2])?tv[monkeyf[i][3]+i-monkeyo]:NULL, NULL);
@@ -685,15 +634,30 @@ void add_primitiveMesh(int type)
}
MEM_freeN(tv);
+
+ /* and now do imat */
+ eve= em->verts.first;
+ while(eve) {
+ if(eve->f & SELECT) {
+ VecAddf(eve->co,eve->co,cent);
+ Mat3MulVecfl(imat,eve->co);
+ }
+ eve= eve->next;
+ }
}
+ // simple selection flush OK, based on fact it's a single model
+ EM_select_flush(); // flushes vertex -> edge -> face selection
+
if(type!=0 && type!=10) righthandfaces(1);
countall();
allqueue(REDRAWINFO, 1); /* 1, because header->win==0! */
allqueue(REDRAWALL, 0);
makeDispList(G.obedit);
-
- if (type==13) notice("Oooh Oooh Oooh");
+
+ /* if a new object was created, it stores it in Mesh, for reload original data and undo */
+ if(newob) load_editMesh();
+ BIF_undo_push(undostr);
}
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c
index a977130c385..263f860a7b2 100644
--- a/source/blender/src/editmesh_lib.c
+++ b/source/blender/src/editmesh_lib.c
@@ -53,6 +53,7 @@ editmesh_lib: generic (no UI, no menus) operations/evaluators for editmesh data
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
@@ -67,22 +68,89 @@ editmesh_lib: generic (no UI, no menus) operations/evaluators for editmesh data
#include "editmesh.h"
-/* ********************* */
+/* ********* Selection ************ */
+
+void EM_select_face(EditFace *efa, int sel)
+{
+ if(sel) {
+ efa->f |= SELECT;
+ efa->e1->f |= SELECT;
+ efa->e2->f |= SELECT;
+ efa->e3->f |= SELECT;
+ if(efa->e4) efa->e4->f |= SELECT;
+ efa->v1->f |= SELECT;
+ efa->v2->f |= SELECT;
+ efa->v3->f |= SELECT;
+ if(efa->v4) efa->v4->f |= SELECT;
+ }
+ else {
+ efa->f &= ~SELECT;
+ efa->e1->f &= ~SELECT;
+ efa->e2->f &= ~SELECT;
+ efa->e3->f &= ~SELECT;
+ if(efa->e4) efa->e4->f &= ~SELECT;
+ efa->v1->f &= ~SELECT;
+ efa->v2->f &= ~SELECT;
+ efa->v3->f &= ~SELECT;
+ if(efa->v4) efa->v4->f &= ~SELECT;
+ }
+}
-int editmesh_nfaces_selected(void)
+void EM_select_edge(EditEdge *eed, int sel)
+{
+ if(sel) {
+ eed->f |= SELECT;
+ eed->v1->f |= SELECT;
+ eed->v2->f |= SELECT;
+ }
+ else {
+ eed->f &= ~SELECT;
+ eed->v1->f &= ~SELECT;
+ eed->v2->f &= ~SELECT;
+ }
+}
+
+int faceselectedOR(EditFace *efa, int flag)
+{
+
+ if(efa->v1->f & flag) return 1;
+ if(efa->v2->f & flag) return 1;
+ if(efa->v3->f & flag) return 1;
+ if(efa->v4 && (efa->v4->f & 1)) return 1;
+ return 0;
+}
+
+// replace with (efa->f & SELECT)
+int faceselectedAND(EditFace *efa, int flag)
+{
+ if(efa->v1->f & flag) {
+ if(efa->v2->f & flag) {
+ if(efa->v3->f & flag) {
+ if(efa->v4) {
+ if(efa->v4->f & flag) return 1;
+ }
+ else return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+int EM_nfaces_selected(void)
{
EditMesh *em = G.editMesh;
EditFace *efa;
int count= 0;
for (efa= em->faces.first; efa; efa= efa->next)
- if (faceselectedAND(efa, SELECT))
+ if (efa->f & SELECT)
count++;
return count;
}
-int editmesh_nvertices_selected(void)
+int EM_nvertices_selected(void)
{
EditMesh *em = G.editMesh;
EditVert *eve;
@@ -95,22 +163,353 @@ int editmesh_nvertices_selected(void)
return count;
}
-/* ***************** */
+void EM_clear_flag_all(int flag)
+{
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ for (eve= em->verts.first; eve; eve= eve->next) eve->f &= ~flag;
+ for (eed= em->edges.first; eed; eed= eed->next) eed->f &= ~flag;
+ for (efa= em->faces.first; efa; efa= efa->next) efa->f &= ~flag;
+
+}
+
+void EM_set_flag_all(int flag)
+{
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ for (eve= em->verts.first; eve; eve= eve->next) eve->f |= flag;
+ for (eed= em->edges.first; eed; eed= eed->next) eed->f |= flag;
+ for (efa= em->faces.first; efa; efa= efa->next) efa->f |= flag;
+
+}
+
+/* flush to edges & faces */
+
+/* this based on coherent selected vertices, for example when adding new
+ objects. call clear_flag_all() before you select vertices to be sure it ends OK!
+
+*/
+
+void EM_select_flush(void)
+{
+ EditMesh *em = G.editMesh;
+ EditEdge *eed;
+ EditFace *efa;
+
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->v1->f & eed->v2->f & SELECT) eed->f |= SELECT;
+ }
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->v4) {
+ if(efa->v1->f & efa->v2->f & efa->v3->f & efa->v4->f & SELECT ) efa->f |= SELECT;
+ }
+ else {
+ if(efa->v1->f & efa->v2->f & efa->v3->f & SELECT ) efa->f |= SELECT;
+ }
+ }
+}
+
+/* flush to edges & faces */
+
+/* based on select mode it selects edges/faces
+ assumed is that verts/edges/faces were properly selected themselves
+ with the calls above
+*/
+
+void EM_selectmode_flush(void)
+{
+ EditMesh *em = G.editMesh;
+ EditEdge *eed;
+ EditFace *efa;
+
+ // flush to edges & faces
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->v1->f & eed->v2->f & SELECT) eed->f |= SELECT;
+ else eed->f &= ~SELECT;
+ }
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->v4) {
+ if(efa->v1->f & efa->v2->f & efa->v3->f & efa->v4->f & SELECT) efa->f |= SELECT;
+ else efa->f &= ~SELECT;
+ }
+ else {
+ if(efa->v1->f & efa->v2->f & efa->v3->f & SELECT) efa->f |= SELECT;
+ else efa->f &= ~SELECT;
+ }
+ }
+ }
+ // flush to faces
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->e4) {
+ if(efa->e1->f & efa->e2->f & efa->e3->f & efa->e4->f & SELECT) efa->f |= SELECT;
+ else efa->f &= ~SELECT;
+ }
+ else {
+ if(efa->e1->f & efa->e2->f & efa->e3->f & SELECT) efa->f |= SELECT;
+ else efa->f &= ~SELECT;
+ }
+ }
+ }
+
+ // make sure selected faces have selected edges too, for extrude (hack?)
+ else if(G.scene->selectmode & SCE_SELECT_FACE) {
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->f & SELECT) {
+ efa->e1->f |= SELECT;
+ efa->e2->f |= SELECT;
+ efa->e3->f |= SELECT;
+ if(efa->e4) efa->e4->f |= SELECT;
+ }
+ }
+ }
+}
+
+/* when switching select mode, makes sure selection is consistant for editing */
+/* also for paranoia checks to make sure edge or face mode works */
+void EM_selectmode_set(void)
+{
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ /* vertices -> edges -> faces */
+ EM_select_flush();
+ }
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ /* deselect vertices, and select again based on edge select */
+ for(eve= em->verts.first; eve; eve= eve->next) eve->f &= ~SELECT;
+ for(eed= em->edges.first; eed; eed= eed->next)
+ if(eed->f & SELECT) EM_select_edge(eed, 1);
+ /* selects faces based on edge status */
+ EM_selectmode_flush();
+ }
+ else if(G.scene->selectmode == SCE_SELECT_FACE) {
+ /* deselect eges, and select again based on face select */
+ for(eed= em->edges.first; eed; eed= eed->next) EM_select_edge(eed, 0);
+ for(efa= em->faces.first; efa; efa= efa->next)
+ if(efa->f & SELECT) EM_select_face(efa, 1);
+ }
+}
+
+
+/* ******** EXTRUDE ********* */
-short extrudeflag(short flag,short type)
+static void set_edge_directions(void)
{
- /* when type=1 old extrusion faces are removed (for spin etc) */
- /* all verts with (flag & 'flag'): extrude */
+ EditMesh *em= G.editMesh;
+ EditFace *efa= em->faces.first;
+
+ while(efa) {
+ // non selected face
+ if(efa->f== 0) {
+ if(efa->e1->f) {
+ if(efa->e1->v1 == efa->v1) efa->e1->dir= 0;
+ else efa->e1->dir= 1;
+ }
+ if(efa->e2->f) {
+ if(efa->e2->v1 == efa->v2) efa->e2->dir= 0;
+ else efa->e2->dir= 1;
+ }
+ if(efa->e3->f) {
+ if(efa->e3->v1 == efa->v3) efa->e3->dir= 0;
+ else efa->e3->dir= 1;
+ }
+ if(efa->e4 && efa->e4->f) {
+ if(efa->e4->v1 == efa->v4) efa->e4->dir= 0;
+ else efa->e4->dir= 1;
+ }
+ }
+ efa= efa->next;
+ }
+}
+
+static short extrudeflag_edge(short flag)
+{
+ /* all select edges/faces: extrude */
+ /* old select is cleared, in new ones it is set */
+ EditMesh *em = G.editMesh;
+ EditVert *eve, *nextve;
+ EditEdge *eed, *nexted;
+ EditFace *efa, *nextfa;
+ float nor[3]={0.0, 0.0, 0.0};
+ short del_old= 0;
+
+ if(G.obedit==0 || get_mesh(G.obedit)==0) return 0;
+
+ /* selected edges with 0 or 1 selected face become faces */
+ /* selected faces generate new faces */
+
+ /* if *one* selected face has edge with unselected face; remove old selected faces */
+
+ /* if selected edge is not used anymore; remove */
+ /* if selected vertex is not used anymore: remove */
+
+ /* select the new extrusion, deselect old */
+
+
+ /* step 1; init, count faces in edges */
+ recalc_editnormals();
+
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ eve->vn= NULL;
+ eve->f1= 0;
+ }
+
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ eed->f1= 0; // amount of selected faces
+ eed->f2= 0; // amount of unselected faces
+ if(eed->f & SELECT) {
+ eed->v1->f1= 1; // we call this 'selected vertex' now
+ eed->v2->f1= 1;
+ }
+ }
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->f & SELECT) {
+ efa->e1->f1++;
+ efa->e2->f1++;
+ efa->e3->f1++;
+ if(efa->e4) efa->e4->f1++;
+ }
+ else {
+ efa->e1->f2++;
+ efa->e2->f2++;
+ efa->e3->f2++;
+ if(efa->e4) efa->e4->f2++;
+ }
+ }
+
+ set_edge_directions();
+
+ /* step 2: make new faces from edges */
+ for(eed= em->edges.last; eed; eed= eed->prev) {
+ if(eed->f & SELECT) {
+ if(eed->f1<2) {
+ if(eed->v1->vn==NULL)
+ eed->v1->vn= addvertlist(eed->v1->co);
+ if(eed->v2->vn==NULL)
+ eed->v2->vn= addvertlist(eed->v2->co);
+
+ if(eed->dir==1) addfacelist(eed->v1, eed->v2, eed->v2->vn, eed->v1->vn, NULL);
+ else addfacelist(eed->v2, eed->v1, eed->v1->vn, eed->v2->vn, NULL);
+ }
+ }
+ }
+
+ /* step 3: make new faces from faces */
+ for(efa= em->faces.last; efa; efa= efa->prev) {
+ if(efa->f & SELECT) {
+ if(efa->v1->vn==NULL) efa->v1->vn= addvertlist(efa->v1->co);
+ if(efa->v2->vn==NULL) efa->v2->vn= addvertlist(efa->v2->co);
+ if(efa->v3->vn==NULL) efa->v3->vn= addvertlist(efa->v3->co);
+ if(efa->v4 && efa->v4->vn==NULL) efa->v4->vn= addvertlist(efa->v4->co);
+
+ if(efa->v4)
+ addfacelist(efa->v1->vn, efa->v2->vn, efa->v3->vn, efa->v4->vn, efa);
+ else
+ addfacelist(efa->v1->vn, efa->v2->vn, efa->v3->vn, NULL, efa);
+
+ /* if *one* selected face has edge with unselected face; remove old selected faces */
+ if(efa->e1->f2 || efa->e2->f2 || efa->e3->f2 || (efa->e4 && efa->e4->f2))
+ del_old= 1;
+
+ /* for transform */
+ VecAddf(nor, nor, efa->n);
+ }
+ }
+
+ if(del_old) {
+ /* step 4: remove old faces, if del_old */
+ efa= em->faces.first;
+ while(efa) {
+ nextfa= efa->next;
+ if(efa->f & SELECT) {
+ BLI_remlink(&em->faces, efa);
+ free_editface(efa);
+ }
+ efa= nextfa;
+ }
+
+ /* step 5: remove selected unused edges */
+ /* start tagging again */
+ for(eed= em->edges.first; eed; eed= eed->next) eed->f1=0;
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ efa->e1->f1= 1;
+ efa->e2->f1= 1;
+ efa->e3->f1= 1;
+ if(efa->e4) efa->e4->f1= 1;
+ }
+ /* remove */
+ eed= em->edges.first;
+ while(eed) {
+ nexted= eed->next;
+ if(eed->f & SELECT) {
+ if(eed->f1==0) {
+ remedge(eed);
+ free_editedge(eed);
+ }
+ }
+ eed= nexted;
+ }
+
+ /* step 6: remove selected unused vertices */
+ for(eed= em->edges.first; eed; eed= eed->next)
+ eed->v1->f1= eed->v2->f1= 0;
+
+ eve= em->verts.first;
+ while(eve) {
+ nextve= eve->next;
+ if(eve->f1) {
+ // hack... but we need it for step 7, redoing selection
+ if(eve->vn) eve->vn->vn= eve->vn;
+
+ BLI_remlink(&em->verts, eve);
+ free_editvert(eve);
+ }
+ eve= nextve;
+ }
+ }
+
+ /* step 7: redo selection */
+ EM_clear_flag_all(SELECT);
+
+ Normalise(nor); // translation normal grab
+
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->vn) {
+ eve->vn->f |= SELECT;
+ VECCOPY(eve->vn->no, nor);
+ }
+ }
+
+ EM_select_flush();
+
+ return 1;
+}
+
+short extrudeflag_vert(short flag)
+{
+ /* all verts/edges/faces with (f & 'flag'): extrude */
/* from old verts, 'flag' is cleared, in new ones it is set */
EditMesh *em = G.editMesh;
EditVert *eve, *v1, *v2, *v3, *v4, *nextve;
EditEdge *eed, *e1, *e2, *e3, *e4, *nexted;
EditFace *efa, *efa2, *nextvl;
- short sel=0, deloud= 0, smooth= 0;
+ float nor[3]={0.0, 0.0, 0.0};
+ short sel=0, del_old= 0, smooth= 0;
if(G.obedit==0 || get_mesh(G.obedit)==0) return 0;
- /* clear vert flag f1, we use this to detext a loose selected vertice */
+ /* clear vert flag f1, we use this to detect a loose selected vertice */
eve= em->verts.first;
while(eve) {
if(eve->f & flag) eve->f1= 1;
@@ -121,11 +520,11 @@ short extrudeflag(short flag,short type)
eed= em->edges.first;
while(eed) {
if( (eed->v1->f & flag) && (eed->v2->f & flag) ) {
- eed->f= 1;
+ eed->f2= 1;
eed->v1->f1= 0;
eed->v2->f1= 0;
}
- else eed->f= 0;
+ else eed->f2= 0;
eed->f1= 1; /* this indicates it is an 'old' edge (in this routine we make new ones) */
@@ -136,7 +535,7 @@ short extrudeflag(short flag,short type)
efa= em->faces.first;
while(efa) {
- efa->f= 0;
+ efa->f1= 0;
if (efa->flag & ME_SMOOTH) {
if (faceselectedOR(efa, 1)) smooth= 1;
@@ -148,11 +547,12 @@ short extrudeflag(short flag,short type)
e3= efa->e3;
e4= efa->e4;
- if(e1->f < 3) e1->f++;
- if(e2->f < 3) e2->f++;
- if(e3->f < 3) e3->f++;
- if(e4 && e4->f < 3) e4->f++;
- efa->f= 1;
+ if(e1->f2 < 3) e1->f2++;
+ if(e2->f2 < 3) e2->f2++;
+ if(e3->f2 < 3) e3->f2++;
+ if(e4 && e4->f2 < 3) e4->f2++;
+
+ efa->f1= 1;
}
else if(faceselectedOR(efa, flag)) {
e1= efa->e1;
@@ -169,51 +569,28 @@ short extrudeflag(short flag,short type)
efa= efa->next;
}
- /* set direction of edges */
- efa= em->faces.first;
- while(efa) {
- if(efa->f== 0) {
- if(efa->e1->f==2) {
- if(efa->e1->v1 == efa->v1) efa->e1->dir= 0;
- else efa->e1->dir= 1;
- }
- if(efa->e2->f==2) {
- if(efa->e2->v1 == efa->v2) efa->e2->dir= 0;
- else efa->e2->dir= 1;
- }
- if(efa->e3->f==2) {
- if(efa->e3->v1 == efa->v3) efa->e3->dir= 0;
- else efa->e3->dir= 1;
- }
- if(efa->e4 && efa->e4->f==2) {
- if(efa->e4->v1 == efa->v4) efa->e4->dir= 0;
- else efa->e4->dir= 1;
- }
- }
- efa= efa->next;
- }
-
+ set_edge_directions();
/* the current state now is:
eve->f1==1: loose selected vertex
- eed->f==0 : edge is not selected, no extrude
- eed->f==1 : edge selected, is not part of a face, extrude
- eed->f==2 : edge selected, is part of 1 face, extrude
- eed->f==3 : edge selected, is part of more faces, no extrude
+ eed->f2==0 : edge is not selected, no extrude
+ eed->f2==1 : edge selected, is not part of a face, extrude
+ eed->f2==2 : edge selected, is part of 1 face, extrude
+ eed->f2==3 : edge selected, is part of more faces, no extrude
eed->f1==0: new edge
eed->f1==1: edge selected, is part of selected face, when eed->f==3: remove
- eed->f1==2: edge selected, is not part of a selected face
+ eed->f1==2: edge selected, part of a partially selected face
- efa->f==1 : duplicate this face
+ efa->f1==1 : duplicate this face
*/
/* copy all selected vertices, */
/* write pointer to new vert in old struct at eve->vn */
eve= em->verts.last;
while(eve) {
- eve->f&= ~128; /* clear, for later test for loose verts */
+ eve->f &= ~128; /* clear, for later test for loose verts */
if(eve->f & flag) {
sel= 1;
v1= addvertlist(0);
@@ -229,17 +606,24 @@ short extrudeflag(short flag,short type)
if(sel==0) return 0;
- /* all edges with eed->f==1 or eed->f==2 become faces */
- /* if deloud==1 then edges with eed->f>2 are removed */
+ /* all edges with eed->f2==1 or eed->f2==2 become faces */
+
+ /* if del_old==1 then extrude is in partial geometry, to keep it manifold.
+ verts with f1==0 and (eve->f & 128)==0) are removed
+ edges with eed->f2>2 are removed
+ faces with efa->f1 are removed
+ if del_old==0 the extrude creates a volume.
+ */
+
eed= em->edges.last;
while(eed) {
nexted= eed->prev;
- if( eed->f<3) {
- eed->v1->f|=128; /* = no loose vert! */
- eed->v2->f|=128;
+ if( eed->f2<3) {
+ eed->v1->f |= 128; /* = no loose vert! */
+ eed->v2->f |= 128;
}
- if( (eed->f==1 || eed->f==2) ) {
- if(eed->f1==2) deloud=1;
+ if( (eed->f2==1 || eed->f2==2) ) {
+ if(eed->f1==2) del_old= 1;
if(eed->dir==1) efa2= addfacelist(eed->v1, eed->v2, eed->v2->vn, eed->v1->vn, NULL);
else efa2= addfacelist(eed->v2, eed->v1, eed->v1->vn, eed->v2->vn, NULL);
@@ -257,22 +641,22 @@ short extrudeflag(short flag,short type)
eed= nexted;
}
- if(deloud) {
+ if(del_old) {
eed= em->edges.first;
while(eed) {
nexted= eed->next;
- if(eed->f==3 && eed->f1==1) {
+ if(eed->f2==3 && eed->f1==1) {
remedge(eed);
free_editedge(eed);
}
eed= nexted;
}
}
- /* duplicate faces, if necessart remove old ones */
+ /* duplicate faces, if necessary remove old ones */
efa= em->faces.first;
while(efa) {
nextvl= efa->next;
- if(efa->f & 1) {
+ if(efa->f1 & 1) {
v1= efa->v1->vn;
v2= efa->v2->vn;
@@ -281,7 +665,10 @@ short extrudeflag(short flag,short type)
efa2= addfacelist(v1, v2, v3, v4, efa);
- if(deloud) {
+ /* for transform */
+ VecAddf(nor, nor, efa->n);
+
+ if(del_old) {
BLI_remlink(&em->faces, efa);
free_editface(efa);
}
@@ -289,9 +676,12 @@ short extrudeflag(short flag,short type)
}
efa= nextvl;
}
+
+ Normalise(nor); // for grab
+
/* for all vertices with eve->vn!=0
if eve->f1==1: make edge
- if flag!=128 : if deloud==1: remove
+ if flag!=128 : if del_old==1: remove
*/
eve= em->verts.last;
while(eve) {
@@ -299,21 +689,35 @@ short extrudeflag(short flag,short type)
if(eve->vn) {
if(eve->f1==1) addedgelist(eve, eve->vn, NULL);
else if( (eve->f & 128)==0) {
- if(deloud) {
+ if(del_old) {
BLI_remlink(&em->verts,eve);
free_editvert(eve);
eve= NULL;
}
}
}
- if(eve) eve->f&= ~128;
-
+ if(eve) {
+ if(eve->f & flag) {
+ VECCOPY(eve->no, nor);
+ }
+ eve->f &= ~128;
+ }
eve= nextve;
}
return 1;
}
+/* generic extrude */
+short extrudeflag(short flag)
+{
+ if(G.scene->selectmode & SCE_SELECT_VERTEX)
+ return extrudeflag_vert(flag);
+ else
+ return extrudeflag_edge(flag);
+
+}
+
void rotateflag(short flag, float *cent, float rotmat[][3])
{
/* all verts with (flag & 'flag') rotate */
@@ -352,32 +756,92 @@ void translateflag(short flag, float *vec)
}
}
+void adduplicateflag(int flag)
+{
+ EditMesh *em = G.editMesh;
+ /* old selection has flag 128 set, and flag 'flag' cleared
+ new selection has flag 'flag' set */
+ EditVert *eve, *v1, *v2, *v3, *v4;
+ EditEdge *eed, *newed;
+ EditFace *efa, *newfa;
+
+ EM_clear_flag_all(128);
+ EM_selectmode_set(); // paranoia check, selection now is consistant
+
+ /* vertices first */
+ for(eve= em->verts.last; eve; eve= eve->prev) {
+
+ if(eve->f & flag) {
+ v1= addvertlist(eve->co);
+
+ v1->f= eve->f;
+ eve->f-= flag;
+ eve->f|= 128;
+
+ eve->vn= v1;
+
+ /* >>>>> FIXME: Copy deformation weight ? */
+ v1->totweight = eve->totweight;
+ if (eve->totweight){
+ v1->dw = MEM_mallocN (eve->totweight * sizeof(MDeformWeight), "deformWeight");
+ memcpy (v1->dw, eve->dw, eve->totweight * sizeof(MDeformWeight));
+ }
+ else
+ v1->dw=NULL;
+ }
+ }
+
+ /* copy edges */
+ for(eed= em->edges.last; eed; eed= eed->prev) {
+ if( eed->f & flag ) {
+ v1= eed->v1->vn;
+ v2= eed->v2->vn;
+ newed= addedgelist(v1, v2, eed);
+
+ newed->f= eed->f;
+ eed->f -= flag;
+ eed->f |= 128;
+ }
+ }
+
+ /* then dupicate faces */
+ for(efa= em->faces.last; efa; efa= efa->prev) {
+ if(efa->f & flag) {
+ v1= efa->v1->vn;
+ v2= efa->v2->vn;
+ v3= efa->v3->vn;
+ if(efa->v4) v4= efa->v4->vn; else v4= NULL;
+ newfa= addfacelist(v1, v2, v3, v4, efa);
+
+ newfa->f= efa->f;
+ efa->f -= flag;
+ efa->f |= 128;
+ }
+ }
+}
void delfaceflag(int flag)
{
EditMesh *em = G.editMesh;
/* delete all faces with 'flag', including edges and loose vertices */
- /* in vertices the 'flag' is cleared */
+ /* in remaining vertices/edges 'flag' is cleared */
EditVert *eve,*nextve;
EditEdge *eed, *nexted;
EditFace *efa,*nextvl;
- eed= em->edges.first;
- while(eed) {
- eed->f= 0;
- eed= eed->next;
- }
+ for(eed= em->edges.first; eed; eed= eed->next) eed->f2= 0;
+ /* delete faces */
efa= em->faces.first;
while(efa) {
nextvl= efa->next;
- if(faceselectedAND(efa, flag)) {
+ if(efa->f & flag) {
- efa->e1->f= 1;
- efa->e2->f= 1;
- efa->e3->f= 1;
+ efa->e1->f2= 1;
+ efa->e2->f2= 1;
+ efa->e3->f2= 1;
if(efa->e4) {
- efa->e4->f= 1;
+ efa->e4->f2= 1;
}
BLI_remlink(&em->faces, efa);
@@ -385,33 +849,34 @@ void delfaceflag(int flag)
}
efa= nextvl;
}
- /* all faces with 1, 2 (3) vertices selected: make sure we keep the edges */
- efa= em->faces.first;
- while(efa) {
- efa->e1->f= 0;
- efa->e2->f= 0;
- efa->e3->f= 0;
+
+ /* all remaining faces: make sure we keep the edges */
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ efa->e1->f2= 0;
+ efa->e2->f2= 0;
+ efa->e3->f2= 0;
if(efa->e4) {
- efa->e4->f= 0;
+ efa->e4->f2= 0;
}
-
- efa= efa->next;
}
- /* test all edges for vertices with 'flag', and clear */
+ /* remove tagged edges, and clear remaining ones */
eed= em->edges.first;
while(eed) {
nexted= eed->next;
- if(eed->f==1) {
+
+ if(eed->f2==1) {
remedge(eed);
free_editedge(eed);
}
- else if( (eed->v1->f & flag) || (eed->v2->f & flag) ) {
- eed->v1->f&= ~flag;
- eed->v2->f&= ~flag;
+ else {
+ eed->f &= ~flag;
+ eed->v1->f &= ~flag;
+ eed->v2->f &= ~flag;
}
eed= nexted;
}
+
/* vertices with 'flag' now are the loose ones, and will be removed */
eve= em->verts.first;
while(eve) {
@@ -547,7 +1012,7 @@ void vertexnormals(int testflip)
/* vertex normal flip-flags for shade (render) */
efa= em->faces.first;
while(efa) {
- efa->f=0;
+ efa->puno=0;
if(testflip) {
f1= efa->v1->no;
@@ -556,21 +1021,21 @@ void vertexnormals(int testflip)
fac1= efa->n[0]*f1[0] + efa->n[1]*f1[1] + efa->n[2]*f1[2];
if(fac1<0.0) {
- efa->f = ME_FLIPV1;
+ efa->puno = ME_FLIPV1;
}
fac2= efa->n[0]*f2[0] + efa->n[1]*f2[1] + efa->n[2]*f2[2];
if(fac2<0.0) {
- efa->f += ME_FLIPV2;
+ efa->puno += ME_FLIPV2;
}
fac3= efa->n[0]*f3[0] + efa->n[1]*f3[1] + efa->n[2]*f3[2];
if(fac3<0.0) {
- efa->f += ME_FLIPV3;
+ efa->puno += ME_FLIPV3;
}
if(efa->v4) {
f4= efa->v4->no;
fac4= efa->n[0]*f4[0] + efa->n[1]*f4[1] + efa->n[2]*f4[2];
if(fac4<0.0) {
- efa->f += ME_FLIPV4;
+ efa->puno += ME_FLIPV4;
}
}
}
@@ -579,9 +1044,9 @@ void vertexnormals(int testflip)
yn= fabs(efa->n[1]);
zn= fabs(efa->n[2]);
- if(zn>xn && zn>yn) efa->f += ME_PROJXY;
- else if(yn>xn && yn>zn) efa->f += ME_PROJXZ;
- else efa->f += ME_PROJYZ;
+ if(zn>xn && zn>yn) efa->puno += ME_PROJXY;
+ else if(yn>xn && yn>zn) efa->puno += ME_PROJXZ;
+ else efa->puno += ME_PROJYZ;
efa= efa->next;
}
@@ -624,7 +1089,7 @@ void flip_editnormals(void)
}
}
-
+/* does face centers too */
void recalc_editnormals(void)
{
EditMesh *em = G.editMesh;
@@ -632,37 +1097,19 @@ void recalc_editnormals(void)
efa= em->faces.first;
while(efa) {
- if(efa->v4) CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n);
- else CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n);
+ if(efa->v4) {
+ CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, efa->n);
+ CalcCent4f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
+ }
+ else {
+ CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, efa->n);
+ CalcCent3f(efa->cent, efa->v1->co, efa->v2->co, efa->v3->co);
+ }
efa= efa->next;
}
}
-int faceselectedOR(EditFace *efa, int flag)
-{
-
- if(efa->v1->f & flag) return 1;
- if(efa->v2->f & flag) return 1;
- if(efa->v3->f & flag) return 1;
- if(efa->v4 && (efa->v4->f & 1)) return 1;
- return 0;
-}
-
-int faceselectedAND(EditFace *efa, int flag)
-{
- if(efa->v1->f & flag) {
- if(efa->v2->f & flag) {
- if(efa->v3->f & flag) {
- if(efa->v4) {
- if(efa->v4->f & flag) return 1;
- }
- else return 1;
- }
- }
- }
- return 0;
-}
int compareface(EditFace *vl1, EditFace *vl2)
{
diff --git a/source/blender/src/editmesh_loop.c b/source/blender/src/editmesh_loop.c
index 59572ee2345..6fcec5a9b74 100644
--- a/source/blender/src/editmesh_loop.c
+++ b/source/blender/src/editmesh_loop.c
@@ -136,7 +136,9 @@ short sharesFace(EditEdge* e1, EditEdge* e2)
}
/* This function selects a vertex loop based on a each succesive edge having a valance of 4
and not sharing a face with the previous edge */
-
+
+/* It uses ->f flags still, which isn't causing bugs now, but better be put in ->f1 (ton) */
+
void vertex_loop_select()
{
EditMesh *em = G.editMesh;
@@ -144,10 +146,9 @@ void vertex_loop_select()
EditEdge *search=NULL,*startEdge=NULL,*valSearch = NULL,*nearest = NULL,*compEdge;
EditEdge *EdgeVal[5] = {NULL,NULL,NULL,NULL,NULL};
short numEdges=0,curEdge = 0,looking = 1,edgeValCount = 0,i=0,looped = 0,choosing = 1,event,noloop=0,cancel=0, val;
- short protect = 0;
+ short protect = 0, dist= 50;
short mvalo[2] = {0,0}, mval[2];
- undo_push_mesh("Select Vertex Loop");
SetBlenderCursor(BC_VLOOPCURSOR);
for(search=em->edges.first;search;search=search->next)
numEdges++;
@@ -161,7 +162,8 @@ void vertex_loop_select()
mvalo[1] = mval[1];
scrarea_do_windraw(curarea);
- nearest = findnearestedge();
+ dist= 50;
+ nearest = findnearestedge(&dist); // returns actual distance in dist
if (nearest && edgeFaces(nearest)==2) {
for(search = em->edges.first;search;search=search->next)
search->f &= ~32;
@@ -323,11 +325,14 @@ void vertex_loop_select()
}
if(!cancel){
/* If this is a unmodified select, clear the selection */
+
+ /* XXX note that !1 is 0, so it not only clears bit 1 (ton) */
if(!(G.qual & LR_SHIFTKEY) && !(G.qual & LR_ALTKEY)){
for(search = em->edges.first;search;search= search->next){
search->v1->f &= !1;
search->v2->f &= !1;
}
+ EM_clear_flag_all(SELECT); /* XXX probably that's sufficient */
}
/* Alt was not pressed, so add to the selection */
if(!(G.qual & LR_ALTKEY)){
@@ -338,21 +343,26 @@ void vertex_loop_select()
}
search->f &= ~32;
}
+ /* XXX this will correctly flush */
}
/* alt was pressed, so subtract from the selection */
else
{
+ /* XXX this doesnt flush correct in face select mode */
for(search = em->edges.first;search;search= search->next){
if(search->f & 32){
search->v1->f &= !1;
search->v2->f &= !1;
+ EM_select_edge(search, 0); // the call to deselect edge
}
search->f &= ~32;
}
}
+
+ EM_select_flush(); // flushes vertex -> edge -> face selection
+ BIF_undo_push("Select Vertex Loop");
}
- else
- undo_pop_mesh(1);
+
addqueue(curarea->win, REDRAW, 1);
SetBlenderCursor(SYSCURSOR);
return;
@@ -523,7 +533,8 @@ CutCurve *get_mouse_trail(int *len, char mode){
/* prototype */
short seg_intersect(struct EditEdge * e, CutCurve *c, int len);
-void KnifeSubdivide(char mode){
+void KnifeSubdivide(char mode)
+{
EditMesh *em = G.editMesh;
int oldcursor, len=0;
short isect=0;
@@ -533,7 +544,7 @@ void KnifeSubdivide(char mode){
if (G.obedit==0) return;
- if (editmesh_nvertices_selected() < 2) {
+ if (EM_nvertices_selected() < 2) {
error("No edges are selected to operate on");
return;
}
@@ -544,8 +555,6 @@ void KnifeSubdivide(char mode){
mode= val; // warning, mode is char, pupmenu returns -1 with ESC
}
- undo_push_mesh("Knife");
-
calc_meshverts_ext(); /*Update screen coords for current window */
/* Set a knife cursor here */
@@ -560,15 +569,15 @@ void KnifeSubdivide(char mode){
if (curve && len && mode){
eed= em->edges.first;
while(eed) {
- if((eed->v1->f&1)&&(eed->v2->f&1)){
+ if((eed->v1->f & 1) && (eed->v2->f & 1)){
isect=seg_intersect(eed, curve, len);
- if (isect) eed->f=1;
- else eed->f=0;
- eed->f1=isect;
+ if (isect) eed->f2= 1;
+ else eed->f2=0;
+ eed->f1= isect;
//printf("isect=%i\n", isect);
}
else {
- eed->f=0;
+ eed->f2=0;
eed->f1=0;
}
eed= eed->next;
@@ -579,7 +588,7 @@ void KnifeSubdivide(char mode){
eed=em->edges.first;
while(eed){
- eed->f=0;
+ eed->f2=0;
eed->f1=0;
eed=eed->next;
}
@@ -589,6 +598,8 @@ void KnifeSubdivide(char mode){
addqueue(curarea->win, REDRAW, 0);
window_set_cursor(win, oldcursor);
if (curve) MEM_freeN(curve);
+
+ BIF_undo_push("Knife");
}
/* seg_intersect() Determines if and where a mouse trail intersects an EditEdge */
@@ -701,9 +712,9 @@ short seg_intersect(EditEdge *e, CutCurve *c, int len){
/* ******************** LOOP ******************************************* */
-/* BTW: this loop function is totally out of control!
+/* XXX: this loop function is totally out of control!
can be half the code, and using structured functions (ton) */
-
+
/*
functionality: various loop functions
parameters: mode tells the function what it should do with the loop:
@@ -792,9 +803,6 @@ void loopoperations(char mode)
if ((G.obedit==0) || (em->faces.first==0)) return;
- if(mode==LOOP_CUT)undo_push_mesh("Face Loop Subdivide");
- else if(mode==LOOP_SELECT)undo_push_mesh("Select Face Loop");
-
SetBlenderCursor(BC_VLOOPCURSOR);
start=NULL;
@@ -1212,10 +1220,12 @@ void loopoperations(char mode)
/* If this is a unmodified select, clear the selection */
if(!(G.qual & LR_SHIFTKEY) && !(G.qual & LR_ALTKEY)){
for(efa= em->faces.first;efa;efa=efa->next){
+ // note: !1 is zero.... (ton)
efa->v1->f &= !1;
efa->v2->f &= !1;
efa->v3->f &= !1;
- if(efa->v4)efa->v4->f &= !1;
+ if(efa->v4)efa->v4->f &= !1;
+ EM_select_face(efa, 0); // and this is correct deselect face
}
}
/* Alt was not pressed, so add to the selection */
@@ -1225,7 +1235,8 @@ void loopoperations(char mode)
efa->v1->f |= 1;
efa->v2->f |= 1;
efa->v3->f |= 1;
- if(efa->v4)efa->v4->f |= 1;
+ if(efa->v4) efa->v4->f |= 1;
+ EM_select_face(efa, 1); // and this is correct select face
}
}
}
@@ -1238,6 +1249,7 @@ void loopoperations(char mode)
efa->v2->f &= !1;
efa->v3->f &= !1;
if(efa->v4)efa->v4->f &= !1;
+ EM_select_face(efa, 0); // this is correct deselect face
}
}
}
@@ -1802,6 +1814,10 @@ void loopoperations(char mode)
efa->f &= ~(4|8);
}
+ // flushes vertex -> edge -> face selection
+ // this actually can be wrong.... but I can't fix above code! (ton)
+ EM_select_flush();
+
countall();
if(tagged)
@@ -1814,6 +1830,11 @@ void loopoperations(char mode)
/* send event to redraw this window, does header too */
SetBlenderCursor(SYSCURSOR);
addqueue(curarea->win, REDRAW, 1);
+
+ /* should have check for cancelled (ton) */
+ if(mode==LOOP_CUT) BIF_undo_push("Face Loop Subdivide");
+ else if(mode==LOOP_SELECT) BIF_undo_push("Select Face Loop");
+
}
/* ****************************** END LOOPOPERATIONS ********************** */
diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c
index f711b90317b..595af2658e8 100644
--- a/source/blender/src/editmesh_mods.c
+++ b/source/blender/src/editmesh_mods.c
@@ -49,6 +49,7 @@ editmesh_mods.c, UI level access, no geometry changes
#endif
#include "MEM_guardedalloc.h"
+#include "MTC_matrixops.h"
#include "DNA_mesh_types.h"
#include "DNA_material_types.h"
@@ -74,9 +75,11 @@ editmesh_mods.c, UI level access, no geometry changes
#include "BIF_editmesh.h"
#include "BIF_resources.h"
#include "BIF_gl.h"
+#include "BIF_glutil.h"
#include "BIF_graphics.h"
#include "BIF_interface.h"
#include "BIF_mywindow.h"
+#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_space.h"
#include "BIF_toolbox.h"
@@ -93,280 +96,19 @@ editmesh_mods.c, UI level access, no geometry changes
#include "editmesh.h"
-/* **************************** MODS ************************* */
-
-void selectswap_mesh(void)
-{
- EditMesh *em = G.editMesh;
- EditVert *eve;
-
- eve= em->verts.first;
- while(eve) {
- if(eve->h==0) {
- if(eve->f & 1) eve->f&= ~1;
- else eve->f|= 1;
- }
- eve= eve->next;
- }
- countall();
- allqueue(REDRAWVIEW3D, 0);
-
-}
-
+/* ****************************** SELECTION ROUTINES **************** */
-void deselectall_mesh(void) /* toggle */
-{
- EditMesh *em = G.editMesh;
- EditVert *eve;
- int a;
-
- if(G.obedit->lay & G.vd->lay) {
- a= 0;
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- a= 1;
- break;
- }
- eve= eve->next;
- }
-
- if (a) undo_push_mesh("Deselect All");
- else undo_push_mesh("Select All");
-
- eve= em->verts.first;
- while(eve) {
- if(eve->h==0) {
- if(a) eve->f&= -2;
- else eve->f|= 1;
- }
- eve= eve->next;
- }
- }
- countall();
- allqueue(REDRAWVIEW3D, 0);
-}
-
-
-void righthandfaces(int select) /* makes faces righthand turning */
-{
- EditMesh *em = G.editMesh;
- EditEdge *eed, *ed1, *ed2, *ed3, *ed4;
- EditFace *efa, *startvl;
- float maxx, nor[3], cent[3];
- int totsel, found, foundone, direct, turn, tria_nr;
-
- /* based at a select-connected to witness loose objects */
-
- /* count per edge the amount of faces */
-
- /* find the ultimate left, front, upper face (not manhattan dist!!) */
- /* also evaluate both triangle cases in quad, since these can be non-flat */
-
- /* put normal to the outside, and set the first direction flags in edges */
-
- /* then check the object, and set directions / direction-flags: but only for edges with 1 or 2 faces */
- /* this is in fact the 'select connected' */
-
- /* in case (selected) faces were not done: start over with 'find the ultimate ...' */
-
- waitcursor(1);
-
- eed= em->edges.first;
- while(eed) {
- eed->f= 0;
- eed->f1= 0;
- eed= eed->next;
- }
-
- /* count faces and edges */
- totsel= 0;
- efa= em->faces.first;
- while(efa) {
- if(select==0 || faceselectedAND(efa, 1) ) {
- efa->f= 1;
- totsel++;
- efa->e1->f1++;
- efa->e2->f1++;
- efa->e3->f1++;
- if(efa->v4) efa->e4->f1++;
- }
- else efa->f= 0;
-
- efa= efa->next;
- }
-
- while(totsel>0) {
- /* from the outside to the inside */
-
- efa= em->faces.first;
- startvl= NULL;
- maxx= -1.0e10;
- tria_nr= 0;
-
- while(efa) {
- if(efa->f) {
- CalcCent3f(cent, efa->v1->co, efa->v2->co, efa->v3->co);
- cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2];
-
- if(cent[0]>maxx) {
- maxx= cent[0];
- startvl= efa;
- tria_nr= 0;
- }
- if(efa->v4) {
- CalcCent3f(cent, efa->v1->co, efa->v3->co, efa->v4->co);
- cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2];
-
- if(cent[0]>maxx) {
- maxx= cent[0];
- startvl= efa;
- tria_nr= 1;
- }
- }
- }
- efa= efa->next;
- }
-
- /* set first face correct: calc normal */
-
- if(tria_nr==1) {
- CalcNormFloat(startvl->v1->co, startvl->v3->co, startvl->v4->co, nor);
- CalcCent3f(cent, startvl->v1->co, startvl->v3->co, startvl->v4->co);
- } else {
- CalcNormFloat(startvl->v1->co, startvl->v2->co, startvl->v3->co, nor);
- CalcCent3f(cent, startvl->v1->co, startvl->v2->co, startvl->v3->co);
- }
- /* first normal is oriented this way or the other */
- if(select) {
- if(select==2) {
- if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] > 0.0) flipface(startvl);
- }
- else {
- if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(startvl);
- }
- }
- else if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(startvl);
-
-
- eed= startvl->e1;
- if(eed->v1==startvl->v1) eed->f= 1;
- else eed->f= 2;
-
- eed= startvl->e2;
- if(eed->v1==startvl->v2) eed->f= 1;
- else eed->f= 2;
-
- eed= startvl->e3;
- if(eed->v1==startvl->v3) eed->f= 1;
- else eed->f= 2;
-
- eed= startvl->e4;
- if(eed) {
- if(eed->v1==startvl->v4) eed->f= 1;
- else eed->f= 2;
- }
-
- startvl->f= 0;
- totsel--;
-
- /* test normals */
- found= 1;
- direct= 1;
- while(found) {
- found= 0;
- if(direct) efa= em->faces.first;
- else efa= em->faces.last;
- while(efa) {
- if(efa->f) {
- turn= 0;
- foundone= 0;
-
- ed1= efa->e1;
- ed2= efa->e2;
- ed3= efa->e3;
- ed4= efa->e4;
-
- if(ed1->f) {
- if(ed1->v1==efa->v1 && ed1->f==1) turn= 1;
- if(ed1->v2==efa->v1 && ed1->f==2) turn= 1;
- foundone= 1;
- }
- else if(ed2->f) {
- if(ed2->v1==efa->v2 && ed2->f==1) turn= 1;
- if(ed2->v2==efa->v2 && ed2->f==2) turn= 1;
- foundone= 1;
- }
- else if(ed3->f) {
- if(ed3->v1==efa->v3 && ed3->f==1) turn= 1;
- if(ed3->v2==efa->v3 && ed3->f==2) turn= 1;
- foundone= 1;
- }
- else if(ed4 && ed4->f) {
- if(ed4->v1==efa->v4 && ed4->f==1) turn= 1;
- if(ed4->v2==efa->v4 && ed4->f==2) turn= 1;
- foundone= 1;
- }
-
- if(foundone) {
- found= 1;
- totsel--;
- efa->f= 0;
-
- if(turn) {
- if(ed1->v1==efa->v1) ed1->f= 2;
- else ed1->f= 1;
- if(ed2->v1==efa->v2) ed2->f= 2;
- else ed2->f= 1;
- if(ed3->v1==efa->v3) ed3->f= 2;
- else ed3->f= 1;
- if(ed4) {
- if(ed4->v1==efa->v4) ed4->f= 2;
- else ed4->f= 1;
- }
-
- flipface(efa);
-
- }
- else {
- if(ed1->v1== efa->v1) ed1->f= 1;
- else ed1->f= 2;
- if(ed2->v1==efa->v2) ed2->f= 1;
- else ed2->f= 2;
- if(ed3->v1==efa->v3) ed3->f= 1;
- else ed3->f= 2;
- if(ed4) {
- if(ed4->v1==efa->v4) ed4->f= 1;
- else ed4->f= 2;
- }
- }
- }
- }
- if(direct) efa= efa->next;
- else efa= efa->prev;
- }
- direct= 1-direct;
- }
- }
-
- recalc_editnormals();
-
- makeDispList(G.obedit);
-
- waitcursor(0);
-}
-
-static EditVert *findnearestvert(short sel)
+static EditVert *findnearestvert(short *dist, short sel)
{
+ static EditVert *acto= NULL;
EditMesh *em = G.editMesh;
/* if sel==1 the vertices with flag==1 get a disadvantage */
- EditVert *eve,*act=0;
- static EditVert *acto=0;
- short dist=100,temp,mval[2];
+ EditVert *eve,*act=NULL;
+ short temp, mval[2];
- if(em->verts.first==0) return 0;
+ if(em->verts.first==NULL) return NULL;
/* do projection */
calc_meshverts_ext(); /* drawobject.c */
@@ -378,9 +120,7 @@ static EditVert *findnearestvert(short sel)
if(eve==acto) break;
eve= eve->next;
}
- if(eve==0) acto= em->verts.first;
-
- if(acto==0) return 0;
+ if(eve==NULL) acto= em->verts.first;
/* is there an indicated vertex? part 1 */
getmouseco_areawin(mval);
@@ -389,25 +129,25 @@ static EditVert *findnearestvert(short sel)
if(eve->h==0) {
temp= abs(mval[0]- eve->xs)+ abs(mval[1]- eve->ys);
if( (eve->f & 1)==sel ) temp+=5;
- if(temp<dist) {
+ if(temp< *dist) {
act= eve;
- dist= temp;
- if(dist<4) break;
+ *dist= temp;
+ if(*dist<4) break;
}
}
eve= eve->next;
}
/* is there an indicated vertex? part 2 */
- if(dist>3) {
+ if(*dist>3) {
eve= em->verts.first;
while(eve) {
if(eve->h==0) {
temp= abs(mval[0]- eve->xs)+ abs(mval[1]- eve->ys);
if( (eve->f & 1)==sel ) temp+=5;
- if(temp<dist) {
+ if(temp< *dist) {
act= eve;
if(temp<4) break;
- dist= temp;
+ *dist= temp;
}
if(eve== acto) break;
}
@@ -420,16 +160,16 @@ static EditVert *findnearestvert(short sel)
}
-EditEdge *findnearestedge()
+EditEdge *findnearestedge(short *dist)
{
EditMesh *em = G.editMesh;
EditEdge *closest, *eed;
EditVert *eve;
- short found=0, mval[2];
- float distance[2], v1[2], v2[2], mval2[2];
+ short mval[2], distance;
+ float v1[2], v2[2], mval2[2];
- if(em->edges.first==0) return NULL;
- else eed=em->edges.first;
+ if(em->edges.first==NULL) return NULL;
+ else eed= em->edges.first;
/* reset flags */
for(eve=em->verts.first; eve; eve=eve->next){
@@ -443,31 +183,21 @@ EditEdge *findnearestedge()
mval2[0] = (float)mval[0];
mval2[1] = (float)mval[1];
- eed=em->edges.first;
/*compare the distance to the rest of the edges and find the closest one*/
+ eed=em->edges.first;
while(eed) {
/* Are both vertices of the edge ofscreen or either of them hidden? then don't select the edge*/
- if( !((eed->v1->f & 2) && (eed->v2->f & 2)) && (eed->v1->h==0 && eed->v2->h==0)){
+ if( !((eed->v1->f & 2) && (eed->v2->f & 2)) && eed->h==0){
v1[0] = eed->v1->xs;
v1[1] = eed->v1->ys;
v2[0] = eed->v2->xs;
v2[1] = eed->v2->ys;
- distance[1] = PdistVL2Dfl(mval2, v1, v2);
+ distance= (short)PdistVL2Dfl(mval2, v1, v2);
- if(distance[1]<50){
- /*do we have to compare it to other distances? */
- if(found) {
- if (distance[1]<distance[0]){
- distance[0]=distance[1];
- /*save the current closest edge*/
- closest=eed;
- }
- } else {
- distance[0]=distance[1];
- closest=eed;
- found=1;
- }
+ if(distance < *dist) {
+ *dist= distance;
+ closest= eed;
}
}
eed= eed->next;
@@ -478,151 +208,237 @@ EditEdge *findnearestedge()
eve->f &= ~2;
}
- if(found) return closest;
- else return 0;
+ return closest;
}
-static void edge_select(void)
+
+static EditFace *findnearestface(short *dist)
{
+ static EditFace *acto= NULL;
EditMesh *em = G.editMesh;
- EditEdge *closest=0;
-
- closest=findnearestedge();
+ /* if selected the faces with flag==1 get a disadvantage */
+ EditFace *efa, *act=NULL;
+ short temp, mval[2];
+
+ if(em->faces.first==NULL) return NULL;
+
+ /* do projection */
+ calc_mesh_facedots_ext();
- if(closest){ /* Did we find anything that is selectable?*/
+ /* we count from acto->next to last, and from first to acto */
+ /* does acto exist? */
+ efa= em->faces.first;
+ while(efa) {
+ if(efa==acto) break;
+ efa= efa->next;
+ }
+ if(efa==NULL) acto= em->faces.first;
- if( (G.qual & LR_SHIFTKEY)==0) {
- EditVert *eve;
-
- undo_push_mesh("Select Edge");
- /* deselectall */
- for(eve= em->verts.first; eve; eve= eve->next) eve->f&= ~1;
-
- /* select edge */
- closest->v1->f |= 1;
- closest->v2->f |= 1;
- }
- else {
- /* both of the vertices are selected: deselect both*/
- if((closest->v1->f & 1) && (closest->v2->f & 1) ){
- closest->v1->f &= ~1;
- closest->v2->f &= ~1;
+ /* is there an indicated face? part 1 */
+ getmouseco_areawin(mval);
+ efa= acto->next;
+ while(efa) {
+ if(efa->h==0) {
+ temp= abs(mval[0]- efa->xs)+ abs(mval[1]- efa->ys);
+ if(temp< *dist) {
+ act= efa;
+ *dist= temp;
}
- else {
- /* select both */
- closest->v1->f |= 1;
- closest->v2->f |= 1;
+ }
+ efa= efa->next;
+ }
+ /* is there an indicated face? part 2 */
+ if(*dist>3) {
+ efa= em->faces.first;
+ while(efa) {
+ if(efa->h==0) {
+ temp= abs(mval[0]- efa->xs)+ abs(mval[1]- efa->ys);
+ if(temp< *dist) {
+ act= efa;
+ *dist= temp;
+ }
+ if(efa== acto) break;
}
+ efa= efa->next;
}
- countall();
- allqueue(REDRAWVIEW3D, 0);
}
+
+ acto= act;
+ return act;
}
-static void draw_vertices_special(int mode, EditVert *act) /* teken = draw */
+/* for interactivity, frontbuffer draw in current window */
+static void unified_select_draw(EditVert *eve, EditEdge *eed, EditFace *efa)
{
- /* (only this view, no other windows) */
- /* hackish routine for visual speed:
- * mode 0: deselect the selected ones, draw them, except act
- * mode 1: only draw act
- */
- EditMesh *em = G.editMesh;
- EditVert *eve;
- float size= BIF_GetThemeValuef(TH_VERTEX_SIZE);
- char col[3];
-
- glPointSize(size);
+
+ glDrawBuffer(GL_FRONT);
persp(PERSP_VIEW);
glPushMatrix();
mymultmatrix(G.obedit->obmat);
-
- if(mode==0) {
- BIF_ThemeColor(TH_VERTEX);
-
- /* set zbuffer on, its default off outside main drawloops */
- if(G.vd->drawtype > OB_WIRE) {
- G.zbuf= 1;
- glEnable(GL_DEPTH_TEST);
+
+ /* face selected */
+ if(efa) {
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
+
+ if(efa->f & SELECT) BIF_ThemeColor(TH_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_VERTEX);
+
+ bglBegin(GL_POINTS);
+ bglVertex3fv(efa->v1->co);
+ bglVertex3fv(efa->v2->co);
+ bglVertex3fv(efa->v3->co);
+ if(efa->v4) bglVertex3fv(efa->v4->co);
+ bglEnd();
}
- glBegin(GL_POINTS);
- eve= (EditVert *)em->verts.first;
- while(eve) {
- if(eve->h==0) {
- if(eve!=act && (eve->f & 1)) {
- eve->f -= 1;
- glVertex3fv(eve->co);
- }
- }
- eve= eve->next;
+ if(G.scene->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) {
+ if(efa->f & SELECT) BIF_ThemeColor(TH_EDGE_SELECT);
+ else BIF_ThemeColor(TH_WIRE);
+
+ glBegin(GL_LINE_LOOP);
+ glVertex3fv(efa->v1->co);
+ glVertex3fv(efa->v2->co);
+ glVertex3fv(efa->v3->co);
+ if(efa->v4) glVertex3fv(efa->v4->co);
+ glEnd();
}
- glEnd();
- glDisable(GL_DEPTH_TEST);
- G.zbuf= 0;
+ if(G.scene->selectmode & SCE_SELECT_FACE) {
+ glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
+
+ if(efa->f & SELECT) BIF_ThemeColor(TH_FACE_DOT);
+ else BIF_ThemeColor(TH_WIRE);
+
+ bglBegin(GL_POINTS);
+ bglVertex3fv(efa->cent);
+ bglEnd();
+ }
+ }
+ /* edge selected */
+ if(eed) {
+ if(G.scene->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) {
+ if(eed->f & SELECT) BIF_ThemeColor(TH_EDGE_SELECT);
+ else BIF_ThemeColor(TH_WIRE);
+
+ glBegin(GL_LINES);
+ glVertex3fv(eed->v1->co);
+ glVertex3fv(eed->v2->co);
+ glEnd();
+ }
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
+
+ if(eed->f & SELECT) BIF_ThemeColor(TH_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_VERTEX);
+
+ bglBegin(GL_POINTS);
+ bglVertex3fv(eed->v1->co);
+ bglVertex3fv(eed->v2->co);
+ bglEnd();
+ }
+ }
+ if(eve) {
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
+
+ if(eve->f & SELECT) BIF_ThemeColor(TH_VERTEX_SELECT);
+ else BIF_ThemeColor(TH_VERTEX);
+
+ bglBegin(GL_POINTS);
+ bglVertex3fv(eve->co);
+ bglEnd();
+ }
}
-
- /* draw active vertex */
- if(act->f & 1) BIF_GetThemeColor3ubv(TH_VERTEX_SELECT, col);
- else BIF_GetThemeColor3ubv(TH_VERTEX, col);
-
- glColor3ub(col[0], col[1], col[2]);
- glBegin(GL_POINTS);
- glVertex3fv(act->co);
- glEnd();
-
glPointSize(1.0);
glPopMatrix();
-
+ glFlush();
+ glDrawBuffer(GL_BACK);
+
+ /* signal that frontbuf differs from back */
+ curarea->win_swap= WIN_FRONT_OK;
}
-void mouse_mesh(void)
-{
- EditVert *act=0;
- if(G.qual & LR_ALTKEY) {
- if (G.qual & LR_CTRLKEY) edge_select();
+/* best distance based on screen coords.
+ use g.scene->selectmode to define how to use
+ selected vertices and edges get disadvantage
+ return 1 if found one
+*/
+static int unified_findnearest(EditVert **eve, EditEdge **eed, EditFace **efa)
+{
+ short dist= 75;
+
+ *eve= NULL;
+ *eed= NULL;
+ *efa= NULL;
+
+ if(G.scene->selectmode & SCE_SELECT_VERTEX)
+ *eve= findnearestvert(&dist, SELECT);
+ if(G.scene->selectmode & SCE_SELECT_FACE)
+ *efa= findnearestface(&dist);
+
+ dist-= 20; // since edges select lines, we give dots advantage of 20 pix
+ if(G.scene->selectmode & SCE_SELECT_EDGE)
+ *eed= findnearestedge(&dist);
+
+ /* return only one of 3 pointers, for frontbuffer redraws */
+ if(*eed) {
+ *efa= NULL; *eve= NULL;
+ }
+ else if(*efa) {
+ *eve= NULL;
}
- else {
- act= findnearestvert(1);
- if(act) {
-
- glDrawBuffer(GL_FRONT);
-
- undo_push_mesh("Select Vertex");
-
- if( (act->f & 1)==0) act->f+= 1;
- else if(G.qual & LR_SHIFTKEY) act->f-= 1;
+ return (*eve || *eed || *efa);
+}
- if((G.qual & LR_SHIFTKEY)==0) {
- draw_vertices_special(0, act);
+/* here actual select happens */
+void mouse_mesh(void)
+{
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ if(unified_findnearest(&eve, &eed, &efa)) {
+
+ if((G.qual & LR_SHIFTKEY)==0) EM_clear_flag_all(SELECT);
+
+ if(efa) {
+ if( (efa->f & SELECT)==0 ) {
+ EM_select_face(efa, 1);
}
- else draw_vertices_special(1, act);
-
- countall();
-
- glFlush();
- glDrawBuffer(GL_BACK);
-
- /* signal that frontbuf differs from back */
- curarea->win_swap= WIN_FRONT_OK;
-
- if(G.f & (G_FACESELECT|G_DRAWFACES|G_DRAWEDGES)) {
- /* update full view later on */
- allqueue(REDRAWVIEW3D, 0);
+ else if(G.qual & LR_SHIFTKEY) {
+ EM_select_face(efa, 0);
+ }
+ }
+ else if(eed) {
+ if((eed->f & SELECT)==0) {
+ EM_select_edge(eed, 1);
+ }
+ else if(G.qual & LR_SHIFTKEY) {
+ EM_select_edge(eed, 0);
}
- else allqueue(REDRAWVIEW3D, curarea->win); // all windows except this one
}
+ else if(eve) {
+ if((eve->f & SELECT)==0) eve->f |= SELECT;
+ else if(G.qual & LR_SHIFTKEY) eve->f |= ~SELECT;
+ }
+
+ /* frontbuffer draw of last selected only */
+ unified_select_draw(eve, eed, efa);
- rightmouse_transform();
- }
-}
+ countall();
+ EM_selectmode_flush();
+ allqueue(REDRAWVIEW3D, 0);
+ }
+ rightmouse_transform();
+}
static void selectconnectedAll(void)
@@ -630,31 +446,31 @@ static void selectconnectedAll(void)
EditMesh *em = G.editMesh;
EditVert *v1,*v2;
EditEdge *eed;
- short flag=1,toggle=0;
+ short done=1, toggle=0;
if(em->edges.first==0) return;
- undo_push_mesh("Select Connected (All)");
-
- while(flag==1) {
- flag= 0;
+ while(done==1) {
+ done= 0;
+
toggle++;
if(toggle & 1) eed= em->edges.first;
else eed= em->edges.last;
+
while(eed) {
v1= eed->v1;
v2= eed->v2;
if(eed->h==0) {
- if(v1->f & 1) {
- if( (v2->f & 1)==0 ) {
- v2->f |= 1;
- flag= 1;
+ if(v1->f & SELECT) {
+ if( (v2->f & SELECT)==0 ) {
+ v2->f |= SELECT;
+ done= 1;
}
}
- else if(v2->f & 1) {
- if( (v1->f & 1)==0 ) {
- v1->f |= 1;
- flag= 1;
+ else if(v2->f & SELECT) {
+ if( (v1->f & SELECT)==0 ) {
+ v1->f |= SELECT;
+ done= 1;
}
}
}
@@ -662,18 +478,23 @@ static void selectconnectedAll(void)
else eed= eed->prev;
}
}
+
+ /* now use vertex select flag to select rest */
+ EM_select_flush();
+
countall();
allqueue(REDRAWVIEW3D, 0);
-
+ BIF_undo_push("Select Connected (All)");
}
void selectconnected_mesh(int qual)
{
EditMesh *em = G.editMesh;
- EditVert *eve,*v1,*v2,*act= 0;
+ EditVert *eve, *v1, *v2;
EditEdge *eed;
- short flag=1,sel,toggle=0;
+ EditFace *efa;
+ short done=1, sel, toggle=0;
if(em->edges.first==0) return;
@@ -682,308 +503,778 @@ void selectconnected_mesh(int qual)
return;
}
- sel= 3;
- if(qual & LR_SHIFTKEY) sel=2;
- act= findnearestvert(sel-2);
- if(act==0) {
+ if( unified_findnearest(&eve, &eed, &efa)==0 ) {
error("Nothing indicated ");
return;
}
- undo_push_mesh("Select Linked");
- /* clear test flags */
- eve= em->verts.first;
- while(eve) {
- eve->f&= ~2;
- eve= eve->next;
- }
- act->f= (act->f & ~3) | sel;
+ sel= 1;
+ if(qual & LR_SHIFTKEY) sel=0;
- while(flag==1) {
- flag= 0;
+ /* clear test flags */
+ for(v1= em->verts.first; v1; v1= v1->next) v1->f1= 0;
+
+ /* start vertex/face/edge */
+ if(eve) eve->f1= 1;
+ else if(eed) eed->v1->f1= eed->v2->f1= 1;
+ else efa->v1->f1= efa->v2->f1= efa->v3->f1= 1;
+
+ /* set flag f1 if affected */
+ while(done==1) {
+ done= 0;
toggle++;
+
if(toggle & 1) eed= em->edges.first;
else eed= em->edges.last;
+
while(eed) {
v1= eed->v1;
v2= eed->v2;
+
if(eed->h==0) {
- if(v1->f & 2) {
- if( (v2->f & 2)==0 ) {
- v2->f= (v2->f & ~3) | sel;
- flag= 1;
- }
+ if(v1->f1 && v2->f1==0) {
+ v2->f1= 1;
+ done= 1;
}
- else if(v2->f & 2) {
- if( (v1->f & 2)==0 ) {
- v1->f= (v1->f & ~3) | sel;
- flag= 1;
- }
+ else if(v1->f1==0 && v2->f1) {
+ v1->f1= 1;
+ done= 1;
}
}
+
if(toggle & 1) eed= eed->next;
else eed= eed->prev;
}
}
+
+ /* now use vertex f1 flag to select/deselect */
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->v1->f1 && eed->v2->f1)
+ EM_select_edge(eed, sel);
+ }
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->v1->f1 && efa->v2->f1 && efa->v3->f1 && (efa->v4 && efa->v4->f1))
+ EM_select_face(efa, sel);
+ }
+ /* no flush needed, connected geometry is done */
+
countall();
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Select Linked");
+
}
-void vertexsmooth(void)
+
+/* swap is 0 or 1, if 1 it hides not selected */
+void hide_mesh(int swap)
{
EditMesh *em = G.editMesh;
EditVert *eve;
EditEdge *eed;
- float *adror, *adr, fac;
- float fvec[3];
- int teller=0;
-
+ EditFace *efa;
+
if(G.obedit==0) return;
- /* count */
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) teller++;
- eve= eve->next;
- }
- if(teller==0) return;
+ /* hide happens on least dominant select mode */
- undo_push_mesh("Smooth");
-
- adr=adror= (float *)MEM_callocN(3*sizeof(float *)*teller, "vertsmooth");
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- eve->vn= (EditVert *)adr;
- eve->f1= 0;
- adr+= 3;
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if((eve->f & SELECT)!=swap) {
+ eve->xs= 3200;
+ eve->f &= ~SELECT;
+ eve->h= 1;
+ }
}
- eve= eve->next;
- }
- eed= em->edges.first;
- while(eed) {
- if( (eed->v1->f & 1) || (eed->v2->f & 1) ) {
- fvec[0]= (eed->v1->co[0]+eed->v2->co[0])/2.0;
- fvec[1]= (eed->v1->co[1]+eed->v2->co[1])/2.0;
- fvec[2]= (eed->v1->co[2]+eed->v2->co[2])/2.0;
-
- if((eed->v1->f & 1) && eed->v1->f1<255) {
- eed->v1->f1++;
- VecAddf((float *)eed->v1->vn, (float *)eed->v1->vn, fvec);
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->v1->h || eed->v2->h) {
+ eed->h= 1;
+ eed->f &= ~SELECT;
}
- if((eed->v2->f & 1) && eed->v2->f1<255) {
- eed->v2->f1++;
- VecAddf((float *)eed->v2->vn, (float *)eed->v2->vn, fvec);
+ else eed->h= 0;
+ }
+
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->v1->h || efa->v2->h || efa->v3->h || (efa->v4 && efa->v4->h)) {
+ efa->h= 1;
+ efa->f &= ~SELECT;
}
+ else efa->h= 0;
}
- eed= eed->next;
}
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if((eed->f & SELECT)!=swap) {
+ eed->h= 1;
+ eed->v1->h= 1;
+ eed->v2->h= 1;
+ EM_select_edge(eed, 0);
+ }
+ }
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- if(eve->f1) {
- adr= (float *)eve->vn;
- fac= 0.5/(float)eve->f1;
-
- eve->co[0]= 0.5*eve->co[0]+fac*adr[0];
- eve->co[1]= 0.5*eve->co[1]+fac*adr[1];
- eve->co[2]= 0.5*eve->co[2]+fac*adr[2];
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->e1->h || efa->e2->h || efa->e3->h || (efa->e4 && efa->e4->h)) {
+ efa->h= 1;
+ efa->f &= ~SELECT;
}
- eve->vn= 0;
+ else efa->h= 0;
}
- eve= eve->next;
}
- MEM_freeN(adror);
+ else {
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if((efa->f & SELECT)!=swap) {
+ efa->h= 1;
+ efa->e1->h= efa->e2->h= efa->e3->h= 1;
+ if(efa->e4) efa->e4->h= 1;
+ efa->v1->h= efa->v2->h= efa->v3->h= 1;
+ if(efa->v4) efa->v4->h= 1;
+
+ EM_select_face(efa, 0);
+ }
+ }
+ }
+
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Hide");
}
-void vertexnoise(void)
+
+void reveal_mesh(void)
{
EditMesh *em = G.editMesh;
- extern float Tin;
- Material *ma;
- Tex *tex;
EditVert *eve;
- float b2, ofs, vec[3];
-
+ EditEdge *eed;
+ EditFace *efa;
+
if(G.obedit==0) return;
+
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h) {
+ eve->h= 0;
+ eve->f |= SELECT;
+ }
+ }
+
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h) {
+ eed->h= 0;
+ eed->f |= SELECT;
+ }
+ }
+
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h) {
+ efa->h= 0;
+ efa->f |= SELECT;
+ }
+ }
- undo_push_mesh("Noise");
+ allqueue(REDRAWVIEW3D, 0);
+ makeDispList(G.obedit);
+ BIF_undo_push("Reveal");
+}
+
+void select_non_manifold(void)
+{
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ /* Selects isolated verts, and edges that do not have 2 neighboring
+ * faces
+ */
- ma= give_current_material(G.obedit, G.obedit->actcol);
- if(ma==0 || ma->mtex[0]==0 || ma->mtex[0]->tex==0) {
+ if(G.scene->selectmode==SCE_SELECT_FACE) {
+ error("Doesn't work in face selection mode");
return;
}
- tex= ma->mtex[0]->tex;
-
- ofs= tex->turbul/200.0;
-
- eve= (struct EditVert *)em->verts.first;
+
+ eve= em->verts.first;
while(eve) {
- if(eve->f & 1) {
-
- if(tex->type==TEX_STUCCI) {
-
- b2= BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]);
- if(tex->stype) ofs*=(b2*b2);
- vec[0]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0]+ofs, eve->co[1], eve->co[2]));
- vec[1]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1]+ofs, eve->co[2]));
- vec[2]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]+ofs));
-
- VecAddf(eve->co, eve->co, vec);
- }
- else {
-
- externtex(ma->mtex[0], eve->co);
-
- eve->co[2]+= 0.05*Tin;
- }
+ /* this will count how many edges are connected
+ * to this vert */
+ eve->f1= 0;
+ eve= eve->next;
+ }
+
+ eed= em->edges.first;
+ while(eed) {
+ /* this will count how many faces are connected to
+ * this edge */
+ eed->f1= 0;
+ /* increase edge count for verts */
+ ++eed->v1->f1;
+ ++eed->v2->f1;
+ eed= eed->next;
+ }
+
+ efa= em->faces.first;
+ while(efa) {
+ /* increase face count for edges */
+ ++efa->e1->f1;
+ ++efa->e2->f1;
+ ++efa->e3->f1;
+ if (efa->e4)
+ ++efa->e4->f1;
+ efa= efa->next;
+ }
+
+ /* select verts that are attached to an edge that does not
+ * have 2 neighboring faces */
+ eed= em->edges.first;
+ while(eed) {
+ if (eed->h==0 && eed->f1 != 2) {
+ EM_select_edge(eed, 1);
+ }
+ eed= eed->next;
+ }
+
+ /* select isolated verts */
+ eve= em->verts.first;
+ while(eve) {
+ if (eve->f1 == 0) {
+ if (!eve->h) eve->f |= SELECT;
}
eve= eve->next;
}
- allqueue(REDRAWVIEW3D, 0);
- makeDispList(G.obedit);
+ countall();
+ addqueue(curarea->win, REDRAW, 0);
+ BIF_undo_push("Select Non Manifold");
}
-void hide_mesh(int swap)
+void selectswap_mesh(void) /* UI level */
{
EditMesh *em = G.editMesh;
EditVert *eve;
EditEdge *eed;
+ EditFace *efa;
+
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
- if(G.obedit==0) return;
-
- if(swap) {
- eve= em->verts.first;
- while(eve) {
- if((eve->f & 1)==0) {
- eve->xs= 3200;
- eve->h= 1;
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h==0) {
+ if(eve->f & SELECT) eve->f &= ~SELECT;
+ else eve->f|= SELECT;
}
- eve= eve->next;
}
}
- else {
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- eve->f-=1;
- eve->xs= 3200;
- eve->h= 1;
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ EM_select_edge(eed, !(eed->f & SELECT));
}
- eve= eve->next;
}
}
- eed= em->edges.first;
- while(eed) {
- if(eed->v1->h || eed->v2->h) eed->h= 1;
- else eed->h= 0;
- eed= eed->next;
+ else {
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ EM_select_face(efa, !(efa->f & SELECT));
+ }
+ }
}
+ EM_selectmode_flush();
+
+ countall();
allqueue(REDRAWVIEW3D, 0);
- makeDispList(G.obedit);
+
+ BIF_undo_push("Select Swap");
+
}
+void deselectall_mesh(void) /* this toggles!!!, UI level */
+{
+
+ if(G.obedit->lay & G.vd->lay) {
-void reveal_mesh(void)
+ if( EM_nvertices_selected() ) {
+ EM_clear_flag_all(SELECT);
+ BIF_undo_push("Deselect All");
+ }
+ else {
+ EM_set_flag_all(SELECT);
+ BIF_undo_push("Select All");
+ }
+
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ }
+}
+
+void select_more(void)
{
EditMesh *em = G.editMesh;
EditVert *eve;
EditEdge *eed;
+ EditFace *efa;
+
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->f & SELECT) eve->f1= 1;
+ else eve->f1 = 0;
+ }
+
+ /* set f1 flags in vertices to select 'more' */
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ if (eed->v1->f & SELECT)
+ eed->v2->f1 = 1;
+ if (eed->v2->f & SELECT)
+ eed->v1->f1 = 1;
+ }
+ }
- if(G.obedit==0) return;
+ /* new selected edges */
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ if(eed->v1->f1 && eed->v2->f1) EM_select_edge(eed, 1);
+ }
+ }
- eve= em->verts.first;
- while(eve) {
- if(eve->h) {
- eve->h= 0;
- eve->f|=1;
+ /* new selected faces */
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ if(efa->v1->f1 && efa->v2->f1 && efa->v3->f1 && (efa->v4 && efa->v4->f1))
+ EM_select_face(efa, 1);
}
- eve= eve->next;
}
- eed= em->edges.first;
- while(eed) {
- eed->h= 0;
- eed= eed->next;
+ countall();
+ addqueue(curarea->win, REDRAW, 0);
+ BIF_undo_push("Select More");
+}
+
+void select_less(void)
+{
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ /* eve->f1 & 1 => isolated */
+ /* eve->f1 & 2 => on an edge */
+ /* eve->f1 & 4 => shares edge with a deselected vert */
+ /* eve->f1 & 8 => at most one neighbor */
+
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ /* assume vert is isolated unless proven otherwise, */
+ /* assume at most one neighbor too */
+ eve->f1 = 1 | 8;
}
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ eed->f1= 0;
+ if(eed->h==0) {
+ /* this will count how many faces are connected to
+ * this edge */
+
+ /* if vert wasn't isolated, it now has more than one neighbor */
+ if (~eed->v1->f1 & 1) eed->v1->f1 &= ~8;
+ if (~eed->v2->f1 & 1) eed->v2->f1 &= ~8;
+
+ /* verts on edge are clearly not isolated */
+ eed->v1->f1 &= ~1;
+ eed->v2->f1 &= ~1;
+
+ /* if one of the verts on the edge is deselected,
+ * deselect the other */
+ if ( (~eed->v1->f & SELECT) )
+ eed->v2->f1 |= 4;
+ if ( (~eed->v2->f & SELECT) )
+ eed->v1->f1 |= 4;
+ }
+ }
+
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ /* increase face count for edges */
+ if(efa->h==0) {
+ ++efa->e1->f1;
+ ++efa->e2->f1;
+ ++efa->e3->f1;
+ if (efa->e4) ++efa->e4->f1;
+ }
+ }
+
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ /* if the edge has only one neighboring face, then
+ * deselect attached verts */
+ if (eed->h==0 && eed->f1 == 1) {
+ eed->v1->f1 |= 2;
+ eed->v2->f1 |= 2;
+ }
+ }
+
+ /* deselect verts */
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if (eve->f1) {
+ eve->f &= ~SELECT;
+ }
+ }
+
+ /* now rebuild selection state for edges & faces */
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->v1->f1 && eed->v2->f1) EM_select_edge(eed, 0);
+ }
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ if(efa->v1->f1 && efa->v2->f1 && efa->v3->f1 && (efa->v4 && efa->v4->f1))
+ EM_select_face(efa, 0);
+ }
+ }
+
+ countall();
allqueue(REDRAWVIEW3D, 0);
- makeDispList(G.obedit);
}
-void vertices_to_sphere(void)
+void selectrandom_mesh(void) /* randomly selects a user-set % of vertices/edges/faces */
{
EditMesh *em = G.editMesh;
EditVert *eve;
- Object *ob= OBACT;
- float *curs, len, vec[3], cent[3], fac, facm, imat[3][3], bmat[3][3];
- int tot;
- short perc=100;
-
- if(ob==0) return;
- TEST_EDITMESH
+ EditEdge *eed;
+ EditFace *efa;
+ short randfac = 50;
+
+ if(G.obedit==NULL || (G.obedit->lay & G.vd->lay)==0) return;
+
+ /* Get the percentage of vertices to randomly select as 'randfac' */
+ if(button(&randfac,0, 100,"Percentage:")==0) return;
+
+ BLI_srand( BLI_rand() ); /* random seed */
- if(button(&perc, 1, 100, "Percentage:")==0) return;
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h==0) {
+ if ( (BLI_frand() * 100) < randfac)
+ eve->f |= SELECT;
+ }
+ }
+ }
+ else if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ if ( (BLI_frand() * 100) < randfac)
+ EM_select_edge(eed, 1);
+ }
+ }
+ }
+ else {
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ if ( (BLI_frand() * 100) < randfac)
+ EM_select_face(efa, 1);
+ }
+ }
+ }
- undo_push_mesh("To Sphere");
+ EM_selectmode_flush();
+
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+}
+
+void editmesh_select_by_material(int index)
+{
+ EditMesh *em = G.editMesh;
+ EditFace *efa;
- fac= perc/100.0;
- facm= 1.0-fac;
+ for (efa=em->faces.first; efa; efa= efa->next) {
+ if (efa->mat_nr==index) {
+ EM_select_face(efa, 1);
+ }
+ }
+
+ EM_selectmode_flush();
+}
+
+void editmesh_deselect_by_material(int index)
+{
+ EditMesh *em = G.editMesh;
+ EditFace *efa;
- Mat3CpyMat4(bmat, ob->obmat);
- Mat3Inv(imat, bmat);
+ for (efa=em->faces.first; efa; efa= efa->next) {
+ if (efa->mat_nr==index) {
+ EM_select_face(efa, 0);
+ }
+ }
- /* centre */
- curs= give_cursor();
- cent[0]= curs[0]-ob->obmat[3][0];
- cent[1]= curs[1]-ob->obmat[3][1];
- cent[2]= curs[2]-ob->obmat[3][2];
- Mat3MulVecfl(imat, cent);
+ EM_selectmode_flush();
+}
- len= 0.0;
- tot= 0;
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- tot++;
- len+= VecLenf(cent, eve->co);
+/* ************************* SEAMS AND EDGES **************** */
+
+void editmesh_mark_seam(int clear)
+{
+ EditMesh *em= G.editMesh;
+ EditEdge *eed;
+ Mesh *me= G.obedit->data;
+
+ /* auto-enable seams drawing */
+ if(clear==0) {
+ if(!(G.f & G_DRAWSEAMS)) {
+ G.f |= G_DRAWSEAMS;
+ allqueue(REDRAWBUTSEDIT, 0);
}
- eve= eve->next;
+ if(!me->medge)
+ me->medge= MEM_callocN(sizeof(MEdge), "fake mesh edge");
}
- len/=tot;
+
+ if(clear) {
+ eed= em->edges.first;
+ while(eed) {
+ if((eed->h==0) && (eed->f & SELECT)) {
+ eed->seam = 0;
+ }
+ eed= eed->next;
+ }
+ }
+ else {
+ eed= em->edges.first;
+ while(eed) {
+ if((eed->h==0) && (eed->f & SELECT)) {
+ eed->seam = 1;
+ }
+ eed= eed->next;
+ }
+ }
+
+ allqueue(REDRAWVIEW3D, 0);
+}
+
+void Edge_Menu() {
+ short ret;
+
+ ret= pupmenu("Edge Specials%t|Mark Seam %x1|Clear Seam %x2|Rotate Edges %x3");
+
+ switch(ret)
+ {
+ case 1:
+ editmesh_mark_seam(0);
+ break;
+ case 2:
+ editmesh_mark_seam(1);
+ break;
+ case 3:
+ edge_rotate_selected();
+ break;
+ }
+}
+
+/* **************** NORMALS ************** */
+
+void righthandfaces(int select) /* makes faces righthand turning */
+{
+ EditMesh *em = G.editMesh;
+ EditEdge *eed, *ed1, *ed2, *ed3, *ed4;
+ EditFace *efa, *startvl;
+ float maxx, nor[3], cent[3];
+ int totsel, found, foundone, direct, turn, tria_nr;
+
+ /* based at a select-connected to witness loose objects */
+
+ /* count per edge the amount of faces */
+
+ /* find the ultimate left, front, upper face (not manhattan dist!!) */
+ /* also evaluate both triangle cases in quad, since these can be non-flat */
+
+ /* put normal to the outside, and set the first direction flags in edges */
+
+ /* then check the object, and set directions / direction-flags: but only for edges with 1 or 2 faces */
+ /* this is in fact the 'select connected' */
- if(len==0.0) len= 10.0;
+ /* in case (selected) faces were not done: start over with 'find the ultimate ...' */
+
+ waitcursor(1);
- eve= em->verts.first;
- while(eve) {
- if(eve->f & 1) {
- vec[0]= eve->co[0]-cent[0];
- vec[1]= eve->co[1]-cent[1];
- vec[2]= eve->co[2]-cent[2];
-
- Normalise(vec);
-
- eve->co[0]= fac*(cent[0]+vec[0]*len) + facm*eve->co[0];
- eve->co[1]= fac*(cent[1]+vec[1]*len) + facm*eve->co[1];
- eve->co[2]= fac*(cent[2]+vec[2]*len) + facm*eve->co[2];
-
+ eed= em->edges.first;
+ while(eed) {
+ eed->f2= 0; // edge direction
+ eed->f1= 0; // counter
+ eed= eed->next;
+ }
+
+ /* count faces and edges */
+ totsel= 0;
+ efa= em->faces.first;
+ while(efa) {
+ if(select==0 || (efa->f & SELECT) ) {
+ efa->f1= 1;
+ totsel++;
+ efa->e1->f1++;
+ efa->e2->f1++;
+ efa->e3->f1++;
+ if(efa->v4) efa->e4->f1++;
}
- eve= eve->next;
+ else efa->f1= 0;
+
+ efa= efa->next;
}
+
+ while(totsel>0) {
+ /* from the outside to the inside */
+
+ efa= em->faces.first;
+ startvl= NULL;
+ maxx= -1.0e10;
+ tria_nr= 0;
+
+ while(efa) {
+ if(efa->f1) {
+ CalcCent3f(cent, efa->v1->co, efa->v2->co, efa->v3->co);
+ cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2];
+
+ if(cent[0]>maxx) {
+ maxx= cent[0];
+ startvl= efa;
+ tria_nr= 0;
+ }
+ if(efa->v4) {
+ CalcCent3f(cent, efa->v1->co, efa->v3->co, efa->v4->co);
+ cent[0]= cent[0]*cent[0] + cent[1]*cent[1] + cent[2]*cent[2];
+
+ if(cent[0]>maxx) {
+ maxx= cent[0];
+ startvl= efa;
+ tria_nr= 1;
+ }
+ }
+ }
+ efa= efa->next;
+ }
+
+ /* set first face correct: calc normal */
+
+ if(tria_nr==1) {
+ CalcNormFloat(startvl->v1->co, startvl->v3->co, startvl->v4->co, nor);
+ CalcCent3f(cent, startvl->v1->co, startvl->v3->co, startvl->v4->co);
+ } else {
+ CalcNormFloat(startvl->v1->co, startvl->v2->co, startvl->v3->co, nor);
+ CalcCent3f(cent, startvl->v1->co, startvl->v2->co, startvl->v3->co);
+ }
+ /* first normal is oriented this way or the other */
+ if(select) {
+ if(select==2) {
+ if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] > 0.0) flipface(startvl);
+ }
+ else {
+ if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(startvl);
+ }
+ }
+ else if(cent[0]*nor[0]+cent[1]*nor[1]+cent[2]*nor[2] < 0.0) flipface(startvl);
+
+
+ eed= startvl->e1;
+ if(eed->v1==startvl->v1) eed->f2= 1;
+ else eed->f2= 2;
+
+ eed= startvl->e2;
+ if(eed->v1==startvl->v2) eed->f2= 1;
+ else eed->f2= 2;
+
+ eed= startvl->e3;
+ if(eed->v1==startvl->v3) eed->f2= 1;
+ else eed->f2= 2;
+
+ eed= startvl->e4;
+ if(eed) {
+ if(eed->v1==startvl->v4) eed->f2= 1;
+ else eed->f2= 2;
+ }
+
+ startvl->f1= 0;
+ totsel--;
+
+ /* test normals */
+ found= 1;
+ direct= 1;
+ while(found) {
+ found= 0;
+ if(direct) efa= em->faces.first;
+ else efa= em->faces.last;
+ while(efa) {
+ if(efa->f1) {
+ turn= 0;
+ foundone= 0;
+
+ ed1= efa->e1;
+ ed2= efa->e2;
+ ed3= efa->e3;
+ ed4= efa->e4;
+
+ if(ed1->f2) {
+ if(ed1->v1==efa->v1 && ed1->f2==1) turn= 1;
+ if(ed1->v2==efa->v1 && ed1->f2==2) turn= 1;
+ foundone= 1;
+ }
+ else if(ed2->f2) {
+ if(ed2->v1==efa->v2 && ed2->f2==1) turn= 1;
+ if(ed2->v2==efa->v2 && ed2->f2==2) turn= 1;
+ foundone= 1;
+ }
+ else if(ed3->f2) {
+ if(ed3->v1==efa->v3 && ed3->f2==1) turn= 1;
+ if(ed3->v2==efa->v3 && ed3->f2==2) turn= 1;
+ foundone= 1;
+ }
+ else if(ed4 && ed4->f2) {
+ if(ed4->v1==efa->v4 && ed4->f2==1) turn= 1;
+ if(ed4->v2==efa->v4 && ed4->f2==2) turn= 1;
+ foundone= 1;
+ }
+
+ if(foundone) {
+ found= 1;
+ totsel--;
+ efa->f1= 0;
+
+ if(turn) {
+ if(ed1->v1==efa->v1) ed1->f2= 2;
+ else ed1->f2= 1;
+ if(ed2->v1==efa->v2) ed2->f2= 2;
+ else ed2->f2= 1;
+ if(ed3->v1==efa->v3) ed3->f2= 2;
+ else ed3->f2= 1;
+ if(ed4) {
+ if(ed4->v1==efa->v4) ed4->f2= 2;
+ else ed4->f2= 1;
+ }
+
+ flipface(efa);
+
+ }
+ else {
+ if(ed1->v1== efa->v1) ed1->f2= 1;
+ else ed1->f2= 2;
+ if(ed2->v1==efa->v2) ed2->f2= 1;
+ else ed2->f2= 2;
+ if(ed3->v1==efa->v3) ed3->f2= 1;
+ else ed3->f2= 2;
+ if(ed4) {
+ if(ed4->v1==efa->v4) ed4->f2= 1;
+ else ed4->f2= 2;
+ }
+ }
+ }
+ }
+ if(direct) efa= efa->next;
+ else efa= efa->prev;
+ }
+ direct= 1-direct;
+ }
+ }
+
+ recalc_editnormals();
- allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+
+ waitcursor(0);
}
@@ -1078,7 +1369,7 @@ void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis)
void editmesh_align_view_to_selected(View3D *v3d, int axis)
{
EditMesh *em = G.editMesh;
- int nselverts= editmesh_nvertices_selected();
+ int nselverts= EM_nvertices_selected();
if (nselverts<3) {
if (nselverts==0) {
@@ -1086,7 +1377,7 @@ void editmesh_align_view_to_selected(View3D *v3d, int axis)
} else {
error("At least one face or three vertices must be selected.");
}
- } else if (editmesh_nfaces_selected()) {
+ } else if (EM_nfaces_selected()) {
float norm[3];
EditFace *efa;
@@ -1135,313 +1426,187 @@ void editmesh_align_view_to_selected(View3D *v3d, int axis)
}
}
+/* **************** VERTEX DEFORMS *************** */
-void select_non_manifold(void)
+void vertexsmooth(void)
{
EditMesh *em = G.editMesh;
EditVert *eve;
EditEdge *eed;
- EditFace *efa;
-
- /* Selects isolated verts, and edges that do not have 2 neighboring
- * faces
- */
+ float *adror, *adr, fac;
+ float fvec[3];
+ int teller=0;
+ if(G.obedit==0) return;
+ /* count */
eve= em->verts.first;
while(eve) {
- /* this will count how many edges are connected
- * to this vert */
- eve->f1= 0;
+ if(eve->f & SELECT) teller++;
eve= eve->next;
}
-
- eed= em->edges.first;
- while(eed) {
- /* this will count how many faces are connected to
- * this edge */
- eed->f1= 0;
- /* increase edge count for verts */
- ++eed->v1->f1;
- ++eed->v2->f1;
- eed= eed->next;
- }
-
- efa= em->faces.first;
- while(efa) {
- /* increase face count for edges */
- ++efa->e1->f1;
- ++efa->e2->f1;
- ++efa->e3->f1;
- if (efa->e4)
- ++efa->e4->f1;
- efa= efa->next;
- }
-
- /* select verts that are attached to an edge that does not
- * have 2 neighboring faces */
- eed= em->edges.first;
- while(eed) {
- if (eed->f1 != 2) {
- if (!eed->v1->h) eed->v1->f |= 1;
- if (!eed->v2->h) eed->v2->f |= 1;
- }
- eed= eed->next;
- }
-
- /* select isolated verts */
+ if(teller==0) return;
+
+ adr=adror= (float *)MEM_callocN(3*sizeof(float *)*teller, "vertsmooth");
eve= em->verts.first;
while(eve) {
- if (eve->f1 == 0) {
- if (!eve->h) eve->f |= 1;
+ if(eve->f & SELECT) {
+ eve->vn= (EditVert *)adr;
+ eve->f1= 0;
+ adr+= 3;
}
eve= eve->next;
}
-
- countall();
- addqueue(curarea->win, REDRAW, 0);
-
-}
-
-void select_more(void)
-{
- EditMesh *em = G.editMesh;
- EditVert *eve;
- EditEdge *eed;
-
- eve= em->verts.first;
- while(eve) {
- eve->f1 = 0;
- eve= eve->next;
- }
-
+
eed= em->edges.first;
while(eed) {
- if (eed->v1->f & 1)
- eed->v2->f1 = 1;
- if (eed->v2->f & 1)
- eed->v1->f1 = 1;
-
+ if( (eed->v1->f & SELECT) || (eed->v2->f & SELECT) ) {
+ fvec[0]= (eed->v1->co[0]+eed->v2->co[0])/2.0;
+ fvec[1]= (eed->v1->co[1]+eed->v2->co[1])/2.0;
+ fvec[2]= (eed->v1->co[2]+eed->v2->co[2])/2.0;
+
+ if((eed->v1->f & SELECT) && eed->v1->f1<255) {
+ eed->v1->f1++;
+ VecAddf((float *)eed->v1->vn, (float *)eed->v1->vn, fvec);
+ }
+ if((eed->v2->f & SELECT) && eed->v2->f1<255) {
+ eed->v2->f1++;
+ VecAddf((float *)eed->v2->vn, (float *)eed->v2->vn, fvec);
+ }
+ }
eed= eed->next;
}
eve= em->verts.first;
while(eve) {
- if (eve->f1 == 1)
- if (!eve->h) eve->f |= 1;
-
+ if(eve->f & SELECT) {
+ if(eve->f1) {
+ adr= (float *)eve->vn;
+ fac= 0.5/(float)eve->f1;
+
+ eve->co[0]= 0.5*eve->co[0]+fac*adr[0];
+ eve->co[1]= 0.5*eve->co[1]+fac*adr[1];
+ eve->co[2]= 0.5*eve->co[2]+fac*adr[2];
+ }
+ eve->vn= 0;
+ }
eve= eve->next;
}
+ MEM_freeN(adror);
- countall();
- addqueue(curarea->win, REDRAW, 0);
+ allqueue(REDRAWVIEW3D, 0);
+ makeDispList(G.obedit);
+ BIF_undo_push("Vertex Smooth");
}
-void select_less(void)
+void vertexnoise(void)
{
EditMesh *em = G.editMesh;
+ extern float Tin;
+ Material *ma;
+ Tex *tex;
EditVert *eve;
- EditEdge *eed;
- EditFace *efa;
-
- /* eve->f1 & 1 => isolated */
- /* eve->f1 & 2 => on an edge */
- /* eve->f1 & 4 => shares edge with a deselected vert */
- /* eve->f1 & 8 => at most one neighbor */
-
- eve= em->verts.first;
- while(eve) {
- /* assume vert is isolated unless proven otherwise, */
- /* assume at most one neighbor too */
- eve->f1 = 1 | 8;
-
- eve= eve->next;
- }
-
- eed= em->edges.first;
- while(eed) {
- /* this will count how many faces are connected to
- * this edge */
- eed->f1= 0;
-
- /* if vert wasn't isolated, it now has more than one neighbor */
- if (~eed->v1->f1 & 1) eed->v1->f1 &= ~8;
- if (~eed->v2->f1 & 1) eed->v2->f1 &= ~8;
-
- /* verts on edge are clearly not isolated */
- eed->v1->f1 &= ~1;
- eed->v2->f1 &= ~1;
-
- /* if one of the verts on the edge is deselected,
- * deselect the other */
- if ( !(eed->v1->h) && (~eed->v1->f & 1) )
- eed->v2->f1 |= 4;
- if ( !(eed->v2->h) && (~eed->v2->f & 1) )
- eed->v1->f1 |= 4;
-
- eed= eed->next;
- }
-
- efa= em->faces.first;
- while(efa) {
- /* increase face count for edges */
- ++efa->e1->f1;
- ++efa->e2->f1;
- ++efa->e3->f1;
- if (efa->e4)
- ++efa->e4->f1;
-
- efa= efa->next;
- }
-
- eed= em->edges.first;
- while(eed) {
- /* if the edge has only one neighboring face, then
- * deselect attached verts */
- if (eed->f1 == 1) {
- eed->v1->f1 |= 2;
- eed->v2->f1 |= 2;
- }
+ float b2, ofs, vec[3];
- eed= eed->next;
+ if(G.obedit==0) return;
+
+ ma= give_current_material(G.obedit, G.obedit->actcol);
+ if(ma==0 || ma->mtex[0]==0 || ma->mtex[0]->tex==0) {
+ return;
}
-
- /* deselect verts */
- eve= em->verts.first;
+ tex= ma->mtex[0]->tex;
+
+ ofs= tex->turbul/200.0;
+
+ eve= (struct EditVert *)em->verts.first;
while(eve) {
- if (eve->f1) {
- eve->f &= ~1;
+ if(eve->f & SELECT) {
+
+ if(tex->type==TEX_STUCCI) {
+
+ b2= BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]);
+ if(tex->stype) ofs*=(b2*b2);
+ vec[0]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0]+ofs, eve->co[1], eve->co[2]));
+ vec[1]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1]+ofs, eve->co[2]));
+ vec[2]= 0.2*(b2-BLI_hnoise(tex->noisesize, eve->co[0], eve->co[1], eve->co[2]+ofs));
+
+ VecAddf(eve->co, eve->co, vec);
+ }
+ else {
+
+ externtex(ma->mtex[0], eve->co);
+
+ eve->co[2]+= 0.05*Tin;
+ }
}
-
eve= eve->next;
}
- countall();
allqueue(REDRAWVIEW3D, 0);
+ makeDispList(G.obedit);
+ BIF_undo_push("Vertex Noise");
}
-
-void selectrandom_mesh(void) /* randomly selects a user-set % of vertices */
+void vertices_to_sphere(void)
{
EditMesh *em = G.editMesh;
EditVert *eve;
- int newsel = 0; /* to decide whether to redraw or not */
- short randfac = 50;
-
- if(G.obedit==0) return;
-
- /* Get the percentage of vertices to randomly select as 'randfac' */
- if(button(&randfac,0, 100,"Percentage:")==0) return;
-
- if(G.obedit->lay & G.vd->lay) {
- eve= em->verts.first;
- while(eve) {
- BLI_srand( BLI_rand() ); /* random seed */
- if ( (BLI_frand() * 100) < randfac) {
- eve->f |= SELECT;
- newsel = 1;
- } else {
- /* Deselect other vertices
- *
- * - Commenting this out makes it add to the selection,
- * rather than replace it.
- * eve->f &= ~SELECT;
- */
- }
- eve= eve->next;
- }
- countall();
- allqueue(REDRAWVIEW3D, 0);
- }
-}
-
-
-
-void editmesh_select_by_material(int index)
-{
- EditMesh *em = G.editMesh;
- EditFace *efa;
+ Object *ob= OBACT;
+ float *curs, len, vec[3], cent[3], fac, facm, imat[3][3], bmat[3][3];
+ int tot;
+ short perc=100;
- for (efa=em->faces.first; efa; efa= efa->next) {
- if (efa->mat_nr==index) {
- if(efa->v1->h==0) efa->v1->f |= 1;
- if(efa->v2->h==0) efa->v2->f |= 1;
- if(efa->v3->h==0) efa->v3->f |= 1;
- if(efa->v4 && efa->v4->h==0) efa->v4->f |= 1;
- }
- }
-}
-
-void editmesh_deselect_by_material(int index)
-{
- EditMesh *em = G.editMesh;
- EditFace *efa;
+ if(ob==0) return;
+ TEST_EDITMESH
- for (efa=em->faces.first; efa; efa= efa->next) {
- if (efa->mat_nr==index) {
- if(efa->v1->h==0) efa->v1->f &= ~1;
- if(efa->v2->h==0) efa->v2->f &= ~1;
- if(efa->v3->h==0) efa->v3->f &= ~1;
- if(efa->v4 && efa->v4->h==0) efa->v4->f &= ~1;
- }
- }
-}
-
-void editmesh_mark_seam(int clear)
-{
- EditMesh *em= G.editMesh;
- EditEdge *eed;
- Mesh *me= G.obedit->data;
+ if(button(&perc, 1, 100, "Percentage:")==0) return;
+
+ fac= perc/100.0;
+ facm= 1.0-fac;
+
+ Mat3CpyMat4(bmat, ob->obmat);
+ Mat3Inv(imat, bmat);
- /* auto-enable seams drawing */
- if(clear==0) {
- if(!(G.f & G_DRAWSEAMS)) {
- G.f |= G_DRAWSEAMS;
- allqueue(REDRAWBUTSEDIT, 0);
- }
- if(!me->medge)
- me->medge= MEM_callocN(sizeof(MEdge), "fake mesh edge");
- }
+ /* centre */
+ curs= give_cursor();
+ cent[0]= curs[0]-ob->obmat[3][0];
+ cent[1]= curs[1]-ob->obmat[3][1];
+ cent[2]= curs[2]-ob->obmat[3][2];
+ Mat3MulVecfl(imat, cent);
- if(clear) {
- eed= em->edges.first;
- while(eed) {
- if((eed->h==0) && (eed->v1->f & 1) && (eed->v2->f & 1)) {
- eed->seam = 0;
- }
- eed= eed->next;
+ len= 0.0;
+ tot= 0;
+ eve= em->verts.first;
+ while(eve) {
+ if(eve->f & SELECT) {
+ tot++;
+ len+= VecLenf(cent, eve->co);
}
+ eve= eve->next;
}
- else {
- eed= em->edges.first;
- while(eed) {
- if((eed->h==0) && (eed->v1->f & 1) && (eed->v2->f & 1)) {
- eed->seam = 1;
- }
- eed= eed->next;
+ len/=tot;
+
+ if(len==0.0) len= 10.0;
+
+ eve= em->verts.first;
+ while(eve) {
+ if(eve->f & SELECT) {
+ vec[0]= eve->co[0]-cent[0];
+ vec[1]= eve->co[1]-cent[1];
+ vec[2]= eve->co[2]-cent[2];
+
+ Normalise(vec);
+
+ eve->co[0]= fac*(cent[0]+vec[0]*len) + facm*eve->co[0];
+ eve->co[1]= fac*(cent[1]+vec[1]*len) + facm*eve->co[1];
+ eve->co[2]= fac*(cent[2]+vec[2]*len) + facm*eve->co[2];
+
}
+ eve= eve->next;
}
-
+
allqueue(REDRAWVIEW3D, 0);
+ makeDispList(G.obedit);
+ BIF_undo_push("To Sphere");
}
-void Edge_Menu() {
- short ret;
-
- ret= pupmenu("Edge Specials%t|Mark Seam %x1|Clear Seam %x2|Rotate Edges %x3");
-
- switch(ret)
- {
- case 1:
- editmesh_mark_seam(0);
- break;
- case 2:
- editmesh_mark_seam(1);
- break;
- case 3:
- edge_rotate_selected();
- break;
- }
-}
-
-
diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c
index f72c6250809..fefbb408225 100644
--- a/source/blender/src/editmesh_tools.c
+++ b/source/blender/src/editmesh_tools.c
@@ -133,16 +133,16 @@ void convert_to_triface(int all)
EditMesh *em = G.editMesh;
EditFace *efa, *efan, *next;
- undo_push_mesh("Convert Quads to Triangles");
-
- efa= em->faces.first;
+ efa= em->faces.last;
while(efa) {
- next= efa->next;
+ next= efa->prev;
if(efa->v4) {
- if(all || faceselectedAND(efa, 1) ) {
+ if(all || (efa->f & SELECT) ) {
efan= addfacelist(efa->v1, efa->v2, efa->v3, 0, efa);
+ if(efa->f & SELECT) EM_select_face(efan, 1);
efan= addfacelist(efa->v1, efa->v3, efa->v4, 0, efa);
+ if(efa->f & SELECT) EM_select_face(efan, 1);
efan->tf.uv[1][0]= efan->tf.uv[2][0];
efan->tf.uv[1][1]= efan->tf.uv[2][1];
@@ -159,6 +159,8 @@ void convert_to_triface(int all)
efa= next;
}
+ BIF_undo_push("Convert Quads to Triangles");
+
}
@@ -172,20 +174,20 @@ short removedoublesflag(short flag, float limit) /* return amount */
struct xvertsort *sortblock, *sb, *sb1;
struct facesort *vlsortblock, *vsb, *vsb1;
float dist;
- int a, b, test, aantal;
+ int a, b, test, amount;
/* flag 128 is cleared, count */
eve= em->verts.first;
- aantal= 0;
+ amount= 0;
while(eve) {
- eve->f&= ~128;
- if(eve->f & flag) aantal++;
+ eve->f &= ~128;
+ if(eve->f & flag) amount++;
eve= eve->next;
}
- if(aantal==0) return 0;
+ if(amount==0) return 0;
/* allocate memory and qsort */
- sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*aantal,"sortremovedoub");
+ sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*amount,"sortremovedoub");
eve= em->verts.first;
while(eve) {
if(eve->f & flag) {
@@ -195,15 +197,15 @@ short removedoublesflag(short flag, float limit) /* return amount */
}
eve= eve->next;
}
- qsort(sortblock, aantal, sizeof(struct xvertsort), vergxco);
+ qsort(sortblock, amount, sizeof(struct xvertsort), vergxco);
/* test for doubles */
sb= sortblock;
- for(a=0; a<aantal; a++) {
+ for(a=0; a<amount; a++) {
eve= sb->v1;
if( (eve->f & 128)==0 ) {
sb1= sb+1;
- for(b=a+1; b<aantal; b++) {
+ for(b=a+1; b<amount; b++) {
/* first test: simpel dist */
dist= sb1->x - sb->x;
if(dist > limit) break;
@@ -234,14 +236,14 @@ short removedoublesflag(short flag, float limit) /* return amount */
/* test edges and insert again */
eed= em->edges.first;
while(eed) {
- eed->f= 0;
+ eed->f2= 0;
eed= eed->next;
}
eed= em->edges.last;
while(eed) {
nexted= eed->prev;
- if(eed->f==0) {
+ if(eed->f2==0) {
if( (eed->v1->f & 128) || (eed->v2->f & 128) ) {
remedge(eed);
@@ -249,7 +251,7 @@ short removedoublesflag(short flag, float limit) /* return amount */
if(eed->v2->f & 128) eed->v2= eed->v2->vn;
e1= addedgelist(eed->v1, eed->v2, eed);
- if(e1) e1->f= 1;
+ if(e1) e1->f2= 1;
if(e1!=eed) free_editedge(eed);
}
}
@@ -258,15 +260,15 @@ short removedoublesflag(short flag, float limit) /* return amount */
/* first count amount of test faces */
efa= (struct EditFace *)em->faces.first;
- aantal= 0;
+ amount= 0;
while(efa) {
- efa->f= 0;
- if(efa->v1->f & 128) efa->f= 1;
- else if(efa->v2->f & 128) efa->f= 1;
- else if(efa->v3->f & 128) efa->f= 1;
- else if(efa->v4 && (efa->v4->f & 128)) efa->f= 1;
+ efa->f1= 0;
+ if(efa->v1->f & 128) efa->f1= 1;
+ else if(efa->v2->f & 128) efa->f1= 1;
+ else if(efa->v3->f & 128) efa->f1= 1;
+ else if(efa->v4 && (efa->v4->f & 128)) efa->f1= 1;
- if(efa->f==1) aantal++;
+ if(efa->f1==1) amount++;
efa= efa->next;
}
@@ -274,7 +276,7 @@ short removedoublesflag(short flag, float limit) /* return amount */
efa= (struct EditFace *)em->faces.first;
while(efa) {
nextvl= efa->next;
- if(efa->f==1) {
+ if(efa->f1==1) {
if(efa->v1->f & 128) efa->v1= efa->v1->vn;
if(efa->v2->f & 128) efa->v2= efa->v2->vn;
@@ -304,13 +306,13 @@ short removedoublesflag(short flag, float limit) /* return amount */
else {
BLI_remlink(&em->faces, efa);
free_editface(efa);
- aantal--;
+ amount--;
}
}
else {
BLI_remlink(&em->faces, efa);
free_editface(efa);
- aantal--;
+ amount--;
}
}
@@ -333,23 +335,23 @@ short removedoublesflag(short flag, float limit) /* return amount */
/* double faces: sort block */
/* count again, now all selected faces */
- aantal= 0;
+ amount= 0;
efa= em->faces.first;
while(efa) {
- efa->f= 0;
+ efa->f1= 0;
if(faceselectedAND(efa, 1)) {
- efa->f= 1;
- aantal++;
+ efa->f1= 1;
+ amount++;
}
efa= efa->next;
}
- if(aantal) {
+ if(amount) {
/* double faces: sort block */
- vsb= vlsortblock= MEM_mallocN(sizeof(struct facesort)*aantal, "sortremovedoub");
+ vsb= vlsortblock= MEM_mallocN(sizeof(struct facesort)*amount, "sortremovedoub");
efa= em->faces.first;
while(efa) {
- if(efa->f & 1) {
+ if(efa->f1 & 1) {
if(efa->v4) vsb->x= (long) MIN4( (long)efa->v1, (long)efa->v2, (long)efa->v3, (long)efa->v4);
else vsb->x= (long) MIN3( (long)efa->v1, (long)efa->v2, (long)efa->v3);
@@ -359,23 +361,23 @@ short removedoublesflag(short flag, float limit) /* return amount */
efa= efa->next;
}
- qsort(vlsortblock, aantal, sizeof(struct facesort), vergface);
+ qsort(vlsortblock, amount, sizeof(struct facesort), vergface);
vsb= vlsortblock;
- for(a=0; a<aantal; a++) {
+ for(a=0; a<amount; a++) {
efa= vsb->efa;
- if( (efa->f & 128)==0 ) {
+ if( (efa->f1 & 128)==0 ) {
vsb1= vsb+1;
- for(b=a+1; b<aantal; b++) {
+ for(b=a+1; b<amount; b++) {
/* first test: same pointer? */
if(vsb->x != vsb1->x) break;
/* second test: is test permitted? */
efa= vsb1->efa;
- if( (efa->f & 128)==0 ) {
- if( compareface(efa, vsb->efa)) efa->f |= 128;
+ if( (efa->f1 & 128)==0 ) {
+ if( compareface(efa, vsb->efa)) efa->f1 |= 128;
}
vsb1++;
@@ -390,7 +392,7 @@ short removedoublesflag(short flag, float limit) /* return amount */
efa= (struct EditFace *)em->faces.first;
while(efa) {
nextvl= efa->next;
- if(efa->f & 128) {
+ if(efa->f1 & 128) {
BLI_remlink(&em->faces, efa);
free_editface(efa);
}
@@ -423,21 +425,19 @@ void xsortvert_flag(int flag)
EditVert *eve;
struct xvertsort *sortblock, *sb;
ListBase tbase;
- int aantal;
+ int amount;
/* count */
eve= em->verts.first;
- aantal= 0;
+ amount= 0;
while(eve) {
- if(eve->f & flag) aantal++;
+ if(eve->f & flag) amount++;
eve= eve->next;
}
- if(aantal==0) return;
+ if(amount==0) return;
- undo_push_mesh("Xsort");
-
/* allocate memory and sort */
- sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*aantal,"sortremovedoub");
+ sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*amount,"sortremovedoub");
eve= em->verts.first;
while(eve) {
if(eve->f & flag) {
@@ -447,12 +447,12 @@ void xsortvert_flag(int flag)
}
eve= eve->next;
}
- qsort(sortblock, aantal, sizeof(struct xvertsort), vergxco);
+ qsort(sortblock, amount, sizeof(struct xvertsort), vergxco);
/* make temporal listbase */
tbase.first= tbase.last= 0;
sb= sortblock;
- while(aantal--) {
+ while(amount--) {
eve= sb->v1;
BLI_remlink(&em->verts, eve);
BLI_addtail(&tbase, eve);
@@ -462,6 +462,8 @@ void xsortvert_flag(int flag)
addlisttolist(&em->verts, &tbase);
MEM_freeN(sortblock);
+ BIF_undo_push("Xsort");
+
}
/* called from buttons */
@@ -472,21 +474,19 @@ void hashvert_flag(int flag)
EditVert *eve;
struct xvertsort *sortblock, *sb, onth, *newsort;
ListBase tbase;
- int aantal, a, b;
+ int amount, a, b;
/* count */
eve= em->verts.first;
- aantal= 0;
+ amount= 0;
while(eve) {
- if(eve->f & flag) aantal++;
+ if(eve->f & flag) amount++;
eve= eve->next;
}
- if(aantal==0) return;
+ if(amount==0) return;
- undo_push_mesh("Hash");
-
/* allocate memory */
- sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*aantal,"sortremovedoub");
+ sb= sortblock= (struct xvertsort *)MEM_mallocN(sizeof(struct xvertsort)*amount,"sortremovedoub");
eve= em->verts.first;
while(eve) {
if(eve->f & flag) {
@@ -499,9 +499,9 @@ void hashvert_flag(int flag)
BLI_srand(1);
sb= sortblock;
- for(a=0; a<aantal; a++, sb++) {
- b= aantal*BLI_drand();
- if(b>=0 && b<aantal) {
+ for(a=0; a<amount; a++, sb++) {
+ b= amount*BLI_drand();
+ if(b>=0 && b<amount) {
newsort= sortblock+b;
onth= *sb;
*sb= *newsort;
@@ -512,7 +512,7 @@ void hashvert_flag(int flag)
/* make temporal listbase */
tbase.first= tbase.last= 0;
sb= sortblock;
- while(aantal--) {
+ while(amount--) {
eve= sb->v1;
BLI_remlink(&em->verts, eve);
BLI_addtail(&tbase, eve);
@@ -522,6 +522,8 @@ void hashvert_flag(int flag)
addlisttolist(&em->verts, &tbase);
MEM_freeN(sortblock);
+ BIF_undo_push("Hash");
+
}
void extrude_mesh(void)
@@ -532,19 +534,15 @@ void extrude_mesh(void)
if(okee("Extrude")==0) return;
- waitcursor(1);
- undo_push_mesh("Extrude");
-
- a= extrudeflag(1,1);
- waitcursor(0);
+ a= extrudeflag(SELECT);
+
if(a==0) {
- error("No valid vertices are selected");
+ error("No valid selection");
}
else {
countall(); /* for G.totvert in calc_meshverts() */
calc_meshverts();
- transform('d');
- G.undo_edit_level--; /* to hide the transform from undo */
+ transform('n');
}
}
@@ -557,10 +555,10 @@ void split_mesh(void)
if(okee(" Split ")==0) return;
waitcursor(1);
- undo_push_mesh("Split");
+
/* make duplicate first */
- adduplicateflag(1);
- /* old faces have 3x flag 128 set, delete them */
+ adduplicateflag(SELECT);
+ /* old faces have flag 128 set, delete them */
delfaceflag(128);
waitcursor(0);
@@ -568,6 +566,8 @@ void split_mesh(void)
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Hash");
+
}
void extrude_repeat_mesh(int steps, float offs)
@@ -578,8 +578,6 @@ void extrude_repeat_mesh(int steps, float offs)
TEST_EDITMESH
waitcursor(1);
- undo_push_mesh("Extrude Repeat");
-
/* dvec */
dvec[0]= G.vd->persinv[2][0];
dvec[1]= G.vd->persinv[2][1];
@@ -595,18 +593,20 @@ void extrude_repeat_mesh(int steps, float offs)
Mat3MulVecfl(tmat, dvec);
for(a=0;a<steps;a++) {
- ok= extrudeflag(1,1);
+ ok= extrudeflag_vert(SELECT);
if(ok==0) {
error("No valid vertices are selected");
break;
}
- translateflag(1, dvec);
+ translateflag(SELECT, dvec);
}
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
waitcursor(0);
+ BIF_undo_push("Extrude Repeat");
+
}
void spin_mesh(int steps,int degr,float *dvec, int mode)
@@ -623,8 +623,6 @@ void spin_mesh(int steps,int degr,float *dvec, int mode)
waitcursor(1);
- undo_push_mesh("Spin");
-
/* imat and centre and size */
Mat3CpyMat4(bmat, G.obedit->obmat);
Mat3Inv(imat,bmat);
@@ -664,16 +662,16 @@ void spin_mesh(int steps,int degr,float *dvec, int mode)
ok= 1;
for(a=0;a<steps;a++) {
- if(mode==0) ok= extrudeflag(1,1);
- else adduplicateflag(1);
+ if(mode==0) ok= extrudeflag_vert(SELECT);
+ else adduplicateflag(SELECT);
if(ok==0) {
error("No valid vertices are selected");
break;
}
- rotateflag(1, cent, bmat);
+ rotateflag(SELECT, cent, bmat);
if(dvec) {
Mat3MulVecfl(bmat,dvec);
- translateflag(1,dvec);
+ translateflag(SELECT, dvec);
}
}
@@ -683,7 +681,7 @@ void spin_mesh(int steps,int degr,float *dvec, int mode)
eve= em->verts.first;
while(eve) {
nextve= eve->next;
- if(eve->f & 1) {
+ if(eve->f & SELECT) {
BLI_remlink(&em->verts,eve);
free_editvert(eve);
}
@@ -694,6 +692,7 @@ void spin_mesh(int steps,int degr,float *dvec, int mode)
recalc_editnormals();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Spin");
}
void screw_mesh(int steps,int turns)
@@ -711,8 +710,6 @@ void screw_mesh(int steps,int turns)
return;
}
- undo_push_mesh("Screw");
-
/* clear flags */
eve= em->verts.first;
while(eve) {
@@ -722,8 +719,8 @@ void screw_mesh(int steps,int turns)
/* edges set flags in verts */
eed= em->edges.first;
while(eed) {
- if(eed->v1->f & 1) {
- if(eed->v2->f & 1) {
+ if(eed->v1->f & SELECT) {
+ if(eed->v2->f & SELECT) {
/* watch: f1 is a byte */
if(eed->v1->f1<2) eed->v1->f1++;
if(eed->v2->f1<2) eed->v2->f1++;
@@ -764,6 +761,7 @@ void screw_mesh(int steps,int turns)
spin_mesh(turns*steps, turns*360, dvec, 0);
+ BIF_undo_push("Spin");
}
@@ -774,7 +772,7 @@ static void erase_edges(ListBase *l)
ed = (EditEdge *) l->first;
while(ed) {
nexted= ed->next;
- if( (ed->v1->f & 1) || (ed->v2->f & 1) ) {
+ if( (ed->v1->f & SELECT) || (ed->v2->f & SELECT) ) {
remedge(ed);
free_editedge(ed);
}
@@ -790,7 +788,7 @@ static void erase_faces(ListBase *l)
while(f) {
nextf= f->next;
- if( faceselectedOR(f, 1) ) {
+ if( faceselectedOR(f, SELECT) ) {
BLI_remlink(l, f);
free_editface(f);
}
@@ -821,6 +819,7 @@ void delete_mesh(void)
EditEdge *eed,*nexted;
short event;
int count;
+ char *str="Erase";
TEST_EDITMESH
@@ -828,22 +827,22 @@ void delete_mesh(void)
if(event<1) return;
if(event==10 ) {
- undo_push_mesh("Erase Vertices");
+ str= "Erase Vertices";
erase_edges(&em->edges);
erase_faces(&em->faces);
erase_vertices(&em->verts);
}
else if(event==4) {
- undo_push_mesh("Erase Edges & Faces");
+ str= "Erase Edges & Faces";
efa= em->faces.first;
while(efa) {
nextvl= efa->next;
/* delete only faces with 2 or more vertices selected */
count= 0;
- if(efa->v1->f & 1) count++;
- if(efa->v2->f & 1) count++;
- if(efa->v3->f & 1) count++;
- if(efa->v4 && (efa->v4->f & 1)) count++;
+ if(efa->v1->f & SELECT) count++;
+ if(efa->v2->f & SELECT) count++;
+ if(efa->v3->f & SELECT) count++;
+ if(efa->v4 && (efa->v4->f & SELECT)) count++;
if(count>1) {
BLI_remlink(&em->faces, efa);
free_editface(efa);
@@ -853,7 +852,7 @@ void delete_mesh(void)
eed= em->edges.first;
while(eed) {
nexted= eed->next;
- if( (eed->v1->f & 1) && (eed->v2->f & 1) ) {
+ if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) {
remedge(eed);
free_editedge(eed);
}
@@ -863,10 +862,10 @@ void delete_mesh(void)
while(efa) {
nextvl= efa->next;
event=0;
- if( efa->v1->f & 1) event++;
- if( efa->v2->f & 1) event++;
- if( efa->v3->f & 1) event++;
- if(efa->v4 && (efa->v4->f & 1)) event++;
+ if( efa->v1->f & SELECT) event++;
+ if( efa->v2->f & SELECT) event++;
+ if( efa->v3->f & SELECT) event++;
+ if(efa->v4 && (efa->v4->f & SELECT)) event++;
if(event>1) {
BLI_remlink(&em->faces, efa);
@@ -876,11 +875,11 @@ void delete_mesh(void)
}
}
else if(event==1) {
- undo_push_mesh("Erase Edges");
+ str= "Erase Edges";
eed= em->edges.first;
while(eed) {
nexted= eed->next;
- if( (eed->v1->f & 1) && (eed->v2->f & 1) ) {
+ if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) {
remedge(eed);
free_editedge(eed);
}
@@ -890,10 +889,10 @@ void delete_mesh(void)
while(efa) {
nextvl= efa->next;
event=0;
- if( efa->v1->f & 1) event++;
- if( efa->v2->f & 1) event++;
- if( efa->v3->f & 1) event++;
- if(efa->v4 && (efa->v4->f & 1)) event++;
+ if( efa->v1->f & SELECT) event++;
+ if( efa->v2->f & SELECT) event++;
+ if( efa->v3->f & SELECT) event++;
+ if(efa->v4 && (efa->v4->f & SELECT)) event++;
if(event>1) {
BLI_remlink(&em->faces, efa);
@@ -904,8 +903,8 @@ void delete_mesh(void)
/* to remove loose vertices: */
eed= em->edges.first;
while(eed) {
- if( eed->v1->f & 1) eed->v1->f-=1;
- if( eed->v2->f & 1) eed->v2->f-=1;
+ if( eed->v1->f & SELECT) eed->v1->f-=SELECT;
+ if( eed->v2->f & SELECT) eed->v2->f-=SELECT;
eed= eed->next;
}
eve= em->verts.first;
@@ -920,17 +919,17 @@ void delete_mesh(void)
}
else if(event==2) {
- undo_push_mesh("Erase Faces");
- delfaceflag(1);
+ str="Erase Faces";
+ delfaceflag(SELECT);
}
else if(event==3) {
- undo_push_mesh("Erase All");
+ str= "Erase All";
if(em->verts.first) free_vertlist(&em->verts);
if(em->edges.first) free_edgelist(&em->edges);
if(em->faces.first) free_facelist(&em->faces);
}
else if(event==5) {
- undo_push_mesh("Erase Only Faces");
+ str= "Erase Only Faces";
efa= em->faces.first;
while(efa) {
nextvl= efa->next;
@@ -945,6 +944,7 @@ void delete_mesh(void)
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push(str);
}
@@ -962,12 +962,10 @@ void fill_mesh(void)
waitcursor(1);
- undo_push_mesh("Fill");
-
/* copy all selected vertices */
eve= em->verts.first;
while(eve) {
- if(eve->f & 1) {
+ if(eve->f & SELECT) {
v1= BLI_addfillvert(eve->co);
eve->vn= v1;
v1->vn= eve;
@@ -978,7 +976,7 @@ void fill_mesh(void)
/* copy all selected edges */
eed= em->edges.first;
while(eed) {
- if( (eed->v1->f & 1) && (eed->v2->f & 1) ) {
+ if( (eed->v1->f & SELECT) && (eed->v2->f & SELECT) ) {
e1= BLI_addfilledge(eed->v1->vn, eed->v2->vn);
e1->v1->h++;
e1->v2->h++;
@@ -1037,6 +1035,7 @@ void fill_mesh(void)
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Fill");
}
@@ -1328,8 +1327,8 @@ void subdivideflag(int flag, float rad, int beauty)
/* edgeflags */
eed= em->edges.first;
while((eed) && !(beauty & B_KNIFE)) {
- if( (eed->v1->f & flag) && (eed->v2->f & flag) ) eed->f= flag;
- else eed->f= 0;
+ if( (eed->v1->f & flag) && (eed->v2->f & flag) ) eed->f2= flag;
+ else eed->f2= 0;
eed= eed->next;
}
@@ -1343,22 +1342,22 @@ void subdivideflag(int flag, float rad, int beauty)
/* area */
len1= AreaQ3Dfl(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
if(len1 <= doublimit) {
- efa->e1->f = 0;
- efa->e2->f = 0;
- efa->e3->f = 0;
- efa->e4->f = 0;
+ efa->e1->f2 = 0;
+ efa->e2->f2 = 0;
+ efa->e3->f2 = 0;
+ efa->e4->f2 = 0;
}
else {
len1= VecLenf(efa->v1->co, efa->v2->co) + VecLenf(efa->v3->co, efa->v4->co);
len2= VecLenf(efa->v2->co, efa->v3->co) + VecLenf(efa->v1->co, efa->v4->co);
if(len1 < len2) {
- efa->e1->f = 0;
- efa->e3->f = 0;
+ efa->e1->f2 = 0;
+ efa->e3->f2 = 0;
}
else if(len1 > len2) {
- efa->e2->f = 0;
- efa->e4->f = 0;
+ efa->e2->f2 = 0;
+ efa->e4->f2 = 0;
}
}
}
@@ -1366,9 +1365,9 @@ void subdivideflag(int flag, float rad, int beauty)
/* area */
len1= AreaT3Dfl(efa->v1->co, efa->v2->co, efa->v3->co);
if(len1 <= doublimit) {
- efa->e1->f = 0;
- efa->e2->f = 0;
- efa->e3->f = 0;
+ efa->e1->f2 = 0;
+ efa->e2->f2 = 0;
+ efa->e3->f2 = 0;
}
else {
len1= VecLenf(efa->v1->co, efa->v2->co) ;
@@ -1376,13 +1375,13 @@ void subdivideflag(int flag, float rad, int beauty)
len3= VecLenf(efa->v3->co, efa->v1->co) ;
if(len1<len2 && len1<len3) {
- efa->e1->f = 0;
+ efa->e1->f2 = 0;
}
else if(len2<len3 && len2<len1) {
- efa->e2->f = 0;
+ efa->e2->f2 = 0;
}
else if(len3<len2 && len3<len1) {
- efa->e3->f = 0;
+ efa->e3->f2 = 0;
}
}
}
@@ -1400,7 +1399,7 @@ void subdivideflag(int flag, float rad, int beauty)
/* make new normal and put in edge, clear flag! needed for face creation part below */
eed= em->edges.first;
while(eed) {
- if(eed->f & flag) {
+ if(eed->f2 & flag) {
/* Subdivide percentage is stored in 1/32768ths in eed->f1 */
if (beauty & B_PERCENTSUBD) percent=(float)(eed->f1)/32768.0;
else percent=0.5;
@@ -1434,7 +1433,7 @@ void subdivideflag(int flag, float rad, int beauty)
}
else eed->vn= 0;
- eed->f= 0; /* needed! */
+ eed->f2= 0; /* needed! */
eed= eed->next;
}
@@ -1455,28 +1454,28 @@ void subdivideflag(int flag, float rad, int beauty)
test= 0;
if(e1 && e1->vn) {
test+= 1;
- e1->f= 1;
+ e1->f2= 1;
/* add edges here, to copy correct edge data */
eed= addedgelist(e1->v1, e1->vn, e1);
eed= addedgelist(e1->vn, e1->v2, e1);
}
if(e2 && e2->vn) {
test+= 2;
- e2->f= 1;
+ e2->f2= 1;
/* add edges here, to copy correct edge data */
eed= addedgelist(e2->v1, e2->vn, e2);
eed= addedgelist(e2->vn, e2->v2, e2);
}
if(e3 && e3->vn) {
test+= 4;
- e3->f= 1;
+ e3->f2= 1;
/* add edges here, to copy correct edge data */
eed= addedgelist(e3->v1, e3->vn, e3);
eed= addedgelist(e3->vn, e3->v2, e3);
}
if(e4 && e4->vn) {
test+= 8;
- e4->f= 1;
+ e4->f2= 1;
/* add edges here, to copy correct edge data */
eed= addedgelist(e4->v1, e4->vn, e4);
eed= addedgelist(e4->vn, e4->v2, e4);
@@ -1716,7 +1715,7 @@ void subdivideflag(int flag, float rad, int beauty)
nexted= eed->next;
if( eed->vn ) {
eed->vn->f |= 16;
- if(eed->f==0) { /* not used in face */
+ if(eed->f2==0) { /* not used in face */
addedgelist(eed->v1, eed->vn, eed);
addedgelist(eed->vn, eed->v2, eed);
}
@@ -1725,6 +1724,10 @@ void subdivideflag(int flag, float rad, int beauty)
}
eed= nexted;
}
+
+ /* since this is all on vertex level, flush vertex selection */
+ EM_select_flush();
+
countall();
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
@@ -1748,7 +1751,7 @@ typedef EVPtr EVPTuple[2];
/** builds EVPTuple array efaa of face tuples (in fact pointers to EditFaces)
sharing one edge.
arguments: selected edge list, face list.
- Edges will also be tagged accordingly (see eed->f) */
+ Edges will also be tagged accordingly (see eed->f2) */
static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa)
{
@@ -1758,7 +1761,7 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa)
/* run through edges, if selected, set pointer edge-> facearray */
while(eed) {
- eed->f= 0;
+ eed->f2= 0;
eed->f1= 0;
if( (eed->v1->f & 1) && (eed->v2->f & 1) ) {
eed->vn= (EditVert *) (&efaa[i]);
@@ -1771,7 +1774,7 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa)
/* find edges pointing to 2 faces by procedure:
- run through faces and their edges, increase
- face counter e->f for each face
+ face counter e->f1 for each face
*/
while(efa) {
@@ -1782,26 +1785,26 @@ static int collect_quadedges(EVPTuple *efaa, EditEdge *eed, EditFace *efa)
e1= efa->e1;
e2= efa->e2;
e3= efa->e3;
- if(e1->f<3) {
- if(e1->f<2) {
+ if(e1->f2<3) {
+ if(e1->f2<2) {
evp= (EVPtr *) e1->vn;
- evp[(int)e1->f]= efa;
+ evp[(int)e1->f2]= efa;
}
- e1->f+= 1;
+ e1->f2+= 1;
}
- if(e2->f<3) {
- if(e2->f<2) {
+ if(e2->f2<3) {
+ if(e2->f2<2) {
evp= (EVPtr *) e2->vn;
- evp[(int)e2->f]= efa;
+ evp[(int)e2->f2]= efa;
}
- e2->f+= 1;
+ e2->f2+= 1;
}
- if(e3->f<3) {
- if(e3->f<2) {
+ if(e3->f2<3) {
+ if(e3->f2<2) {
evp= (EVPtr *) e3->vn;
- evp[(int)e3->f]= efa;
+ evp[(int)e3->f2]= efa;
}
- e3->f+= 1;
+ e3->f2+= 1;
}
}
}
@@ -1924,10 +1927,10 @@ if(efa1->v1== *v2) {
static void untag_edges(EditFace *f)
{
- f->e1->f = 0;
- f->e2->f = 0;
- if (f->e3) f->e3->f = 0;
- if (f->e4) f->e4->f = 0;
+ f->e1->f2 = 0;
+ f->e2->f2 = 0;
+ if (f->e3) f->e3->f2 = 0;
+ if (f->e4) f->e4->f2 = 0;
}
/** remove and free list of tagged edges */
@@ -1989,8 +1992,6 @@ void beauty_fill(void)
if(okee("Beautify fill")==0) return;
- undo_push_mesh("Beauty Fill");
-
/* temp block with face pointers */
efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "beautyfill");
@@ -2006,7 +2007,7 @@ void beauty_fill(void)
while(eed) {
nexted= eed->next;
- if(eed->f==2) {
+ if(eed->f2==2) {
efaa = (EVPtr *) eed->vn;
@@ -2129,6 +2130,7 @@ void beauty_fill(void)
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Beauty Fill");
}
@@ -2153,8 +2155,6 @@ void join_triangles(void)
totedge = count_edges(em->edges.first);
if(totedge==0) return;
- undo_push_mesh("Convert Triangles to Quads");
-
efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "jointris");
ok = collect_quadedges(efaar, em->edges.first, em->faces.first);
@@ -2166,7 +2166,7 @@ void join_triangles(void)
while(eed) {
nexted= eed->next;
- if(eed->f==2) { /* points to 2 faces */
+ if(eed->f2==2) { /* points to 2 faces */
efaa= (EVPtr *) eed->vn;
@@ -2220,7 +2220,7 @@ void join_triangles(void)
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
-
+ BIF_undo_push("Convert Triangles to Quads");
}
/* quick hack, basically a copy of beauty_fill */
@@ -2249,8 +2249,6 @@ void edge_flip(void)
totedge = count_edges(em->edges.first);
if(totedge==0) return;
- undo_push_mesh("Flip Triangle Edges");
-
/* temporary array for : edge -> face[1], face[2] */
efaar= (EVPTuple *) MEM_callocN(totedge * sizeof(EVPTuple), "edgeflip");
@@ -2260,7 +2258,7 @@ void edge_flip(void)
while(eed) {
nexted= eed->next;
- if(eed->f==2) { /* points to 2 faces */
+ if(eed->f2==2) { /* points to 2 faces */
efaa= (EVPtr *) eed->vn;
@@ -2330,9 +2328,12 @@ void edge_flip(void)
allqueue(REDRAWVIEW3D, 0);
makeDispList(G.obedit);
+ BIF_undo_push("Flip Triangle Edges");
+
}
-static void edge_rotate(EditEdge *eed){
+static void edge_rotate(EditEdge *eed)
+{
EditMesh *em = G.editMesh;
EditFace *face[2], *efa, *newFace[2];
EditVert *faces[2][4],*v1,*v2,*v3,*v4,*vtemp;
@@ -2555,9 +2556,9 @@ static void edge_rotate(EditEdge *eed){
}
if(fac1 == 3)
- newFace[0]->e3->f |= 2;
+ newFace[0]->e3->f2 |= 2;
else if(fac1 == 4)
- newFace[0]->e4->f |= 2;
+ newFace[0]->e4->f2 |= 2;
/* mark the f1's of the verts for re-selection */
@@ -2576,20 +2577,19 @@ static void edge_rotate(EditEdge *eed){
}
-void edge_rotate_selected(){
+void edge_rotate_selected()
+{
EditEdge *eed,*temp;
EditVert *ev;
short edgeCount = 0;
- undo_push_mesh("Rotate Edges");
-
/* Clear the f1 flag */
for(ev = G.editMesh->verts.first;ev;ev = ev->next)
ev->f1 &= ~1;
/*clear new flag for new edges*/
for(eed = G.editMesh->edges.first;eed;eed = eed->next){
- eed->f &= ~2;
+ eed->f2 &= ~2;
edgeCount++;
}
eed = G.editMesh->edges.first;
@@ -2598,7 +2598,7 @@ void edge_rotate_selected(){
/* To prevent an infinite loop */
break;
}
- if(eed->f & 2){
+ if(eed->f2 & 2){
/* Do not rotate newly created edges */
eed = eed->next;
continue;
@@ -2623,11 +2623,14 @@ void edge_rotate_selected(){
/*clear new edge flags*/
for(eed = G.editMesh->edges.first; eed; eed = eed->next)
- eed->f &= ~2;
-
- force_draw_all();
- screen_swapbuffers();
- return;
+ eed->f2 &= ~2;
+
+ /* flush selected vertices to edges/faces */
+ EM_select_flush();
+
+ allqueue(REDRAWVIEW3D, 0);
+
+ BIF_undo_push("Rotate Edges");
}
/******************* BEVEL CODE STARTS HERE ********************/
@@ -2941,6 +2944,7 @@ void bevel_mesh(float bsize, int allfaces)
/* tag all original faces */
efa= em->faces.first;
while (efa) {
+ efa->f1= 0;
if (faceselectedAND(efa, 1)||allfaces) {
efa->f1= 1;
efa->v1->f |= 128;
@@ -3059,7 +3063,7 @@ void bevel_mesh(float bsize, int allfaces)
eed= em->edges.first;
while(eed) {
- eed->f= eed->f1= 0;
+ eed->f2= eed->f1= 0;
if ( ((eed->v1->f & eed->v2->f) & 1) || allfaces) eed->f1 |= 4; /* original edges */
eed->vn= 0;
eed= eed->next;
@@ -3135,7 +3139,7 @@ void bevel_mesh(float bsize, int allfaces)
eed= em->edges.first;
while(eed) {
- eed->f= eed->f1= 0;
+ eed->f2= eed->f1= 0;
eed->f1= 0;
eed->v1->f1 &= ~1;
eed->v2->f1 &= ~1;
@@ -3309,6 +3313,9 @@ void bevel_mesh(float bsize, int allfaces)
removedoublesflag(1, limit);
+ /* flush selected vertices to edges/faces */
+ EM_select_flush();
+
#undef BEV_DEBUG
}
@@ -3434,10 +3441,10 @@ void bevel_menu()
}
if (Canceled==0) {
SetBlenderCursor(BC_WAITCURSOR);
- undo_push_mesh("Bevel");
bevel_mesh_recurs(drawd/fac, recurs, 1);
righthandfaces(1);
SetBlenderCursor(SYSCURSOR);
+ BIF_undo_push("Bevel");
}
}
diff --git a/source/blender/src/editmode_undo.c b/source/blender/src/editmode_undo.c
new file mode 100644
index 00000000000..4898c15d669
--- /dev/null
+++ b/source/blender/src/editmode_undo.c
@@ -0,0 +1,329 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+#include "BLI_winstuff.h"
+#endif
+#include "MEM_guardedalloc.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
+
+#include "BKE_displist.h"
+#include "BKE_global.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "BLI_editVert.h"
+#include "BLI_dynstr.h"
+
+#include "BKE_utildefines.h"
+
+#include "BIF_editmesh.h"
+#include "BIF_interface.h"
+#include "BIF_screen.h"
+#include "BIF_resources.h"
+#include "BIF_toolbox.h"
+#include "BIF_space.h"
+
+#include "BDR_editcurve.h"
+
+#include "BSE_edit.h"
+
+#include "mydevice.h"
+
+/* ***************** generic editmode undo system ********************* */
+/*
+
+Add this in your local code:
+
+void undo_editmode_push(char *name,
+ void (*freedata)(void *), // pointer to function freeing data
+ void (*to_editmode)(void *), // data to editmode conversion
+ void * (*from_editmode)(void)) // editmode to data conversion
+
+
+Further exported for UI is:
+
+void undo_editmode_step(int step); // undo and redo
+void undo_editmode_clear(void) // free & clear all data
+void undo_editmode_menu(void) // history menu
+
+
+*/
+/* ********************************************************************* */
+
+
+#define MAXUNDONAME 64
+typedef struct UndoElem {
+ struct UndoElem *next, *prev;
+ Object *ob;
+ void *undodata;
+ char name[MAXUNDONAME];
+ void (*freedata)(void *);
+ void (*to_editmode)(void *);
+ void * (*from_editmode)(void);
+} UndoElem;
+
+static ListBase undobase={NULL, NULL};
+static UndoElem *curundo= NULL;
+
+
+/* ********************* xtern api calls ************* */
+
+static void undo_restore(UndoElem *undo)
+{
+ if(undo) {
+ waitcursor(1);
+ undo->to_editmode(undo->undodata); // also frees editmode itself
+ waitcursor(0);
+
+ countall();
+ }
+}
+
+/* name can be a dynamic string */
+void undo_editmode_push(char *name, void (*freedata)(void *),
+ void (*to_editmode)(void *), void *(*from_editmode)(void))
+{
+ UndoElem *uel;
+ int nr;
+
+ /* prevent two same undocalls */
+ if(curundo && strcmp("Original", name)==0) {
+ if(curundo->ob==G.obedit) {
+ return;
+ }
+ }
+ /* remove all undos after (also when curundo==NULL) */
+ while(undobase.last != curundo) {
+ uel= undobase.last;
+ BLI_remlink(&undobase, uel);
+ uel->freedata(uel->undodata);
+ MEM_freeN(uel);
+ }
+
+ /* make new */
+ curundo= uel= MEM_callocN(sizeof(UndoElem), "undo file");
+ strncpy(uel->name, name, MAXUNDONAME-1);
+ BLI_addtail(&undobase, uel);
+
+ uel->freedata= freedata;
+ uel->to_editmode= to_editmode;
+ uel->from_editmode= from_editmode;
+
+ /* and limit amount to the maximum */
+ nr= 0;
+ uel= undobase.last;
+ while(uel) {
+ nr++;
+ if(nr==U.undosteps) break;
+ uel= uel->prev;
+ }
+ if(uel) {
+ while(undobase.first!=uel) {
+ UndoElem *first= undobase.first;
+ BLI_remlink(&undobase, first);
+ uel->freedata(uel->undodata);
+ MEM_freeN(first);
+ }
+ }
+
+ /* copy */
+ curundo->undodata= curundo->from_editmode();
+
+ curundo->ob= G.obedit;
+}
+
+
+/* helper to remove clean other objects from undo stack */
+static void undo_clean_stack(void)
+{
+ UndoElem *uel, *next;
+ int mixed= 0;
+
+ uel= undobase.first;
+ while(uel) {
+ next= uel->next;
+ if(uel->ob!=G.obedit) {
+ mixed= 1;
+ BLI_remlink(&undobase, uel);
+ uel->freedata(uel->undodata);
+ MEM_freeN(uel);
+ }
+ uel= next;
+ }
+
+ if(mixed) curundo= undobase.last;
+}
+
+/* 1= an undo, -1 is a redo. we have to make sure 'curundo' remains at current situation */
+void undo_editmode_step(int step)
+{
+
+ /* prevent undo to happen on wrong object, stack can be a mix */
+ undo_clean_stack();
+
+ if(step==0) {
+ undo_restore(curundo); // if NULL, reloads editmesh
+ }
+ else if(step==1) {
+
+ if(curundo==NULL || curundo->prev==NULL) error("No more steps to undo");
+ else {
+ printf("undo %s\n", curundo->name);
+ curundo= curundo->prev;
+ undo_restore(curundo); // if NULL, reloads editmesh
+ }
+ }
+ else {
+ /* curundo has to remain current situation! */
+
+ if(curundo==NULL || curundo->next==NULL) error("No more steps to redo");
+ else {
+ undo_restore(curundo->next);
+ curundo= curundo->next;
+ printf("redo %s\n", curundo->name);
+ }
+ }
+
+ makeDispList(G.obedit);
+ // type specific redraw events...
+ if(G.obedit->type==OB_CURVE) curve_changes_other_objects(G.obedit);
+
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSEDIT, 0);
+ allqueue(REDRAWIMAGE, 0);
+}
+
+void undo_editmode_clear(void)
+{
+ UndoElem *uel;
+
+ uel= undobase.first;
+ while(uel) {
+ uel->freedata(uel->undodata);
+ uel= uel->next;
+ }
+ BLI_freelistN(&undobase);
+ curundo= NULL;
+}
+
+/* based on index nr it does a restore */
+static void undo_number(int nr)
+{
+ UndoElem *uel;
+ int a=1;
+
+ for(uel= undobase.first; uel; uel= uel->next, a++) {
+ if(a==nr) break;
+ }
+ curundo= uel;
+ undo_editmode_step(0);
+}
+
+/* ************** for interaction with menu/pullown */
+
+void undo_editmode_menu(void)
+{
+ UndoElem *uel;
+ DynStr *ds= BLI_dynstr_new();
+ short event;
+ char *menu;
+
+ undo_clean_stack(); // removes other objects from it
+
+ BLI_dynstr_append(ds, "Undo History %t");
+
+ for(uel= undobase.first; uel; uel= uel->next) {
+ BLI_dynstr_append(ds, "|");
+ BLI_dynstr_append(ds, uel->name);
+ }
+
+ menu= BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ event= pupmenu_col(menu, 20);
+ MEM_freeN(menu);
+
+ if(event>0) undo_number(event);
+}
+
+static void do_editmode_undohistorymenu(void *arg, int event)
+{
+
+ if(G.obedit==NULL || event<1) return;
+
+ if (event==1) {
+ if(G.obedit->type==OB_MESH) remake_editMesh();
+ }
+ else undo_number(event-1);
+
+ allqueue(REDRAWVIEW3D, 0);
+}
+
+uiBlock *editmode_undohistorymenu(void *arg_unused)
+{
+ uiBlock *block;
+ UndoElem *uel;
+ short yco = 20, menuwidth = 120;
+ short item=2;
+
+ block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_undohistorymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_editmode_undohistorymenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo All Changes|Ctrl U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
+
+ for(uel= undobase.first; uel; uel= uel->next, item++) {
+ if (uel==curundo) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, uel->name, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, (float)item, "");
+ }
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+ return block;
+}
+
+
diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c
index 02db911e1aa..5a5775daea8 100644
--- a/source/blender/src/editobject.c
+++ b/source/blender/src/editobject.c
@@ -1479,7 +1479,7 @@ void exit_editmode(int freedata) /* freedata==0 at render, 1= freedata, 2= do un
}
load_editMesh(); /* makes new displist */
- if(freedata) free_editMesh();
+ if(freedata) free_editMesh(G.editMesh);
if(G.f & G_FACESELECT) {
set_seamtface();
@@ -1982,26 +1982,26 @@ void special_editmenu(void)
switch(nr) {
case 1:
- undo_push_mesh("Subdivide");
subdivideflag(1, 0.0, editbutflag);
+ BIF_undo_push("Subdivide");
break;
case 2:
randfac= 10;
if(button(&randfac, 1, 100, "Rand fac:")==0) return;
fac= -( (float)randfac )/100;
- undo_push_mesh("Subdivide Fractal");
subdivideflag(1, fac, editbutflag);
+ BIF_undo_push("Subdivide Fractal");
break;
case 3:
- undo_push_mesh("Subdivide Smooth");
subdivideflag(1, 0.0, editbutflag | B_SMOOTH);
+ BIF_undo_push("Subdivide Smooth");
break;
case 4:
mergemenu();
break;
case 5:
- undo_push_mesh("Remove Doubles");
notice("Removed %d Vertices", removedoublesflag(1, doublimit));
+ BIF_undo_push("Remove Doubles");
break;
case 6:
hide_mesh(0);
@@ -2013,11 +2013,10 @@ void special_editmenu(void)
selectswap_mesh();
break;
case 9:
- undo_push_mesh("Flip Normals");
flip_editnormals();
+ BIF_undo_push("Flip Normals");
break;
case 10:
- undo_push_mesh("Smooth");
vertexsmooth();
break;
case 11:
@@ -3884,10 +3883,11 @@ void make_trans_verts(float *min, float *max, int mode)
eve= em->verts.first;
while(eve) {
if(eve->h==0) {
- if(mode==1 || (eve->f & 1)) {
+ if(mode==1 || (eve->f & SELECT)) {
VECCOPY(tv->oldloc, eve->co);
tv->loc= eve->co;
- tv->nor= eve->no;
+ if(eve->no[0]!=0.0 || eve->no[1]!=0.0 ||eve->no[2]!=0.0)
+ tv->nor= eve->no;
tv->flag= eve->f & 1;
tv++;
tottrans++;
@@ -4081,6 +4081,9 @@ void special_trans_update(int keyflags)
IpoCurve *icu;
if(G.obedit) {
+ if(G.obedit->type==OB_MESH) {
+ recalc_editnormals(); // does face centers too
+ }
if(G.obedit->type==OB_CURVE) {
cu= G.obedit->data;
@@ -4887,12 +4890,14 @@ static char *transform_mode_to_string(int mode)
case 'N': return("Shrink/Fatten"); break;
case 'w': return("Warp"); break;
case 'd': return("Duplicate"); break;
+ case 'n': return("Extrude"); break;
default: return("Transform");
}
}
/*
'g' 'G' -> Grab / Grab with PET
+'n' -> Grab with vert normal (after extrude)
'r' 'R' -> Rotate / Rotate with PET
's' 'C' -> Scale / Scale with PET
'S' -> Shear
@@ -4916,7 +4921,7 @@ void transform(int mode)
int axismode=0, time, fast=0, a, midtog=0, firsttime=1, wrong= 0, cameragrab= 0, gridflag;
unsigned short event=0;
short mval[2], breakloop=0, doit, xn, yn, xc, yc, xo, yo = 0, val;
- char str[100];
+ char str[100], *undostr;
int keyflags = 0;
float addvec[3] = {0,0,0}; // for new typing code
@@ -4946,7 +4951,10 @@ void transform(int mode)
mode = 'r';
else if (mode % 's' == 0)
mode = 's';
-
+
+ /* used in end of function */
+ undostr= transform_mode_to_string(mode);
+
if(G.obedit && (G.f & G_PROPORTIONAL)) {
if(mode=='g') mode= 'G';
if(mode=='r') mode= 'R';
@@ -4966,13 +4974,6 @@ void transform(int mode)
}
if(mode=='w' && G.obedit==0) return;
- if (G.obedit) {
- if(G.obedit->type == OB_MESH)
- undo_push_mesh(transform_mode_to_string(mode));
- else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
- undo_push_curve(transform_mode_to_string(mode));
- }
-
/* what data will be involved? */
if(G.obedit) {
if(mode=='N') vertexnormals(0);
@@ -5170,7 +5171,7 @@ void transform(int mode)
}
firsttime= 0;
- if(mode=='g' || mode=='G') {
+ if(mode=='g' || mode=='G' || mode=='n') {
char gmode[10] = "";
keyflags |= KEYFLAG_LOC;
@@ -5277,6 +5278,14 @@ void transform(int mode)
tv->loc[1]= tv->oldloc[1]+tv->fac*dvecp[1];
tv->loc[2]= tv->oldloc[2]+tv->fac*dvecp[2];
}
+ else if(mode=='n' && tv->nor) {
+ float dot; /* dot product dvec with normal */
+
+ dot= tv->nor[0]*dvecp[0] + tv->nor[1]*dvecp[1] + tv->nor[2]*dvecp[2];
+ tv->loc[0]= tv->oldloc[0]+dot*tv->nor[0];
+ tv->loc[1]= tv->oldloc[1]+dot*tv->nor[1];
+ tv->loc[2]= tv->oldloc[2]+dot*tv->nor[2];
+ }
else VecAddf(tv->loc, tv->oldloc, dvecp);
}
@@ -6504,7 +6513,6 @@ void transform(int mode)
if(event==ESCKEY || event==RIGHTMOUSE) {
canceled=1;
- G.undo_edit_level--;
if(edge_creases) { // exception case, edges dont fit in Trans structs...
EditEdge *ee;
@@ -6553,8 +6561,8 @@ void transform(int mode)
tottrans= 0;
/* undo after transform, since it's storing current situations */
- if(canceled==0 && G.obedit==NULL)
- BIF_undo_push(transform_mode_to_string(mode));
+ if(canceled==0)
+ BIF_undo_push(undostr);
}
void std_rmouse_transform(void (*xf_func)(int))
@@ -6588,8 +6596,8 @@ void std_rmouse_transform(void (*xf_func)(int))
}
}
}
- /* if gets here it's a select, later on remove obedit check */
- if(G.obedit==NULL) BIF_undo_push("Select");
+ /* if gets here it's a select */
+ BIF_undo_push("Select");
}
void rightmouse_transform(void)
@@ -7824,10 +7832,6 @@ void mirror_edit(short mode)
float mat[3][3], imat[3][3], min[3], max[3];
TransVert *tv;
- if(G.obedit->type==OB_MESH) undo_push_mesh("Mirror"); /* If it's a mesh, push it down the undo pipe */
- else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
- undo_push_curve("Mirror");
-
make_trans_verts(min, max, 0);
Mat3CpyMat4(mat, G.obedit->obmat);
// Inverting the matrix explicitly, since the inverse is not always correct (then why the heck are we keeping it!)
@@ -7947,11 +7951,13 @@ void mirror_edit(short mode)
clearbaseflags_for_editing();
if(transvmain) MEM_freeN(transvmain);
transvmain= 0;
-
tottrans= 0;
+
+ BIF_undo_push("Mirror");
}
-void mirror_object(short mode) {
+void mirror_object(short mode)
+{
TransOb *tob;
short a, axis;
float off[3], imat[3][3];
@@ -8011,7 +8017,8 @@ void mirror_object(short mode) {
tottrans= 0;
}
-void mirrormenu(void){
+void mirrormenu(void)
+{
short mode = 0;
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index 747aa18c671..727989908ed 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -93,6 +93,7 @@
#include "BSE_drawview.h"
#include "BSE_editaction.h"
+#include "editmesh.h" // borderselect uses it...
#include "blendef.h"
#include "mydevice.h"
@@ -670,20 +671,57 @@ void mouse_select(void)
}
/* ------------------------------------------------------------------------- */
+
+static int edge_fully_inside_rect(rcti rect, short x1, short y1, short x2, short y2)
+{
+
+ // check points in rect
+ if(rect.xmin<x1 && rect.xmax>x1 && rect.ymin<y1 && rect.ymax>y1)
+ if(rect.xmin<x2 && rect.xmax>x2 && rect.ymin<y2 && rect.ymax>y2) return 1;
+
+ return 0;
+
+}
+
+
+static int edge_inside_rect(rcti rect, short x1, short y1, short x2, short y2)
+{
+ int d1, d2, d3, d4;
+
+ // check points in rect
+ if(rect.xmin<x1 && rect.xmax>x1 && rect.ymin<y1 && rect.ymax>y1) return 1;
+ if(rect.xmin<x2 && rect.xmax>x2 && rect.ymin<y2 && rect.ymax>y2) return 1;
+
+ /* check points completely out rect */
+ if(x1<rect.xmin && x2<rect.xmin) return 0;
+ if(x1>rect.xmax && x2>rect.xmax) return 0;
+ if(y1<rect.ymin && y2<rect.ymin) return 0;
+ if(y1>rect.ymax && y2>rect.ymax) return 0;
+
+ // simple check lines intersecting.
+ d1= (y1-y2)*(x1- rect.xmin ) + (x2-x1)*(y1- rect.ymin );
+ d2= (y1-y2)*(x1- rect.xmin ) + (x2-x1)*(y1- rect.ymax );
+ d3= (y1-y2)*(x1- rect.xmax ) + (x2-x1)*(y1- rect.ymax );
+ d4= (y1-y2)*(x1- rect.xmax ) + (x2-x1)*(y1- rect.ymin );
+
+ if(d1<0 && d2<0 && d3<0 && d4<0) return 0;
+ if(d1>0 && d2>0 && d3>0 && d4>0) return 0;
+
+ return 1;
+}
+
/**
* Does the 'borderselect' command. (Select verts based on selecting with a
* border: key 'b'). All selecting seems to be done in the get_border part.
*/
void borderselect(void)
{
- EditMesh *em = G.editMesh;
rcti rect;
Base *base;
Nurb *nu;
BezTriple *bezt;
BPoint *bp;
MetaElem *ml;
- struct EditVert *eve;
unsigned int buffer[MAXPICKBUF];
int a, index;
short hits, val, tel;
@@ -725,22 +763,61 @@ void borderselect(void)
allqueue(REDRAWVIEW3D, 0);
}
}
- else
- if(G.obedit) {
+ else if(G.obedit) {
/* used to be a bigger test, also included sector and life */
if(G.obedit->type==OB_MESH) {
+ EditMesh *em = G.editMesh;
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
- calc_meshverts_ext(); /* drawobject.c */
- eve= em->verts.first;
- while(eve) {
- if(eve->h==0 && eve->xs>rect.xmin && eve->xs<rect.xmax) {
- if(eve->ys>rect.ymin && eve->ys<rect.ymax) {
- if(val==LEFTMOUSE) eve->f|= 1;
- else eve->f&= 254;
+ if(G.scene->selectmode & SCE_SELECT_VERTEX) {
+ calc_meshverts_ext(); /* clips, drawobject.c */
+ for(eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->h==0 && eve->xs>rect.xmin && eve->xs<rect.xmax) {
+ if(eve->ys>rect.ymin && eve->ys<rect.ymax) {
+ if(val==LEFTMOUSE) eve->f|= 1;
+ else eve->f&= 254;
+ }
+ }
+ }
+ }
+ if(G.scene->selectmode & SCE_SELECT_EDGE) {
+ short done= 0;
+ calc_meshverts_ext_f2(); /* doesnt clip, drawobject.c */
+
+ /* two stages, for nice edge select first do 'both points in rect' */
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ if( edge_fully_inside_rect(rect, eed->v1->xs, eed->v1->ys, eed->v2->xs, eed->v2->ys)) {
+ EM_select_edge(eed, val==LEFTMOUSE);
+ done = 1;
+ }
+ }
+ }
+
+ if(done==0) {
+ for(eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->h==0) {
+ if( edge_inside_rect(rect, eed->v1->xs, eed->v1->ys, eed->v2->xs, eed->v2->ys))
+ EM_select_edge(eed, val==LEFTMOUSE);
+ }
}
}
- eve= eve->next;
}
+
+ if(G.scene->selectmode & SCE_SELECT_FACE) {
+ calc_mesh_facedots_ext();
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0 && efa->xs>rect.xmin && efa->xs<rect.xmax) {
+ if(efa->ys>rect.ymin && efa->ys<rect.ymax) {
+ EM_select_face(efa, val==LEFTMOUSE);
+ }
+ }
+ }
+ }
+
+ EM_selectmode_flush();
allqueue(REDRAWVIEW3D, 0);
}
@@ -917,8 +994,8 @@ void borderselect(void)
allqueue(REDRAWINFO, 0);
}
- /* remove obedit check later */
- if(G.obedit==NULL) BIF_undo_push("Border select");
+
+ BIF_undo_push("Border select");
} /* end of borderselect() */
diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c
index 4d1d5e34099..771b5114d0c 100644
--- a/source/blender/src/header_view3d.c
+++ b/source/blender/src/header_view3d.c
@@ -92,6 +92,7 @@
#include "BIF_editarmature.h"
#include "BIF_editfont.h"
#include "BIF_editmesh.h"
+#include "BIF_editmode_undo.h"
#include "BIF_editview.h"
#include "BIF_interface.h"
#include "BIF_mainqueue.h"
@@ -1813,40 +1814,6 @@ static uiBlock *view3d_edit_propfalloffmenu(void *arg_unused)
return block;
}
-static void do_view3d_edit_mesh_undohistorymenu(void *arg, int event)
-{
- TEST_EDITMESH
-
- if(event<1) return;
-
- if (event==1) remake_editMesh();
- else undo_pop_mesh(G.undo_edit_level-event+3);
-
- allqueue(REDRAWVIEW3D, 0);
-}
-
-static uiBlock *view3d_edit_mesh_undohistorymenu(void *arg_unused)
-{
- uiBlock *block;
- short yco = 20, menuwidth = 120;
- int i, lasti;
-
- lasti = (G.undo_edit_level>25) ? G.undo_edit_level-25 : 0;
-
- block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_undohistorymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
- uiBlockSetButmFunc(block, do_view3d_edit_mesh_undohistorymenu, NULL);
-
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo All Changes|Ctrl U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
-
- for (i=G.undo_edit_level; i>=lasti; i--) {
- if (i == G.undo_edit_level) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, G.undo_edit[i].name, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, (float)i+2, "");
- }
-
- uiBlockSetDirection(block, UI_RIGHT);
- uiTextBoundsBlock(block, 60);
- return block;
-}
void do_view3d_edit_mesh_verticesmenu(void *arg, int event)
{
@@ -1911,19 +1878,19 @@ void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
switch(event) {
case 0: /* subdivide smooth */
- undo_push_mesh("Subdivide Smooth");
subdivideflag(1, 0.0, editbutflag | B_SMOOTH);
+ BIF_undo_push("Subdivide Smooth");
break;
case 1: /*subdivide fractal */
- undo_push_mesh("Subdivide Fractal");
randfac= 10;
if(button(&randfac, 1, 100, "Rand fac:")==0) return;
fac= -( (float)randfac )/100;
subdivideflag(1, fac, editbutflag);
+ BIF_undo_push("Subdivide Fractal");
break;
case 2: /* subdivide */
- undo_push_mesh("Subdivide");
subdivideflag(1, 0.0, editbutflag);
+ BIF_undo_push("Subdivide");
break;
case 3: /* knife subdivide */
KnifeSubdivide(KNIFE_PROMPT);
@@ -2196,10 +2163,10 @@ static void do_view3d_edit_meshmenu(void *arg, int event)
switch(event) {
case 0: /* Undo Editing */
- undo_pop_mesh(1);
+ BIF_undo();
break;
case 1: /* Redo Editing */
- undo_redo_mesh();
+ BIF_redo();
break;
case 2: /* transform properties */
add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, 0);
@@ -2249,7 +2216,7 @@ static uiBlock *view3d_edit_meshmenu(void *arg_unused)
*/
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
- uiDefIconTextBlockBut(block, view3d_edit_mesh_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
@@ -3436,7 +3403,10 @@ void do_view3d_buttons(short event)
G.f &= ~G_TEXTUREPAINT;
}
#endif /* NAN_VPT */
- if(G.obedit==0) enter_editmode();
+ if(G.obedit==NULL) {
+ enter_editmode();
+ BIF_undo_push("Original"); // here, because all over code enter_editmode is abused
+ }
else exit_editmode(2); // freedata, and undo
scrarea_queue_headredraw(curarea);
break;
@@ -3601,6 +3571,7 @@ void do_view3d_buttons(short event)
if (G.obpose) exit_posemode(1); /* exit posemode */
enter_editmode();
+ BIF_undo_push("Original"); // here, because all over code enter_editmode is abused
}
} else if (G.vd->modeselect == V3D_FACESELECTMODE_SEL) {
if ((G.obedit) && (G.f & G_FACESELECT)) {
@@ -3661,7 +3632,27 @@ void do_view3d_buttons(short event)
break;
case B_AROUND:
handle_view3d_around();
- break;
+ break;
+
+ case B_SEL_VERT:
+ if( (G.qual & LR_SHIFTKEY)==0 || G.scene->selectmode==0)
+ G.scene->selectmode= SCE_SELECT_VERTEX;
+ EM_selectmode_set();
+ allqueue(REDRAWVIEW3D, 0);
+ break;
+ case B_SEL_EDGE:
+ if( (G.qual & LR_SHIFTKEY)==0 || G.scene->selectmode==0)
+ G.scene->selectmode= SCE_SELECT_EDGE;
+ EM_selectmode_set();
+ allqueue(REDRAWVIEW3D, 0);
+ break;
+ case B_SEL_FACE:
+ if( (G.qual & LR_SHIFTKEY)==0 || G.scene->selectmode==0)
+ G.scene->selectmode= SCE_SELECT_FACE;
+ EM_selectmode_set();
+ allqueue(REDRAWVIEW3D, 0);
+ break;
+
default:
if(event>=B_LAY && event<B_LAY+31) {
@@ -3917,7 +3908,8 @@ void view3d_buttons(void)
}
else xco+= (10+1)*(XIC/2)+10;
- if(G.obedit && (OBACT->type == OB_MESH || OBACT->type == OB_CURVE || OBACT->type == OB_SURF || OBACT->type == OB_LATTICE)) {
+ /* proportional falloff */
+ if(G.obedit && (G.obedit->type == OB_MESH || G.obedit->type == OB_CURVE || G.obedit->type == OB_SURF || G.obedit->type == OB_LATTICE)) {
extern int prop_mode;
if(G.f & G_PROPORTIONAL) {
uiDefIconTextButI(block, ICONTEXTROW,B_REDR, ICON_SHARPCURVE, propfalloff_pup(), xco,0,XIC+10,YIC, &(prop_mode), 0, 1.0, 0, 0, "Proportional Edit Falloff (Hotkey: Shift O) ");
@@ -3925,6 +3917,18 @@ void view3d_buttons(void)
}
}
+ /* selection modus */
+ if(G.obedit && (G.obedit->type == OB_MESH)) {
+ uiBlockBeginAlign(block);
+ uiDefIconButS(block, TOG|BIT|0, B_SEL_VERT, ICON_VERTEXSEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode");
+ xco+= XIC;
+ uiDefIconButS(block, TOG|BIT|1, B_SEL_EDGE, ICON_EDGESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Edge select mode");
+ xco+= XIC;
+ uiDefIconButS(block, TOG|BIT|2, B_SEL_FACE, ICON_FACESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode");
+ xco+= XIC+20;
+ uiBlockEndAlign(block);
+ }
+
uiDefIconBut(block, BUT, B_VIEWRENDER, ICON_SCENE_DEHLT, xco,0,XIC,YIC, NULL, 0, 1.0, 0, 0, "Render this window (hold CTRL for anim)");
if (G.obpose){
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index 7cae99a428f..8926ba20185 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -3092,7 +3092,9 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent)
butevent= ui_do_button(block, but, uevent);
if( !(block->flag & UI_BLOCK_LOOP))
- if(but->type!=BLOCK && but->type!=MENU) BIF_undo_push(but->str);
+ if(but->type!=BLOCK && but->type!=MENU)
+ if(!G.obedit)
+ BIF_undo_push(but->str);
if(butevent) addqueue(block->winq, UI_BUT_EVENT, (short)butevent);
diff --git a/source/blender/src/resources.c b/source/blender/src/resources.c
index a5bb1aaa811..80328c53eeb 100644
--- a/source/blender/src/resources.c
+++ b/source/blender/src/resources.c
@@ -461,6 +461,10 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
cp= ts->face; break;
case TH_FACE_SELECT:
cp= ts->face_select; break;
+ case TH_FACE_DOT:
+ cp= ts->face_dot; break;
+ case TH_FACEDOT_SIZE:
+ cp= &ts->facedot_size; break;
case TH_NORMAL:
cp= ts->normal; break;
@@ -535,13 +539,15 @@ void BIF_InitTheme(void)
SETCOL(btheme->tv3d.vertex_select, 0xff, 0xff, 0x70, 255);
btheme->tv3d.vertex_size= 2;
SETCOL(btheme->tv3d.edge, 0x0, 0x0, 0x0, 255);
- SETCOL(btheme->tv3d.edge_select, 0x90, 0x90, 0x30, 255);
+ SETCOL(btheme->tv3d.edge_select, 0xb0, 0xb0, 0x30, 255);
SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255);
SETCOL(btheme->tv3d.edge_facesel, 75, 75, 75, 255);
SETCOL(btheme->tv3d.face, 0, 50, 150, 30);
SETCOL(btheme->tv3d.face_select, 200, 100, 200, 60);
SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255);
-
+ SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255);
+ btheme->tv3d.facedot_size= 4;
+
/* space buttons */
/* to have something initialized */
btheme->tbuts= btheme->tv3d;
@@ -687,8 +693,10 @@ char *BIF_ThemeColorsPup(int spacetype)
sprintf(str, "Edge Selected %%x%d|", TH_EDGE_SELECT); strcat(cp, str);
sprintf(str, "Edge Seam %%x%d|", TH_EDGE_SEAM); strcat(cp, str);
sprintf(str, "Edge UV Face Select %%x%d|", TH_EDGE_FACESEL); strcat(cp, str);
- sprintf(str, "Face %%x%d|", TH_FACE); strcat(cp, str);
- sprintf(str, "Face Selected %%x%d|", TH_FACE_SELECT); strcat(cp, str);
+ sprintf(str, "Face (transp) %%x%d|", TH_FACE); strcat(cp, str);
+ sprintf(str, "Face Selected (transp) %%x%d|", TH_FACE_SELECT); strcat(cp, str);
+ sprintf(str, "Face Dot Selected %%x%d|", TH_FACE_DOT); strcat(cp, str);
+ sprintf(str, "Face Dot Size %%x%d|", TH_FACEDOT_SIZE); strcat(cp, str);
sprintf(str, "Normal %%x%d", TH_NORMAL); strcat(cp, str);
}
else if(spacetype==SPACE_IPO) {
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index aa5e9864392..4f71bead9a1 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -92,6 +92,7 @@
#include "BIF_editkey.h"
#include "BIF_editlattice.h"
#include "BIF_editmesh.h"
+#include "BIF_editmode_undo.h"
#include "BIF_editoops.h"
#include "BIF_editseq.h"
#include "BIF_editsima.h"
@@ -641,9 +642,9 @@ void BIF_undo(void)
if(G.obedit) {
if(G.obedit->type==OB_MESH)
- undo_pop_mesh(1);
+ undo_editmode_step(1);
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
- undo_curve_step(1);
+ undo_editmode_step(1);
}
else {
@@ -665,9 +666,9 @@ void BIF_redo(void)
if(G.obedit) {
if(G.obedit->type==OB_MESH)
- undo_redo_mesh();
+ undo_editmode_step(-1);
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
- undo_curve_step(-1);
+ undo_editmode_step(-1);
}
else {
@@ -687,9 +688,11 @@ void BIF_undo_menu(void)
{
if(G.obedit) {
if(G.obedit->type==OB_MESH)
- undo_menu_mesh();
+ undo_editmode_menu();
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
- ;//undo_menu_curve();
+ undo_editmode_menu();
+
+ allqueue(REDRAWALL, 0);
}
else {
if (G.f & G_FACESELECT)
@@ -702,7 +705,6 @@ void BIF_undo_menu(void)
if(U.uiflag & USER_GLOBALUNDO) BKE_undo_menu();
}
}
-
}
/* *************** */
@@ -1239,7 +1241,6 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(G.qual==LR_CTRLKEY)
add_hook();
else {
- undo_push_curve("Handle change");
if(G.qual==LR_CTRLKEY)
autocalchandlesNurb_all(1); /* flag=1, selected */
else if((G.qual==LR_SHIFTKEY))
@@ -1248,7 +1249,7 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
sethandlesNurb(3);
makeDispList(G.obedit);
-
+ BIF_undo_push("Handle change");
allqueue(REDRAWVIEW3D, 0);
}
}
@@ -1384,16 +1385,16 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case OB_MESH:
if(G.qual==(LR_SHIFTKEY|LR_CTRLKEY)) {
if(okee("Recalculate normals inside")) {
- undo_push_mesh("Recalculate normals inside");
righthandfaces(2);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Recalculate normals inside");
}
}
else if(G.qual==LR_CTRLKEY){
if(okee("Recalculate normals outside")) {
- undo_push_mesh("Recalculate normals outside");
righthandfaces(1);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Recalculate normals outside");
}
}
break;
@@ -1508,25 +1509,13 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case UKEY:
if(G.obedit) {
- if(G.obedit->type==OB_MESH){
- if (G.qual==LR_ALTKEY)
- undo_menu_mesh();
- else if (G.qual==LR_SHIFTKEY)
- undo_redo_mesh();
- else if((G.qual==0))
- undo_pop_mesh(1);
+ if(G.obedit->type==OB_MESH) {
+ if(G.qual==0) BIF_undo(); else BIF_redo();
}
else if(G.obedit->type==OB_ARMATURE)
remake_editArmature();
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
- extern void undo_curve_step(int step);
- if (G.qual==LR_ALTKEY)
- //undo_menu_curve();
- ;
- else if (G.qual==LR_SHIFTKEY)
- undo_curve_step(-1);
- else if((G.qual==0))
- undo_curve_step(1);
+ if(G.qual==0) BIF_undo(); else BIF_redo();
}
else if(G.obedit->type==OB_LATTICE)
remake_editLatt();
@@ -1542,8 +1531,6 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
single_user();
}
}
- else if(G.qual==LR_SHIFTKEY)
- if(U.uiflag & USER_GLOBALUNDO) BIF_redo();
break;
case VKEY:
@@ -1561,10 +1548,10 @@ void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else if (G.qual==0){
if(G.obedit) {
if(G.obedit->type==OB_CURVE) {
- undo_push_curve("Handle change");
sethandlesNurb(2);
makeDispList(G.obedit);
allqueue(REDRAWVIEW3D, 0);
+ BIF_undo_push("Handle change");
}
}
else if(ob && ob->type == OB_MESH)
diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c
index 02717e86e30..67bc1eab8ec 100644
--- a/source/blender/src/toets.c
+++ b/source/blender/src/toets.c
@@ -740,8 +740,10 @@ int blenderqread(unsigned short event, short val)
enter_meta();
else if(G.vd) {
/* also when Alt-E */
- if(G.obedit==0)
+ if(G.obedit==0) {
enter_editmode();
+ BIF_undo_push("Original"); // here, because all over code enter_editmode is abused
+ }
else
exit_editmode(2); // freedata, and undo
}
@@ -793,8 +795,10 @@ int blenderqread(unsigned short event, short val)
case EKEY:
if(G.qual==LR_ALTKEY) {
if(G.vd && textspace==0) {
- if(G.obedit==0)
+ if(G.obedit==0) {
enter_editmode();
+ BIF_undo_push("Original");
+ }
else
exit_editmode(2); // freedata, and undo
return 0;
@@ -936,6 +940,10 @@ int blenderqread(unsigned short event, short val)
}
return 0;
}
+ else if(G.qual==LR_ALTKEY) {
+ BIF_undo_menu();
+ return 0;
+ }
}
break;
@@ -974,7 +982,7 @@ int blenderqread(unsigned short event, short val)
}
break;
case ZKEY: // undo
- if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/cammandkey are accepted
+ if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/commandkey are accepted
if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo();
else BIF_redo(); // all combos with ctrl is redo
return 0;
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index ec75739b4e5..c3f5e472ef5 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -87,6 +87,7 @@
#include "BIF_editlattice.h"
#include "BIF_editfont.h"
#include "BIF_editmesh.h"
+#include "BIF_editmode_undo.h"
#include "BIF_editsound.h"
#include "BIF_renderwin.h"
#include "BIF_resources.h"
@@ -244,6 +245,13 @@ int BIF_read_homefile(void)
btheme->tv3d.normal[2]= 0xDD;
btheme->tv3d.normal[3]= 255;
}
+ if(btheme->tv3d.face_dot[3]==0) {
+ btheme->tv3d.face_dot[0]= 255;
+ btheme->tv3d.face_dot[1]= 138;
+ btheme->tv3d.face_dot[2]= 48;
+ btheme->tv3d.face_dot[3]= 255;
+ btheme->tv3d.facedot_size= 4;
+ }
}
}
@@ -556,7 +564,7 @@ void exit_usiblender(void)
free_editText();
}
else if(G.obedit->type==OB_MBALL) BLI_freelistN(&editelems);
- free_editMesh();
+ free_editMesh(G.editMesh);
}
free_editLatt();
@@ -602,8 +610,8 @@ void exit_usiblender(void)
FTF_End();
#endif
- if (G.undo_clear) G.undo_clear();
- undo_clear_curve();
+ /* undo free stuff */
+ undo_editmode_clear();
BKE_undo_save_quit(); // saves quit.blend if global undo is on
BKE_reset_undo();