diff --git a/source/Makefile b/source/Makefile
index 22ca6b68652440cb7d12e19c22db3e789dd70b9f..ce1a68518845120a64b8466ba77e2bdb9016bcac 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -79,7 +79,7 @@ PYPLAYERLIB ?= $(PYLIB)
     GRPLIB = $(OCGDIR)/creator/$(DEBUG_DIR)libcreator.a
     GRPLIB += $(OCGDIR)/blender/src/$(DEBUG_DIR)libsrcpublisher.a
     GRPLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a
-	GRPLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
+    GRPLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
     GRPLIB += $(NAN_SOUNDSYSTEM)/lib/$(DEBUG_DIR)libSoundSystem.a
     GRPLIB += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
     GRPLIB += $(NAN_STRING)/lib/$(DEBUG_DIR)libstring.a
@@ -90,7 +90,6 @@ PYPLAYERLIB ?= $(PYLIB)
     GRPLIB += $(NAN_SUPERLU)/lib/$(DEBUG_DIR)libsuperlu.a	
     GRPLIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a
 
-
 # nlin: the reason that some libraries appear more than once below is
 # to handle circular dependencies in linking among libraries... some
 # linkers (e.g. under Linux) need libs to be specified multiple times
@@ -118,7 +117,7 @@ ifneq ($(NAN_NO_KETSJI),true)
     COMLIB += $(OCGDIR)/gameengine/blphys/sumo/$(DEBUG_DIR)libsumo.a
     COMLIB += $(OCGDIR)/gameengine/blphys/fuzzics/$(DEBUG_DIR)libfuzzics.a
     COMLIB += $(NAN_QHULL)/lib/libqhull.a
-   COMLIB += $(OCGDIR)/gameengine/blphys/dummy/$(DEBUG_DIR)libdummy.a
+    COMLIB += $(OCGDIR)/gameengine/blphys/dummy/$(DEBUG_DIR)libdummy.a
     COMLIB += $(OCGDIR)/gameengine/blphys/common/$(DEBUG_DIR)libcommon.a
 #    COMLIB += $(OCGDIR)/gameengine/blphys/sumo/$(DEBUG_DIR)libsumo.a
     COMLIB += $(OCGDIR)/gameengine/blphys/dummy/$(DEBUG_DIR)libdummy.a
@@ -163,11 +162,11 @@ endif
   endif
   ifeq ($(WITH_FREETYPE2), true)
     ifeq ($(OS), windows)
-		ifeq ($(FREE_WINDOWS), true)
-			COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
-		else
-			COMLIB += $(NAN_FREETYPE)/lib/freetype2ST.lib
-		endif
+      ifeq ($(FREE_WINDOWS), true)
+        COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
+      else
+        COMLIB += $(NAN_FREETYPE)/lib/freetype2ST.lib
+      endif
     else
       ifeq ($(OS), irix)
         COMLIB += $(NAN_FREETYPE)/lib32/libfreetype.a
@@ -198,22 +197,22 @@ ifeq ($(INTERNATIONAL), true)
           COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
         endif
     endif
-	ifeq ($(OS), darwin)
-	    COMLIB += $(NAN_GETTEXT)/lib/libintl.a
-	endif
-	ifeq ($(OS), solaris)
-	    COMLIB += $(NAN_GETTEXT)/lib/libintl.a
-	endif
+    ifeq ($(OS), darwin)
+        COMLIB += $(NAN_GETTEXT)/lib/libintl.a
+    endif
+    ifeq ($(OS), solaris)
+        COMLIB += $(NAN_GETTEXT)/lib/libintl.a
+    endif
 endif
 
 ifeq ($(OS), irix)
-	COMLIB += $(NAN_SDL)/lib/libSDL.a
+    COMLIB += $(NAN_SDL)/lib/libSDL.a
 endif
 ifeq ($(OS), windows)
     ifeq ($(FREE_WINDOWS), true)
-	    COMLIB += $(NAN_SDL)/lib/libSDL.a
+        COMLIB += $(NAN_SDL)/lib/libSDL.a
     else
-	    COMLIB += $(NAN_SDL)/lib/SDL.lib
+        COMLIB += $(NAN_SDL)/lib/SDL.lib
     endif
 endif
 
@@ -279,7 +278,6 @@ ifeq ($(OS),$(findstring $(OS), "windows"))
 endif
     PLUGAPPLIB += $(OCGDIR)/gameengine/GamePlayer/common/$(DEBUG_DIR)libcommon.a
 
-
 ifeq ($(OS),$(findstring $(OS), "linux"))
   ifeq ($(CPU),i386)
     PLUGAPPLIB_XPLINK = $(OCGDIR)/gameengine/GamePlayer/netscape/src/$(DEBUG_DIR)_Blender3DPlugin_implementation_.o 
@@ -300,7 +298,6 @@ endif
 ifeq ($(OS),darwin)
     BINTARGETS = blenderdynamic.app
     BINTARGETS += blenderplayer.app
-
     ifdef PY_FRAMEWORK
         PYLIB = -framework Python
     else 
@@ -340,7 +337,7 @@ ifeq ($(OS),linux)
     BINTARGETS += blenderplayer
     BINTARGETS += blenderstatic
     ifneq ($(NAN_NO_PLUGIN),true)
-	BINTARGETS += plugin xplink
+      BINTARGETS += plugin xplink
     endif
   endif
   ifeq ($(CPU),powerpc)
@@ -366,14 +363,12 @@ ifeq ($(OS),solaris)
     PYLIB = $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
     PYLIB += $(NAN_MXTEXTTOOLS)
     PYLIB += $(NAN_ZLIB)/lib/libz.a
-
     PULIB += $(NAN_ZLIB)/lib/libz.a
     SPLIB += $(NAN_ZLIB)/lib/libz.a
 endif
 
 # OpenAL libs are already compiled as shared code! Check FMod if we switch to that. (nzc)
 
-
 # Some vars to keep the rest of this section mostly readable
 # in an 80 char term
 SOUNDSYSTEM = $(OCGDIR)/intern/SoundSystem/$(DEBUG_DIR)libSoundSystem.a
@@ -434,12 +429,12 @@ else
 endif
 
 ifeq ($(OS),windows)
-	ifeq ($(FREE_WINDOWS),true)
-		PYLIB = $(NAN_PYTHON)/lib/freepy.a
+    ifeq ($(FREE_WINDOWS),true)
+        PYLIB = $(NAN_PYTHON)/lib/freepy.a
     else
-		PYLIB = $(NAN_PYTHON)/lib/python23.lib
+        PYLIB = $(NAN_PYTHON)/lib/python23.lib
     endif
-    
+
     PYPLAYERLIB = $(NAN_PYTHON)/static/*.obj
     PYPLAYERLIB = $(PYLIB)
 
@@ -692,3 +687,4 @@ $(DIR)/$(DEBUG_DIR)bin/npTestPlugin$(SOEXT): $(NSPLUGLIB)
 	/bin/rm $(BUILDINFO_O)
     endif
 endif
+
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 13fd55d244fed9c361536d700e43141ef4d2d2f9..84c92fef0af5657cc00538f03ba34e71e711f39a 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -43,7 +43,7 @@ extern "C" {
 struct ListBase;
 struct MemFile;
 
-#define BLENDER_VERSION		240
+#define BLENDER_VERSION		241
 
 int	BKE_read_file(char *dir, void *type_r);
 int BKE_read_file_from_memory(char* filebuf, int filelength, void *type_r);
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 15116b390cc40aa696efe2f5822e30001d643738..f5d8edef1671180518e5ca3a32a15aa447078fbd 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -809,7 +809,22 @@ void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[]
   pose_mat(b)= arm_mat(b) * chan_mat(b)
   
   *************************************************************************** */
+/*  Computes vector and roll based on a rotation. "mat" must
+     contain only a rotation, and no scaling. */ 
+void mat3_to_vec_roll(float mat[][3], float *vec, float *roll) {
+     if (vec)
+         VecCopyf(vec, mat[1]);
 
+     if (roll) {
+         float vecmat[3][3], vecmatinv[3][3], rollmat[3][3];
+
+         vec_roll_to_mat3(mat[1], 0.0f, vecmat);
+         Mat3Inv(vecmatinv, vecmat);
+         Mat3MulMat3(rollmat, vecmatinv, mat);
+
+         *roll= atan2(rollmat[2][0], rollmat[2][2]);
+     }
+}
 
 /*	Calculates the rest matrix of a bone based
 	On its vector and a roll around that vector */
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index db097b3733933e420fbc15b09acecba83f80a335..7458a0230ddeccbe5b2d1b2b96e875a33ad30173 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -383,6 +383,9 @@ Object *get_constraint_target(bConstraint *con, char **subtarget)
 			return (data->tar);
 		}
 		break;
+	default:
+		*subtarget= NULL;
+		break;
 	}
 	
 	return NULL;  
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 6c64a954b49235d2be99ee0e422740022e69707d..d0b741123b5991caefdf5b4123acb5991772beed 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -275,7 +275,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis
 	vmap= make_uv_vert_map(mface, tface, totface, totvert, 0, limit);
 	if (!vmap)
 		return 0;
-
+	
 	ccgSubSurf_initFullSync(ss);
 
 	/* use this to get consistent vert handles with different heap addresses */
@@ -283,6 +283,9 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, Mesh *me, DispLis
 
 	/* create vertices */
 	for (i=0; i<totvert; i++) {
+		if (!get_uv_map_vert(vmap, i))
+			continue;
+
 		for (v=get_uv_map_vert(vmap, i)->next; v; v=v->next)
 			if (v->separate)
 				break;
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 3cdc0de4f5224efcada3dc77b2742f3a7e55cf61..529d428692b5dd01d5b445e1805e72abea2d9beb 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -1706,8 +1706,9 @@ static PyObject *reimportText( PyObject *module )
 
 	/* if previously compiled, free the object */
 	/* (can't see how could be NULL, but check just in case) */ 
-	if( text->compiled )
+	if( text->compiled ){
 		Py_DECREF( (PyObject *)text->compiled );
+	}
 
 	/* compile the buffer */
 	buf = txt_to_buf( text );
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index c7a597c62c936f82a752e1c4bdd8b4c8f885910a..aedafd84e962a048b0a0c9a1f74a164a4c72a5e3 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -43,6 +43,7 @@ source_files = ['BPY_interface.c',
                 'api2_2x/Types.c',
                 'api2_2x/Window.c',
                 'api2_2x/World.c',
+                'api2_2x/Pose.c',
                 'api2_2x/Image.c',
                 'api2_2x/Text.c',
                 'api2_2x/Text3d.c',
diff --git a/source/blender/python/api2_2x/Armature.c b/source/blender/python/api2_2x/Armature.c
index 743956a1f61c9438f79282207b663d0727d8a60d..28ae3eadcc7ac04cb01e017bfb69b4eafb0442a8 100644
--- a/source/blender/python/api2_2x/Armature.c
+++ b/source/blender/python/api2_2x/Armature.c
@@ -44,8 +44,7 @@
 #include "DNA_object_types.h" //This must come before BIF_editarmature.h...
 #include "BIF_editarmature.h"
 
-//------------------UNDECLARED EXTERNAL PROTOTYPES--------------------
-//These are evil 'extern' declarations for functions with no anywhere
+//------------------EXTERNAL PROTOTYPES--------------------
 extern void free_editArmature(void);
 extern void make_boneList(ListBase* list, ListBase *bones, EditBone *parent);
 extern void editbones_to_armature (ListBase *list, Object *ob);
@@ -112,7 +111,7 @@ static PyMethodDef BPy_BonesDict_methods[] = {
 		"() - Returns the keys the dictionary"},
 	{"values", (PyCFunction) BonesDict_values, METH_NOARGS, 
 		"() - Returns the values from the dictionary"},
-	{NULL}
+	{NULL, NULL, 0, NULL}
 };
 //-----------------(internal)
 static int BoneMapping_Init(PyObject *dictionary, ListBase *bones){
@@ -225,8 +224,18 @@ PyObject *BonesDict_GetItem(BPy_BonesDict *self, PyObject* key)
 	}else{
 		value = PyDict_GetItem(self->bonesMap, key);
 	}
-	if(value == NULL){
-        return EXPP_incr_ret(Py_None);
+	if(value == NULL){  /* item not found in dict. throw exception */
+		char buffer[128];
+		char* key_str;
+		key_str = PyString_AsString( key );
+		if( !key_str ){  /* key not a py string */
+			key_str = "";  /* use empty string for printing */
+		}
+  
+		PyOS_snprintf( buffer, sizeof(buffer),
+					   "bone %s not found", key_str);
+			
+        return EXPP_ReturnPyObjError(PyExc_KeyError, buffer );
 	}
 	return EXPP_incr_ret(value);
 }
@@ -335,7 +344,7 @@ AttributeError3:
 	return EXPP_intError(PyExc_AttributeError, "%s%s", 
 		sBoneDictBadArgs,  "The 'connected' flag is set but the bone has no parent!");
 }
-//------------------TYPE_OBECT DEFINITION--------------------------
+//------------------TYPE_OBJECT DEFINITION--------------------------
 //Mapping Protocol
 static PyMappingMethods BonesDict_MapMethods = {
 	(inquiry) BonesDict_len,					//mp_length
@@ -929,7 +938,7 @@ static PyMethodDef BPy_Armature_methods[] = {
 		"() - Unlocks the ability to modify armature bones"},
 	{"update", (PyCFunction) Armature_update, METH_NOARGS, 
 		"() - Rebuilds the armature based on changes to bones since the last call to makeEditable"},
-	{NULL}
+	{NULL, NULL, 0, NULL}
 };
 //------------------------tp_getset
 //This contains methods for attributes that require checking
@@ -1218,7 +1227,7 @@ static char M_Armature_Get_doc[] = "(name) - return the armature with the name '
 
 struct PyMethodDef M_Armature_methods[] = {
 	{"Get", M_Armature_Get, METH_VARARGS, M_Armature_Get_doc},
-	{NULL}
+	{NULL, NULL, 0, NULL}
 };
 //------------------VISIBLE PROTOTYPE IMPLEMENTATION-----------------------
 //-----------------(internal)
diff --git a/source/blender/python/api2_2x/Armature.h b/source/blender/python/api2_2x/Armature.h
index 4d14b41fdc8016695b93f1e13aa71de0720ff67e..dbf21d1e5a5aba92b64b0ce8dc5313916a8f67af 100644
--- a/source/blender/python/api2_2x/Armature.h
+++ b/source/blender/python/api2_2x/Armature.h
@@ -40,8 +40,8 @@
 //-------------------MODULE INIT---------------------------------
 PyObject *Armature_Init( void );
 //-------------------TYPEOBJECT----------------------------------
-PyTypeObject Armature_Type;
-PyTypeObject BonesDict_Type;
+extern PyTypeObject Armature_Type;
+extern PyTypeObject BonesDict_Type;
 //-------------------STRUCT DEFINITION---------------------------
 typedef struct {
 	PyObject_HEAD 
diff --git a/source/blender/python/api2_2x/BezTriple.c b/source/blender/python/api2_2x/BezTriple.c
index 3d610e38fd6d2c4b81931c72d6543c6328beda0a..c8b82d16a88f483f7cd996ed845bbebb9069f222 100644
--- a/source/blender/python/api2_2x/BezTriple.c
+++ b/source/blender/python/api2_2x/BezTriple.c
@@ -256,39 +256,20 @@ static PyObject *BezTriple_getTriple( BPy_BezTriple * self )
 
 static PyObject *BezTriple_setPoints( BPy_BezTriple * self, PyObject * args )
 {
-
 	int i;
 	struct BezTriple *bezt = self->beztriple;
 	PyObject *popo = 0;
 
-	if( !PyArg_ParseTuple( args, "O", &popo ) )
-		return ( EXPP_ReturnPyObjError
-			 ( PyExc_TypeError, "expected sequence argument" ) );
-
-	if( PySequence_Check( popo ) == 0 ) {
-		puts( "error in BezTriple_setPoints - expected sequence" );
-		Py_INCREF( Py_None );
-		return Py_None;
-	}
-
-	{
-		/*
-		   some debug stuff 
-		   this will become an overloaded args check
-		 */
-		int size = PySequence_Size( popo );
-		printf( "\n dbg: sequence size is %d\n", size );
-	}
+	if( !PyArg_ParseTuple( args, "O", &popo ) || !PySequence_Check( popo ) )
+		return EXPP_ReturnPyObjError( PyExc_TypeError,
+				"expected sequence argument" );
 
 	for( i = 0; i < 2; i++ ) {
-		PyObject *o = PySequence_GetItem( popo, i );
-		if( !o )
-			printf( "\n bad o. o no!\n" );
-
-		/*   bezt->vec[1][i] = PyFloat_AsDouble (PyTuple_GetItem (popo, i)); */
+		PyObject *o = PySequence_ITEM( popo, i );
 		bezt->vec[1][i] = (float)PyFloat_AsDouble( o );
 		bezt->vec[0][i] = bezt->vec[1][i] - 1;
 		bezt->vec[2][i] = bezt->vec[1][i] + 1;
+		Py_DECREF( o );
 	}
 
 	/* experimental fussing with handles - ipo.c: calchandles_ipocurve */
@@ -298,8 +279,7 @@ static PyObject *BezTriple_setPoints( BPy_BezTriple * self, PyObject * args )
 	if( bezt->vec[2][0] < bezt->vec[1][0] )
 		bezt->vec[2][0] = bezt->vec[1][0];
 
-	Py_INCREF( Py_None );
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 
diff --git a/source/blender/python/api2_2x/Bone.c b/source/blender/python/api2_2x/Bone.c
index b4f8af4fe12ea5c5d311fa0ebbdac88f3d0ce143..7e233e5f647e9585ee802ff09f6bde99d2053cae 100644
--- a/source/blender/python/api2_2x/Bone.c
+++ b/source/blender/python/api2_2x/Bone.c
@@ -42,14 +42,15 @@
 #include "DNA_object_types.h" //1
 #include "BIF_editarmature.h"   //2
 
+//------------------UNDECLARED EXTERNAL PROTOTYPES--------------------
+extern void mat3_to_vec_roll(float mat[][3], float *vec, float *roll);
+
 //------------------------ERROR CODES---------------------------------
 //This is here just to make me happy and to have more consistant error strings :)
-static const char sEditBoneError[] = "EditBone (internal) - Error: ";
-static const char sEditBoneBadArgs[] = "EditBone (internal) - Bad Arguments: ";
+static const char sEditBoneError[] = "EditBone - Error: ";
+static const char sEditBoneBadArgs[] = "EditBone - Bad Arguments: ";
 static const char sBoneError[] = "Bone - Error: ";
 static const char sBoneBadArgs[] = "Bone - Bad Arguments: ";
-static const char sConstListError[] = "ConstantList - Error: ";
-static const char sConstListBadArgs[] = "ConstantList - Bad Arguments: ";
 
 //----------------------(internal)
 //gets the bone->roll (which is a localspace roll) and puts it in parentspace
@@ -541,7 +542,6 @@ static int EditBone_setParent(BPy_EditBone *self, PyObject *value, void *closure
 AttributeError:
 	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
 		sEditBoneError, ".parent: ", "expects a EditBone Object");
-
 AttributeError2:
 	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
 		sEditBoneError, ".parent: ", "This object is not in the armature's bone list!");
@@ -565,8 +565,53 @@ static PyObject *EditBone_getMatrix(BPy_EditBone *self, void *closure)
 //------------------------EditBone.matrix (set)
 static int EditBone_setMatrix(BPy_EditBone *self, PyObject *value, void *closure)
 {  
-	printf("Sorry this isn't implemented yet.... :/");
-	return 1;
+	PyObject *matrix;
+	float roll, length, vec[3], axis[3], mat3[3][3];
+
+	if (!PyArg_Parse(value, "O!", &matrix_Type, &matrix))
+		goto AttributeError;
+
+	//make sure we have the right sizes
+	if (((MatrixObject*)matrix)->rowSize != 3 && ((MatrixObject*)matrix)->colSize != 3){
+		if(((MatrixObject*)matrix)->rowSize != 4 && ((MatrixObject*)matrix)->colSize != 4){
+			goto AttributeError;
+		}
+	}
+		
+	/*vec will be a normalized directional vector
+	* together with the length of the old bone vec*length = the new vector*/
+	/*The default rotation is 0,1,0 on the Y axis (see mat3_to_vec_roll)*/
+	if (((MatrixObject*)matrix)->rowSize == 4){
+		Mat3CpyMat4(mat3, ((float (*)[4])*((MatrixObject*)matrix)->matrix));
+	}else{
+		Mat3CpyMat3(mat3, ((float (*)[3])*((MatrixObject*)matrix)->matrix));
+	}
+	mat3_to_vec_roll(mat3, vec, &roll);
+
+	//if a 4x4 matrix was passed we'll translate the vector otherwise not
+	if (self->editbone){
+		self->editbone->roll = roll;
+		VecSubf(axis, self->editbone->tail, self->editbone->head);
+		length =  VecLength(axis);
+		VecMulf(vec, length);
+		if (((MatrixObject*)matrix)->rowSize == 4)
+			VecCopyf(self->editbone->head, ((MatrixObject*)matrix)->matrix[3]);
+		VecAddf(self->editbone->tail, self->editbone->head, vec);
+		return 0;
+	}else{
+		self->roll = roll;
+		VecSubf(axis, self->tail, self->head);
+		length =  VecLength(axis);
+		VecMulf(vec, length);
+		if (((MatrixObject*)matrix)->rowSize == 4)
+			VecCopyf(self->head, ((MatrixObject*)matrix)->matrix[3]);
+		VecAddf(self->tail, self->head, vec);
+		return 0;
+	}
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sEditBoneError, ".matrix: ", "expects a 3x3 or 4x4 Matrix Object");
 }
 //------------------------Bone.length (get)
 static PyObject *EditBone_getLength(BPy_EditBone *self, void *closure)
@@ -603,7 +648,7 @@ static PyMethodDef BPy_EditBone_methods[] = {
 		"() - True/False - Bone has a parent"},
 	{"clearParent", (PyCFunction) EditBone_clearParent, METH_NOARGS, 
 		"() - sets the parent to None"},
-	{NULL}
+	{NULL, NULL, 0, NULL}
 };
 ///------------------------tp_getset
 //This contains methods for attributes that require checking
@@ -630,7 +675,7 @@ static PyGetSetDef BPy_EditBone_getset[] = {
 		"The parent bone of this bone", NULL},
 	{"length", (getter)EditBone_getLength, (setter)EditBone_setLength, 
 		"The length of this bone", NULL},
-	{NULL}
+	{NULL, NULL, NULL, NULL,NULL}
 };
 
 //------------------------tp_repr
@@ -751,6 +796,28 @@ PyTypeObject EditBone_Type = {
 };
 
 //------------------METHOD IMPLEMENTATIONS--------------------------------
+//------------------------(internal) PyBone_ChildrenAsList
+static int PyBone_ChildrenAsList(PyObject *list, ListBase *bones){
+	Bone *bone = NULL;
+	PyObject *py_bone = NULL;
+
+	for (bone = bones->first; bone; bone = bone->next){
+		py_bone = PyBone_FromBone(bone);
+		if (py_bone == NULL)
+			return 0;
+
+		if(PyList_Append(list, py_bone) == -1){
+			goto RuntimeError;
+		}
+		if (bone->childbase.first) 
+			PyBone_ChildrenAsList(list, &bone->childbase);
+	}
+	return 1;
+
+RuntimeError:
+	return EXPP_intError(PyExc_RuntimeError, "%s%s", 
+		sBoneError, "Internal error trying to wrap blender bones!");
+}
 //-------------------------Bone.hasParent()
 PyObject *Bone_hasParent(BPy_Bone *self)
 {
@@ -767,6 +834,20 @@ PyObject *Bone_hasChildren(BPy_Bone *self)
 	else
 		return EXPP_incr_ret(Py_False);
 }
+//-------------------------Bone.getAllChildren()
+PyObject *Bone_getAllChildren(BPy_Bone *self)
+{
+	PyObject *list = NULL;
+
+	if (self->bone->childbase.first){
+		list = PyList_New(0);
+		if (!PyBone_ChildrenAsList(list, &self->bone->childbase))
+			return NULL;
+		return EXPP_incr_ret(list);
+	}else{
+		return EXPP_incr_ret(Py_None);
+	}
+}
 //------------------ATTRIBUTE IMPLEMENTATIONS-----------------------------
 //------------------------Bone.name (get)
 static PyObject *Bone_getName(BPy_Bone *self, void *closure)
@@ -920,42 +1001,31 @@ static int Bone_setParent(BPy_Bone *self, PyObject *value, void *closure)
   return EXPP_intError(PyExc_ValueError, "%s%s", 
 		sBoneError, "You must first call .makeEditable() to edit the armature");
 }
-//------------------------(internal) PyBone_ChildrenAsList
-static int PyBone_ChildrenAsList(PyObject *list, ListBase *bones){
-	Bone *bone = NULL;
-	PyObject *py_bone = NULL;
-
-	for (bone = bones->first; bone; bone = bone->next){
-		py_bone = PyBone_FromBone(bone);
-		if (py_bone == NULL)
-			return 0;
-
-		if(PyList_Append(list, py_bone) == -1){
-			goto RuntimeError;
-		}
-		if (bone->childbase.first) 
-			PyBone_ChildrenAsList(list, &bone->childbase);
-	}
-	return 1;
-
-RuntimeError:
-	return EXPP_intError(PyExc_RuntimeError, "%s%s", 
-		sBoneError, "Internal error trying to wrap blender bones!");
-}
-
 //------------------------Bone.children (get)
 static PyObject *Bone_getChildren(BPy_Bone *self, void *closure)
 {
 	PyObject *list = NULL;
+	Bone *bone = NULL;
+	PyObject *py_bone = NULL;
 
 	if (self->bone->childbase.first){
 		list = PyList_New(0);
-		if (!PyBone_ChildrenAsList(list, &self->bone->childbase))
-			return NULL;
+		for (bone = self->bone->childbase.first; bone; bone = bone->next){
+			py_bone = PyBone_FromBone(bone);
+			if (py_bone == NULL)
+				return 0;
+			if(PyList_Append(list, py_bone) == -1){
+				goto RuntimeError;
+			}
+		}
 		return EXPP_incr_ret(list);
 	}else{
 		return EXPP_incr_ret(Py_None);
 	}
+
+RuntimeError:
+	return EXPP_objError(PyExc_RuntimeError, "%s%s", 
+		sBoneError, "Internal error trying to wrap blender bones!");
 }
 //------------------------Bone.children (set)
 static int Bone_setChildren(BPy_Bone *self, PyObject *value, void *closure)
@@ -995,7 +1065,9 @@ static PyMethodDef BPy_Bone_methods[] = {
 		"() - True/False - Bone has a parent"},
 	{"hasChildren", (PyCFunction) Bone_hasChildren, METH_NOARGS, 
 		"() - True/False - Bone has 1 or more children"},
-	{NULL}
+	{"getAllChildren", (PyCFunction) Bone_getAllChildren, METH_NOARGS, 
+		"() - All the children for this bone - including children's children"},
+	{NULL, NULL, 0, NULL}
 };
 //------------------------tp_getset
 //This contains methods for attributes that require checking
@@ -1024,7 +1096,7 @@ static PyGetSetDef BPy_Bone_getset[] = {
 		"The child bones of this bone", NULL},
 	{"length", (getter)Bone_getLength, (setter)Bone_setLength, 
 		"The length of this bone", NULL},
-	{NULL}
+	{NULL, NULL, NULL, NULL,NULL}
 };
 //------------------------tp_repr
 //This is the string representation of the object
diff --git a/source/blender/python/api2_2x/Bone.h b/source/blender/python/api2_2x/Bone.h
index aa095733d05be970fc4cab4ac6afc328527071f4..8c10aeb307525aa7256b73a882c052c36a7457ef 100644
--- a/source/blender/python/api2_2x/Bone.h
+++ b/source/blender/python/api2_2x/Bone.h
@@ -38,8 +38,8 @@
 #define BoneObject_Check(v) ((v)->ob_type == &Bone_Type)
 #define EditBoneObject_Check(v) ((v)->ob_type == &EditBone_Type)
 //-------------------TYPEOBJECT----------------------------------
-PyTypeObject EditBone_Type;
-PyTypeObject Bone_Type;
+extern PyTypeObject EditBone_Type;
+extern PyTypeObject Bone_Type;
 //-------------------STRUCT DEFINITION----------------------------
 
 typedef struct {
diff --git a/source/blender/python/api2_2x/Key.c b/source/blender/python/api2_2x/Key.c
index e71602ad6b41f8839c4589496c7c50c8a0b8bb1d..32d7bc26191cfdad371a56eba77a3f5a61bf971a 100644
--- a/source/blender/python/api2_2x/Key.c
+++ b/source/blender/python/api2_2x/Key.c
@@ -25,7 +25,8 @@
  *
  * This is a new part of Blender.
  *
- * Contributor(s): Pontus Lidman, Johnny Matthews, Ken Hughes
+ * Contributor(s): Pontus Lidman, Johnny Matthews, Ken Hughes,
+ *   Michael Reimpell
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
  */
@@ -36,6 +37,7 @@
 #include <BKE_global.h>
 #include <BKE_main.h>
 #include <BKE_curve.h>
+#include "BIF_space.h"
 
 #include "Ipocurve.h"
 #include "Key.h"
@@ -62,10 +64,12 @@ static void KeyBlock_dealloc( PyObject * self );
 static PyObject *Key_repr( BPy_Key * self );
 
 static PyObject *Key_getBlocks( PyObject * self );
-static PyObject *Key_getType( PyObject * self );
+static PyObject *Key_getType( BPy_Key * self );
+static PyObject *Key_getRelative( BPy_Key * self );
 static PyObject *Key_getIpo( PyObject * self );
 static int Key_setIpo( PyObject * self, PyObject * args );
 static PyObject *Key_getValue( PyObject * self );
+static int Key_setRelative( BPy_Key * self, PyObject * value );
 
 static struct PyMethodDef Key_methods[] = {
 	{ "getBlocks", (PyCFunction) Key_getBlocks, METH_NOARGS, "Get key blocks" },
@@ -74,21 +78,21 @@ static struct PyMethodDef Key_methods[] = {
 };
 
 static PyGetSetDef BPy_Key_getsetters[] = {
-		{"type",(getter)Key_getType, (setter)NULL,
-		 "Key Type",NULL},
-		{"value",(getter)Key_getValue, (setter)NULL,
-		 "Key value",NULL},
-		{"ipo",(getter)Key_getIpo, (setter)Key_setIpo,
-		 "ipo linked to key",NULL},
-		{"blocks",(getter)Key_getBlocks, (setter)NULL,
-		 "blocks linked to the key",NULL},
-		{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
-	};
-
-
+	{"type",(getter)Key_getType, (setter)NULL,
+	 "Key Type",NULL},
+	{"value",(getter)Key_getValue, (setter)NULL,
+	 "Key value",NULL},
+	{"ipo",(getter)Key_getIpo, (setter)Key_setIpo,
+	 "Ipo linked to key",NULL},
+	{"blocks",(getter)Key_getBlocks, (setter)NULL,
+	 "Blocks linked to the key",NULL},
+	{"relative",(getter)Key_getRelative, (setter)Key_setRelative,
+	 "Non-zero is key is relative",NULL},
+	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
+};
 
 static PyObject *KeyBlock_getData( PyObject * self );
-
+static PyObject *KeyBlock_getCurval( BPy_KeyBlock * self );
 static PyObject *KeyBlock_getName( BPy_KeyBlock * self );
 static PyObject *KeyBlock_getPos( BPy_KeyBlock * self );
 static PyObject *KeyBlock_getSlidermin( BPy_KeyBlock * self );
@@ -107,6 +111,8 @@ static struct PyMethodDef KeyBlock_methods[] = {
 };
 
 static PyGetSetDef BPy_KeyBlock_getsetters[] = {
+		{"curval",(getter)KeyBlock_getCurval, (setter)NULL,
+		 "Current value of the corresponding IpoCurve",NULL},
 		{"name",(getter)KeyBlock_getName, (setter)KeyBlock_setName,
 		 "Keyblock Name",NULL},
 		{"pos",(getter)KeyBlock_getPos, (setter)NULL,
@@ -362,13 +368,32 @@ static int Key_setIpo( PyObject * self, PyObject * value )
 	return 0;
 }
 
-static PyObject *Key_getType( PyObject * self )
+static PyObject *Key_getRelative( BPy_Key * self )
+{
+	if( self->key->type == KEY_RELATIVE )
+		return EXPP_incr_ret(Py_True);
+	else
+		return EXPP_incr_ret(Py_False);
+}
+
+static int Key_setRelative( BPy_Key * self, PyObject * value )
+{
+	if( PyObject_IsTrue( value ) )
+		self->key->type = KEY_RELATIVE;
+	else
+		self->key->type = KEY_NORMAL;
+	allqueue(REDRAWIPO, 0);
+	allspace(REMAKEIPO, 0);
+
+	return 0;
+}
+
+static PyObject *Key_getType( BPy_Key * self )
 {
-	BPy_Key *k = ( BPy_Key * ) self;
 	int idcode;
 	int type = -1;
 
-	idcode = GS( k->key->from->name );
+	idcode = GS( self->key->from->name );
 
 	switch( idcode ) {
 	case ID_ME:
@@ -437,55 +462,51 @@ PyObject *KeyBlock_CreatePyObject( KeyBlock * kb, Key *parentKey )
 	return ( PyObject * ) keyBlock;
 }
 
+static PyObject *KeyBlock_getCurval( BPy_KeyBlock * self ) {
+	return PyFloat_FromDouble( self->keyblock->curval );
+}
+
 static PyObject *KeyBlock_getName( BPy_KeyBlock * self ) {
-	BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;
-	PyObject *name = Py_BuildValue( "s", kb->keyblock->name);
+	PyObject *name = Py_BuildValue( "s", self->keyblock->name);
 	return name;
 }
 
 static PyObject *KeyBlock_getPos( BPy_KeyBlock * self ){
-	BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;
-	return PyFloat_FromDouble( kb->keyblock->pos );			
+	return PyFloat_FromDouble( self->keyblock->pos );			
 }
 
 static PyObject *KeyBlock_getSlidermin( BPy_KeyBlock * self ){
-	BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;
-	return PyFloat_FromDouble( kb->keyblock->slidermin );	
+	return PyFloat_FromDouble( self->keyblock->slidermin );	
 }
 
 static PyObject *KeyBlock_getSlidermax( BPy_KeyBlock * self ){
-	BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;
-	return PyFloat_FromDouble( kb->keyblock->slidermax );
+	return PyFloat_FromDouble( self->keyblock->slidermax );
 }
 
 static PyObject *KeyBlock_getVgroup( BPy_KeyBlock * self ){
-	BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;
-	PyObject *name = Py_BuildValue( "s", kb->keyblock->vgroup);
-	return name;	
+	return Py_BuildValue( "s", self->keyblock->vgroup);
 }
 
 static int KeyBlock_setName( BPy_KeyBlock * self, PyObject * args ){
 	char* text = NULL;
-    BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;	
-    
+ 
 	text = PyString_AsString ( args );
 	if( !text )
 		return EXPP_ReturnIntError( PyExc_TypeError,
 					      "expected string argument" );							
-	strncpy( kb->keyblock->name, text , 32);
+	strncpy( self->keyblock->name, text , 32);
 
 	return 0;	
 }
 
 static int KeyBlock_setVgroup( BPy_KeyBlock * self, PyObject * args  ){
 	char* text = NULL;
-    BPy_KeyBlock *kb = ( BPy_KeyBlock * ) self;	
-    
+
 	text = PyString_AsString ( args );
 	if( !text )
 		return EXPP_ReturnIntError( PyExc_TypeError,
 					      "expected string argument" );							
-	strncpy( kb->keyblock->vgroup, text , 32);
+	strncpy( self->keyblock->vgroup, text , 32);
 
 	return 0;	
 }
@@ -635,7 +656,8 @@ static PyObject *M_Key_Get( PyObject * self, PyObject * args )
 			"expected string argument (or nothing)" ) );
 
 	if ( name ) {
-		for (key_iter = G.main->key.first; key_iter; key_iter=key_iter->id.next) {
+		for (key_iter = G.main->key.first; key_iter; 
+				key_iter=key_iter->id.next) {
 			if  (strcmp ( key_iter->id.name + 2, name ) == 0 ) {
 				return Key_CreatePyObject( key_iter );
 			}
@@ -643,17 +665,16 @@ static PyObject *M_Key_Get( PyObject * self, PyObject * args )
 
 		PyOS_snprintf( error_msg, sizeof( error_msg ),
 			"Key \"%s\" not found", name );
-		return ( EXPP_ReturnPyObjError ( PyExc_NameError, error_msg ) );
+		return EXPP_ReturnPyObjError ( PyExc_NameError, error_msg );
 		
-	}
-
-	else {
+	} else {
 
 		PyObject *keylist;
 
 		keylist = PyList_New( BLI_countlist( &( G.main->key ) ) );
 
-		for ( i=0, key_iter = G.main->key.first; key_iter; key_iter=key_iter->id.next, i++ ) {
+		for ( i=0, key_iter = G.main->key.first; key_iter;
+				key_iter=key_iter->id.next, i++ ) {
 			PyList_SetItem(keylist, i, Key_CreatePyObject(key_iter));
 		}
 		return keylist;
@@ -665,32 +686,36 @@ struct PyMethodDef M_Key_methods[] = {
 	{NULL, NULL, 0, NULL}
 };
 
+static PyObject *M_Key_TypesDict( void )
+{
+	PyObject *T = PyConstant_New(  );
+
+	if( T ) {
+		BPy_constant *d = ( BPy_constant * ) T;
+
+		PyConstant_Insert( d, "MESH", PyInt_FromLong( KEY_TYPE_MESH ) );
+		PyConstant_Insert( d, "CURVE", PyInt_FromLong( KEY_TYPE_CURVE ) );
+		PyConstant_Insert( d, "LATTICE", PyInt_FromLong( KEY_TYPE_LATTICE ) );
+	}
+
+	return T;
+}
+
 PyObject *Key_Init( void )
 {
-	PyObject *submodule, *KeyTypes;
+	PyObject *submodule;
+	PyObject *Types = NULL;
 
-	if( PyType_Ready( &Key_Type ) < 0)
+	if( PyType_Ready( &Key_Type ) < 0 || PyType_Ready( &KeyBlock_Type ) < 0 )
 		return NULL;
 
-	Key_Type.ob_type = &PyType_Type;
-	PyType_Ready( &KeyBlock_Type );
-
 	submodule =
 		Py_InitModule3( "Blender.Key", M_Key_methods, "Key module" );
 
-	KeyTypes = PyConstant_New( );
-
-	PyConstant_Insert(( BPy_constant * ) KeyTypes, "MESH", PyInt_FromLong(KEY_TYPE_MESH));
-	PyConstant_Insert(( BPy_constant * ) KeyTypes, "CURVE", PyInt_FromLong(KEY_TYPE_CURVE));
-	PyConstant_Insert(( BPy_constant * ) KeyTypes, "LATTICE", PyInt_FromLong(KEY_TYPE_LATTICE));
-
-	PyModule_AddObject( submodule, "Types", KeyTypes);
+	Types = M_Key_TypesDict(  );
+	if( Types )
+		PyModule_AddObject( submodule, "Types", Types );
 
-	/*
-	PyModule_AddIntConstant( submodule, "TYPE_MESH",    KEY_TYPE_MESH );
-	PyModule_AddIntConstant( submodule, "TYPE_CURVE",   KEY_TYPE_CURVE );
-	PyModule_AddIntConstant( submodule, "TYPE_LATTICE", KEY_TYPE_LATTICE );
-	*/
 	return submodule;
 }
 
diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c
index 0bb882a046cc56215330e6aeb64df462afe28c75..91b86947a83ef0f020ee45a007f17dd123ba25f8 100644
--- a/source/blender/python/api2_2x/Mesh.c
+++ b/source/blender/python/api2_2x/Mesh.c
@@ -82,8 +82,6 @@
 #include "constant.h"
 #include "gen_utils.h"
 
-#define MESH_TOOLS			/* add access to mesh tools */
-
 /* EXPP Mesh defines */
 
 #define MESH_SMOOTHRESH               30
@@ -126,6 +124,7 @@ typedef struct SrchEdges {
 
 typedef struct SrchFaces {
 	unsigned int v[4];		/* indices for verts */
+	unsigned int index;		/* index in original param list of this edge */
 	unsigned char order;	/* order of original verts, bitpacked */
 } SrchFaces;
 
@@ -155,6 +154,22 @@ int medge_comp( const void *va, const void *vb )
 	else return (a[1] > b[1]);
 }
 
+/*
+ * compare edges by insert list indices
+ */
+
+int medge_index_comp( const void *va, const void *vb )
+{
+	const SrchEdges *a = (SrchEdges *)va;
+	const SrchEdges *b = (SrchEdges *)vb;
+
+	/* compare list indices for differences */
+
+	if (a->index < b->index) return -1;
+	else return (a->index > b->index);
+}
+
+
 /*
  * compare faces by vertex indices
  */
@@ -190,6 +205,23 @@ int mface_comp( const void *va, const void *vb )
 	return 0;
 }
 
+/*
+ * compare faces by insert list indices
+ */
+
+int mface_index_comp( const void *va, const void *vb )
+{
+	const SrchFaces *a = va;
+	const SrchFaces *b = vb;
+
+	/* compare indices, first to last, for differences */
+	if( a->index < b->index )
+		return -1;	
+	if( a->index > b->index )
+		return 1;
+	return 0;
+}
+
 /*
  * compare edges by vertex indices
  */
@@ -1386,7 +1418,7 @@ static PyObject *MVertSeq_item( BPy_MVertSeq * self, int i )
 					      "array index out of range" );
 
 	return MVert_CreatePyObject( self->mesh, i );
-};
+}
 
 /*
  * retrieve a slice of the vertex list (as a Python list)
@@ -1453,7 +1485,7 @@ static int MVertSeq_assign_item( BPy_MVertSeq * self, int i,
 	memcpy( dst, src, sizeof(MVert) );
 	// mesh_update( self->mesh );
 	return 0;
-};
+}
 
 static int MVertSeq_assign_slice( BPy_MVertSeq *self, int low, int high,
 		   PyObject *args )
@@ -1566,39 +1598,42 @@ static PyObject *MVertSeq_extend( BPy_MVertSeq * self, PyObject *args )
 	Mesh *mesh = self->mesh;
 	/* make sure we get a sequence of tuples of something */
 
-	switch( PySequence_Size ( args ) ) {
+	switch( PySequence_Size( args ) ) {
 	case 1:		/* better be a list or a tuple */
 		tmp = PyTuple_GET_ITEM( args, 0 );
 		if( !VectorObject_Check ( tmp ) ) {
 			if( !PySequence_Check ( tmp ) )
 				return EXPP_ReturnPyObjError( PyExc_TypeError,
-						"expected a sequence of tuple triplets" );
+						"expected a sequence of sequence triplets" );
 			args = tmp;
 		}
 		Py_INCREF( args );		/* so we can safely DECREF later */
 		break;
-	case 3:		/* take any three args and put into a tuple */
+	case 3:
 		tmp = PyTuple_GET_ITEM( args, 0 );
-		if( PyTuple_Check( tmp ) ) {
-			Py_INCREF( args );
-			break;
-		}
+		/* if first item is not a number, it's wrong */
+		if( !PyNumber_Check( tmp ) )
+			return EXPP_ReturnPyObjError( PyExc_TypeError,
+					"expected a sequence of sequence triplets" );
+
+		/* otherwise, put into a new tuple */
 		args = Py_BuildValue( "((OOO))", tmp,
 				PyTuple_GET_ITEM( args, 1 ), PyTuple_GET_ITEM( args, 2 ) );
 		if( !args )
 			return EXPP_ReturnPyObjError( PyExc_RuntimeError,
 					"Py_BuildValue() failed" );
 		break;
+
 	default:	/* anything else is definitely wrong */
 		return EXPP_ReturnPyObjError( PyExc_TypeError,
-				"expected a sequence of tuple triplets" );
+				"expected a sequence of sequence triplets" );
 	}
 
+	/* if no verts given, return quietly */
 	len = PySequence_Size( args );
 	if( len == 0 ) {
 		Py_DECREF ( args );
-		return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected at least one tuple" );
+		Py_RETURN_NONE;
 	}
 
 	newlen = mesh->totvert + len;
@@ -1620,18 +1655,19 @@ static PyObject *MVertSeq_extend( BPy_MVertSeq * self, PyObject *args )
 			}
 			for( j = 0; j < 3; ++j )
 				co[j] = ((VectorObject *)tmp)->vec[j];
-		} else if( PyTuple_Check( tmp ) ) {
+		} else if( PySequence_Check( tmp ) ) {
 			int ok=1;
 			PyObject *flt;
-			if( PyTuple_Size( tmp ) != 3 )
+			if( PySequence_Size( tmp ) != 3 )
 				ok = 0;
 			else	
 				for( j = 0; ok && j < 3; ++j ) {
-					flt = PyTuple_GET_ITEM( tmp, j );
+					flt = PySequence_ITEM( tmp, j );
 					if( !PyNumber_Check ( flt ) )
 						ok = 0;
 					else
 						co[j] = (float)PyFloat_AsDouble( flt );
+					Py_DECREF( flt );
 				}
 
 			if( !ok ) {
@@ -1639,9 +1675,16 @@ static PyObject *MVertSeq_extend( BPy_MVertSeq * self, PyObject *args )
 				Py_DECREF ( args );
 				Py_DECREF ( tmp );
 				return EXPP_ReturnPyObjError( PyExc_ValueError,
-					"expected tuple triplet of floats" );
+					"expected sequence triplet of floats" );
 			}
+		} else {
+			MEM_freeN( newvert );
+			Py_DECREF ( args );
+			Py_DECREF ( tmp );
+			return EXPP_ReturnPyObjError( PyExc_ValueError,
+				"expected sequence triplet of floats" );
 		}
+
 		Py_DECREF ( tmp );
 
 	/* add the coordinate to the new list */
@@ -1714,7 +1757,7 @@ static PyObject *MVertSeq_extend( BPy_MVertSeq * self, PyObject *args )
 	mesh_update( mesh );
 
 	Py_DECREF ( args );
-	return EXPP_incr_ret( Py_None );
+	Py_RETURN_NONE;
 }
 
 static PyObject *MVertSeq_delete( BPy_MVertSeq * self, PyObject *args )
@@ -1725,15 +1768,20 @@ static PyObject *MVertSeq_delete( BPy_MVertSeq * self, PyObject *args )
 	Mesh *mesh = self->mesh;
 	MFace *tmpface;
 
-	Py_INCREF( args );		/* so we can safely DECREF later */
-
-	/* accept a sequence (lists or tuples) also */
+	/*
+	 * if input tuple contains a single sequence, use it as input instead;
+	 * otherwise use the sequence as-is and check later that it contains
+	 * one or more integers or MVerts
+	 */
 	if( PySequence_Size( args ) == 1 ) {
 		PyObject *tmp = PyTuple_GET_ITEM( args, 0 );
-		if( PySequence_Check ( tmp ) ) {
-			Py_DECREF( args );		/* release previous reference */
-			args = tmp;				/* PyTuple_GET_ITEM returns new ref */
-		}
+		if( PySequence_Check( tmp ) ) 
+			args = tmp;
+	}
+
+	/* if sequence is empty, do nothing */
+	if( PySequence_Size( args ) == 0 ) {
+		Py_RETURN_NONE;
 	}
 
 	/* allocate vertex lookup table */
@@ -1747,18 +1795,15 @@ static PyObject *MVertSeq_delete( BPy_MVertSeq * self, PyObject *args )
 		if( BPy_MVert_Check( tmp ) ) {
 			if( (void *)self->mesh != ((BPy_MVert*)tmp)->data ) {
 				MEM_freeN( vert_table );
-				Py_DECREF( args );
 				Py_DECREF( tmp );
 				return EXPP_ReturnPyObjError( PyExc_ValueError,
 						"MVert belongs to a different mesh" );
 			}
 			index = ((BPy_MVert*)tmp)->index;
-		}
-		else if( PyInt_CheckExact( tmp ) )
+		} else if( PyInt_CheckExact( tmp ) ) {
 			index = PyInt_AsLong ( tmp );
-		else {
+		} else {
 			MEM_freeN( vert_table );
-			Py_DECREF( args );
 			Py_DECREF( tmp );
 			return EXPP_ReturnPyObjError( PyExc_TypeError,
 					"expected a sequence of ints or MVerts" );
@@ -1766,8 +1811,7 @@ static PyObject *MVertSeq_delete( BPy_MVertSeq * self, PyObject *args )
 		Py_DECREF( tmp );
 		if( index < 0 || index >= mesh->totvert ) {
 			MEM_freeN( vert_table );
-			Py_DECREF( args );
-			return EXPP_ReturnPyObjError( PyExc_ValueError,
+			return EXPP_ReturnPyObjError( PyExc_IndexError,
 					"array index out of range" );
 		}
 		vert_table[index] = UINT_MAX;
@@ -1802,8 +1846,7 @@ static PyObject *MVertSeq_delete( BPy_MVertSeq * self, PyObject *args )
 	/* clean up and exit */
 	MEM_freeN( vert_table );
 	mesh_update ( mesh );
-	Py_DECREF( args );
-	return EXPP_incr_ret( Py_None );
+	Py_RETURN_NONE;
 }
 
 static PyObject *MVertSeq_selected( BPy_MVertSeq * self )
@@ -2413,40 +2456,52 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 	MEdge *tmpedge;
 	Mesh *mesh = self->mesh;
 
-	/* make sure we get a sequence of tuples of something */
-
-	switch( PySequence_Size ( args ) ) {
-	case 1:		/* better be a list or a tuple */
-		args = PyTuple_GET_ITEM( args, 0 );
-		if( !PySequence_Check ( args ) )
+	/* make sure we get a tuple of sequences of something */
+	switch( PySequence_Size( args ) ) {
+	case 1:
+		/* if a sequence... */
+		tmp = PyTuple_GET_ITEM( args, 0 );
+		if( PySequence_Check( tmp ) ) {
+			/* if another sequence, use it */
+			PyObject *tmp2 = PySequence_ITEM( tmp, 0 );
+			if( PySequence_Check( tmp2 ) )
+				args = tmp;
+			Py_INCREF( args );
+			Py_DECREF( tmp2 );
+		} else
 			return EXPP_ReturnPyObjError( PyExc_TypeError,
-					"expected a sequence of tuple pairs" );
-		Py_INCREF( args );		/* so we can safely DECREF later */
+					"expected a sequence of sequence pairs" );
 		break;
 	case 2:	
 	case 3:
 	case 4:		/* two to four args may be individual verts */
 		tmp = PyTuple_GET_ITEM( args, 0 );
-		if( PyTuple_Check( tmp ) ) {/* maybe just tuples, so use args as-is */
+		/*
+		 * if first item isn't a sequence, then assume it's a bunch of MVerts
+		 * and wrap inside a tuple
+		 */
+		if( !PySequence_Check( tmp ) ) {
+			args = Py_BuildValue( "(O)", args );
+			if( !args )
+				return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+						"Py_BuildValue() failed" );
+		/*
+		 * otherwise, assume it already a bunch of sequences so use as-is
+		 */
+		} else { 
 			Py_INCREF( args );		/* so we can safely DECREF later */
-			break;
 		}
-		args = Py_BuildValue( "(O)", args );
-		if( !args )
-			return EXPP_ReturnPyObjError( PyExc_RuntimeError,
-					"Py_BuildValue() failed" );
 		break;
 	default:	/* anything else is definitely wrong */
 		return EXPP_ReturnPyObjError( PyExc_TypeError,
-				"expected a sequence of tuple pairs" );
+				"expected a sequence of sequence pairs" );
 	}
 
 	/* make sure there is something to add */
 	len = PySequence_Size( args );
 	if( len == 0 ) {
-		Py_DECREF( args );
-		return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected at least one tuple" );
+		Py_DECREF ( args );
+		Py_RETURN_NONE;
 	}
 
 	/* verify the param list and get a total count of number of edges */
@@ -2455,21 +2510,21 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 		tmp = PySequence_GetItem( args, i );
 
 		/* not a tuple of MVerts... error */
-		if( !PyTuple_Check( tmp ) ||
+		if( !PySequence_Check( tmp ) ||
 				EXPP_check_sequence_consistency( tmp, &MVert_Type ) != 1 ) {
 			Py_DECREF( tmp );
 			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected sequence of MVert tuples" );
+				"expected sequence of MVert sequences" );
 		}
 
 		/* not the right number of MVerts... error */
-		nverts = PyTuple_Size( tmp );
+		nverts = PySequence_Size( tmp );
 		if( nverts < 2 || nverts > 4 ) {
 			Py_DECREF( tmp );
 			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected 2 to 4 MVerts per tuple" );
+				"expected 2 to 4 MVerts per sequence" );
 		}
 		Py_DECREF( tmp );
 
@@ -2486,14 +2541,15 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 	/* scan the input list and build the new edge pair list */
 	len = PySequence_Size( args );
 	tmppair = newpair;
+	new_edge_count = 0;
 	for( i = 0; i < len; ++i ) {
 		int edge_count;
 		tmp = PySequence_GetItem( args, i );
-		nverts = PyTuple_Size( tmp );
+		nverts = PySequence_Size( tmp );
 
-		/* get copies of vertices */
+		/* get new references for the vertices */
 		for(j = 0; j < nverts; ++j )
-			e[j] = (BPy_MVert *)PyTuple_GET_ITEM( tmp, j );
+			e[j] = (BPy_MVert *)PySequence_GetItem( tmp, j );
 		Py_DECREF( tmp );
 
 		if( nverts == 2 )
@@ -2518,12 +2574,20 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 				tmppair->swap = 1;
 			} else {
 				MEM_freeN( newpair );
+				for(j = 0; j < nverts; ++j )
+					Py_DECREF( e[j] );
 				Py_DECREF( args );
 				return EXPP_ReturnPyObjError( PyExc_ValueError,
 						"tuple contains duplicate vertices" );
 			}
+			tmppair->index = new_edge_count;
+			++new_edge_count;
 			tmppair++;
 		}
+
+		/* free the new references */
+		for( j = 0; j < nverts; ++j )
+			Py_DECREF( e[j] );
 	}
 
 	/* sort the new edge pairs */
@@ -2605,6 +2669,9 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 		}
 		mesh->medge = tmpedge;		/* point to the new edge list */
 
+	/* resort edges into original order */
+		qsort( newpair, new_edge_count, sizeof(SrchEdges), medge_index_comp );
+
 	/* point to the first edge we're going to add */
 		tmpedge = &mesh->medge[mesh->totedge];
 		tmppair = newpair;
@@ -2632,7 +2699,7 @@ static PyObject *MEdgeSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 	mesh_update( mesh );
 	MEM_freeN( newpair );
 	Py_DECREF ( args );
-	return EXPP_incr_ret( Py_None );
+	Py_RETURN_NONE;
 }
 
 static PyObject *MEdgeSeq_delete( BPy_MEdgeSeq * self, PyObject *args )
@@ -2644,19 +2711,23 @@ static PyObject *MEdgeSeq_delete( BPy_MEdgeSeq * self, PyObject *args )
 	int i, len;
 	int face_count, edge_count, vert_count;
 
-	Py_INCREF( args );		/* so we can safely DECREF later */
-
-	/* accept a sequence (lists or tuples) also */
+	/*
+	 * if input tuple contains a single sequence, use it as input instead;
+	 * otherwise use the sequence as-is and check later that it contains
+	 * one or more integers or MVerts
+	 */
 	if( PySequence_Size( args ) == 1 ) {
 		PyObject *tmp = PyTuple_GET_ITEM( args, 0 );
-		if( PySequence_Check ( tmp ) ) {
-			Py_DECREF( args );		/* release previous reference */
-			args = tmp;				/* PyTuple_GET_ITEM returns new ref */
-		}
+		if( PySequence_Check( tmp ) ) 
+			args = tmp;
 	}
 
-	/* see how many args we need to parse */
+	/* if sequence is empty, do nothing */
 	len = PySequence_Size( args );
+	if( len == 0 ) {
+		Py_RETURN_NONE;
+	}
+
 	edge_table = (unsigned int *)MEM_callocN( len*sizeof( unsigned int ),
 			"edge_table" );
 
@@ -2670,7 +2741,6 @@ static PyObject *MEdgeSeq_delete( BPy_MEdgeSeq * self, PyObject *args )
 		else {
 			MEM_freeN( edge_table );
 			Py_DECREF( tmp );
-			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_TypeError,
 					"expected a sequence of ints or MEdges" );
 		}
@@ -2679,7 +2749,6 @@ static PyObject *MEdgeSeq_delete( BPy_MEdgeSeq * self, PyObject *args )
 		/* if index out-of-range, throw exception */
 		if( edge_table[i] >= (unsigned int)mesh->totedge ) {
 			MEM_freeN( edge_table );
-			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_ValueError,
 					"array index out of range" );
 		}
@@ -2773,9 +2842,8 @@ static PyObject *MEdgeSeq_delete( BPy_MEdgeSeq * self, PyObject *args )
 	MEM_freeN( del_table );
 	MEM_freeN( vert_table );
 	MEM_freeN( edge_table );
-	Py_DECREF( args );
 	mesh_update ( mesh );
-	return EXPP_incr_ret( Py_None );
+	Py_RETURN_NONE;
 }
 
 static PyObject *MEdgeSeq_selected( BPy_MEdgeSeq * self )
@@ -3388,21 +3456,22 @@ static int MFace_setUV( BPy_MFace * self, PyObject * value )
 	if( !MFace_get_pointer( self ) )
 		return -1;
 
-	if( !PyTuple_Check( value ) ||
+	if( !PySequence_Check( value ) ||
 			EXPP_check_sequence_consistency( value, &vector_Type ) != 1 )
 		return EXPP_ReturnIntError( PyExc_TypeError,
-					    "expected tuple of vectors" );
+					    "expected sequence of vectors" );
 
 	length = self->mesh->mface[self->index].v4 ? 4 : 3;
-	if( length != PyTuple_Size( value ) )
+	if( length != PySequence_Size( value ) )
 		return EXPP_ReturnIntError( PyExc_TypeError,
-					    "size of vertex and UV lists differ" );
+					    "size of vertex and UV sequences differ" );
 
 	face = &self->mesh->tface[self->index];
 	for( i=0; i<length; ++i ) {
-		VectorObject *vector = (VectorObject *)PyTuple_GET_ITEM( value, i );
+		VectorObject *vector = (VectorObject *)PySequence_ITEM( value, i );
 		face->uv[i][0] = vector->vec[0];
 		face->uv[i][1] = vector->vec[1];
+		Py_DECREF( vector );
 	}
 	return 0;
 }
@@ -3531,6 +3600,54 @@ static PyObject *MFace_getCol( BPy_MFace * self )
 	return attr;
 }
 
+/*
+ * set a face's vertex colors
+ */
+
+static int MFace_setCol( BPy_MFace * self, PyObject *value )
+{
+	int length, i;
+	MCol * mcol;
+
+	/* if there's no mesh color vectors or texture faces, nothing to do */
+
+	if( !self->mesh->mcol && !self->mesh->tface )
+		return EXPP_ReturnIntError( PyExc_ValueError,
+				"face has no vertex colors" );
+
+	if( !MFace_get_pointer( self ) )
+		return -1;
+
+	if( self->mesh->tface )
+		mcol = (MCol *) self->mesh->tface[self->index].col;
+	else
+		mcol = &self->mesh->mcol[self->index*4];
+
+	length = self->mesh->mface[self->index].v4 ? 4 : 3;
+
+	if( !PyList_Check( value ) && !PyTuple_Check( value ) )
+		return EXPP_ReturnIntError( PyExc_TypeError,
+				"expected a sequence of MCols" );
+
+	if( EXPP_check_sequence_consistency( value, &MCol_Type ) != 1 )
+		return EXPP_ReturnIntError( PyExc_TypeError,
+				"expected a sequence of MCols" );
+
+	if( PySequence_Size( value ) != length )
+		return EXPP_ReturnIntError( PyExc_ValueError,
+				"incorrect number of colors for this face" );
+
+	for( i=0; i<length; ++i ) {
+		BPy_MCol *obj = (BPy_MCol *)PySequence_ITEM( value, i );
+		mcol[i].r = obj->color->r;
+		mcol[i].g = obj->color->g;
+		mcol[i].b = obj->color->b;
+		mcol[i].a = obj->color->a;
+		Py_DECREF( obj );
+	}
+	return 0;
+}
+
 /************************************************************************
  *
  * Python MFace_Type attributes get/set structure
@@ -3575,7 +3692,7 @@ static PyGetSetDef BPy_MFace_getseters[] = {
 	/* attributes for texture faces (mostly, I think) */
 
     {"col",
-     (getter)MFace_getCol, (setter)NULL,
+     (getter)MFace_getCol, (setter)MFace_setCol,
      "face's vertex colors",
      NULL},
     {"flag",
@@ -3888,43 +4005,56 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 	tmp = MEdgeSeq_extend( self, args );
 	if( !tmp )
 		return NULL;
-	
+
 	Py_DECREF( tmp );
 
-	/* make sure we get a sequence of tuples of something */
+	/* make sure we get a tuple of sequences of something */
 
-	switch( PySequence_Size ( args ) ) {
-	case 1:		/* better be a list or a tuple */
-		args = PyTuple_GET_ITEM( args, 0 );
-		if( !PySequence_Check ( args ) )
+	switch( PySequence_Size( args ) ) {
+	case 1:		/* better be a sequence or a tuple */
+		/* if a sequence... */
+		tmp = PyTuple_GET_ITEM( args, 0 );
+		if( PySequence_Check( tmp ) ) {
+			/* if another sequence, use it */
+			PyObject *tmp2 = PySequence_ITEM( tmp, 0 );
+			if( PySequence_Check( tmp2 ) )
+				args = tmp;
+			Py_INCREF( args );
+			Py_DECREF( tmp2 );
+		} else
 			return EXPP_ReturnPyObjError( PyExc_TypeError,
-					"expected a sequence of tuple pairs" );
-		Py_INCREF( args );		/* so we can safely DECREF later */
+					"expected a sequence of sequence pairs" );
 		break;
 	case 2:	
 	case 3:
 	case 4:		/* two to four args may be individual verts */
 		tmp = PyTuple_GET_ITEM( args, 0 );
-		if( PyTuple_Check( tmp ) ) {/* maybe just tuples, so use args as-is */
+		/*
+		 * if first item isn't a sequence, then assume it's a bunch of MVerts
+		 * and wrap inside a tuple
+		 */
+		if( !PySequence_Check( tmp ) ) {
+			args = Py_BuildValue( "(O)", args );
+			if( !args )
+				return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+						"Py_BuildValue() failed" );
+		/*
+		 * otherwise, assume it already a bunch of sequences so use as-is
+		 */
+		} else { 
 			Py_INCREF( args );		/* so we can safely DECREF later */
-			break;
 		}
-		args = Py_BuildValue( "(O)", args );
-		if( !args )
-			return EXPP_ReturnPyObjError( PyExc_RuntimeError,
-					"Py_BuildValue() failed" );
 		break;
 	default:	/* anything else is definitely wrong */
 		return EXPP_ReturnPyObjError( PyExc_TypeError,
-				"expected a sequence of tuple pairs" );
+				"expected a sequence of sequence pairs" );
 	}
 
-	/* make sure there is something to add */
+	/* if nothing to add, just exit */
 	len = PySequence_Size( args );
 	if( len == 0 ) {
 		Py_DECREF( args );
-		return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected at least one tuple" );
+		Py_RETURN_NONE;
 	}
 
 	/* verify the param list and get a total count of number of edges */
@@ -3933,19 +4063,19 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 		tmp = PySequence_GetItem( args, i );
 
 		/* not a tuple of MVerts... error */
-		if( !PyTuple_Check( tmp ) ||
+		if( !PySequence_Check( tmp ) ||
 				EXPP_check_sequence_consistency( tmp, &MVert_Type ) != 1 ) {
 			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected sequence of MVert tuples" );
+				"expected sequence of MVert sequences" );
 		}
 
 		/* not the right number of MVerts... error */
-		nverts = PyTuple_Size( tmp );
+		nverts = PySequence_Size( tmp );
 		if( nverts < 2 || nverts > 4 ) {
 			Py_DECREF( args );
 			return EXPP_ReturnPyObjError( PyExc_ValueError,
-				"expected 2 to 4 MVerts per tuple" );
+				"expected 2 to 4 MVerts per sequence" );
 		}
 
 		if( nverts != 2 )		/* new faces cannot have only 2 verts */
@@ -3965,7 +4095,7 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 		unsigned int vert[4]={0,0,0,0};
 		unsigned char order[4]={0,1,2,3};
 		tmp = PySequence_GetItem( args, i );
-		nverts = PyTuple_Size( tmp );
+		nverts = PySequence_Size( tmp );
 
 		if( nverts == 2 )	/* again, ignore 2-vert tuples */
 			break;
@@ -3975,15 +4105,19 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 		 * vertices are not index 0
 		 */
 
-		e = (BPy_MVert *)PyTuple_GET_ITEM( tmp, 0 );
+		e = (BPy_MVert *)PySequence_ITEM( tmp, 0 );
 		tmpface.v1 = e->index;
-		e = (BPy_MVert *)PyTuple_GET_ITEM( tmp, 1 );
+		Py_DECREF( e );
+		e = (BPy_MVert *)PySequence_ITEM( tmp, 1 );
 		tmpface.v2 = e->index;
-		e = (BPy_MVert *)PyTuple_GET_ITEM( tmp, 2 );
+		Py_DECREF( e );
+		e = (BPy_MVert *)PySequence_ITEM( tmp, 2 );
 		tmpface.v3 = e->index;
+		Py_DECREF( e );
 		if( nverts == 4 ) {
-			e = (BPy_MVert *)PyTuple_GET_ITEM( tmp, 3 );
+			e = (BPy_MVert *)PySequence_ITEM( tmp, 3 );
 			tmpface.v4 = e->index;
+			Py_DECREF( e );
 		}
 		Py_DECREF( tmp );
 
@@ -4016,6 +4150,7 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 			}
 			tmppair->v[j] = vert[j];
 		}
+		tmppair->index = i;
 
 		/* pack order into a byte */
 		tmppair->order = order[0]|(order[1]<<2)|(order[2]<<4)|(order[3]<<6);
@@ -4111,6 +4246,9 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 			mesh->tface = tmptface;
 		}
 
+	/* sort the faces back into their original input list order */
+		qsort( newpair, new_face_count, sizeof(SrchFaces), mface_index_comp );
+
 	/* allocate new face list */
 		tmpface = MEM_callocN(totface*sizeof(MFace), "Mesh_addFaces");
 
@@ -4157,7 +4295,7 @@ static PyObject *MFaceSeq_extend( BPy_MEdgeSeq * self, PyObject *args )
 	mesh_update( mesh );
 	Py_DECREF ( args );
 	MEM_freeN( newpair );
-	return EXPP_incr_ret( Py_None );
+	Py_RETURN_NONE;
 }
 
 struct fourEdges
@@ -4196,7 +4334,7 @@ static PyObject *MFaceSeq_delete( BPy_MFaceSeq * self, PyObject *args )
 		if( BPy_MFace_Check( tmp ) )
 			face_table[i] = ((BPy_MFace *)tmp)->index;
 		else if( PyInt_CheckExact( tmp ) )
-			face_table[i] = PyInt_AsLong ( tmp );
+			face_table[i] = PyInt_AsLong( tmp );
 		else {
 			MEM_freeN( face_table );
 			Py_DECREF( tmp );
@@ -4276,7 +4414,7 @@ static PyObject *MFaceSeq_delete( BPy_MFaceSeq * self, PyObject *args )
 			verts[0] = tmpface->v1;
 			verts[1] = tmpface->v2;
 			verts[2] = tmpface->v3;
-			if(len == 4)
+			if( len == 4 )
 				verts[3] = tmpface->v4;
 			for( j = 0; j < len; ++j ) {
 				k = (j+1) % len;
@@ -5373,7 +5511,53 @@ static PyObject *Mesh_getVertGroupNames( BPy_Mesh * self )
 	return list;
 }
 
-#ifdef MESH_TOOLS
+static PyObject *Mesh_getVertexInfluences( BPy_Mesh * self, PyObject * args )
+{
+	int index;
+	PyObject *influence_list = NULL;
+	Object *object = self->object;
+	Mesh *me = self->mesh;
+
+	/* Get a reference to the mesh object wrapped in here. */
+	if( !object )
+		return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+				"This mesh must be linked to an object" ); 
+
+	/* Parse the parameters: only on integer (vertex index) */
+	if( !PyArg_ParseTuple( args, "i", &index ) )
+		return EXPP_ReturnPyObjError( PyExc_TypeError,
+				"expected int argument (index of the vertex)" );
+
+	/* check for valid index */
+	if( index < 0 || index >= me->totvert )
+		return EXPP_ReturnPyObjError( PyExc_IndexError,
+				"vertex index out of range" );
+
+	influence_list = PyList_New( 0 );
+
+	/* Proceed only if we have vertex deformation information */
+	if( me->dvert ) {
+		int i;
+		MDeformWeight *sweight = NULL;
+
+		/* Number of bones influencing the vertex */
+		int totinfluences = me->dvert[index].totweight;
+
+		/* Get the reference of the first weight structure */
+		sweight = me->dvert[index].dw;
+
+		/* Build the list only with weights and names of the influent bones */
+		for( i = 0; i < totinfluences; i++, sweight++ ) {
+			bDeformGroup *defgroup = BLI_findlink( &object->defbase,
+					sweight->def_nr );
+			if( defgroup )
+				PyList_Append( influence_list, Py_BuildValue( "[sf]",
+						defgroup->name, sweight->weight ) ); 
+		}
+	}
+
+	return influence_list;
+}
 
 static PyObject *Mesh_Tools( BPy_Mesh * self, int type, void **args )
 {
@@ -5575,8 +5759,6 @@ static PyObject *Mesh_fill( BPy_Mesh * self )
 	return Mesh_Tools( self, MESH_TOOL_FILL, NULL );
 }
 
-#endif
-
 static struct PyMethodDef BPy_Mesh_methods[] = {
 	{"calcNormals", (PyCFunction)Mesh_calcNormals, METH_NOARGS,
 		"all recalculate vertex normals"},
@@ -5604,10 +5786,10 @@ static struct PyMethodDef BPy_Mesh_methods[] = {
 		"Rename an existing vertex group"},
 	{"getVertGroupNames", (PyCFunction)Mesh_getVertGroupNames, METH_NOARGS,
 		"Get names of vertex groups"},
+	{"getVertexInfluences", (PyCFunction)Mesh_getVertexInfluences, METH_VARARGS,
+		"Get list of the influences of bones for a given mesh vertex"},
 
-
-
-#ifdef MESH_TOOLS
+	/* Mesh tools */
 	{"smooth", (PyCFunction)Mesh_smooth, METH_NOARGS,
 		"Flattens angle of selected faces (experimental)"},
 	{"flipNormals", (PyCFunction)Mesh_flipNormals, METH_NOARGS,
@@ -5626,7 +5808,6 @@ static struct PyMethodDef BPy_Mesh_methods[] = {
 		"Removes duplicates from selected vertices (experimental)"},
 	{"recalcNormals", (PyCFunction)Mesh_recalcNormals, METH_VARARGS,
 		"Recalculates inside or outside normals (experimental)"},
-#endif
 	{NULL, NULL, 0, NULL}
 };
 
@@ -5906,8 +6087,12 @@ static int Mesh_setFlag( BPy_Mesh * self, PyObject *value, void *type )
 				MEM_freeN( mesh->tface );
 				mesh->tface = NULL;
 			}
-		} else if( !mesh->tface )
+		} else if( !mesh->tface ) {
+			if( !mesh->totface )
+				return EXPP_ReturnIntError( PyExc_RuntimeError,
+					"mesh has no faces" );
 			make_tfaces( mesh );
+		}
 		return 0;
 	case MESH_HASMCOL:
 		if( !param ) {
@@ -6098,8 +6283,6 @@ static PyGetSetDef BPy_Mesh_getseters[] = {
 	 (getter)Mesh_getMode, (setter)Mesh_setMode,
 	 "The mesh's mode bitfield",
 	 NULL},
-
-
 	{"faceUV",
 	 (getter)Mesh_getFlag, (setter)Mesh_setFlag,
 	 "UV-mapped textured faces enabled",
@@ -6124,11 +6307,6 @@ static PyGetSetDef BPy_Mesh_getseters[] = {
 	{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };
 
-/*****************************************************************************/
-/* Python Mesh_Type callback function prototypes:                           */
-/*****************************************************************************/
-static void Mesh_dealloc( BPy_Mesh * object );
-
 /*****************************************************************************/
 /* Python Mesh_Type structure definition:                                   */
 /*****************************************************************************/
@@ -6329,6 +6507,28 @@ static PyObject *M_Mesh_MVert( PyObject * self, PyObject * args )
 	return PVert_CreatePyObject( &vert );
 }
 
+static PyObject *M_Mesh_Modes( PyObject * self, PyObject * args )
+{
+	int modes = 0;
+
+	if( !G.scene ) {
+		Py_RETURN_NONE;
+	}
+
+	if( !PyArg_ParseTuple( args, "|i", &modes ) )
+		return EXPP_ReturnPyObjError( PyExc_TypeError,
+					      "expected optional int as argument" );
+
+	if( modes > ( SCE_SELECT_VERTEX | SCE_SELECT_EDGE | SCE_SELECT_FACE ) )
+		return EXPP_ReturnPyObjError( PyExc_ValueError,
+					      "value out of range" );
+
+	if( modes > 0 )
+		G.scene->selectmode = modes;
+	
+	return PyInt_FromLong( G.scene->selectmode );
+}
+
 static struct PyMethodDef M_Mesh_methods[] = {
 	{"New", (PyCFunction)M_Mesh_New, METH_VARARGS,
 		"Create a new mesh"},
@@ -6336,10 +6536,12 @@ static struct PyMethodDef M_Mesh_methods[] = {
 		"Get a mesh by name"},
 	{"MVert", (PyCFunction)M_Mesh_MVert, METH_VARARGS,
 		"Create a new MVert"},
+	{"Mode", (PyCFunction)M_Mesh_Modes, METH_VARARGS,
+		"Get/set edit selection mode(s)"},
 	{NULL, NULL, 0, NULL},
 };
 
-static PyObject *M_Mesh_Modes( void )
+static PyObject *M_Mesh_ModesDict( void )
 {
 	PyObject *Modes = PyConstant_New(  );
 
@@ -6444,18 +6646,32 @@ static PyObject *M_Mesh_VertAssignDict( void )
 	return Vert;
 }
 
+
+static PyObject *M_Mesh_SelectModeDict( void )
+{
+	PyObject *Mode = PyConstant_New(  );
+	if( Mode ) {
+		BPy_constant *d = ( BPy_constant * ) Mode;
+		PyConstant_Insert(d, "VERTEX", PyInt_FromLong(SCE_SELECT_VERTEX));
+		PyConstant_Insert(d, "EDGE", PyInt_FromLong(SCE_SELECT_EDGE));
+		PyConstant_Insert(d, "FACE", PyInt_FromLong(SCE_SELECT_FACE));
+	}
+	return Mode;
+}
+
 static char M_Mesh_doc[] = "The Blender.Mesh submodule";
 
 PyObject *Mesh_Init( void )
 {
 	PyObject *submodule;
 
-	PyObject *Modes = M_Mesh_Modes(  );
-	PyObject *FaceFlags = M_Mesh_FaceFlagsDict(  );
-	PyObject *FaceModes = M_Mesh_FaceModesDict(  );
-	PyObject *FaceTranspModes = M_Mesh_FaceTranspModesDict(  );
+	PyObject *Modes = M_Mesh_ModesDict( );
+	PyObject *FaceFlags = M_Mesh_FaceFlagsDict( );
+	PyObject *FaceModes = M_Mesh_FaceModesDict( );
+	PyObject *FaceTranspModes = M_Mesh_FaceTranspModesDict( );
 	PyObject *EdgeFlags = M_Mesh_EdgeFlagsDict(  );
-	PyObject *AssignModes = M_Mesh_VertAssignDict(  );
+	PyObject *AssignModes = M_Mesh_VertAssignDict( );
+	PyObject *SelectModes = M_Mesh_SelectModeDict( );
 
 	if( PyType_Ready( &MCol_Type ) < 0 )
 		return NULL;
@@ -6491,6 +6707,8 @@ PyObject *Mesh_Init( void )
 		PyModule_AddObject( submodule, "EdgeFlags", EdgeFlags );
 	if( AssignModes )
 		PyModule_AddObject( submodule, "AssignModes", AssignModes );
+	if( SelectModes )
+		PyModule_AddObject( submodule, "SelectModes", SelectModes );
 
 
 	return submodule;
diff --git a/source/blender/python/api2_2x/NLA.c b/source/blender/python/api2_2x/NLA.c
index c1ed37bfe43b798db3bac340ee4121f8eeecbe11..dd891472155e1a228f7611aa05f15360b1f7898a 100644
--- a/source/blender/python/api2_2x/NLA.c
+++ b/source/blender/python/api2_2x/NLA.c
@@ -471,11 +471,15 @@ PyObject *Action_CreatePyObject( struct bAction * act )
 {
 	BPy_Action *blen_action;
 
+	if(!act)
+		return EXPP_incr_ret(Py_None);
+
 	blen_action =
 		( BPy_Action * ) PyObject_NEW( BPy_Action, &Action_Type );
 
-	if( blen_action == NULL ) {
-		return ( NULL );
+	if( !blen_action) {
+		return ( EXPP_ReturnPyObjError
+			 ( PyExc_RuntimeError, "failure to create object!" ) );
 	}
 	blen_action->action = act;
 	return ( ( PyObject * ) blen_action );
diff --git a/source/blender/python/api2_2x/NLA.h b/source/blender/python/api2_2x/NLA.h
index 11b44f2401b2ccc0ad833ce8bc085c1991beedcb..07632124bba6154124acb8ec22667a1b26b7aec4 100644
--- a/source/blender/python/api2_2x/NLA.h
+++ b/source/blender/python/api2_2x/NLA.h
@@ -39,6 +39,8 @@
 /** NLA module initialization function. */
 PyObject *NLA_Init( void );
 
+extern PyTypeObject Action_Type;
+
 /** Python BPy_NLA structure definition. */
 typedef struct {
 	PyObject_HEAD 
diff --git a/source/blender/python/api2_2x/NMesh.c b/source/blender/python/api2_2x/NMesh.c
index f285557d5eea9f00d02cfd45fd4531a28297c5b7..293b9a2f3f49a4f0f5fb14b2b9efcf56b3ab15ce 100644
--- a/source/blender/python/api2_2x/NMesh.c
+++ b/source/blender/python/api2_2x/NMesh.c
@@ -1466,71 +1466,55 @@ static PyObject *NMesh_update( PyObject *self, PyObject *a, PyObject *kwd )
  * influences that this vertex receives.
  * @author Jordi Rovira i Bonet
  */
+
 static PyObject *NMesh_getVertexInfluences( PyObject * self, PyObject * args )
 {
 	int index;
 	PyObject *influence_list = NULL;
-
-	/* Get a reference to the mesh object wrapped in here. */
+	Object *object = ( ( BPy_NMesh * ) self )->object;
 	Mesh *me = ( ( BPy_NMesh * ) self )->mesh;
 
+	/* Get a reference to the mesh object wrapped in here. */
 	if( !me )
 		return EXPP_ReturnPyObjError( PyExc_RuntimeError,
-					      "unlinked nmesh: call its .update() method first" );
+				"unlinked nmesh: call its .update() method first" );
+
+	if( !object )
+		return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+				"This mesh must be linked to an object" ); 
 
 	/* Parse the parameters: only on integer (vertex index) */
 	if( !PyArg_ParseTuple( args, "i", &index ) )
 		return EXPP_ReturnPyObjError( PyExc_TypeError,
-					      "expected int argument (index of the vertex)" );
+				"expected int argument (index of the vertex)" );
+
+	/* check for valid index */
+	if( index < 0 || index >= me->totvert )
+		return EXPP_ReturnPyObjError( PyExc_IndexError,
+				"vertex index out of range" );
+
+	influence_list = PyList_New( 0 );
 
-	/* Proceed only if we have vertex deformation information and index is valid */
+	/* Proceed only if we have vertex deformation information */
 	if( me->dvert ) {
-		if( ( index >= 0 ) && ( index < me->totvert ) ) {
-
-			int i;
-			MDeformWeight *sweight = NULL;
-
-			/* Number of bones influencing the vertex */
-			int totinfluences = me->dvert[index].totweight;
-
-			/* Build the list only with weights and names of the influent bones */
-			/*influence_list = PyList_New(totinfluences); */
-			influence_list = PyList_New( 0 );
-
-			/* Get the reference of the first weight structure */
-			sweight = me->dvert[index].dw;
-
-			for( i = 0; i < totinfluences; i++ ) {
-				/*Add the weight and the name of the bone, which is used to identify it */
-
-					/* Disabled this code, it couldn't be correct!
-					 * sweight->data was being set to a posechannel not a bone
-					 * for one thing, and it is not always set for another.
-					 * The only thing safe here is to return the defgroup number. -zr
-					 */
-//				if( sweight->data )
-					/* valid bone: return its name */
-					/*  PyList_SetItem(influence_list, i,
-					   Py_BuildValue("[sf]", sweight->data->name, sweight->weight));
-					   else // NULL bone: return Py_None instead
-					   PyList_SetItem(influence_list, i,
-					   Py_BuildValue("[Of]", Py_None, sweight->weight)); */
-//					PyList_Append( influence_list,
-//						       Py_BuildValue( "[sf]",
-//								      sweight->
-//								      data->
-//								      name,
-//								      sweight->
-//								      weight ) );
-
-				/* Next weight */
-				sweight++;
-			}
-		} else		//influence_list = PyList_New(0);
-			return EXPP_ReturnPyObjError( PyExc_IndexError,
-						      "vertex index out of range" );
-	} else
-		influence_list = PyList_New( 0 );
+		int i;
+		MDeformWeight *sweight = NULL;
+
+		/* Number of bones influencing the vertex */
+		int totinfluences = me->dvert[index].totweight;
+
+		/* Get the reference of the first weight structure */
+		sweight = me->dvert[index].dw;
+
+		/* Build the list only with weights and names of the influent bones */
+		for( i = 0; i < totinfluences; i++, sweight++ ) {
+			bDeformGroup *defgroup = (bDeformGroup *) BLI_findlink( &object->defbase,
+					sweight->def_nr );
+			if( defgroup )
+				PyList_Append( influence_list, Py_BuildValue( "[sf]",
+						defgroup->name, sweight->weight ) ); 
+		}
+	}
 
 	return influence_list;
 }
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
index 77179aad819b896e3b8ec46c21b3840ec6d2d431..89ad6f365767c05b162353f8c03ad273f55d831f 100644
--- a/source/blender/python/api2_2x/Object.c
+++ b/source/blender/python/api2_2x/Object.c
@@ -100,7 +100,9 @@ struct rctf;
 #include "NLA.h"
 #include "logic.h"
 #include "Effect.h"
+#include "Pose.h"
 #include "gen_utils.h"
+#include "BIF_editkey.h"
 
 /* Defines for insertIpoKey */
 
@@ -291,6 +293,7 @@ static PyObject *Object_getSBUseEdges( BPy_Object * self );
 static PyObject *Object_setSBUseEdges( BPy_Object * self, PyObject * args );
 static PyObject *Object_getSBStiffQuads( BPy_Object * self );
 static PyObject *Object_setSBStiffQuads( BPy_Object * self, PyObject * args );
+static PyObject *Object_insertShapeKey(BPy_Object * self);
 /*****************************************************************************/
 /* Python BPy_Object methods table:					   */
 /*****************************************************************************/
@@ -322,7 +325,7 @@ If 'name_only' is nonzero or True, only the name of the datablock is returned"},
 	{"getAction", ( PyCFunction ) Object_getAction, METH_NOARGS,
 	 "Returns the active action for this object"},
 	{"getPose", ( PyCFunction ) Object_getPose, METH_NOARGS,
-	 "Returns the pose for this object"},
+	"() - returns the pose from an object if it exists, else None"},
 	{"isSelected", ( PyCFunction ) Object_isSelected, METH_NOARGS,
 	 "Return a 1 or 0 depending on whether the object is selected"},
 	{"getEuler", ( PyCFunction ) Object_getEuler, METH_NOARGS,
@@ -585,7 +588,8 @@ works only if self and the object specified are of the same type."},
 	 "([s1<,s2,s3...>]) - Delete specified scriptlinks from this object."},
 	{"setDupliVerts", ( PyCFunction ) Object_setDupliVerts,
 	 METH_VARARGS, "() - set or reset duplicate child objects on all vertices"},
-	
+	 {"insertShapeKey", ( PyCFunction ) Object_insertShapeKey,
+	 METH_NOARGS, "() - Insert a Shape Key in the current object"},
 	{NULL, NULL, 0, NULL}
 };
 
@@ -750,9 +754,13 @@ PyObject *M_Object_Get( PyObject * self, PyObject * args )
 		object = GetObjectByName( name );
 
 			/* No object exists with the name specified in the argument name. */
-		if( !object )
-			return EXPP_ReturnPyObjError( PyExc_AttributeError,
-							"Unknown object specified." );
+		if( !object ){
+			char buffer[128];
+			PyOS_snprintf( buffer, sizeof(buffer),
+						   "object \"%s\" not found", name);
+			return EXPP_ReturnPyObjError( PyExc_ValueError,
+										  buffer );
+		}
 
 		return Object_CreatePyObject( object );
 	} else {
@@ -883,7 +891,7 @@ static PyObject *M_Object_Duplicate( PyObject * self, PyObject * args, PyObject
 /*****************************************************************************/
 PyObject *Object_Init( void )
 {
-	PyObject *module;
+	PyObject *module, *dict;
 
 	Object_Type.ob_type = &PyType_Type;
 
@@ -908,6 +916,11 @@ PyObject *Object_Init( void )
 	PyModule_AddIntConstant( module, "MAGNET",PFIELD_MAGNET );
 	PyModule_AddIntConstant( module, "WIND",PFIELD_WIND );
 
+		//Add SUBMODULES to the module
+	dict = PyModule_GetDict( module ); //borrowed
+	PyDict_SetItemString(dict, "Pose", Pose_Init()); //creates a *new* module
+	//PyDict_SetItemString(dict, "Constraint", Constraint_Init()); //creates a *new* module
+
 	return ( module );
 }
 
@@ -1178,6 +1191,7 @@ static PyObject *Object_getAction( BPy_Object * self )
 	}
 }
 
+#if 0
 static PyObject *Object_getPose( BPy_Object * self )
 {
 	/*BPy_Action *py_action = NULL; */
@@ -1190,6 +1204,14 @@ static PyObject *Object_getPose( BPy_Object * self )
 		return Pose_CreatePyObject( self->object->pose );
 }
 
+#endif
+
+static PyObject * Object_getPose(BPy_Object *self)
+{
+	//if there is no pose will return PyNone
+	return PyPose_FromPose(self->object->pose, self->object->id.name+2);
+}
+
 static PyObject *Object_isSelected( BPy_Object * self )
 {
 	Base *base;
@@ -3011,6 +3033,12 @@ static PyObject *Object_getEffects( BPy_Object * self )
 	return effect_list;
 }
 
+static  PyObject *Object_insertShapeKey(BPy_Object * self)
+{
+	insert_shapekey(self->object);
+	return Py_None;
+}
+
 /*****************************************************************************/
 /* Function:	Object_CreatePyObject					 */
 /* Description: This function will create a new BlenObject from an existing  */
diff --git a/source/blender/python/api2_2x/Pose.c b/source/blender/python/api2_2x/Pose.c
index 42fe8c516e7b6af7dda114fbab774f93bd27646d..577eb1029a36979b3e31d3faea12eb48de0ea889 100644
--- a/source/blender/python/api2_2x/Pose.c
+++ b/source/blender/python/api2_2x/Pose.c
@@ -1,143 +1,940 @@
+/* 
+ * $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.
+ *
+ * Contributor(s): Joseph Gilbert
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
 #include "Pose.h"
-#include "NLA.h" 
-//Action is still there, may move to Action.h
-// Action_Type used for typechecking
-#include "Types.h"
-#include <Python.h>
-//#include <DNA_action_types.h>
-#include "gen_utils.h"
+
+
+#include "mydevice.h"
+#include "BKE_armature.h"
+#include "BKE_main.h"
+#include "BKE_global.h"
 #include "BKE_action.h"
+#include "BKE_utildefines.h"
+#include "BIF_editaction.h"
+#include "BIF_space.h"
+#include "BKE_depsgraph.h"
+#include "DNA_object_types.h"
+#include "DNA_ipo_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_space_types.h"	//1 - this order
+#include "BSE_editipo.h"			//2
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "Mathutils.h"
+#include "Object.h"
+#include "NLA.h"
+#include "gen_utils.h"
 
-static void Pose_dealloc( PyObject *self );
-static PyObject *Pose_repr( BPy_Pose *self );
-static PyObject *Pose_fromAction( BPy_Pose *self, PyObject *args);
+extern void chan_calc_mat(bPoseChannel *chan);
+
+//------------------------ERROR CODES---------------------------------
+//This is here just to make me happy and to have more consistant error strings :)
+static const char sPoseError[] = "Pose - Error: ";
+static const char sPoseBadArgs[] = "Pose - Bad Arguments: ";
+static const char sPoseBoneError[] = "PoseBone - Error: ";
+static const char sPoseBoneBadArgs[] = "PoseBone - Bad Arguments: ";
+static const char sPoseBonesDictError[] = "PoseBone - Error: ";
+static const char sPoseBonesDictBadArgs[] = "PoseBone - Bad Arguments: ";
+
+//################## PoseBonesDict_Type (internal) ########################
+/*This is an internal psuedo-dictionary type that allows for manipulation
+* of posechannels inside of a pose structure. It is a subobject of pose.
+* i.e. Pose.bones['key']*/
+//################################################################
+
+//------------------METHOD IMPLEMENTATIONS-----------------------------
+//------------------------Pose.bones.items()
+//Returns a list of key:value pairs like dict.items()
+PyObject* PoseBonesDict_items(BPy_PoseBonesDict *self)
+{
+	return PyDict_Items(self->bonesMap); 
+}
+//------------------------Pose.bones.keys()
+//Returns a list of keys like dict.keys()
+PyObject* PoseBonesDict_keys(BPy_PoseBonesDict *self)
+{
+	return PyDict_Keys(self->bonesMap);
+}
+//------------------------Armature.bones.values()
+//Returns a list of values like dict.values()
+PyObject* PoseBonesDict_values(BPy_PoseBonesDict *self)
+{
+	return PyDict_Values(self->bonesMap);
+}
+//------------------ATTRIBUTE IMPLEMENTATION---------------------------
+//------------------TYPE_OBECT IMPLEMENTATION-----------------------
+//------------------------tp_doc
+//The __doc__ string for this object
+static char BPy_PoseBonesDict_doc[] = "This is an internal subobject of pose\
+designed to act as a Py_PoseBone dictionary.";
 
-static struct PyMethodDef Pose_methods[] = {
-	{"fromAction", ( PyCFunction ) Pose_fromAction,
-	 METH_VARARGS, "() - sets the pose based on an action and given time in it."},
-	{0, 0, 0, 0}
+//------------------------tp_methods
+//This contains a list of all methods the object contains
+static PyMethodDef BPy_PoseBonesDict_methods[] = {
+	{"items", (PyCFunction) PoseBonesDict_items, METH_NOARGS, 
+		"() - Returns the key:value pairs from the dictionary"},
+	{"keys", (PyCFunction) PoseBonesDict_keys, METH_NOARGS, 
+		"() - Returns the keys the dictionary"},
+	{"values", (PyCFunction) PoseBonesDict_values, METH_NOARGS, 
+		"() - Returns the values from the dictionary"},
+	{NULL, NULL, 0, NULL}
 };
+//-----------------(internal)
+static int PoseBoneMapping_Init(PyObject *dictionary, ListBase *posechannels){
+	bPoseChannel *pchan = NULL;
+	PyObject *py_posechannel = NULL;
 
-static PyGetSetDef BPy_Pose_getsetters[] = {
-//		{"type",(getter)Key_getType, (setter)NULL,
-		{NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
-	};
+	for (pchan = posechannels->first; pchan; pchan = pchan->next){
+		py_posechannel = PyPoseBone_FromPosechannel(pchan);
+		if (!py_posechannel)
+			return -1;
 
-PyTypeObject Pose_Type = {
-	PyObject_HEAD_INIT( NULL ) 0,	/*ob_size */
-	"Blender Pose",					/*tp_name */
-	sizeof( BPy_Pose ),				/*tp_basicsize */
-	0,								/*tp_itemsize */
-	/* methods */
-	( destructor ) Pose_dealloc,		/*tp_dealloc */
-	( printfunc ) 0,				/*tp_print */
-	( getattrfunc ) 0,	/*tp_getattr */
-	( setattrfunc ) 0,			 	/*tp_setattr */
-	0, 								/*tp_compare*/
-	( reprfunc ) Pose_repr, 			/* tp_repr */
-	/* Method suites for standard classes */
-
-	NULL,                       /* PyNumberMethods *tp_as_number; */
-	NULL,                       /* PySequenceMethods *tp_as_sequence; */
-	NULL,                       /* PyMappingMethods *tp_as_mapping; */
-
-	/* More standard operations (here for binary compatibility) */
-
-	NULL,                       /* hashfunc tp_hash; */
-	NULL,                       /* ternaryfunc tp_call; */
-	NULL,                       /* reprfunc tp_str; */
-	NULL,                       /* getattrofunc tp_getattro; */
-	NULL,                       /* setattrofunc tp_setattro; */
-
-	/* Functions to access object as input/output buffer */
-	NULL,                       /* PyBufferProcs *tp_as_buffer; */
-
-  /*** Flags to define presence of optional/expanded features ***/
-	Py_TPFLAGS_DEFAULT,         /* long tp_flags; */
-
-	NULL,                       /*  char *tp_doc;  Documentation string */
-  /*** Assigned meaning in release 2.0 ***/
-	/* call function for all accessible objects */
-	NULL,                       /* traverseproc tp_traverse; */
-
-	/* delete references to contained objects */
-	NULL,                       /* inquiry tp_clear; */
-
-  /***  Assigned meaning in release 2.1 ***/
-  /*** rich comparisons ***/
-	NULL,                       /* richcmpfunc tp_richcompare; */
-
-  /***  weak reference enabler ***/
-	0,                          /* long tp_weaklistoffset; */
-
-  /*** Added in release 2.2 ***/
-	/*   Iterators */
-	NULL,                       /* getiterfunc tp_iter; */
-	NULL,                       /* iternextfunc tp_iternext; */
-
-  /*** Attribute descriptor and subclassing stuff ***/
-	Pose_methods,           		/* struct PyMethodDef *tp_methods; */
-	NULL,                       /* struct PyMemberDef *tp_members; */
-	BPy_Pose_getsetters,     	/* struct PyGetSetDef *tp_getset; */
-	NULL,                       /* struct _typeobject *tp_base; */
-	NULL,                      	/* PyObject *tp_dict; */
-	NULL,                       /* descrgetfunc tp_descr_get; */
-	NULL,                       /* descrsetfunc tp_descr_set; */
-	0,                          /* long tp_dictoffset; */
-	NULL,                       /* initproc tp_init; */
-	NULL,                       /* allocfunc tp_alloc; */
-	NULL,                       /* newfunc tp_new; */
-	/*  Low-level free-memory routine */
-	NULL,                       /* freefunc tp_free;  */
-	/* For PyObject_IS_GC */
-	NULL,                       /* inquiry tp_is_gc;  */
-	NULL,                       /* PyObject *tp_bases; */
-	/* method resolution order */
-	NULL,                       /* PyObject *tp_mro;  */
-	NULL,                       /* PyObject *tp_cache; */
-	NULL,                       /* PyObject *tp_subclasses; */
-	NULL,                       /* PyObject *tp_weaklist; */
-	NULL
+		if(PyDict_SetItem(dictionary, 
+			PyString_FromString(pchan->name), py_posechannel) == -1){
+			return -1;
+		}
+		Py_DECREF(py_posechannel);
+	}
+	return 0;
+}
+
+//----------------- BonesDict_InitBones
+static int PoseBonesDict_InitBones(BPy_PoseBonesDict *self)
+{
+	PyDict_Clear(self->bonesMap);
+	if (PoseBoneMapping_Init(self->bonesMap, self->bones) == -1)
+		return 0;
+	return 1;
+} 
+
+//------------------------tp_repr
+//This is the string representation of the object
+static PyObject *PoseBonesDict_repr(BPy_PoseBonesDict *self)
+{
+	char buffer[128], str[4096];
+	PyObject *key, *value;
+	int pos = 0;
+
+	BLI_strncpy(str,"",4096);
+	sprintf(buffer, "[Pose Bone Dict: {");
+	strcat(str,buffer);
+	while (PyDict_Next(self->bonesMap, &pos, &key, &value)) {
+		sprintf(buffer, "%s : %s, ", PyString_AsString(key), 
+			PyString_AsString(value->ob_type->tp_repr(value)));
+		strcat(str,buffer);
+	}
+	sprintf(buffer, "}]\n");
+	strcat(str,buffer);
+	return PyString_FromString(str);
+}
+
+//------------------------tp_dealloc
+//This tells how to 'tear-down' our object when ref count hits 0
+static void PoseBonesDict_dealloc(BPy_PoseBonesDict * self)
+{
+	Py_DECREF(self->bonesMap);
+	PoseBonesDict_Type.tp_free(self);
+	return;
+}
+//------------------------mp_length
+//This gets the size of the dictionary
+int PoseBonesDict_len(BPy_PoseBonesDict *self)
+{
+	return BLI_countlist(self->bones);
+}
+//-----------------------mp_subscript
+//This defines getting a bone from the dictionary - x = Bones['key']
+PyObject *PoseBonesDict_GetItem(BPy_PoseBonesDict *self, PyObject* key)
+{ 
+	PyObject *value = NULL;
+
+	value = PyDict_GetItem(self->bonesMap, key);
+	if(value == NULL){
+        return EXPP_incr_ret(Py_None);
+	}
+	return EXPP_incr_ret(value);
+}
+//------------------TYPE_OBECT DEFINITION--------------------------
+//Mapping Protocol
+static PyMappingMethods PoseBonesDict_MapMethods = {
+	(inquiry) PoseBonesDict_len,					//mp_length
+	(binaryfunc)PoseBonesDict_GetItem,		//mp_subscript
+	0,														//mp_ass_subscript
+};
+//PoseBonesDict TypeObject
+PyTypeObject PoseBonesDict_Type = {
+	PyObject_HEAD_INIT(NULL)			//tp_head
+	0,												//tp_internal
+	"PoseBonesDict",								//tp_name
+	sizeof(BPy_PoseBonesDict),					//tp_basicsize
+	0,												//tp_itemsize
+	(destructor)PoseBonesDict_dealloc,		//tp_dealloc
+	0,												//tp_print
+	0,												//tp_getattr
+	0,												//tp_setattr
+	0,												//tp_compare
+	(reprfunc) PoseBonesDict_repr,				//tp_repr
+	0,												//tp_as_number
+	0,												//tp_as_sequence
+	&PoseBonesDict_MapMethods,				//tp_as_mapping
+	0,												//tp_hash
+	0,												//tp_call
+	0,												//tp_str
+	0,												//tp_getattro
+	0,												//tp_setattro
+	0,												//tp_as_buffer
+	Py_TPFLAGS_DEFAULT,					//tp_flags
+	BPy_PoseBonesDict_doc,						//tp_doc
+	0,												//tp_traverse
+	0,												//tp_clear
+	0,												//tp_richcompare
+	0,												//tp_weaklistoffset
+	0,												//tp_iter
+	0,												//tp_iternext
+	BPy_PoseBonesDict_methods,				//tp_methods
+	0,												//tp_members
+	0,												//tp_getset
+	0,												//tp_base
+	0,												//tp_dict
+	0,												//tp_descr_get
+	0,												//tp_descr_set
+	0,												//tp_dictoffset
+	0, 				                                //tp_init
+	0,												//tp_alloc
+	0,												//tp_new
+	0,												//tp_free
+	0,												//tp_is_gc
+	0,												//tp_bases
+	0,												//tp_mro
+	0,												//tp_cache
+	0,												//tp_subclasses
+	0,												//tp_weaklist
+	0												//tp_del
 };
+//-----------------------PyPoseBonesDict_FromPyPose
+static PyObject *PyPoseBonesDict_FromPyPose(BPy_Pose *py_pose)
+{
+	BPy_PoseBonesDict *py_posebonesdict = NULL;
+
+	//create py object
+	py_posebonesdict = (BPy_PoseBonesDict *)PoseBonesDict_Type.tp_alloc(&PoseBonesDict_Type, 0); 
+	if (!py_posebonesdict)
+		goto RuntimeError;
 
-static void Pose_dealloc( PyObject * self )
+	//create internal dictionaries
+	py_posebonesdict->bonesMap = PyDict_New();
+	if (!py_posebonesdict->bonesMap)
+		goto RuntimeError;
+
+	//set listbase pointer
+	py_posebonesdict->bones = &py_pose->pose->chanbase;
+
+	//now that everything is setup - init the mappings
+	if (!PoseBonesDict_InitBones(py_posebonesdict))
+		goto RuntimeError;
+
+	return (PyObject*)py_posebonesdict;
+
+RuntimeError:
+	return EXPP_objError(PyExc_RuntimeError, "%s%s", 
+		sPoseBonesDictError, "Failed to create class");
+}
+
+//################## Pose_Type ##########################
+/*This type is a wrapper for a pose*/
+//####################################################
+//------------------METHOD IMPLEMENTATIONS------------------------------
+static PyObject *Pose_update(BPy_Pose *self)
+{
+	Object *daddy = NULL;
+
+	self->pose->flag |= POSE_RECALC;
+
+	for (daddy = G.main->object.first; daddy; daddy = daddy->id.next){
+		if (daddy->pose == self->pose){
+			break;
+		}
+	}
+
+	if(daddy)
+		where_is_pose(daddy);
+
+	return EXPP_incr_ret(Py_None);
+}
+//------------------------tp_methods
+//This contains a list of all methods the object contains
+static PyMethodDef BPy_Pose_methods[] = {
+	{"update", (PyCFunction) Pose_update, METH_NOARGS, 
+		"() - Rebuilds the pose with new values"},
+	{NULL, NULL, 0, NULL}
+};
+//------------------ATTRIBUTE IMPLEMENTATIONS---------------------------
+//------------------------Pose.bones (getter)
+//Gets the bones attribute
+static PyObject *Pose_getBoneDict(BPy_Pose *self, void *closure)
+{
+    return EXPP_incr_ret((PyObject*)self->Bones);
+}
+//------------------------Pose.bones (setter)
+//Sets the bones attribute
+static int Pose_setBoneDict(BPy_Pose *self, PyObject *value, void *closure)
+{
+	goto AttributeError;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s", 
+		sPoseError, "You are not allowed to change the .bones attribute");
+}
+//------------------TYPE_OBECT IMPLEMENTATION---------------------------
+//------------------------tp_getset
+//This contains methods for attributes that require checking
+static PyGetSetDef BPy_Pose_getset[] = {
+	{"bones", (getter)Pose_getBoneDict, (setter)Pose_setBoneDict, 
+		"The pose's Bone dictionary", NULL},
+	{NULL, NULL, NULL, NULL, NULL}
+};
+//------------------------tp_dealloc
+//This tells how to 'tear-down' our object when ref count hits 0
+static void Pose_dealloc(BPy_Pose *self)
 {
-	PyObject_DEL( self );
+	Py_DECREF(self->Bones);
+	Pose_Type.tp_free(self);
+	return;
 }
+//------------------------tp_repr
+//This is the string representation of the object
+static PyObject *Pose_repr(BPy_Pose *self)
+{
+	return PyString_FromFormat( "[Pose \"%s\"]", self->name); 
+}
+//------------------------tp_doc
+//The __doc__ string for this object
+static char BPy_Pose_doc[] = "This object wraps a Blender Pose object.";
 
-PyObject *Pose_CreatePyObject( struct bPose * pose )
-	{
-		BPy_Pose *pypose;
-	
-		pypose =
-			( BPy_Pose * ) PyObject_NEW( BPy_Pose, &Pose_Type );
+//------------------TYPE_OBECT DEFINITION--------------------------
+PyTypeObject Pose_Type = {
+	PyObject_HEAD_INIT(NULL)   //tp_head
+	0,										//tp_internal
+	"Pose",								//tp_name
+	sizeof(BPy_Pose),					//tp_basicsize
+	0,										//tp_itemsize
+	(destructor)Pose_dealloc,		//tp_dealloc
+	0,										//tp_print
+	0,										//tp_getattr
+	0,										//tp_setattr
+	0,										//tp_compare
+	(reprfunc)Pose_repr,				//tp_repr
+	0,										//tp_as_number
+	0,										//tp_as_sequence
+	0,										//tp_as_mapping
+	0,										//tp_hash
+	0,										//tp_call
+	0,										//tp_str
+	0,										//tp_getattro
+	0,										//tp_setattro
+	0,										//tp_as_buffer
+	Py_TPFLAGS_DEFAULT,         //tp_flags
+	BPy_Pose_doc,					//tp_doc
+	0,										//tp_traverse
+	0,										//tp_clear
+	0,										//tp_richcompare
+	0,										//tp_weaklistoffset
+	0,										//tp_iter
+	0,										//tp_iternext
+	BPy_Pose_methods,				//tp_methods
+	0,										//tp_members
+	BPy_Pose_getset,					//tp_getset
+	0,										//tp_base
+	0,										//tp_dict
+	0,										//tp_descr_get
+	0,										//tp_descr_set
+	0,										//tp_dictoffset
+	0,										//tp_init
+	0,										//tp_alloc
+	0,										//tp_new
+	0,										//tp_free
+	0,										//tp_is_gc
+	0,										//tp_bases
+	0,										//tp_mro
+	0,										//tp_cache
+	0,										//tp_subclasses
+	0,										//tp_weaklist
+	0										//tp_del
+};
+//################## PoseBone_Type #####################
+/*This type is a wrapper for a posechannel*/
+//####################################################
+//------------------METHOD IMPLEMENTATIONS------------------------------
+//------------------------------PoseBone.insertKey()
+static PyObject *PoseBone_insertKey(BPy_PoseBone *self, PyObject *args)
+{
+	PyObject *parent_object = NULL;
+	PyObject *constants = NULL, *item = NULL;
+	int frame = 1, oldframe, length, x, numeric_value = 0, oldflag;
+	bPoseChannel *pchan = NULL;
 	
-		if( !pypose )
-			return EXPP_ReturnPyObjError( PyExc_MemoryError,
-						      "couldn't create BPy_Pose object" );
 
-		PyType_Ready(&Pose_Type);
+	if (!PyArg_ParseTuple(args, "O!i|O", &Object_Type, &parent_object, &frame, &constants ))
+		goto AttributeError;
+
+	//verify that this pchannel is part of the object->pose
+	for (pchan = ((BPy_Object*)parent_object)->object->pose->chanbase.first; 
+		pchan; pchan = pchan->next){
+		if (pchan == self->posechannel)
+			break;
+	}
+	if (!pchan)
+		goto AttributeError2;
+
+	//verify that there is an action bound to this object
+	if (!((BPy_Object*)parent_object)->object->action){
+		goto AttributeError5;
+	}
 
-		pypose->pose = pose;
-		return ( ( PyObject * ) pypose );
+	oldflag = self->posechannel->flag;
+	self->posechannel->flag = 0;
+	//set the flags for this posechannel
+	if (constants){
+		if(PySequence_Check(constants)){
+			length = PySequence_Length(constants);
+			for (x = 0; x < length; x++){
+				item = PySequence_GetItem(constants, x);
+				if (item == EXPP_GetModuleConstant("Blender.Object.Pose", "ROT")){
+					numeric_value |= POSE_ROT;
+				}else if (item == EXPP_GetModuleConstant("Blender.Object.Pose", "LOC")){
+					numeric_value |= POSE_LOC;
+				}else if (item == EXPP_GetModuleConstant("Blender.Object.Pose", "SIZE")){
+					numeric_value |= POSE_SIZE;
+				}else{
+					Py_DECREF(item);
+					self->posechannel->flag = (short)oldflag;
+					goto AttributeError4;
+				}
+				Py_DECREF(item);
+			}
+			self->posechannel->flag = (short)numeric_value;
+		}else if (BPy_Constant_Check(constants)){
+			if (constants == EXPP_GetModuleConstant("Blender.Object.Pose", "ROT")){
+				numeric_value |= POSE_ROT;
+			}else if (constants == EXPP_GetModuleConstant("Blender.Object.Pose", "LOC")){
+				numeric_value |= POSE_LOC;
+			}else if (constants == EXPP_GetModuleConstant("Blender.Object.Pose", "SIZE")){
+				numeric_value |= POSE_SIZE;
+			}else{
+				self->posechannel->flag = (short)oldflag;
+				goto AttributeError4;
+			}
+			self->posechannel->flag = (short)numeric_value;
+		}else{
+			goto AttributeError3;
+		}
+	}else{ //nothing passed so set them all
+		self->posechannel->flag |= POSE_ROT;
+		self->posechannel->flag |= POSE_LOC;
+		self->posechannel->flag |= POSE_SIZE;
 	}
 
-static PyObject *Pose_fromAction( BPy_Pose *self, PyObject *args)  {
-	BPy_Action *action;
-	float time;
-	float factor = 1.0;
+	//set the frame we want insertion on
+	oldframe = G.scene->r.cfra;
+	G.scene->r.cfra = (short)frame;
+
+	//add the action channel if it's not there
+	verify_action_channel(((BPy_Object*)parent_object)->object->action, 
+		self->posechannel->name);
+
+	//insert the pose keys
+	if (self->posechannel->flag & POSE_ROT){
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_QUAT_X);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_QUAT_Y);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_QUAT_Z);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_QUAT_W);
+	}
+	if (self->posechannel->flag & POSE_LOC){
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_LOC_X);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_LOC_Y);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_LOC_Z);
+	}
+	if (self->posechannel->flag & POSE_SIZE){
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_SIZE_X);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_SIZE_Y);
+		insertkey(&((BPy_Object*)parent_object)->object->id, 
+			ID_PO, self->posechannel->name, NULL, AC_SIZE_Z);
+	}
 
-	if (!PyArg_ParseTuple(args, "O!f|f", &Action_Type, &action, &time, &factor))
-				return EXPP_ReturnPyObjError(PyExc_AttributeError, "An action and a time (as number) required as arguments.");
+	//flip the frame back
+	G.scene->r.cfra = (short)oldframe;
 
-	//todo: range check for time
+	//update the IPOs
+	remake_action_ipos (((BPy_Object*)parent_object)->object->action);
 
-	extract_pose_from_action(self->pose, action->action, time);
+	return EXPP_incr_ret(Py_None);
 
-	Py_RETURN_NONE;
+AttributeError:
+	return EXPP_objError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".insertKey: ", "expects an Object, int, (optional) constants");
+AttributeError2:
+	return EXPP_objError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".insertKey: ", "wrong object detected. \
+		Use the object this pose came from");
+AttributeError3:
+	return EXPP_objError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".insertKey: ", "Expects a constant or list of constants");
+AttributeError4:
+	return EXPP_objError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".insertKey: ", "Please use a constant defined in the Pose module");
+AttributeError5:
+	return EXPP_objError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".insertKey: ", "You must set up and link an Action to this object first");
 }
+//------------------------tp_methods
+//This contains a list of all methods the object contains
+static PyMethodDef BPy_PoseBone_methods[] = {
+	{"insertKey", (PyCFunction) PoseBone_insertKey, METH_VARARGS, 
+		"() - insert a key for this pose into an action"},
+	{NULL, NULL, 0, NULL}
+};
+//------------------ATTRIBUTE IMPLEMENTATIONS---------------------------
+//------------------------PoseBone.name (getter)
+//Gets the name attribute
+static PyObject *PoseBone_getName(BPy_PoseBone *self, void *closure)
+{
+    return PyString_FromString(self->posechannel->name);
+}
+//------------------------PoseBone.name (setter)
+//Sets the name attribute
+static int PoseBone_setName(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	char *name = "";
+
+	if (!PyArg_Parse(value, "s", &name))
+		goto AttributeError;
 
-static PyObject *Pose_repr( BPy_Pose * self )
+	BLI_strncpy(self->posechannel->name, name, 32);
+	return 0;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".name: ", "expects a string");
+}
+//------------------------PoseBone.loc (getter)
+//Gets the loc attribute
+static PyObject *PoseBone_getLoc(BPy_PoseBone *self, void *closure)
+{
+    return newVectorObject(self->posechannel->loc, 3, Py_WRAP);
+}
+//------------------------PoseBone.loc (setter)
+//Sets the loc attribute
+static int PoseBone_setLoc(BPy_PoseBone *self, PyObject *value, void *closure)
 {
-	return PyString_FromFormat( "[Pose]"); // \"%s\"]", self->key->id.name + 2 );
+	VectorObject *vec = NULL;
+	int x;
+
+	if (!PyArg_Parse(value, "O!", &vector_Type, &vec))
+		goto AttributeError;
+	if (vec->size != 3)
+		goto AttributeError;
+
+	for (x = 0; x < 3; x++){
+		self->posechannel->loc[x] = vec->vec[x];
+	}
+	return 0;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".loc: ", "expects a 3d vector object");
+}
+//------------------------PoseBone.size (getter)
+//Gets the size attribute
+static PyObject *PoseBone_getSize(BPy_PoseBone *self, void *closure)
+{
+    return newVectorObject(self->posechannel->size, 3, Py_WRAP);
+}
+//------------------------PoseBone.size (setter)
+//Sets the size attribute
+static int PoseBone_setSize(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	VectorObject *vec = NULL;
+	int x;
+
+	if (!PyArg_Parse(value, "O!", &vector_Type, &vec))
+		goto AttributeError;
+	if (vec->size != 3)
+		goto AttributeError;
+
+	for (x = 0; x < 3; x++){
+		self->posechannel->size[x] = vec->vec[x];
+	}
+	return 0;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".size: ", "expects a 3d vector object");
+}
+//------------------------PoseBone.quat (getter)
+//Gets the quat attribute
+static PyObject *PoseBone_getQuat(BPy_PoseBone *self, void *closure)
+{
+    return newQuaternionObject(self->posechannel->quat, Py_WRAP);
+}
+//------------------------PoseBone.quat (setter)
+//Sets the quat attribute
+static int PoseBone_setQuat(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	QuaternionObject *quat = NULL;
+	int x;
+
+	if (!PyArg_Parse(value, "O!", &quaternion_Type, &quat))
+		goto AttributeError;
+
+	for (x = 0; x < 4; x++){
+		self->posechannel->quat[x] = quat->quat[x];
+	}
+	return 0;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".quat: ", "expects a quaternion object");
+}
+//------------------------PoseBone.localMatrix (getter)
+//Gets the chan_mat
+static PyObject *PoseBone_getLocalMatrix(BPy_PoseBone *self, void *closure)
+{
+    return newMatrixObject((float*)self->posechannel->chan_mat, 4, 4, Py_WRAP);
+}
+//------------------------PoseBone.localMatrix (setter)
+//Sets the chan_mat 
+static int PoseBone_setLocalMatrix(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	MatrixObject *matrix = NULL;
+	float size[3], quat[4], loc[3];
+	float mat3[3][3], mat4[4][4];
+	int matsize = 0;
+
+	if (!PyArg_Parse(value, "O!", &matrix_Type, &matrix))
+		goto AttributeError;
+
+	if (matrix->rowSize == 3 && matrix->colSize == 3){
+		matsize = 3;
+		Mat3CpyMat3(mat3, (float(*)[3])*matrix->matrix);
+	}else if (matrix->rowSize == 4 && matrix->colSize == 4){
+		matsize = 4;
+		Mat4CpyMat4(mat4, (float(*)[4])*matrix->matrix);
+	}
+
+	if (matsize != 3 && matsize != 4){
+		goto AttributeError;
+	}
+
+	//get size and rotation
+	if (matsize == 3){
+		Mat3ToSize(mat3, size);
+		Mat3Ortho(mat3);
+		Mat3ToQuat(mat3, quat);
+	}else if (matsize == 4){
+		Mat4ToSize(mat4, size);
+		Mat4Ortho(mat4);
+		Mat4ToQuat(mat4, quat);
+	}
+
+	//get loc
+	if (matsize == 4){
+		VECCOPY(loc, matrix->matrix[3]);
+	}
+
+	//copy new attributes
+	VECCOPY(self->posechannel->size, size);
+	QUATCOPY(self->posechannel->quat, quat);
+	if (matsize == 4){
+		VECCOPY(self->posechannel->loc, loc);
+	}
+
+	//rebuild matrix
+	chan_calc_mat(self->posechannel);
+	return 0;
+
+AttributeError:
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".localMatrix: ", "expects a 3x3 or 4x4 matrix object");
+}
+//------------------------PoseBone.poseMatrix (getter)
+//Gets the pose_mat
+static PyObject *PoseBone_getPoseMatrix(BPy_PoseBone *self, void *closure)
+{
+    return newMatrixObject((float*)self->posechannel->pose_mat, 4, 4, Py_WRAP);
+}
+//------------------------PoseBone.poseMatrix (setter)
+//Sets the pose_mat
+static int PoseBone_setPoseMatrix(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".poseMatrix: ", "not able to set this property");
+}
+////------------------------PoseBone.constraints (getter)
+////Gets the constraints list
+//static PyObject *PoseBone_getConstraints(BPy_PoseBone *self, void *closure)
+//{
+//	PyObject *list = NULL, *py_constraint = NULL;
+//	bConstraint *constraint = NULL;
+//
+//	list = PyList_New(0);
+//	for (constraint = self->posechannel->constraints.first; constraint; constraint = constraint->next){
+//		py_constraint = PyConstraint_FromConstraint(constraint);
+//		if (!py_constraint)
+//			return NULL;
+//		if (PyList_Append(list, py_constraint) == -1){
+//			Py_DECREF(py_constraint);
+//			goto RuntimeError;
+//		}
+//		Py_DECREF(py_constraint);
+//	}
+//	return list;
+//
+//RuntimeError:
+//	return EXPP_objError(PyExc_RuntimeError, "%s%s%s",
+//		sPoseBoneError, ".constraints: ", "unable to build constraint list");
+//}
+////------------------------PoseBone.constraints (setter)
+////Sets the constraints list
+//static int PoseBone_setConstraints(BPy_PoseBone *self, PyObject *value, void *closure)
+//{
+//	printf("This is not implemented yet...");
+//	return 1;
+//}
+//------------------------PoseBone.head (getter)
+//Gets the pose head position
+static PyObject *PoseBone_getHead(BPy_PoseBone *self, void *closure)
+{
+    return newVectorObject(self->posechannel->pose_head, 3, Py_NEW);
+}
+//------------------------PoseBone.head (setter)
+//Sets the pose head position
+static int PoseBone_setHead(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".head: ", "not able to set this property");
+}
+//------------------------PoseBone.tail (getter)
+//Gets the pose tail position
+static PyObject *PoseBone_getTail(BPy_PoseBone *self, void *closure)
+{
+    return newVectorObject(self->posechannel->pose_tail, 3, Py_NEW);
+}
+//------------------------PoseBone.tail (setter)
+//Sets the pose tail position
+static int PoseBone_setTail(BPy_PoseBone *self, PyObject *value, void *closure)
+{
+	return EXPP_intError(PyExc_AttributeError, "%s%s%s",
+		sPoseBoneError, ".tail: ", "not able to set this property");
+}
+//------------------TYPE_OBECT IMPLEMENTATION---------------------------
+//------------------------tp_getset
+//This contains methods for attributes that require checking
+static PyGetSetDef BPy_PoseBone_getset[] = {
+	{"name", (getter)PoseBone_getName, (setter)PoseBone_setName, 
+		"The pose bone's name", NULL},
+	{"loc", (getter)PoseBone_getLoc, (setter)PoseBone_setLoc, 
+		"The pose bone's change in location as a vector", NULL},
+	{"size", (getter)PoseBone_getSize, (setter)PoseBone_setSize, 
+		"The pose bone's change in size as a vector", NULL},
+	{"quat", (getter)PoseBone_getQuat, (setter)PoseBone_setQuat, 
+		"The pose bone's change in rotation as a quat", NULL},
+	{"localMatrix", (getter)PoseBone_getLocalMatrix, (setter)PoseBone_setLocalMatrix, 
+		"The pose bone's change matrix built from the quat, loc, and size", NULL},
+	{"poseMatrix", (getter)PoseBone_getPoseMatrix, (setter)PoseBone_setPoseMatrix, 
+		"The pose bone's matrix", NULL},
+	{"head", (getter)PoseBone_getHead, (setter)PoseBone_setHead, 
+		"The pose bone's head positon", NULL},
+	{"tail", (getter)PoseBone_getTail, (setter)PoseBone_setTail, 
+		"The pose bone's tail positon", NULL},
+	//{"constraints", (getter)PoseBone_getConstraints, (setter)PoseBone_setConstraints, 
+	//	"The list of contraints that pertain to this pose bone", NULL},
+	{NULL, NULL, NULL, NULL, NULL}
+};
+//------------------------tp_dealloc
+//This tells how to 'tear-down' our object when ref count hits 0
+static void PoseBone_dealloc(BPy_PoseBone *self)
+{
+	PoseBone_Type.tp_free(self);
+	return;
+}
+//------------------------tp_repr
+//This is the string representation of the object
+static PyObject *PoseBone_repr(BPy_PoseBone *self)
+{
+	return PyString_FromFormat( "[PoseBone \"%s\"]", self->posechannel->name); 
+}
+//------------------------tp_doc
+//The __doc__ string for this object
+static char BPy_PoseBone_doc[] = "This object wraps a Blender PoseBone object.";
+
+//------------------TYPE_OBECT DEFINITION--------------------------
+PyTypeObject PoseBone_Type = {
+	PyObject_HEAD_INIT(NULL)   //tp_head
+	0,										//tp_internal
+	"PoseBone",							//tp_name
+	sizeof(BPy_PoseBone),			//tp_basicsize
+	0,										//tp_itemsize
+	(destructor)PoseBone_dealloc,		//tp_dealloc
+	0,										//tp_print
+	0,										//tp_getattr
+	0,										//tp_setattr
+	0,										//tp_compare
+	(reprfunc)PoseBone_repr,		//tp_repr
+	0,										//tp_as_number
+	0,										//tp_as_sequence
+	0,										//tp_as_mapping
+	0,										//tp_hash
+	0,										//tp_call
+	0,										//tp_str
+	0,										//tp_getattro
+	0,										//tp_setattro
+	0,										//tp_as_buffer
+	Py_TPFLAGS_DEFAULT,         //tp_flags
+	BPy_PoseBone_doc,				//tp_doc
+	0,										//tp_traverse
+	0,										//tp_clear
+	0,										//tp_richcompare
+	0,										//tp_weaklistoffset
+	0,										//tp_iter
+	0,										//tp_iternext
+	BPy_PoseBone_methods,		//tp_methods
+	0,										//tp_members
+	BPy_PoseBone_getset,			//tp_getset
+	0,										//tp_base
+	0,										//tp_dict
+	0,										//tp_descr_get
+	0,										//tp_descr_set
+	0,										//tp_dictoffset
+	0,										//tp_init
+	0,										//tp_alloc
+	0,										//tp_new
+	0,										//tp_free
+	0,										//tp_is_gc
+	0,										//tp_bases
+	0,										//tp_mro
+	0,										//tp_cache
+	0,										//tp_subclasses
+	0,										//tp_weaklist
+	0										//tp_del
+};
+//-------------------MODULE METHODS IMPLEMENTATION------------------------
+//-------------------MODULE METHODS DEFINITION-----------------------------
+struct PyMethodDef M_Pose_methods[] = {
+	{NULL, NULL, 0, NULL}
+};
+//-------------------MODULE INITIALIZATION--------------------------------
+PyObject *Pose_Init(void)
+{
+	PyObject *module;
+
+	//Initializes TypeObject.ob_type
+	if (PyType_Ready(&Pose_Type) < 0 || PyType_Ready(&PoseBone_Type)  < 0 ||
+		PyType_Ready(&PoseBonesDict_Type) < 0) {
+		return EXPP_incr_ret(Py_None);
+	}
+
+	//Register the module
+	module = Py_InitModule3("Blender.Object.Pose", M_Pose_methods, 
+		"The Blender Pose module"); 
+
+	//Add TYPEOBJECTS to the module
+	PyModule_AddObject(module, "Pose", 
+		EXPP_incr_ret((PyObject *)&Pose_Type)); //*steals*
+	PyModule_AddObject(module, "PoseBone", 
+		EXPP_incr_ret((PyObject *)&PoseBone_Type)); //*steals*
+
+	//Add CONSTANTS to the module
+	PyModule_AddObject(module, "ROT", 
+		EXPP_incr_ret(PyConstant_NewInt("ROT", POSE_ROT)));
+	PyModule_AddObject(module, "LOC", 
+		EXPP_incr_ret(PyConstant_NewInt("LOC", POSE_LOC)));
+	PyModule_AddObject(module, "SIZE", 
+		EXPP_incr_ret(PyConstant_NewInt("SIZE", POSE_SIZE)));
+
+	return module;
+}
+//------------------VISIBLE PROTOTYPE IMPLEMENTATION-----------------------
+//------------------------------PyPose_FromPose (internal)
+//Returns a PyPose from a bPose - return PyNone if bPose is NULL
+PyObject *PyPose_FromPose(bPose *pose, char *name)
+{
+	BPy_Pose *py_pose = NULL;
+
+	if (pose){
+		py_pose = (BPy_Pose*)Pose_Type.tp_alloc(&Pose_Type, 0);
+		if (!py_pose)
+			goto RuntimeError;
+
+		py_pose->pose = pose;
+		BLI_strncpy(py_pose->name, name, 24);
+
+		//create armature.bones
+		py_pose->Bones = (BPy_PoseBonesDict*)PyPoseBonesDict_FromPyPose(py_pose);
+		if (!py_pose->Bones)
+			goto RuntimeError;
+
+		return (PyObject*)py_pose;
+	}else{
+		return EXPP_incr_ret(Py_None);
+	}
+
+RuntimeError:
+	return EXPP_objError(PyExc_RuntimeError, "%s%s%s", 
+		sPoseError, "PyPose_FromPose: ", "Internal Error Ocurred");
+}
+//------------------------------PyPoseBone_FromPosechannel (internal)
+//Returns a PyPoseBone from a bPoseChannel - return PyNone if bPoseChannel is NULL
+PyObject *PyPoseBone_FromPosechannel(bPoseChannel *pchan)
+{
+	BPy_PoseBone *py_posechannel = NULL;
+
+	if (pchan){
+		py_posechannel = (BPy_PoseBone*)PoseBone_Type.tp_alloc(&PoseBone_Type, 0);
+		if (!py_posechannel)
+			goto RuntimeError;
+		py_posechannel->posechannel = pchan;
+		return (PyObject*)py_posechannel;
+	}else{
+		return EXPP_incr_ret(Py_None);
+	}
+
+RuntimeError:
+	return EXPP_objError(PyExc_RuntimeError, "%s%s%s", 
+		sPoseBoneError, "PyPoseBone_FromPosechannel: ", "Internal Error Ocurred");
 }
diff --git a/source/blender/python/api2_2x/Pose.h b/source/blender/python/api2_2x/Pose.h
index c1735d1ebd428784b10b6cc4b702d676089f325c..dc90c8820f07b637d1cd5bd148f57bdc562d0a24 100644
--- a/source/blender/python/api2_2x/Pose.h
+++ b/source/blender/python/api2_2x/Pose.h
@@ -1,24 +1,68 @@
+/* 
+ * $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.
+ *
+ * Contributor(s): Joseph Gilbert
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
 #ifndef EXPP_POSE_H
 #define EXPP_POSE_H
 
 #include <Python.h>
+#include "DNA_action_types.h"
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <DNA_action_types.h>
-
-/* EXPP PyType Objects */
+//-------------------TYPE CHECKS---------------------------------
+#define PoseObject_Check(v) ((v)->ob_type == &Pose_Type)
+#define PoseBoneObject_Check(v) ((v)->ob_type == &PoseBone_Type)
+#define PoseBonesDictObject_Check(v) ((v)->ob_type == &PoseBonesDict_Type)
+//-------------------TYPEOBJECT----------------------------------
 extern PyTypeObject Pose_Type;
-
-struct BPy_Pose;
+extern PyTypeObject PoseBone_Type;
+extern PyTypeObject PoseBonesDict_Type;
+//-------------------STRUCT DEFINITION----------------------------
+typedef struct {
+	PyObject_HEAD 
+	PyObject *bonesMap;  
+	ListBase *bones;  
+} BPy_PoseBonesDict;
 
 typedef struct {
-	PyObject_HEAD		/* required python macro   */
-	bPose * pose;
-} BPy_Pose;			/* a pose */
+	PyObject_HEAD
+	bPose *pose;
+	char name[24];   //because poses have not names :(
+	BPy_PoseBonesDict *Bones; 
+} BPy_Pose;
 
-PyObject *Pose_CreatePyObject( bPose * p );
+typedef struct {
+	PyObject_HEAD
+	bPoseChannel *posechannel;
+} BPy_PoseBone;
 
-#endif /* EXPP_KEY_H */
+//-------------------VISIBLE PROTOTYPES-------------------------
+PyObject *Pose_Init(void);
+PyObject *PyPose_FromPose(bPose *pose, char *name);
+PyObject *PyPoseBone_FromPosechannel(bPoseChannel *pchan);
+#endif
diff --git a/source/blender/python/api2_2x/Window.c b/source/blender/python/api2_2x/Window.c
index 8b89296dcde80ae4939c0f2776b4bb6e6cc06dbe..a7ad2581f453bf9eec1136c7144bb4bcc97931bb 100644
--- a/source/blender/python/api2_2x/Window.c
+++ b/source/blender/python/api2_2x/Window.c
@@ -889,20 +889,23 @@ static PyObject *M_Window_EditMode( PyObject * self, PyObject * args )
 	short status = -1;
 	char *undo_str = "From script";
 	int undo_str_len = 11;
+	int do_undo = 1;
 
-	if( !PyArg_ParseTuple
-	    ( args, "|hs#", &status, &undo_str, &undo_str_len ) )
+	if( !PyArg_ParseTuple( args,
+				"|hs#i", &status, &undo_str, &undo_str_len, &do_undo ) )
 		return EXPP_ReturnPyObjError( PyExc_TypeError,
-					      "expected nothing or an int (bool) and a string as arguments" );
+				"expected optional int (bool), string and int (bool) as arguments" );
 
 	if( status >= 0 ) {
 		if( status ) {
 			if( !G.obedit )
 				enter_editmode(  );
 		} else if( G.obedit ) {
-			if( undo_str_len > 63 )
-				undo_str[63] = '\0';	/* 64 is max */
-			undo_push_mesh( undo_str );	/* use better solution after 2.34 */
+			if( do_undo && U.undosteps != 0 ) {
+				if( undo_str_len > 63 )
+					undo_str[63] = '\0';	/* 64 is max */
+				undo_push_mesh( undo_str );	/* use better solution after 2.34 */
+			}
 			exit_editmode( 1 );
 		}
 	}
diff --git a/source/blender/python/api2_2x/constant.c b/source/blender/python/api2_2x/constant.c
index 1ebf50ffa55dece9dcd3da88de9a2ac4eac814c7..f28af8efad6257f04549d69d0ca9d3ca2a9fdd44 100644
--- a/source/blender/python/api2_2x/constant.c
+++ b/source/blender/python/api2_2x/constant.c
@@ -90,7 +90,7 @@ static PyMethodDef BPy_constant_methods[] = {
 		"() - Returns the keys the dictionary"},
 	{"values", (PyCFunction) constant_values, METH_NOARGS, 
 		"() - Returns the values from the dictionary"},
-	{NULL}
+	{NULL, NULL, 0, NULL}
 };
 //------------------------mp_length
 static int constantLength(BPy_constant *self)
diff --git a/source/blender/python/api2_2x/doc/API_intro.py b/source/blender/python/api2_2x/doc/API_intro.py
index 9a7c16d51688b0dc11c6166aadb6995b0aa266cc..a23999f4a0e20b7e1fed28a0fec1775f0ce9cd27 100644
--- a/source/blender/python/api2_2x/doc/API_intro.py
+++ b/source/blender/python/api2_2x/doc/API_intro.py
@@ -33,6 +33,7 @@ The Blender Python API Reference
   - L{NMesh} (*)
   - L{Noise}
   - L{Object} (*)
+     - L{Pose}
   - L{Registry}
   - L{Scene}
      - L{Radio}
diff --git a/source/blender/python/api2_2x/doc/Armature.py b/source/blender/python/api2_2x/doc/Armature.py
index 79f9481192d95a8a0a7fa6c5c2eac01e927b877c..a8ce2e3c1ebaf775712aa7767d342ac78f789637 100644
--- a/source/blender/python/api2_2x/doc/Armature.py
+++ b/source/blender/python/api2_2x/doc/Armature.py
@@ -212,7 +212,7 @@ class Bone:
   @type matrix: Matrix Object
   @ivar parent: The parent Bone.
   @type parent: Bone Object
-  @ivar children: The children bones.
+  @ivar children: The children directly attached to this bone.
   @type children: List of Bone Objects
   @ivar weight: The bone's weight.
   @type weight: Float
@@ -246,6 +246,13 @@ class Bone:
     @rtype: Bool
     """
 
+  def getAllChildren():
+    """
+    Gets all the children under this bone including the children's children.
+    @rtype: List of Bone object
+    @return: all bones under this one
+    """
+
 class Editbone:
   """
   The Editbone Object
@@ -260,7 +267,7 @@ class Editbone:
   @type head: Vector Object
   @ivar tail: This Bone's "tail" ending position when in rest state (armaturespace).
   @type tail: Vector Object
-  @ivar matrix: This Bone's matrix. (armaturespace) This cannot be set.
+  @ivar matrix: This Bone's matrix. (armaturespace)
   @type matrix: Matrix Object
   @ivar parent: The parent Bone.
   @type parent: Editbone Object
diff --git a/source/blender/python/api2_2x/doc/Ipo.py b/source/blender/python/api2_2x/doc/Ipo.py
index 8621bd18ca020ef6ab8b4b23b816aef1393647d9..01abef7e4306808396f6248c61d27509113483c7 100644
--- a/source/blender/python/api2_2x/doc/Ipo.py
+++ b/source/blender/python/api2_2x/doc/Ipo.py
@@ -297,6 +297,16 @@ class IpoCurve:
         Can be Constant, Extrapolation, Cyclic or Cyclic_extrapolation.
     @rtype: None
     @return: None
+    @note: Cyclic Ipo curves never reach the end value.  If the first and
+    last bezier points do not have the same y coordinate, the value of the
+    curve when it "cycles" is that of the first point.  If a user wants to
+    get the value of the final curve point, read the final point from the
+    curve's L{bezierPoints} attribute::
+
+		ipo = Blender.Object.Get('Cube').ipo
+		icu = ipo.getCurves('LocX')
+		endtime,endvalue = icu.bezierPoints[-1].pt
+
     """
 
   def getExtrapolation():
diff --git a/source/blender/python/api2_2x/doc/Key.py b/source/blender/python/api2_2x/doc/Key.py
index 6d3c8316a0ed4843204a72633027d9beaddb4847..795346491a1461311e1f9c70ed93c49a2f31db93 100644
--- a/source/blender/python/api2_2x/doc/Key.py
+++ b/source/blender/python/api2_2x/doc/Key.py
@@ -6,7 +6,7 @@ The Blender.Key submodule.
 This module provides access to B{Key} objects in Blender.
 
 @type Types: readonly dictionary
-@var Types: The type of a key, indicating the type of data in the
+@var Types: The type of a key owner, indicating the type of data in the
 data blocks.
     - MESH - the key is a Mesh key; data blocks contain
     L{NMVert<NMesh.NMVert>} vertices.
@@ -15,7 +15,6 @@ data blocks.
     3 floating point numbers).
     - LATTICE - the key is a Lattice key; data blocks contain
     BPoints, each point represented by a list of 3 floating point numbers.
-
 """
 
 def Get(name = None):
@@ -38,7 +37,7 @@ class Key:
     keyframe data.
     
     @ivar ipo:  Key Ipo.  Contains the Ipo if one is assigned to the
-    object, B{None} otherwise.  Setting to B{None} clears the current Ipo..
+    object, B{None} otherwise.  Setting to B{None} clears the current Ipo.
     @type ipo:  Blender Ipo
     @ivar value: The value of the key. Read-only.
     @type value: float
@@ -47,6 +46,8 @@ class Key:
     @type type: int
     @ivar blocks: A list of KeyBlocks for the key.  Read-only.
     @type blocks: Blender KeyBlock.
+    @ivar relative: Indicates whether the key is relative(=True) or normal.
+    @type relative: bool
     """
 
     def getIpo():
@@ -66,6 +67,8 @@ class KeyBlock:
   Each Key object has a list of KeyBlocks attached, each KeyBlock
   representing a keyframe.
 
+  @ivar curval: Current value of the corresponding IpoCurve.  Read-only.
+  @type curval: float
   @ivar name: The name of the Keyblock.  Truncated to 32 characters.
   @type name: string
   @ivar pos: The position of the keyframe.
diff --git a/source/blender/python/api2_2x/doc/Mathutils.py b/source/blender/python/api2_2x/doc/Mathutils.py
index 2d4e0a0c092d6912f7bdeeb8949afd7587693c5e..b1a8839110e21c530bcc523522383d2d7b33fd86 100644
--- a/source/blender/python/api2_2x/doc/Mathutils.py
+++ b/source/blender/python/api2_2x/doc/Mathutils.py
@@ -493,6 +493,7 @@ class Vector:
   def resize4D():
     """
     Resize the vector to 4d. New axis will be 0.0.
+    The last component will be 1.0, to make multiplying 3d vectors by 4x4 matrices easier.
     @return: a copy of itself
     """
 
diff --git a/source/blender/python/api2_2x/doc/Mesh.py b/source/blender/python/api2_2x/doc/Mesh.py
index f60d84ff02a1032888c29a3e19b1c4352efb7c7e..54fd5d59cf09f1b8ccb75629deb8faf1c2742b8d 100644
--- a/source/blender/python/api2_2x/doc/Mesh.py
+++ b/source/blender/python/api2_2x/doc/Mesh.py
@@ -112,6 +112,11 @@ Example::
 	already associated with a group, else it does nothing.\n
 	- REPLACE: attempts to replace a weight with the new weight value
 	for an already associated vertex/group, else it does nothing. 
+@type SelectModes: readonly dictionary.
+@var SelectModes: The available edit select modes.
+	- VERTEX: vertex select mode.
+	- EDGE: edge select mode.
+	- FACE: face select mode.
 """
 
 AssignModes = {'REPLACE':1}
@@ -135,6 +140,19 @@ def New(name='Mesh'):
   @return: a new Blender mesh.
   """
 
+def Mode(mode=0):
+  """
+  Get and/or set the selection modes for mesh editing.  These are the modes
+  visible in the 3D window when a mesh is in Edit Mode.
+  @type mode: int
+  @param mode: The name of the mesh data object.  See L{SelectModes} for values.
+  Modes can be combined.  If omitted, the selection mode is not changed.
+  @rtype: int
+  @return: the current selection mode.
+  @note: The selection mode is an attribute of the current scene.  If the
+  scene is changed, the selection mode may not be the same.
+  """
+
 class MCol:
   """
   The MCol object
@@ -273,9 +291,9 @@ class MVertSeq:
       l=[(.1,.1,.1),Vector([2,2,.5])]
       me.verts.extend(l)              # add multiple vertices
 
-    @type coords: tuple(s) of floats or vectors
+    @type coords: sequences(s) of floats or vectors
     @param coords: coords can be
-       - a tuple of three floats,
+       - a sequence of three floats,
        - a 3D vector, or
        - a sequence (list or tuple) of either of the above.
     """
@@ -348,12 +366,12 @@ class MEdgeSeq:
       v = me.verts                    # get vertices
       if len(v) >= 6:                 # if there are enough vertices...
         me.edges.extend(v[0],v[1])    #   add a single edge
-        l=[(v[1],v[2],v[3]),(v[0],v[2],v[4],v[5])]
+        l=[(v[1],v[2],v[3]),[v[0],v[2],v[4],v[5]]]
         me.edges.extend(l)            #   add multiple edges
 
-    @type vertseq: tuple(s) of MVerts
+    @type vertseq: sequence(s) of MVerts
     @param vertseq: either two to four MVerts, or sequence (list or tuple) 
-    of tuples each containing two to four MVerts.
+    of sequences each containing two to four MVerts.
     """
 
   def delete(edges):
@@ -442,7 +460,7 @@ class MFace:
      colors; use L{Mesh.faceUV} and L{Mesh.vertexColors} to test.  B{Note}:
      if a mesh has i{both} UV faces and vertex colors, the colors stored in
      the UV faces will be used here. 
-  @type col: list of MCols
+  @type col: sequence of MCols
   @ivar mat: The face's index into the mesh's materials
       list.  It is in the range [0,15].
   @type mat: int
@@ -520,7 +538,7 @@ class MFaceSeq:
   def extend(vertseq):
     """
     Add one or more faces to the mesh.  Faces which already exist in the 
-    mesh are ignored.  Tuples of two vertices are accepted, but no face
+    mesh are ignored.  Sequences of two vertices are accepted, but no face
     will be created.
 
     Example::
@@ -531,12 +549,12 @@ class MFaceSeq:
       v = me.verts                    # get vertices
       if len(v) >= 6:                 # if there are enough vertices...
         me.faces.extend(v[1],v[2],v[3]) #   add a single edge
-        l=[(v[0],v[1]),(v[0],v[2],v[4],v[5])]
+        l=[(v[0],v[1]),[v[0],v[2],v[4],v[5]]]
         me.faces.extend(l)            #   add another face
 
-    @type vertseq: tuple(s) of MVerts
+    @type vertseq: sequence(s) of MVerts
     @param vertseq: either two to four MVerts, or sequence (list or tuple) 
-    of tuples each containing two to four MVerts.
+    of sequences each containing two to four MVerts.
     """
 
   def delete(deledges, faces):
@@ -608,6 +626,9 @@ class Mesh:
     be set.  Furthermore, if vertexColors is already set when faceUV is set,
     vertexColors is cleared.  This is because the vertex color information
     is stored with UV faces, so enabling faceUV implies enabling vertexColors.
+    In addition, faceUV cannot be set when the mesh has no faces defined
+    (this is the same behavior as the UI).  Attempting to do so will throw
+    a RuntimeError exception.
   @type faceUV: bool
   @ivar vertexColors: The mesh contains vertex colors.  See L{faceUV} for the
     use of vertex colors when UV-mapped texture faces are enabled.
@@ -706,11 +727,11 @@ class Mesh:
 
   def findEdges(edges):
     """
-    Quickly search for the location of an edge.  
-    @type edges: tuple(s) of ints or MVerts
+    Quickly search for the location of an edges.  
+    @type edges: sequence(s) of ints or MVerts
     @param edges: can be tuples of MVerts or integer indexes (B{note:} will
        not work with PVerts) or a sequence (list or tuple) containing two or
-       more tuples.
+       more sequences.
     @rtype: int, None or list
     @return: if an edge is found, its index is returned; otherwise None is
     returned.  If a sequence of edges is passed, a list is returned.
@@ -825,6 +846,16 @@ class Mesh:
     associated with the mesh's object
     """
 
+  def getVertexInfluences(index):
+    """
+    Get the bone influences for a specific vertex.
+    @type index: int
+    @param index: The index of a vertex.
+    @rtype: list of lists
+    @return: List of pairs [name, weight], where name is the bone name (string)
+        and weight is a float value.
+    """
+
   def smooth():
     """
     Flattens angle of selected faces. Experimental mesh tool.
diff --git a/source/blender/python/api2_2x/doc/Object.py b/source/blender/python/api2_2x/doc/Object.py
index 45d3fb9c90ddc3049d7dc759b46b682d9624e4fc..f51a31e85f23d59a3ce64db40470cfeec2a804cc 100644
--- a/source/blender/python/api2_2x/doc/Object.py
+++ b/source/blender/python/api2_2x/doc/Object.py
@@ -269,6 +269,19 @@ class Object:
     the type Effect.
     """
 
+  def insertShapeKey():
+    """
+    Insert a Shape Key in the current object.  It applies to Objects of
+    the type Mesh, Lattice, or Curve.
+    """
+
+  def getPose():
+    """
+    Gets the current Pose of the object.
+    @rtype: Pose object
+    @return: the current pose object
+    """
+
   def clearIpo():
     """
     Unlinks the ipo from this object.
diff --git a/source/blender/python/api2_2x/doc/Theme.py b/source/blender/python/api2_2x/doc/Theme.py
index cd5ea2c3036c36b6d55f8bf9125828f9167ed08e..16bdf3f4d84a063e63c5959f75f38051a830221e 100644
--- a/source/blender/python/api2_2x/doc/Theme.py
+++ b/source/blender/python/api2_2x/doc/Theme.py
@@ -184,6 +184,10 @@ class ThemeSpace:
   @ivar face_select: theme rgba var.
   @ivar face_dot: theme rgba var.
   @ivar normal: theme rgba var.
+  @ivar bone_solid: theme rgba var.
+  @ivar bon_pose: theme rgba var.
+  @ivar strip: theme rgba var.
+  @ivar strip_select: theme rgba var.
   @ivar syntaxl: theme rgba var.
   @ivar syntaxn: theme rgba var.
   @ivar syntaxb: theme rgba var.
diff --git a/source/blender/python/api2_2x/doc/Window.py b/source/blender/python/api2_2x/doc/Window.py
index 647756540549026909ecd08cbbbe36b37e163b48..061ae696f6a09a26d9273fc8d26f40ab95589e97 100644
--- a/source/blender/python/api2_2x/doc/Window.py
+++ b/source/blender/python/api2_2x/doc/Window.py
@@ -232,7 +232,7 @@ def GetPerspMatrix ():
   @return: the current matrix.
   """
 
-def EditMode(enable = -1, undo_msg = 'From script'):
+def EditMode(enable = -1, undo_msg = 'From script', undo = 1):
   """
   Get and optionally set the current edit mode status: in or out.
 
@@ -258,6 +258,9 @@ def EditMode(enable = -1, undo_msg = 'From script'):
       string is used as the undo message in the Mesh->Undo History submenu in
       the 3d view header.  Max length is 63, strings longer than that get
       clamped.
+  @param undo: don't save Undo information (only needed when exiting edit
+  mode).
+  @type undo: int
   @rtype: int (bool)
   @return: 0 if Blender is not in edit mode right now, 1 otherwise. 
   @warn: this is an important function. NMesh operates on normal Blender
diff --git a/source/blender/python/api2_2x/matrix.c b/source/blender/python/api2_2x/matrix.c
index c66482eab1ce063b4e1ae002dbd8d27b361ddf82..fcf0616b874d65a29a9b562ec575fac821feca1d 100644
--- a/source/blender/python/api2_2x/matrix.c
+++ b/source/blender/python/api2_2x/matrix.c
@@ -458,7 +458,7 @@ static int Matrix_ass_item(MatrixObject * self, int i, PyObject * ob)
 	float vec[4];
 	PyObject *m, *f;
 
-	if(i > self->rowSize || i < 0){
+	if(i >= self->rowSize || i < 0){
 		return EXPP_ReturnIntError(PyExc_TypeError,
 			"matrix[attribute] = x: bad row\n");
 	}
diff --git a/source/blender/python/api2_2x/vector.c b/source/blender/python/api2_2x/vector.c
index bb862fe42f74876ddc4ca73b00f5a3441f86a2a1..d9b656be61f5cdd2b11ef7b064db81b56029f317 100644
--- a/source/blender/python/api2_2x/vector.c
+++ b/source/blender/python/api2_2x/vector.c
@@ -160,9 +160,9 @@ PyObject *Vector_Resize4D(VectorObject * self)
 	self->vec = self->data.py_data;  //force
 	if(self->size == 2){
 		self->data.py_data[2] = 0.0f;
-		self->data.py_data[3] = 0.0f;
+		self->data.py_data[3] = 1.0f;
 	}else if(self->size == 3){
-		self->data.py_data[3] = 0.0f;
+		self->data.py_data[3] = 1.0f;
 	}
 	self->size = 4;
 	return EXPP_incr_ret((PyObject*)self);
diff --git a/source/blender/python/api2_2x/windowTheme.c b/source/blender/python/api2_2x/windowTheme.c
index d07323d0ccd9f7bb81ab7f8ce73a30a87839225a..4043c9e0fafe2c808f3817a536419e84b384f411 100644
--- a/source/blender/python/api2_2x/windowTheme.c
+++ b/source/blender/python/api2_2x/windowTheme.c
@@ -170,6 +170,10 @@ static PyObject *ThemeSpace_getAttr( BPy_ThemeSpace * self, char *name )
 		ELSEIF_TSP_RGBA( face_select )
 		ELSEIF_TSP_RGBA( face_dot )
 		ELSEIF_TSP_RGBA( normal )
+		ELSEIF_TSP_RGBA( bone_solid )
+		ELSEIF_TSP_RGBA( bone_pose )
+		ELSEIF_TSP_RGBA( strip )
+		ELSEIF_TSP_RGBA( strip_select )
 		ELSEIF_TSP_RGBA( syntaxl )
 		ELSEIF_TSP_RGBA( syntaxn )
 		ELSEIF_TSP_RGBA( syntaxb )
@@ -180,14 +184,15 @@ static PyObject *ThemeSpace_getAttr( BPy_ThemeSpace * self, char *name )
 		else if( !strcmp( name, "facedot_size" ) )
 		attrib = Py_BuildValue( "i", tsp->facedot_size );
 	else if( !strcmp( name, "__members__" ) )
-		attrib = Py_BuildValue( "[sssssssssssssssssssssssssssssss]", "theme",
+		attrib = Py_BuildValue("[sssssssssssssssssssssssssssssssssss]", "theme",
 					"back", "text", "text_hi", "header",
 					"panel", "shade1", "shade2", "hilite",
 					"grid", "wire", "lamp", "select", "active",
 					"transform", "vertex", "vertex_select",
 					"edge", "edge_select", "edge_seam",
 					"edge_facesel", "face", "face_select",
-					"face_dot", "normal",
+					"face_dot", "normal", "bone_solid", "bone_pose",
+					"strip", "strip_select",
 					"syntaxl", "syntaxn", "syntaxb", "syntaxv", "syntaxc",
 					"vertex_size", "facedot_size" );
 
@@ -230,6 +235,10 @@ static int ThemeSpace_setAttr( BPy_ThemeSpace * self, char *name,
 		ELSEIF_TSP_RGBA( face_select )
 		ELSEIF_TSP_RGBA( face_dot )
 		ELSEIF_TSP_RGBA( normal )
+		ELSEIF_TSP_RGBA( bone_solid )
+		ELSEIF_TSP_RGBA( bone_pose )
+		ELSEIF_TSP_RGBA( strip )
+		ELSEIF_TSP_RGBA( strip_select )
 		ELSEIF_TSP_RGBA( syntaxl )
 		ELSEIF_TSP_RGBA( syntaxn )
 		ELSEIF_TSP_RGBA( syntaxb )
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 34a2ff01eadb064894e3a0715f65e5f8bc85bc25..e3fbb98476123a3900b5fec930401d5b45dfe213 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -1300,7 +1300,7 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
 			uiDefButBitS(block, TOG, MOD_MIR_CLIPPING, B_MODIFIER_RECALC, "Do Clipping",	lx+60, cy, buttonWidth-60,19, &mmd->flag, 1, 2, 0, 0, "Prevents during Transform vertices to go through Mirror");
 		} else if (md->type==eModifierType_Decimate) {
 			DecimateModifierData *dmd = (DecimateModifierData*) md;
-			uiDefButF(block, NUM, B_MODIFIER_RECALC, "Percent:",	lx,(cy-=19),buttonWidth,19, &dmd->percent, 0.0, 1.0, 10, 0, "Defines the percentage of triangles to reduce to");
+			uiDefButF(block, NUM, B_MODIFIER_RECALC, "Ratio:",	lx,(cy-=19),buttonWidth,19, &dmd->percent, 0.0, 1.0, 10, 0, "Defines the percentage of triangles to reduce to");
 			sprintf(str, "Face Count: %d", dmd->faceCount);
 			uiDefBut(block, LABEL, 1, str,	lx, (cy-=19), 160,19, NULL, 0.0, 0.0, 0, 0, "Displays the current number of faces in the decimated mesh");
 		} else if (md->type==eModifierType_Wave) {
diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c
index d26ade8b56195b39f514a69b12a5dcadb052ec38..d4f4d182b8fc78cc8d139f051c31d79e9a3fb292 100644
--- a/source/blender/src/buttons_logic.c
+++ b/source/blender/src/buttons_logic.c
@@ -2438,7 +2438,7 @@ void buttons_ketsji(uiBlock *block, Object *ob)
 				&ob->gameflag, 0, 0,0, 0,
 				"Specify a bounds object for physics");
 		if (ob->gameflag & OB_BOUNDS) {
-			uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Concave Mesh %x4|Convex Polytope%x5",
+			uiDefButS(block, MENU, REDRAWVIEW3D, "Boundary Display%t|Box%x0|Sphere%x1|Cylinder%x2|Cone%x3|Convex Hull Polytope%x5|Static TriangleMesh %x4|",
 				85, 125, 140, 19, &ob->boundtype, 0, 0, 0, 0, "Selects the collision type");
 		}
 	}
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index c06108e1e16474245ad0b46e092413594fa9d049..153b304079e98993eb864bece845ab11d25ab515 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -825,16 +825,34 @@ void drawseqspace(ScrArea *sa, void *spacedata)
 
 	if(ed) {
 		seq= ed->seqbasep->first;
-		while(seq) {
-			if(seq->flag & SELECT); else drawseq(seq);
+		while(seq) { /* bound box test, dont draw outside the view */
+			if (seq->flag & SELECT ||
+					seq->start > G.v2d->cur.xmax ||
+					seq->start+seq->len < G.v2d->cur.xmin ||
+					seq->machine+1.0 < G.v2d->cur.ymin ||
+					seq->machine > G.v2d->cur.ymax)
+			{
+				/* dont draw */
+			} else {
+				drawseq(seq);
+			}
 			seq= seq->next;
 		}
 	}
 	ed= G.scene->ed;
 	if(ed) {
 		seq= ed->seqbasep->first;
-		while(seq) {
-			if(seq->flag & SELECT) drawseq(seq);
+		while(seq) { /* bound box test, dont draw outside the view */
+			if (!(seq->flag & SELECT) ||
+					seq->start > G.v2d->cur.xmax ||
+					seq->start+seq->len < G.v2d->cur.xmin ||
+					seq->machine+1.0 < G.v2d->cur.ymin ||
+					seq->machine > G.v2d->cur.ymax)
+			{
+				/* dont draw */
+			} else {
+				drawseq(seq);
+			}
 			seq= seq->next;
 		}
 	}
diff --git a/source/blender/src/drawsound.c b/source/blender/src/drawsound.c
index dd0bc08244c33a3b13fdaec1875a54aa3853e258..adf3aacf9c4aad17f8b50177245c14f1e5930848 100644
--- a/source/blender/src/drawsound.c
+++ b/source/blender/src/drawsound.c
@@ -64,8 +64,7 @@ void drawsoundspace(ScrArea *sa, void *spacedata);
 static void draw_wave(int startsamp, int endsamp, short sampdx, short offset, short *sp, float sampfac, float y)
 {
 	float min, max, v1[2], v2[3];
-	int i, j;
-	short value, deltasp;
+	int i, j, deltasp, value; /*deltasp, value: were both shorts but for music files 5min, zooming out cased a crash */
 	
 	sp+= offset*startsamp;
 
diff --git a/source/blender/src/editoops.c b/source/blender/src/editoops.c
index 2b4a3e869f8548c5a0ca510047cc8d1df06ee1a3..8b1f96e35690e25d35f32337e89e5f0cf11123ff 100644
--- a/source/blender/src/editoops.c
+++ b/source/blender/src/editoops.c
@@ -335,6 +335,7 @@ void transform_oops(int mode, int context)
 			if(val) {
 				switch(event) {
 				case ESCKEY:
+				case RIGHTMOUSE:
 				case LEFTMOUSE:
 				case SPACEKEY:
 				case RETKEY:
@@ -358,7 +359,7 @@ void transform_oops(int mode, int context)
 		}
 	}
 	
-	if(event==ESCKEY) {
+	if(event==ESCKEY || event==RIGHTMOUSE) {
 		tv= transmain;
 		for(a=0; a<tot; a++, tv++) {
 			tv->loc[0]= tv->oldloc[0];
diff --git a/source/blender/src/filesel.c b/source/blender/src/filesel.c
index 07d85d481607049d13efe14316af6e394394c286..e4cfb8338957368a0d672a403b7d6d7066aff2ae 100644
--- a/source/blender/src/filesel.c
+++ b/source/blender/src/filesel.c
@@ -1111,15 +1111,22 @@ void drawfilespace(ScrArea *sa, void *spacedata)
 	}
 	else loadbutton= 0;
 
-	uiDefBut(block, TEX,1,"",	textrct.xmin, filebuty1, textrct.xmax-textrct.xmin-loadbutton, 21, sfile->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
-	uiDefBut(block, TEX,2,"",	textrct.xmin, filebuty2, textrct.xmax-textrct.xmin-loadbutton, 21, sfile->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
-
+	uiBlockBeginAlign(block);
+	uiDefBut(block, TEX,2,"",	textrct.xmin, filebuty2, textrct.xmax-textrct.xmin-loadbutton, 21, sfile->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "Directory, enter a directory and press enter to create it"); /* Directory input */
 	if(loadbutton) {
 		uiSetCurFont(block, UI_HELV);
 		uiDefBut(block, BUT,	    5, sfile->title,	textrct.xmax-loadbutton, filebuty2, loadbutton, 21, sfile->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
+	}
+	uiBlockEndAlign(block);
+	
+	uiBlockBeginAlign(block);
+	uiDefBut(block, TEX,1,"",	textrct.xmin, filebuty1, textrct.xmax-textrct.xmin-loadbutton, 21, sfile->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "File, increment version number with (+/-)"); /* File input */
+	if(loadbutton) {
+		uiSetCurFont(block, UI_HELV);
 		uiDefBut(block, BUT,	    6, "Cancel",	textrct.xmax-loadbutton, filebuty1, loadbutton, 21, sfile->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
 	}
-
+	uiBlockEndAlign(block);
+	
 	menu= fsmenu_build_menu();
 	if(menu[0])	// happens when no .Bfs is there, and first time browse
 		uiDefButS(block, MENU,	3, menu, scrollrct.xmin, filebuty1, scrollrct.xmax-scrollrct.xmin, 21, &sfile->menu, 0, 0, 0, 0, "");
diff --git a/source/blender/src/header_filesel.c b/source/blender/src/header_filesel.c
index 3cf07f7bae2f097d9620c26989357f3944cb20e5..62725f33f8a36a0baee44365eba2e8cca1143d5c 100644
--- a/source/blender/src/header_filesel.c
+++ b/source/blender/src/header_filesel.c
@@ -128,9 +128,11 @@ void file_buttons(void)
 	BIF_DrawString(uiBlockGetCurFont(block), sfile->title, (U.transopts & USER_TR_BUTTONS));
 	xco+= BIF_GetStringWidth(G.font, sfile->title, (U.transopts & USER_TR_BUTTONS));
 	
+	uiBlockBeginAlign(block);
 	uiDefIconButBitS(block, ICONTOG, FILE_SHOWSHORT, B_SORTFILELIST, ICON_LONGDISPLAY,xco+=XIC,0,XIC,YIC, &sfile->flag, 0, 0, 0, 0, "Toggles long info");
 	uiDefIconButBitS(block, TOG, FILE_HIDE_DOT, B_RELOADDIR, ICON_GHOST,xco+=XIC,0,XIC,YIC, &sfile->flag, 0, 0, 0, 0, "Hides dot files");
-
+	uiBlockEndAlign(block);
+	
 	uiDefButBitS(block, TOG, FILE_STRINGCODE, 0, "Relative Paths", xco+=XIC+20,0,100,YIC, &sfile->flag, 0, 0, 0, 0, "Makes sure returned paths are relative to the current .blend file");
 
 	xco+=90;
diff --git a/source/blender/src/header_imasel.c b/source/blender/src/header_imasel.c
index 68e47a97420598af16cf00e1f69153cef51bfc55..c99112248b74a3e99db5268b27925464e3c40ece 100644
--- a/source/blender/src/header_imasel.c
+++ b/source/blender/src/header_imasel.c
@@ -125,12 +125,15 @@ void imasel_buttons(void)
 		xco+=BMF_GetStringWidth(G.fonts, simasel->title);
 		xco+=25;
 	}
+	
+	uiBlockBeginAlign(block);
 	uiDefIconBut(block, BUT, B_IMASELREMOVEBIP, ICON_BPIBFOLDER_X, xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "");/* remove  */
 	
 	uiDefIconButS(block, TOG|BIT|0, B_REDR, ICON_BPIBFOLDERGREY, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles display of directory information");/* dir		*/
 	uiDefIconButS(block, TOG|BIT|1, B_REDR, ICON_INFO, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles display of selected image information");/* info  */
 	uiDefIconButS(block, TOG|BIT|2, B_REDR, ICON_IMAGE_COL, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "");/* image */
 	uiDefIconButS(block, TOG|BIT|3, B_REDR, ICON_MAGNIFY, xco+=XIC,0,XIC,YIC, &simasel->mode, 0, 0, 0, 0, "Toggles magnified view of thumbnail of images under mouse pointer");/* magnify */
+	uiBlockEndAlign(block);
 	
 	/* always do as last */
 	curarea->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c
index 36334a7d2952d506e785a559a27be145ce2eb2c6..ea02e03b8bdf20a8ad9fa4e0e7b45ae10fb653be 100644
--- a/source/blender/src/header_ipo.c
+++ b/source/blender/src/header_ipo.c
@@ -1183,6 +1183,7 @@ void ipo_buttons(void)
 
 	/* COPY PASTE */
 	xco-= XIC/2;
+	uiBlockBeginAlign(block);
 	if(curarea->headertype==HEADERTOP) {
 		uiDefIconBut(block, BUT, B_IPOCOPY, ICON_COPYUP,	xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Copies the selected curves to the buffer");
 		uiSetButLock(G.sipo->ipo && G.sipo->ipo->id.lib, "Can't edit library data");
@@ -1193,15 +1194,19 @@ void ipo_buttons(void)
 		uiSetButLock(G.sipo->ipo && G.sipo->ipo->id.lib, "Can't edit library data");
 		uiDefIconBut(block, BUT, B_IPOPASTE, ICON_PASTEDOWN,	xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the curves from the buffer");
 	}
+	uiBlockEndAlign(block);
 	xco+=XIC/2;
 	
 	uiClearButLock();
+
 	/* ZOOMBORDER */
 	uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE,	xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to area");
 	
+	xco+=XIC/2;
+	
 	/* draw LOCK */
 	uiDefIconButS(block, ICONTOG, 1, ICON_UNLOCKED,	xco+=XIC,0,XIC,YIC, &(G.sipo->lock), 0, 0, 0, 0, "Toggles forced redraw of other windows to reflect changes in real time");
-
+	
 	/* always do as last */
 	curarea->headbutlen= xco+2*XIC;
 
diff --git a/source/blender/src/header_oops.c b/source/blender/src/header_oops.c
index a3f068dc5a5f47222d00e0e3912adb8dffa3df6b..f84cee782d7ac1bb70f589f5a9e8b3525a9b56b7 100644
--- a/source/blender/src/header_oops.c
+++ b/source/blender/src/header_oops.c
@@ -72,26 +72,55 @@ void do_oops_buttons(short event)
 {
 	float dx, dy;
 	
+	/* used for maximize hack */
+	int win_width, win_height; 
+	float aspect_win, aspect_oops, oops_width, oops_height, oops_x_mid, oops_y_mid;
+	
+	
 	if(curarea->win==0) return;
-
-	switch(event) {
-	case B_OOPSHOME:
-		init_v2d_oops(curarea, curarea->spacedata.first);	// forces min/max to be reset
-		boundbox_oops(0);
-		G.v2d->cur= G.v2d->tot;
-		dx= 0.15*(G.v2d->cur.xmax-G.v2d->cur.xmin);
-		dy= 0.15*(G.v2d->cur.ymax-G.v2d->cur.ymin);
-		G.v2d->cur.xmin-= dx;
-		G.v2d->cur.xmax+= dx;
-		G.v2d->cur.ymin-= dy;
-		G.v2d->cur.ymax+= dy;		
-		test_view2d(G.v2d, curarea->winx, curarea->winy);
-		scrarea_queue_winredraw(curarea);
-		break;
 	
-	case B_OOPSVIEWSEL:
+	if (event == B_NEWOOPS) {
+		scrarea_queue_winredraw(curarea);
+		scrarea_queue_headredraw(curarea);
+		G.soops->lockpoin= 0;
+	} else { /* must be either B_OOPSHOME or B_OOPSVIEWSEL */
 		init_v2d_oops(curarea, curarea->spacedata.first);	// forces min/max to be reset
-		boundbox_oops(1);
+		if (event == B_OOPSHOME) {
+			boundbox_oops(0); /* Test all oops blocks */
+		} else {
+			boundbox_oops(1); /* Test only selected oops blocks */
+		}
+		
+		
+		/* Hack to work with test_view2d in drawipo.c
+		Modify the bounding box so it is maximized to the window aspect
+		so viewing all oops blocks isnt limited to hoz/vert only.
+		Cant modify drawipo.c because many other functions use this hos/vert operation - Campbell*/
+		
+		win_width= curarea->winrct.xmax - curarea->winrct.xmin;
+		win_height= curarea->winrct.ymax - curarea->winrct.ymin;
+		
+		oops_width = G.v2d->tot.xmax - G.v2d->tot.xmin;
+		oops_height = G.v2d->tot.ymax - G.v2d->tot.ymin;
+		
+		oops_x_mid = (G.v2d->tot.xmax + G.v2d->tot.xmin)*0.5;
+		oops_y_mid = (G.v2d->tot.ymax + G.v2d->tot.ymin)*0.5;
+		/* wide windows will be above 1, skinny below 1 */
+		aspect_win= (float)win_width / (float)win_height; 
+		aspect_oops = (float)oops_width / (float)oops_height; 
+		if (aspect_win>aspect_oops) {/* the window is wider then the oops bounds, increase the oops width */
+			G.v2d->tot.xmin = oops_x_mid - ((oops_x_mid-G.v2d->tot.xmin) * (aspect_win/aspect_oops) ); /* scale the min */
+			G.v2d->tot.xmax = oops_x_mid + ((G.v2d->tot.xmax-oops_x_mid) * (aspect_win/aspect_oops) );/* scale the max */
+		} else { /* the window is skinnier then the oops bounds, increase the oops height */
+			G.v2d->tot.ymin = oops_y_mid - ((oops_y_mid-G.v2d->tot.ymin) * (aspect_oops/aspect_win) ); /* scale the min */
+			G.v2d->tot.ymax = oops_y_mid + ((G.v2d->tot.ymax-oops_y_mid) * (aspect_oops/aspect_win) );/* scale the max */
+		}
+		
+		/* maybe we should restore the correct values? - do next of its needed */
+		/* end hack */
+		
+		
+		
 		G.v2d->cur= G.v2d->tot;
 		dx= 0.15*(G.v2d->cur.xmax-G.v2d->cur.xmin);
 		dy= 0.15*(G.v2d->cur.ymax-G.v2d->cur.ymin);
@@ -101,13 +130,6 @@ void do_oops_buttons(short event)
 		G.v2d->cur.ymax+= dy;		
 		test_view2d(G.v2d, curarea->winx, curarea->winy);
 		scrarea_queue_winredraw(curarea);
-		break;
-	
-	case B_NEWOOPS:
-		scrarea_queue_winredraw(curarea);
-		scrarea_queue_headredraw(curarea);
-		G.soops->lockpoin= 0;
-		break;
 	}
 }
 
diff --git a/source/blender/src/header_script.c b/source/blender/src/header_script.c
index 1c6a9cb516b00764916ef81cd1351901ce784514..cb1f89d465f1ef479b5baacd58a360359f9a24eb 100644
--- a/source/blender/src/header_script.c
+++ b/source/blender/src/header_script.c
@@ -251,7 +251,8 @@ void script_buttons(void)
 	}
 
 	uiBlockSetEmboss(block, UI_EMBOSS);
-
+	
+	uiBlockBeginAlign(block);
 	uiDefIconBut(block, BUT, B_SCRIPT2PREV, ICON_GO_LEFT, xco+=XIC, 0, XIC, YIC,
 		0, 0, 0, 0, 0, "Returns to previous window");
 
@@ -262,7 +263,8 @@ void script_buttons(void)
 	else
 		uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN,	xco+=XIC,0,XIC,YIC, 0, 0,
 				0, 0, 0, "Makes current window full screen (CTRL+Down arrow)");
-
+	uiBlockEndAlign(block);
+	
 	/* STD SCRIPT BUTTONS */
 	xco += 2*XIC;
 	xco= std_libbuttons(block, xco, 0, 0, NULL, B_SCRIPTBROWSE, ID_SCRIPT, 0, (ID*)sc->script, 0, &(sc->menunr), 0, 0, 0, 0, 0);
diff --git a/source/blender/src/header_seq.c b/source/blender/src/header_seq.c
index cd65317145b3b409cfc99cc1e8a5e87a92d6abc4..444beda38e8b7413bf826d9fc6e7f9dc00fbae23 100644
--- a/source/blender/src/header_seq.c
+++ b/source/blender/src/header_seq.c
@@ -484,8 +484,10 @@ void seq_buttons()
 
 	/* ZOOM and BORDER */
 	xco+= 8;
+	uiBlockBeginAlign(block);
 	uiDefIconButI(block, TOG, B_VIEW2DZOOM, ICON_VIEWZOOM,	xco+=XIC,0,XIC,YIC, &viewmovetemp, 0, 0, 0, 0, "Zooms view in and out (Ctrl MiddleMouse)");
 	uiDefIconBut(block, BUT, B_IPOBORDER, ICON_BORDERMOVE,	xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, "Zooms view to fit area");
+	uiBlockEndAlign(block);
 
 	/* CLEAR MEM */
 	xco+= 8;
diff --git a/source/blender/src/header_text.c b/source/blender/src/header_text.c
index 0438eda08fae1be683597a51978ba4e88317207f..9a6236bb3f72df39b53b6f2547e5a209774f9533 100644
--- a/source/blender/src/header_text.c
+++ b/source/blender/src/header_text.c
@@ -613,13 +613,15 @@ void text_buttons(void)
 	xco += 10;
 	
 	/* FULL WINDOW */
+	uiBlockBeginAlign(block);
 	if(curarea->full) uiDefIconBut(block, BUT,B_FULL, ICON_SPLITSCREEN,	xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Returns to multiple views window (CTRL+Up arrow)");
 	else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN,	xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)");
 		
 	uiDefIconButI(block, ICONTOG, B_TEXTLINENUM, ICON_LONGDISPLAY, xco+=XIC,0,XIC,YIC, &st->showlinenrs, 0, 0, 0, 0, "Displays line numbers");
 
 	uiDefIconButI(block, ICONTOG, B_SYNTAX, ICON_SYNTAX, xco+=XIC,0,XIC,YIC, &st->showsyntax, 0, 0, 0, 0, "Enables Syntax Highlighting");
-
+	uiBlockEndAlign(block);
+	
 	/* STD TEXT BUTTONS */
 	xco+= 2*XIC;
 	xco= std_libbuttons(block, xco, 0, 0, NULL, B_TEXTBROWSE, ID_TXT, 0, (ID*)st->text, 0, &(st->menunr), 0, 0, B_TEXTDELETE, 0, 0);
diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c
index bf4d0e83e26508e753aa077394bcd10dc9896d64..e8598bd265f6930deb2e3ba6d686f6df81964ebc 100644
--- a/source/blender/src/header_view3d.c
+++ b/source/blender/src/header_view3d.c
@@ -4432,6 +4432,7 @@ void view3d_buttons(void)
 	
 	if (ob && (ob->flag & OB_POSEMODE)) {
 		xco+= XIC/2;
+		uiBlockBeginAlign(block);
 		if(curarea->headertype==HEADERTOP) {
 			uiDefIconBut(block, BUT, B_ACTCOPY, ICON_COPYUP, 
 						 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
@@ -4456,6 +4457,7 @@ void view3d_buttons(void)
 						 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
 						 "Pastes the mirrored pose from the buffer");
 		}
+		uiBlockEndAlign(block);
 	}
 
 	/* Always do this last */
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index 5c02db94fd8acd60828080fe31234077dfc92efa..3d534744ed32f89ec012390455e4b7f90b09a578 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -5364,7 +5364,7 @@ void uiBlockEndAlign(uiBlock *block)
 	uiBut *prev, *but=NULL, *next;
 	int flag= 0, cols=0, rows=0;
 	
-	if ( !((BIF_GetThemeValue(TH_BUT_DRAWTYPE) == 1) || (BIF_GetThemeValue(TH_BUT_DRAWTYPE) == 2))) {
+	if ( !((BIF_GetThemeValue(TH_BUT_DRAWTYPE) == 0) || (BIF_GetThemeValue(TH_BUT_DRAWTYPE) == 1) || (BIF_GetThemeValue(TH_BUT_DRAWTYPE) == 2))) {
 		block->flag &= ~UI_BUT_ALIGN;	// all 4 flags
 		return;
 	}
diff --git a/source/blender/src/interface_draw.c b/source/blender/src/interface_draw.c
index d910a394e618ba4823fffe13123d2b97c74791d2..450181a1e9959170a902cdae16cc0d590dadad8f 100644
--- a/source/blender/src/interface_draw.c
+++ b/source/blender/src/interface_draw.c
@@ -1207,12 +1207,18 @@ static void ui_draw_round(int type, int colorid, float asp, float x1, float y1,
 /* super minimal button as used in logic menu */
 static void ui_draw_minimal(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
 {
-	
+	/* too much space between buttons */
+	/* 
 	x1+= asp;
 	x2-= asp;
 	y1+= asp;
 	y2-= asp;
-
+	*/
+	
+	/* Less space between buttons looks nicer */
+	y2-= asp;
+	x2-= asp;
+	
 	/* paper */
 	if(flag & UI_SELECT) {
 		if(flag & UI_ACTIVE) BIF_ThemeColorShade(colorid, -40);
@@ -1744,6 +1750,15 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 	unsigned char ustr[16];
 	PackedFile *pf;
 	int result = 0;
+	int charmax = G.charmax;
+
+	/* <builtin> font in use */
+	if(!strcmp(G.selfont->name, "<builtin>"))
+		charmax = 0xff;
+
+	/* Category list exited without selecting the area */
+	if(G.charmax == 0)
+		charmax = G.charmax = 0xffff;
 
 	/* Calculate the size of the button */
 	width = abs(but->x2 - but->x1);
@@ -1777,7 +1792,7 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 
 			strcpy(tmpStr, G.selfont->name);
 			BLI_convertstringcode(tmpStr, G.sce, 0);
-			err = FTF_SetFont(tmpStr, 0, 14.0);
+			err = FTF_SetFont((unsigned char *)tmpStr, 0, 14.0);
 		}
 	}
 
@@ -1791,12 +1806,12 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 	for(y = 0; y < 6; y++)
 	{
 		// Do not draw more than the category allows
-		if(cs > G.charmax) break;
+		if(cs > charmax) break;
 
 		for(x = 0; x < 12; x++)
 		{
 			// Do not draw more than the category allows
-			if(cs > G.charmax) break;
+			if(cs > charmax) break;
 
 			// Draw one grid cell
 			glBegin(GL_LINE_LOOP);
@@ -1809,9 +1824,18 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 			// Draw character inside the cell
 			memset(wstr, 0, sizeof(wchar_t)*2);
 			memset(ustr, 0, 16);
-			
+
+			// Set the font to be either unicode or <builtin>				
 			wstr[0] = cs;
-			wcs2utf8s(ustr, wstr);
+			if(strcmp(G.selfont->name, "<builtin>"))
+			{
+				wcs2utf8s((char *)ustr, (wchar_t *)wstr);
+			}
+			else
+			{
+				ustr[0] = cs;
+				ustr[1] = 0;
+			}
 
 			if(G.selfont && strcmp(G.selfont->name, "<builtin>"))
 			{
@@ -1821,8 +1845,8 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 				float px, py;
 	
 				// Calculate the position
-				wid = FTF_GetStringWidth(ustr, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
-				FTF_GetBoundingBox(ustr, &llx,&lly,&llz,&urx,&ury,&urz, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
+				wid = FTF_GetStringWidth((char *) ustr, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
+				FTF_GetBoundingBox((char *) ustr, &llx,&lly,&llz,&urx,&ury,&urz, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
 				dx = urx-llx;
 				dy = ury-lly;
 
@@ -1832,12 +1856,12 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 
 				// Set the position and draw the character
 				ui_rasterpos_safe(px, py, but->aspect);
-				FTF_DrawString(ustr, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
+				FTF_DrawString((char *) ustr, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
 			}
 			else
 			{
 				ui_rasterpos_safe(sx + butw/2, sy + buth/2, but->aspect);
-				BIF_DrawString(but->font, ustr, 0);
+				BIF_DrawString(but->font, (char *) ustr, 0);
 			}
 	
 			// Calculate the next position and character
@@ -1855,16 +1879,16 @@ static void ui_draw_but_CHARTAB(uiBut *but)
 	/* Return Font Settings to original */
 	if(U.fontsize && U.fontname[0])
 	{
-		result = FTF_SetFont(U.fontname, 0, U.fontsize);
+		result = FTF_SetFont((unsigned char *)U.fontname, 0, U.fontsize);
 	}
 	else if (U.fontsize)
 	{
-		result = FTF_SetFont(datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
+		result = FTF_SetFont((unsigned char *) datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
 	}
 
 	if (result == 0)
 	{
-		result = FTF_SetFont(datatoc_bfont_ttf, datatoc_bfont_ttf_size, 11);
+		result = FTF_SetFont((unsigned char *) datatoc_bfont_ttf, datatoc_bfont_ttf_size, 11);
 	}
 }
 
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c
index 4b5b7ceedf76fc2f95ca9fb865520688cea8ee32..921048ff3b0955ea4b5511b62f79926d89eb3cfc 100644
--- a/source/blender/src/renderwin.c
+++ b/source/blender/src/renderwin.c
@@ -1012,9 +1012,16 @@ void BIF_do_render(int anim)
 	/* if start render in 3d win, use layer from window (e.g also local view) */
 	if(curarea && curarea->spacetype==SPACE_VIEW3D) {
 		int lay= G.scene->lay;
-		if(G.vd->lay & 0xFF000000)	// localview
-			G.scene->lay |= G.vd->lay;
-		else G.scene->lay= G.vd->lay;
+		/*
+		 * if view is defined (might not be if called form script), check
+		 * and set layers
+		 */
+		if(G.vd) {
+			if(G.vd->lay & 0xFF000000)	// localview
+				G.scene->lay |= G.vd->lay;
+			else
+				G.scene->lay= G.vd->lay;
+		}
 		
 		do_render(anim);
 		
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 582a0e1f037492106e013bf0b1d5394135cd76e5..4faa1a4a035e8bfa2a80f7689a7ca5c0e34d9a96 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -3018,6 +3018,7 @@ void drawinfospace(ScrArea *sa, void *spacedata)
 	} else if(U.userpref == 5) { /* file paths */
 
 		/* yafray: (temporary) path button for yafray xml export, now with fileselect */
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "YFexport: ",
 			(xpos+edgsp), y2+buth+rspace, lpref-smfileselbut, buth,
 			U.yfexportdir, 1.0, 63.0, 0, 0,
@@ -3025,7 +3026,9 @@ void drawinfospace(ScrArea *sa, void *spacedata)
 		uiDefIconBut(block, BUT, B_YAFRAYDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+lpref-smfileselbut), y2+buth+rspace, smfileselbut, buth,
 			0, 0, 0, 0, 0, "Select the default yafray export directory");
-
+		uiBlockEndAlign(block);
+		
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Fonts: ",
 			(xpos+edgsp),y2,(lpref-smfileselbut),buth,
 			U.fontdir, 1.0, 63.0, 0, 0,
@@ -3033,37 +3036,47 @@ void drawinfospace(ScrArea *sa, void *spacedata)
 		uiDefIconBut(block, BUT, B_FONTDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+lpref-smfileselbut),y2,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default font directory");
-
+		uiBlockEndAlign(block);
+		
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Textures: ",
 			(xpos+edgsp+lpref+midsp),y2,(lpref-smfileselbut),buth,
 			U.textudir, 1.0, 63.0, 0, 0, "The default directory to search for textures");
 		uiDefIconBut(block, BUT, B_TEXTUDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(2*lpref)+midsp-smfileselbut),y2,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default texture location");
+		uiBlockEndAlign(block);
 
-
+		
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Tex Plugins: ",
 			(xpos+edgsp+(2*lpref)+(2*midsp)),y2,(lpref-smfileselbut),buth,
 			U.plugtexdir, 1.0, 63.0, 0, 0, "The default directory to search for texture plugins");
 		uiDefIconBut(block, BUT, B_PLUGTEXDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(3*lpref)+(2*midsp)-smfileselbut),y2,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default texture plugin location");
-
+		uiBlockEndAlign(block);
+		
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Seq Plugins: ",
 			(xpos+edgsp+(3*lpref)+(3*midsp)),y2,(lpref-smfileselbut),buth,
 			U.plugseqdir, 1.0, 63.0, 0, 0, "The default directory to search for sequence plugins");
 		uiDefIconBut(block, BUT, B_PLUGSEQDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(4*lpref)+(3*midsp)-smfileselbut),y2,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default sequence plugin location");
+		uiBlockEndAlign(block);
 
-
+		
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Render: ",
 			(xpos+edgsp),y1,(lpref-smfileselbut),buth,
 			U.renderdir, 1.0, 63.0, 0, 0, "The default directory for rendering output");
 		uiDefIconBut(block, BUT, B_RENDERDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+lpref-smfileselbut),y1,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default render output location");
+		uiBlockEndAlign(block);
 
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Python: ",
 			(xpos+edgsp+lpref+midsp),y1,(lpref-2*smfileselbut),buth,
 			U.pythondir, 1.0, 63.0, 0, 0, "The default directory to search for Python scripts");
@@ -3073,21 +3086,26 @@ void drawinfospace(ScrArea *sa, void *spacedata)
 		uiDefIconBut(block, BUT, B_PYTHONDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(2*lpref)+midsp-smfileselbut),y1,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default Python script location");
+		uiBlockEndAlign(block);
 
 
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Sounds: ",
 			(xpos+edgsp+(2*lpref)+(2*midsp)),y1,(lpref-smfileselbut),buth,
 			U.sounddir, 1.0, 63.0, 0, 0, "The default directory to search for sounds");
 		uiDefIconBut(block, BUT, B_SOUNDDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(3*lpref)+(2*midsp)-smfileselbut),y1,smfileselbut,buth,
-			0, 0, 0, 0, 0, "Select the default sound location");
+			0, 0, 0, 0, 0, "Selet the default sound location");
+		uiBlockEndAlign(block);
 
+		uiBlockBeginAlign(block);
 		uiDefBut(block, TEX, 0, "Temp: ",
 			 (xpos+edgsp+(3*lpref)+(3*midsp)),y1,(lpref-smfileselbut),buth,
 			 U.tempdir, 1.0, 63.0, 0, 0, "The directory for storing temporary save files");
 		uiDefIconBut(block, BUT, B_TEMPDIRFILESEL, ICON_FILESEL,
 			(xpos+edgsp+(4*lpref)+(3*midsp)-smfileselbut),y1,smfileselbut,buth,
 			0, 0, 0, 0, 0, "Select the default temporary save file location");
+		uiBlockEndAlign(block);
 
 	}
 
diff --git a/source/blender/src/splash.jpg.c b/source/blender/src/splash.jpg.c
index d96a7c4b1e5b1dd32364f2617161fb2cf3ebc82b..25cd33bae6070c1f6410310ceaf59564948341ed 100644
--- a/source/blender/src/splash.jpg.c
+++ b/source/blender/src/splash.jpg.c
@@ -1,1355 +1,2396 @@
 /* DataToC output of file <splash_jpg> */
 
-int datatoc_splash_jpg_size= 43191;
+int datatoc_splash_jpg_size= 76484;
 char datatoc_splash_jpg[]= {
-255,216,255,224,  0, 16, 74, 70, 73, 70,  0,  1,  2,  0,  0,100,  0,100,  0,  0,255,236,  0,
- 17, 68,117, 99,107,121,  0,  1,  0,  4,  0,  0,  0, 70,  0,  0,255,238,  0, 14, 65,100,111, 98,101,  0,100,192,  0,  0,  0,  1,
-255,219,  0,132,  0,  4,  3,  3,  3,  3,  3,  4,  3,  3,  4,  6,  4,  3,  4,  6,  7,  5,  4,  4,  5,  7,  8,  6,  6,  7,  6,  6,
-  8, 10,  8,  9,  9,  9,  9,  8, 10, 10, 12, 12, 12, 12, 12, 10, 12, 12, 13, 13, 12, 12, 17, 17, 17, 17, 17, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20,  1,  4,  5,  5,  8,  7,  8, 15, 10, 10, 15, 20, 14, 14, 14, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20,255,192,  0, 17,  8,  1, 15,  1,245,  3,  1, 17,  0,  2, 17,  1,  3, 17,  1,255,196,  0,219,  0,  0,  0,
-  7,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  1,  0,  1,  5,  1,  1,  1,  0,
-  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8, 16,  0,  1,  3,  3,  3,  1,  5,  4,  6,  5,  7,  7,  4,
- 10, 19,  0,  1,  2,  3,  4,  0, 17,  5, 33, 18,  6, 49, 65, 81, 34, 19,  7, 97,113, 20,  8,129,145,161, 50,228, 21, 66, 82, 35,
-165, 24,177,193, 98,114,130, 51,102,209,225, 67, 36, 22, 70,  9,240,241,146, 86,210, 99,131,147,164, 37,101,133, 54, 87,178, 83,
-115,179, 52, 84,100,212, 53, 85,117,149,181,197, 38, 23, 71,103, 25, 17,  0,  2,  1,  2,  4,  2,  4, 12,  5,  3,  3,  3,  2,  6,
-  3,  0,  0,  1,  2, 17,  3, 33, 18,  4,  5, 49, 65, 81, 97, 34, 19,240,113,129,145,161,177,193,209,225, 50,162,226, 99, 20, 21,
-  6, 22, 66, 98, 35,241, 82, 51,114,130,146,210, 67,178,194, 83, 36, 68, 53,163, 52,  7,255,218,  0, 12,  3,  1,  0,  2, 17,  3,
- 17,  0, 63,  0,247,245,  0, 10,  0, 20,  0, 40,  0, 80,  5, 44,190, 91,199, 32,228,147,136,149,144,109,188,130,200,  1,147,125,
-  9,232, 20,160, 54,131,236, 38,168, 92,220, 52,240,185,221,202,105, 75,163,195,  3, 66,222,221,168,185,107,189,140, 27,143, 79,
-134, 37,200, 33, 66,224,220, 85,243, 60, 58,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,
-  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,
-  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,
-  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160, 14, 53,234, 47,
-167,115, 12,169, 60,131, 14, 21, 33, 47, 40,187, 42, 55, 85,164,158,170, 71,120,246, 87,  7,188,236,147,114,119,173, 99, 92, 92,
-121,249, 61,199,125,178,239,144, 81, 86,110,225, 76, 20,185,121,125,229, 87, 13,245, 54,126,  4,163, 29,152,221, 43, 24,147,180,
- 44,234,243, 35,167,111,222,  3,186,169,109,155,244,236, 82,221,238,212,122,121,175,121,123,116,216, 33,168,173,203, 61,153,244,
-114,126,227,183,227,178, 80,178,209, 91,155,  1,228,191, 29,193,116,173,  6,227,252,198,189, 18,213,232, 93,138,148, 29, 83, 60,
-226,245,153,218,147,132,213, 26, 37,212,164, 64,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,
-  5,  0, 10,  0, 20,  0, 40,  0, 80,  5, 15, 39,230,188, 75,134, 71, 68,174, 85,153,137,137,105,221, 25, 18, 93, 74, 22,225, 29,
-118, 35,239, 42,221,187, 65,169,237, 88,185,117,210,  9,178, 11,218,139,118, 85,103, 37, 19, 49,138,245,227,210, 12,204,148,195,
-131,203,160,252, 66,200, 74, 19, 33, 75,138, 20,163,208,  5, 62,150,193, 39,223, 86, 39,183,234, 32,170,224,253,126,162,172, 55,
- 45, 52,221, 20,215,171,214,116, 68,173, 43, 72, 90,  8, 82, 72,184, 35, 80, 65,170,  6,136,116,  0, 40,  2,187, 53,158,194,241,
-200, 67, 35,158,200, 71,198,193, 46, 33,144,252,167, 18,210, 11,174, 27, 37,  0,168,139,168,246,  1, 82, 66,220,166,233, 21, 86,
- 71,114,236, 45,170,201,164,186,203,  0, 65, 23, 26,138,140,144,170,228, 60,163,142,241, 56,  7, 39,201,114,145,177, 80, 65,218,
- 30,150,234, 90, 10, 87,234,164, 19,117, 43,216,155,154,150,221,169,220,116,138,109,144,221,189, 11, 74,179,106, 43,172,201, 98,
- 61,118,244,143, 57, 49, 48, 49,220,178,  9,148,178, 18,218, 31, 82,226,133, 40,244,  9, 83,233,109, 36,158,192, 13, 90,158,223,
-168,130,171,131,245,250,138,150,247, 45, 52,221, 20,213,124,222,179,161, 37, 73, 80, 10, 73,  4, 30,132, 85,  3, 68, 58,  0, 20,
-  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,
-  0, 80,  0,160,  1, 64, 16,164,101, 34, 71,116,198,186,158,150,  0, 38, 59,  8, 83,174,  0,122, 21,  4,131,180, 27,245, 85,168,
-  2, 43,252,129,152,107, 97, 51,225,201,139,241, 42,242,216,220,150,221, 43,114,196,237,  9, 97,110, 42,250,126,173,168,  1,255,
-  0,204,222, 32, 41,172,108,183,  1, 23,232,211,103,234,113,212, 26,  0,122, 36,248,211,119,165,149, 20,188,221,188,214, 28, 73,
- 67,168,191, 77,200, 85,136,191, 97,232,123, 40,  2, 85,  0, 10,  0, 20,  0, 40,  2,143,151,187,154,103,143,204, 95, 31, 73, 86,
- 79,104, 13,237,177, 88, 73, 62, 34,144,127, 74,221, 43, 59,113,119,149,137,119, 63, 63,135,  3, 71,110, 86, 30,162, 61,247,201,
-225,199,168,225, 42, 30,161,173, 68,168,229, 10,201,241, 92,189,214,188,235,187,220,223, 43,159, 81,233, 29,230,216,185,219,250,
- 72,115,114, 28,195, 29,179,227,229, 78,141,190,251,  3,174, 56,130,109,221,115, 85,175, 92,214,217,167,120,231, 26,244,182, 89,
-177,107, 67,122,189,218,132,169,208,145, 21, 60,135,144,172,132,167, 37, 45, 74, 61,  0,121,194, 79,219, 85,214,183, 82,221, 20,
-229,231,101,135,161,211, 37, 87,  8,249,144, 23,131,207,190, 21, 41,112, 36,172, 44,238, 83,165,181,155,147,218, 77,169,210,208,
-234,165,219,112,147,235,163, 27, 29,126,150, 61,133, 56,174,170,162, 95, 28,229, 57,158, 37, 48,185, 17, 68, 52, 79,250,196, 55,
- 46, 16,187,119,142,195,237,169,116, 59,133,237, 20,251, 60, 57,197,145,107,182,235, 58,216,118,184,242,146, 59,239, 22,229,216,
-206, 85, 15,226, 33,171,100,132, 88, 72,140,191,190,133, 31,229, 29,198,189, 63, 65,184, 90,213,195, 52, 56,243, 92,209,229,218,
-253,190,238,142,121,103,195,147,228,198,185,119, 63,226, 60, 16, 65, 95, 44,201, 35, 24,214, 69,197, 51, 21,215, 82,178,217, 90,
-  0, 81, 10, 82, 65,  9,208,245, 85,108,217,211,220,189, 92,138,180, 49, 47,234,109,217,166,119, 74,151, 88,204,166, 59, 51,  5,
-140,158, 38, 83,115, 49,242, 82, 28,143, 37,133,  5,182,180, 30,212,168,104, 69, 67, 40,184,186, 53, 70, 79,  9,169,170,197,213,
- 50, 93, 52,113, 72,255,  0, 49,226,145,114,131,  9, 39, 53,  9,172,194,150,150,132,  5,190,218, 95, 46, 57,109,169,216, 77,238,
-111,160,169,149,153,184,230, 81,116,233, 32,119,237,169,101,114, 85,232,169,119, 80,147,130,128,  5,  0, 10,  0, 20,  0, 40,  0,
-137,  9,  5, 74, 54, 72, 23, 36,247, 10,  0,200, 97, 61, 82,224, 60,147, 62,190, 51,199,243,145,242,121,118,154, 91,238, 53, 20,
-151, 80,148, 54,160,149, 93,196,141,151,  4,141, 55, 85,171,154, 75,182,225,158, 81,162, 41,219,214, 89,185, 60,144,146,111,168,
-216, 85, 82,224, 40,  0, 80,  0,160, 15, 36,242, 63,150,206,107,207, 61, 91,203,230, 57,182, 96,191,198, 30, 87,157, 22,108,114,
-  3,202,101, 74, 87,151, 17,182,215,188, 52, 26, 26, 18,119, 14,132, 92,169, 91,122,123,123,173,187, 58,117, 27,113,237,120, 99,
-215, 83,147,185,179,220,191,169,148,174,203,179,213,234,234,160,231,169, 95, 41,156, 79, 19,195, 50,153,206, 43, 42, 91, 25,108,
- 76, 87,102,134,164, 58,151,153,121, 17,208, 92, 90,  8, 41,  4, 40,165, 39,105, 10,181,250,138, 77, 38,241,118, 87, 20,103, 70,
-155,160,186,205,146,212,109, 57, 91,170,113, 85,241,208,115,228,227,159,101,242,112,242,220, 39, 41, 33,114, 98,226,210,204,140,
- 81,112,149, 41,166, 92, 42, 66,218,  4,244, 66, 72, 73, 72,236,185,236,164,222,244,241,140,163,113,127, 87, 17,118, 13, 76,167,
- 25, 91,147,174, 94, 30,227,213,213,205, 29, 81, 27, 35,145,131,136,129, 39, 41,147,144,136,184,232,109, 45,249, 82, 93, 59, 80,
-219, 77,130,165, 41, 68,246,  0, 41,209,139,147, 73, 98,216,217,201, 69, 57, 55, 68,143,158, 94,178,122,203, 59,213,142,109, 16,
-197, 82,227,241, 28,100,148,163, 15,  9, 90, 21,120,192, 50, 29, 31,174,176, 52, 31,160,157, 59,201,239, 52, 90, 21,166,180,235,
-243, 53,143,184,243,189,126,189,234,174,170,124,137,224,189,167,208, 69,100, 34,226,240,175,101,114, 14,134,161, 66, 97,201, 50,
-158, 87, 68, 52,202, 10,214,163,238,  0,154,224,227, 23, 38,146,226,207, 68,148,148, 83,111,130, 60, 45,134,129,200,126,105,125,
- 83,159,144,203,202,122, 31, 27,133,119, 18,210, 14,239,132,134,165,109,102, 59, 64,221, 33,197,218,234, 93,172, 72, 82,187,133,
-118,151,103, 13,186,194, 81, 85,147,244,190,108,224,236,219,158,231,168,110, 78,145, 94,133,201, 46,179,163,250,145,242,141,199,
-224,113, 57,185,126, 23, 34, 90,115,120,214, 21, 32, 68,144,226, 94,110, 74, 90, 78,229,163,238,130,149,144, 60, 36, 27, 95, 66,
- 53,184,207,210,239, 55, 29,196,174, 82,143,208,105,235, 54, 59,106,219,149,170,230, 75,206, 90,124,161,122,151,146,207, 98,114,
- 28, 31, 53, 37, 82, 94,194,165,183,177,110,186, 74,156,248, 55,  9, 73,108,147,169, 13, 40, 13,183,236, 85,186,  1, 81,239, 90,
- 88,194, 74,228, 87,205,199,199,241, 36,216,181,114,185,  7,110, 78,185,120,120,190,  7,168, 43,157, 58,112, 80,  0,160,  1, 64,
-  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  8,117,
-214,152,105,111, 60,176,219, 77,130,165,173, 70,201, 74, 70,164,146,104,  3, 57,153,206, 77,106, 35,111,176,223,194, 67,144,234,
- 24,109,231, 85,178, 83,165,119, 32, 50,209,  7,196,160, 44,157,222, 45,111,183, 74,  0,226, 92,151,214,142, 65, 41,227,132,244,
-227, 26,113,209, 46, 65,153, 41, 62,100,215,156, 39,196,160,208,243,  8, 61,183, 95,140,251, 43, 78,214,150,138,178, 69,105, 92,
-232, 51,152,245,115, 46, 59,150, 79, 50,230,147, 50, 72,200,189,251, 44, 58,100,173,230,138,215,165,194,130,143,133,157, 69,255,
-  0, 92,144,157, 58,212,212,132,187, 41, 33,157,165,139, 31,159,206,249, 59,202, 42,155,158,146,222,227,247,126, 32,178,155,251,
- 18,146,145,245, 10,153, 90,130,228,134,102,147,230,108, 61, 37,231, 57,220,231, 42,143,138,113,241,148,199, 50,195,173,170, 83,
-190, 39, 90, 36,  5,155, 59,247,148,  6,196,139, 42,227,197, 84,245, 54,161,151, 50,192,154,220,157,104,119,250,204, 44,130,128,
-  5,  0, 10,  0, 22,191, 90,  0,192,243, 95, 80,177, 92,112, 57,  6,  2, 17, 51, 53,107, 20, 13, 91,100,247,172,142,223,232,138,
-230,247, 77,238,222,150,176,135,106,126,133,227,247, 29, 46,215,177,220,213, 82,115,236,219,244,191, 23,188,225,153, 12,140,236,
-188,181,204,158,242,159,146,225,213, 74,251,  0, 29,  0,246, 10,243, 91,247,238, 95,158,105,188,205,158,153, 98,197,187, 16,203,
-  5,149, 35,111,144,200,241,175, 70,184, 73,230,124,149,147, 47, 36,249, 75,112,225,166,193,199, 95,112, 21, 37,180, 19,125,160,
-  1,117,171,179,234, 21,235, 63,183,118, 21, 20,149, 59,109, 85,191,246,245, 30, 69,251,147,247,  5,106,235,216, 78,137,127,185,
-244,156, 37,239,156, 47, 80, 76,255,  0, 62, 54, 47, 22,214, 60, 42,226, 17,105,197,248,123,139,155,193,191,180, 87,164,173,142,
-205, 41, 87, 83,203,222,255,  0,127, 53, 82, 84, 59,127, 16,229,124,107,215,222, 41, 43, 33,143,136, 49,156,195, 22, 18, 38, 68,
-184, 85,148, 65, 41, 33, 64, 13,205,174,198,215,212, 31,183,128,253,197,251,121, 73,127,119,244,203,216,207, 70,253,181,251,141,
-167, 95,233,225, 40,244,117,163, 61,198,115,114,120,214,113,137,200, 37, 41,109,126, 92,166,186,110,108,155, 40, 31,119, 81,237,
-175, 40,219,245,114,210,106, 20,185, 86,146, 93, 92,207, 91,220,116,145,213,233,220, 57,210,177,125,124,136,191, 58, 79,162, 79,
- 20,226, 47,182, 66,144,185,143,168, 17,208,130,202,107,232,109,129,167, 57, 53,208,143,156,127,113,166,161,  4,250, 89,139,224,
-255,  0, 50,156,131,139,240,204, 55, 19,225,188, 85, 89,119,177, 81, 66, 39, 74,120, 58,226,119,149, 41, 71,106, 24, 23,  0, 95,
-170,149,175,117, 92,191,181,194,119, 37, 59,147,203,153,225,224,202, 58,125,222,118,237, 70,221,184,102,202,177,240, 71, 71,244,
-231,230,235, 21,200,179, 17,240, 28,215, 20, 48,114,228,184, 25,106,115, 78, 21,198, 14,168,216, 37,196,172,  5, 34,231, 77,215,
- 35,190,213, 71, 85,179, 74, 17,205,109,230, 94,147, 71, 73,190, 70,228,148, 46, 44,173,243,228,114, 47, 80,202, 79,205,100,117,
- 38,218,230,241,100,123,238,205,141,105,233,255,  0,253,123,255,  0,166, 94,211, 35, 83,255,  0,236,151,253, 81,246, 29,155,213,
- 15,154, 54,248,166,116,240,206, 13,137, 25,238, 66,194,196,121, 47, 56, 86, 88, 76,131,161,101,180, 53,226,113, 96,232,108, 69,
-142,154,214, 78,147,105,239, 33,222, 92,121, 98,109,107,119,158,238,125,221,168,230,151,183,160,202,204,249,144,245,191,135,165,
-140,167, 55,224,236,179,131,121, 97, 37,207, 45,232,231, 93,118,135, 55,184, 18,162, 58,  5,166,172,199,109,210,221,194,221,204,
- 74,147,221,117,118,105, 43,182,251, 39, 85,159,243, 33,195, 97,250,115,  7,212,118, 35, 73,153,  2, 92,180,227,158,130,214,193,
- 34, 60,162,218,220, 82, 92,220, 64,211,103, 81,214,224,214,108,118,203,142,243,180,218, 77, 42,248,209,171, 61,214,210,176,175,
- 36,218,110,148,232,102,  7, 49,243,126, 50, 49, 89, 99,211,190, 39, 47, 41,152, 90, 74,228,162, 82, 84,164, 50,  1,176, 27, 35,
-238, 82,238, 53,189,210,  5, 94,134,205,149,214,236,212, 87,135, 73,159, 61,247, 50,165,152, 57, 63, 14,130, 55,167,159, 55, 51,
-242,156,158, 55, 26,231,152, 70,113,194, 99,201,138,137,145,124,196, 22, 94, 89,218,144,235, 78,149, 27, 18, 64, 36, 29, 59,169,
-218,157,153, 70,219,157,185, 86,131,116,155,227,149,197, 11,177,165,112,255,  0, 83,117,235, 23,204,167, 31,244,198,119,251, 63,
-142,134,115,124,152, 33, 46, 62,192, 95,149, 30, 48, 88,186, 67,171,177, 37, 68,107,177, 35,167, 82, 42,150,139,107,158,161,102,
-111, 44,125,101,237,126,237, 13, 51,200,150,105,122,142,101, 11,230,247,150, 32, 38, 79, 41,225,126, 87, 29,146, 10, 62, 46, 39,
-158,218,128, 88,181,210,167,129, 66,189,215, 23,173, 25,108,214,248, 66,125,163, 50, 59,237,197,140,237,246, 95, 53, 83,  3,242,
-169, 54, 36, 31, 82,114, 57,  9, 78,165,136, 49,241,146,159,125,229,248, 82,134,155, 90, 20,165, 43,184,  0, 47, 87, 55,152,183,
-101, 37,199, 50, 40,236,114, 74,252,155,225,149,157, 51, 49,243, 99,201,249, 15, 32, 94,  3,210,110, 44, 50, 96, 21,  6,100, 74,
- 75,142,188,234, 80,117,112, 52,217, 72, 66,127,174,175,125,170,132, 54,139,118,225,154,244,232,105, 79,122,185,114,121, 44, 67,
- 48, 34,124,211,115,190, 33,156,143,138,245,107,136,140,124, 89, 22, 81,126, 50, 28,105,228,182, 77,138,210,149,169,104,112, 14,
-208,149, 10, 71,180,218,187,  7, 43, 51,168, 45,230,245,153,168,223,133, 60, 61, 39, 74,245, 15,230, 71,136,122,125, 35, 18,211,
-208,229,101, 99,230, 97, 39, 37, 14, 84, 34,223,150, 89,113, 69, 41,251,234,  6,230,215,172,253, 54,217,114,250,116,105,101,116,
-196,211,213,238,214,180,238, 53, 78, 89,149, 85, 12,183, 10,249,149,204,122,137,234,110, 51,143, 96, 48,  6, 63,  9,124,190,137,
- 57,  7,208,181,200,220,220, 87, 29, 73, 42, 65,242,219,186,210,145,109,106,206,163,108,141,139, 14, 82,151,111,163,202, 85,211,
-110,210,212,106, 20, 35, 30,198, 56,249, 31,144,244,120,212,  3, 88,  7, 70,114, 95,153, 14,113, 27,133,250, 89,151, 71,152,  6,
- 83, 60,210,241, 24,246,174, 66,137,148,146,151, 86, 45,168,216,209, 90,175,223, 97,219, 90,155,102,157,221,190,186, 35,139,242,
- 25, 27,182,165, 89,211,203,166, 88, 47, 47,192,229,223, 38,220, 46, 76, 28, 62, 87,153,203,108,160,101,150,136,208,111,212,177,
- 20,171,122,199,177, 78, 40,167,251, 21,161,190, 95, 82,154,182,191,167,143,148,206,216, 52,238, 54,229,113,255,  0, 87, 15, 18,
-248,250,143, 86, 87, 54,117,  7,141,253,104,245, 19, 53,235,111, 48,103,209,255,  0, 77,215,231, 96, 25,122,249, 76,131,100,150,
-100, 56,202,134,231, 20,164,233,240,236,158,159,174,187, 90,254, 10,235, 52, 90,120,233, 45,247,247,120,242, 94, 28,217,198,235,
-245, 51,214,221,252,189,159,151,155,240,228,189, 47,200,115, 79, 92, 56, 22, 43,211,126,109,197, 56,206, 37, 63,179,111, 17, 13,
-233, 47,168,  0,227,242, 23, 54, 72, 91,171,183,105,218, 61,192,  1,208, 85,253,191, 81, 43,246,167, 57,127,185,249, 48, 70,118,
-231,166,134,158,244, 33, 31,246,175, 43,204,241, 61,115,235,230, 73,220, 87,161,124,166, 75, 68,165, 78, 69,106, 33, 41,235,182,
-100,134,163,168,117, 26, 16,225,189,114,219,100,115,106, 96,186,253, 74,167, 95,186,207, 46,150,111,170,158,118,145,204,254, 74,
-241,173,167,139,103,242,182, 30,107,249, 33, 25, 71,183,108,120,237,172,127,239,198,180,119,217,127,150, 43,251,125,111,224,102,
-126,222,133, 44,202, 93, 50,245, 37,239, 61, 74,161,116,145,236,174,112,233,207,  6,252,178, 47,242,111, 92,178, 24,182, 84,124,
-149, 71,159, 14,201, 22,  5, 44,190,133,141, 13,237,253,221,118,155,191,107, 74,165,214,159,160,225, 54, 94,198,174, 81,234,146,
-244,158,243,174, 44,238,193, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  7, 37,245, 93,184,110,242, 28, 58, 38,171, 30,134,
-140,  9,219, 87,150, 83,137,142, 23,185,171, 20,150,188, 91,255,  0, 86,180,180,181,202,233, 94, 43,129, 12,248,148, 81,249, 38,
- 87, 12,220, 89,240,119, 54,244,140, 86, 14, 44,153, 82,182,110,105,165,124, 78,231, 74,157, 33,  2,229, 32,  5, 47, 79, 16, 38,
-165,118,227, 42,167,211, 47, 96,218,211,208, 91,177,206, 57,115,241,254, 60,204,142,148, 68,143,141,117,214, 27,101, 14,182,249,
-153,144, 92, 69, 40, 44, 43,194, 10,  0, 87,134,250,244,168,221,136, 39, 74,116,250, 21, 71,102,101, 60,238,103,155,252,209, 25,
-196, 75, 97,220,188,104,179,154,114,  0,104, 36,227,210,114, 12, 48, 67,151, 87,136,165,177,190,238, 88,118,146, 83, 82, 70,204,
-114,229,166, 21, 94, 92, 24,215, 39, 90,151,184,206, 79,202, 51,203, 16,157,200, 71,248, 36,192,201, 73,146,182,144,203,223, 18,
-220,103, 80,210, 44,182,148, 82,149,126,210,202, 40, 59,116,208,107, 81, 74,212, 33,141, 57,161,201,182, 92,192,142, 56,238, 43,
- 16,166,154,198,224,191, 51, 91, 77, 76,202, 66, 97,182,236,210, 99, 45,212,121,138,113, 33, 59,148,180,237,220,171,141,123,200,
-168,164,243,201,241,149, 57,121, 71,112, 14, 15, 49,200, 58,136,173,202,148,210, 38, 74,127, 20,134,153,218,148, 41,214,101,170,
-206, 45,  8, 87,139,106,192, 42, 29,118,247,233, 68,172,172,105,214, 10, 67, 76,114, 92,235,113, 32,187, 43, 32,144,222, 70, 60,
- 87,159,150,182, 91, 74, 98,  7,164,121, 75, 80,176,  2,219, 72, 23,114,224, 43, 94,158, 26, 87,110, 53,116, 92, 43,229,192, 42,
-202,137,188,178,102, 18,  6, 69,204,102, 81,185, 14,180,246, 74,103,156,175,134, 67,111,249, 42,109, 41,186,149,125,198,231,110,
-198, 80, 10,143,233, 39, 75,201, 27, 74, 77, 85,116,116,248,121,198,185, 80,180,147,145,153,139, 15,191, 29,227,147,157, 31, 49,
-144, 83, 81,159, 75, 75, 90, 20,214, 46, 99,168, 74,118, 33, 42, 73, 89, 72, 79,186,224,117, 53, 26,138,151, 82,162,255,  0,226,
- 66,214,132,184,217,204,180,236,156,108, 84, 28,210, 37, 67,121,228,167,243,102, 26,101, 68,239,132,227,234,108, 11, 20, 93, 42,
- 74, 20, 60, 55,218,160, 13,250,211, 92, 34,149, 90,242,121, 69,171, 53,124,114,123,249, 94, 61,137,202, 73,183,196,205,133, 26,
- 75,219, 69,147,189,230,146,181, 88,119, 92,213,123,145,203, 38,151, 38, 61, 58,162,183, 59,155,196,195,200, 38, 62, 94, 82, 26,
-141, 25,180,200, 76, 82, 73, 91,239, 18,178,143,  8,  4,148,160, 54, 85,221,123,119, 83, 18,168,165, 87, 28,143, 59,147,228, 19,
-203,178,133, 72,102,199,242,120, 68,248, 99, 71, 87,233,144, 46, 60,231, 71,222, 63,162,159, 15,235, 93,238,137,  8,107,161, 98,
-113,120,229, 56,184, 16,152,138,183,148,167, 30, 91, 45,161,181, 45,107, 55, 81, 81, 72,  4,146,105,174, 77,241, 96,146, 69, 47,
- 42,129,143,228,173, 30, 57, 53,164, 59, 17, 96,174, 99,171,  9,253,147, 96, 88,169, 42, 80, 33, 42,177,208,255,  0, 53,232,140,
-156, 93, 80, 53, 94, 39,159, 23,195,125, 62,199,202,116, 54,185,121, 22,208,226,188,149,108,109,161,180, 31, 15,141,194,233, 62,
-253,130,182, 86,102,184, 36, 84,105, 26,174, 23,152,227,156, 95, 52,153,144,241,162, 10, 94, 72,140,251,229,213, 56,181, 54,181,
-143, 10,133,146,159,189, 98,155, 38,247,211,182,160,191,110, 82,143, 30,  3,224,210,103,127,172,178,200, 40,  0, 80,  2, 29,117,
-166, 26, 91,207,173, 45,178,216, 42, 91,139, 33, 41, 74, 71, 82, 73,166,202, 74, 42,175,  4,135, 70, 46, 78,137, 85,179,142,243,
-127, 85, 92,145,230, 98,248,194,203,108,106,151,178,  3, 69,168,118,134,251,135,244,186,215,  5,186,254,224,114,173,187, 15, 14,
-114,247,123,206,255,  0,106,253,188,163, 75,154,133,143, 40,251,253,198, 11, 11,198,242,121,255,  0, 62, 67, 41, 80,140,202, 86,
-227,210, 20,  9,  4,164, 21, 16, 59,201,174,123, 69,182,221,213, 86, 75,  8,170,182,252, 56,179,162,214,238, 86,180,180,139,198,
- 78,137, 47, 14,  8,169, 97, 97,183,155,113, 66,233, 74,146,162, 61,128,222,179,109,203, 44,147,124,153,167,114, 57,162,210,230,
-139,255,  0,154,142, 43,148,229,190,156, 97, 51,248,  6,213, 50, 62, 21,229,201,150,195, 32,169, 95, 15, 33,176, 60,208,  7, 93,
-133, 34,254,195,122,250, 59, 98,213, 91, 83,227,132,210,163, 62,105,253,193,164,184,225,130,198, 13,213, 30, 33,174,224,243,243,
-214,255,  0, 39,156, 87, 45,141,252,239,153,228, 27, 84, 92, 52,166, 81, 30, 42,156,  5, 33,212,182,162,226,220, 23,253, 20,216,
-  0,123,117,238,174, 71,126,212,195,  8,215,229,197,245, 29,175,237,237, 44,241,157, 62,106, 37,214, 78,201, 62,220,156,140,185,
- 45, 11, 52,243,206, 56,129,253, 21, 40,145, 95, 53, 95,154,157,201, 73,112,109,159, 78,233,224,225,110, 49,124, 82, 94,162,167,
-230,148,187,255,  0,237,183,  3, 14,223,120,121,206,189,127,248, 58,109, 95, 67,126,210,175,116,171,199, 36, 79,156,127,120,211,
-189,116,225,158, 71, 83,249, 91,107,140, 63,233,102, 59,242,175, 37, 83,144, 92, 25,100,166,222,104,148, 92, 85,252,206,221, 83,
-109,183,253, 27, 81,187, 41,254, 97,230,225,203,196, 59,102,112,252,180,114,241,231,227, 60,215,243, 77,254,207, 31, 87, 36, 39,
-141, 22,149, 32, 70, 96,101, 12, 98,  8,248,251,170,247, 41,211,126,221,155,189,189,117,174,147,104,206,180,253,174, 21,195,196,
-114,219,211,131,212,246, 56,209, 87,198, 35, 59,241,159,196, 39, 31, 19,  9,252,192, 75,193,  9,  5, 93,124,224,212,112,171,223,
-182,253,105,182,233,249, 41, 83,133, 39,237, 31,118,191,159,141,120,214, 30,195, 29,198,224,114,121, 62,168,152, 24,172,138, 49,
- 60,177, 83,229, 54,212,201, 36, 36, 38, 86,229,133,  2, 84,149,120,148,110,  6,157,106,229,233, 91, 90,122,201,102,141, 22, 29,
- 69, 11, 16,184,245, 52,139,203, 58,188, 95, 73,219, 57,135,167, 62,188,191,129,114, 15, 55,231, 88,244,113,249,107,109,133,166,
-123,232,105,149,184,165,  2,218,119, 22,134,183, 26,107, 88,214, 53, 90, 69, 58,219,182,243, 46,143,245, 55,181, 26, 61, 99,133,
- 46,221, 89, 95, 75,248, 24,222,115,233,119, 42,244,199,210, 73,113,115,242, 99, 63, 11, 37,155,131, 34, 24,138,181, 56,144,180,
-198,146,149,168,220,  1,168,219,210,173,233,245,144,212,106, 83,138,105,168,190, 62, 52, 81,213,104,174,105,180,173, 73,166,156,
-149, 41,226,103,160,126, 83, 48,184,214,189, 48,143, 57,182, 18, 37, 76,144,250,228,187, 97,185,106, 66,202, 19,115,219, 96, 44,
- 43, 11,120,155,122,134,159, 36,142,139,100,130, 90,100,215, 22,217,194,190, 99,226, 69,133,243,  1, 28,199,109, 45,  7,191, 44,
-121,237,162,219,150, 84, 18, 84,109,219,100,138,220,219, 27,122, 71,255,  0,113,207,238,201, 45,106,255,  0,180,205,185,240,  8,
-249,136,124,243,109,162, 15,231,206, 25,166, 77,188,173,165,195,229,149,238,211,103,221,246,109,246, 84,216,189, 23,248,248,229,
- 43,246, 86,189,247,188, 51,227, 83,221,188,169,158, 32,223,  9,201,187,200, 76,111,246,108,194,112,202, 91,165, 62, 81,100,182,
-109,110,194, 79,232, 91, 91,218,213,197, 89, 83,239, 22, 95,154,167,123,125,219,238,158,122,101,161,243,219,211, 86,229, 59, 11,
-156,163, 28, 20, 95, 60,122, 74,146, 19,247,188,164,190,202,156,233,255,  0,107, 10,189,119,186,182,147,183, 95,247,175, 83, 60,
-235, 68,155,141,218,127,177,250,209, 97,232,150, 31,158,230,179, 83,226,250,121,156,103, 13,152, 12, 37, 79,  7, 84, 18,183,153,
- 11,212, 34,232, 93,246,155, 19,106,143,112,185,102, 17, 78,236,115, 42,146,237,150,239,206, 77, 89,146,139,161,209,121,159,164,
- 30,177,114,169,216,220, 23, 54,230, 88,201,185, 75, 56,246, 42,  4,185, 41, 67,234, 73,218,151, 11,105, 13,164,155,216,125, 94,
-202,207,177,174,211, 91, 78, 86,237,201, 46,110,134,150,163,111,213, 93,106, 55, 46, 69,190, 73,191,129,135,245,195,139,230,120,
-100,126, 17,198, 51,238, 54,238, 75, 31,137,113,181, 45,146, 84,143, 45, 82,221, 82,  0, 36,  3,160, 54,171,187,117,216,221,119,
- 39, 30, 14, 94,196,103,238,118,101,101, 91,132,184,168,251, 89,238, 31, 74, 56,238, 43,  7,192,240, 17,113,241,208,211, 66, 20,
-117,157,160,  2,167, 28,109, 42, 90,207,122,148,162, 73, 53,197,234,174, 57,221,147,125, 44,238,244,150,227,110,204, 84,120, 81,
- 27, 73, 18, 35,195,142,236,185, 78,165,136,172, 33, 78,188,243,132, 37,  8,109,  3,114,148,165, 29,  0,  0, 92,154,174,147,110,
-136,180,218, 74,172,240, 87, 42,204,229,254,102,189,100,143,139,198, 41,198,248,164, 37, 41,152, 70,198,204, 99,155, 80,243,164,
- 40, 30,142, 60, 64,181,251,208,147,210,245,219, 91,140,118,253, 51,147,249,159,175,146,242,123,206, 10,236,229,185,106,148, 87,
-200,189, 11,155,242,251,143,114,113,188, 12, 14, 55,134,135,134,198, 50,152,240,161,180,134, 24,101, 61, 18,134,210, 18,  7,183,
- 65,214,184,185,205,206, 78, 79,139, 59,187,112,140, 34,163, 28, 18, 60,237,243, 87,235, 92,174, 55, 25, 94,155,113,165,173,156,
-190, 69,128,230, 98,122, 65, 73,102, 35,215,  1,166,207,235,184,  1,220,174,196,232, 53, 62, 30,135,104,208,171,143,189,151,  5,
-193,117,156,214,245,184, 59,107,185,135, 22,177,125, 70, 43,208,239, 84, 61, 18,244,175,  7,105,146, 38, 73,228,179, 66, 87,147,
-152,136,106, 80,220, 58, 52,217, 36, 31, 45, 31,105,185,238,  2,206,191, 71,170,212,206,180, 89, 87,  5, 82,166,221,173,210,105,
-109,210,173,201,241,116,244,120,140, 23,204, 23,169, 92, 99,212,111, 81, 49, 28,151,141, 45,229,226,225,227,163, 68,120,190,209,
-105,126,107, 50,159,117, 86, 73, 38,227,107,137,173, 13,187, 75, 59, 22,101,  9,113,109,250,145,155,186,107, 45,234, 47,198,112,
-224,146, 94,150,119,223, 82, 61, 71,227, 30,171,122,  1,205, 21,197, 28,125,196,227, 68, 33, 39,207,100,182,110,220,182, 30, 54,
- 23, 55, 27, 82,110,123, 43,  7, 73,165,158,155, 85,  5, 62,117,245, 51,162,214,106,237,234,180,119, 29,186,225, 79, 90,100, 95,
-146,201, 72, 87, 11,206, 66, 31,222, 53,149, 91,170,215, 93,174,198, 97, 35, 79,251,153,167,111,171,252,209,127,219,237, 99, 63,
-111, 75,252, 18, 95,221,236, 71,167, 79, 67, 92,241,211, 30, 11,249,107, 31,154,250,237, 63, 33, 28,254,197, 45,100,101,233,101,
- 13,142,188,148, 13, 65,255,  0,182, 13,107,180,221,187, 58, 84,159, 74, 71,  7,179,118,181,141,174,137, 63, 73,239, 81,210,184,
-179,188,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64, 13,187, 29,135,172, 94,105, 14, 17,211,122, 66,173,127,125, 42,109,
-  0,153, 10,140,195, 47, 73,144,  0,105, 13,169, 79, 43,110,227,229,160, 18,110,  0, 36,139, 95, 74, 21, 94,  0, 84, 63,201,248,
-187, 73,121,111,205, 96, 37,175, 37, 47, 18,146,109,230,180,100, 53,127, 15,107,105, 43, 30,202,149, 90,159, 71,135,  1,185,144,
-226,249, 31, 30, 76,148,176,169, 77,153, 43,148,172,117,130, 20,162, 37,  0,141,205,168,132,157,191,121,  2,231, 75,148,142,182,
-164,238,229, 78, 28,170, 21, 66,163,103, 48,147, 90,243, 49,206,183, 36,166, 59,174,182, 16,146,  1,101,149,150,148, 47,182,192,
-111, 65, 77,189,148, 56, 73,113, 22,168,175,143,204, 49,179,176,209,167, 71,108, 56,227,234,198,161,232, 74,220,130,218,114,114,
- 27, 97, 42,  5,104, 27,146,146,181, 89, 65, 54, 86,210, 46, 59, 30,236,181, 42,120,253,  2,102,192,150,190, 81,198,236,183, 87,
- 45,  7,202, 82, 16, 23,229,172,149, 23, 28,242,208, 91,240,248,193, 88,218, 10, 46, 55,123,105,157,212,250,  2,168,103, 35,203,
- 48, 48, 49, 78,100, 91, 90, 95,  2, 59,238,181, 29, 13,175,114,147, 24,148,173, 43,  1,  4,182,144,177,177, 69,105,  0, 43, 67,
-173, 58, 54,164,229, 64,114, 84, 22,174, 79,198, 90,105,102, 84,134,153, 75, 45,149,188, 20,130, 91, 69,146,159, 49, 33,123,118,
-146,144,161,188, 13, 64,235,106, 78,238,124,130,168,149, 39, 51,133,135, 29,140,140,135,  2, 27,151,227, 97,126, 82,203,139,218,
-130,162,173,129, 37,118, 74, 46, 73,182,137,235,165, 53, 66, 77,208, 90,162, 57,229, 92,105, 14, 41,134,229,161,199, 89, 90, 83,
-229,176,219,143, 43,204,117,  5,208, 18, 27, 66,174, 84,139,175,195,250, 55, 61, 47, 78,238,167,208, 38,100, 90, 64,151, 18,124,
- 38, 38, 64, 80, 92, 39,144, 20,194,194, 74, 18,164,118, 16,  8, 26, 30,207,101, 71, 36,211,163,226, 42, 50, 89,  9,204,198,109,
-179, 34, 43,114, 50, 51, 19,241, 50, 84,189,118,  7, 71,133,171,218,228, 37, 62, 29,  8,239,237,169,109,194,184,136,216,174, 31,
-156, 97,188, 66,113,204, 70,122, 65,130,235,145,137,140,217, 91,105, 82, 21,125,165, 87,176, 54, 32,251,  1, 21, 28,213, 29,  5,
- 69,210,242,153,135, 16,165, 51,137,113,180, 38,229, 74,113,109,239,218, 63, 81,  0,220,171,184, 27, 83,  5, 57,191, 48,229, 72,
-141,  1,220,  4, 21,159,204,165, 29,249,103,181,191,146,189, 91, 74, 73,  0,148,173, 38,255,  0, 88, 62, 34,160, 47,105,173, 87,
-180,200,110, 75,145,206,171, 68,174, 43, 13,139,127,148,103, 34,226,161,120,153, 75,128,184,224,213, 30, 96,214,250,118, 54, 60,
-106,254,149,135, 81, 81,206,106, 42,175,144,228,170,122,134, 59, 41,141, 29,168,232, 42, 82, 89, 66, 91, 74,150,119, 40,132, 11,
- 92,158,211,165, 98,183, 86, 92, 28,164,  0, 80,  6, 75,212,124, 78, 87, 51,198, 93,137,137, 36,188, 28, 67,142,178, 13,139,173,
- 32, 27,160,125, 54, 63, 69, 98,111, 58,107,183,244,206, 54,248,214,180,233, 93,  6,230,203,169,181,167,212,169,221,225, 74, 87,
-161,244,156,187,139,122,103,148,201,201, 14,102, 26, 84, 72,136, 58,180,116,113,126,207, 96,174, 83,109,253,189,114,228,179, 95,
- 89, 98,185,115,126,228,117,187,151,238, 43,118,227,150,195,205, 39,207,146,247,179,182,227,176,208,113,176,211, 10, 59, 41, 67,
- 33, 59, 54,  1, 97,106,244, 40, 90,132, 34,161, 21, 68,185, 30,119, 59,179,156,156,228,235, 39,204,243,183, 53,227,111,113,156,
-227,241,  8, 38, 35,164,187, 17,194, 52, 83,106, 61, 61,233,232,107,201,119, 93, 11,210,223,113,254,151,140,124, 95,  3,215, 54,
-157,122,213,216, 82,254,165,132,188,127, 18,223,134,250,139, 43,142, 51,249,110, 65,163, 55, 18,111,181, 23,253,163, 96,245,  9,
-190,132,123, 13,104,109,123,236,244,171, 36,214,104,114,233, 70,126,235,176,195, 85, 46,242, 15, 44,249,244, 50,116,132,122, 13,
- 50, 89,204, 72,227, 81, 14, 72,157,234, 39, 30,217, 89, 95, 91,157, 54,147,237,174,209,126,238,180,161, 78,242,126, 44, 78, 33,
-254,206,186,231, 87,110, 30, 60,  8,124,167,212, 51,147,132,112,184, 24,223,151, 98,  8,  8,115,160,113,196, 14,137,178,116, 74,
-125,130,184,237,211,127,158,166, 46, 22,214, 88,190, 61, 44,236,246,175,219,240,210,201, 78,227,205, 37,195,161, 25,206, 49,132,
-123, 63,152, 98, 19,105, 37,173,193,114, 22, 58, 37,176,117,250,250, 10,201,219, 52, 79, 85,125, 67,151, 25,120,141,125,211, 91,
- 29, 45,135, 62,124, 35,227, 58, 79,172, 30,138,183,234,182, 15, 13,138, 25, 67,137, 24,167, 86,242, 84,134,  3,225,126, 98,  2,
- 54,216,173, 22,181,171,220,180, 26,223,202,182,212,107, 85,226, 60, 31,113,208,254,109, 36,229, 74, 58,244,156,142,103,201,222,
- 75, 30,211, 43,226,220,185,232,146, 84,216,110,111,152,218,155, 75,138,237, 82,124,167, 46,  1,253, 83,127,125,106,199,123, 79,
-231,130,125,  6, 60,182,  7, 31,248,238, 53,210, 95,122,115,242,151,136,227,121,120,249,238, 81,144, 86,106,108,101,135,153,141,
-229,249,113,131,160,220, 41, 64,149, 41,100, 29, 69,236, 61,134,160,213,111, 19,185, 28,176, 89, 83,243,150,116,155, 28, 45, 73,
- 78,111, 51, 94, 98,239,144,252,182,163, 51,234,147, 62,164,163, 60,182,139, 83, 34,205,252,187,225, 66,135,250,166,207,  7,153,
-230,143,189,179,174,221, 42, 27,123,155,133,142,231, 47, 38,171, 94,146,107,155, 74,158,163,190,205,205, 58, 83,163,202, 15, 85,
-126, 88,112, 28,251, 38,174, 73,135,154,188, 23, 34,118,202,148,227,104, 14, 48,250,211,209,106, 69,210, 82,189, 53, 82, 85,244,
- 94,151, 71,186,206,196,114, 53,154, 34,107,118,123,119,229,158, 47, 44,140, 34,126, 82,185,102, 97,248,237,114,238,110,252,236,
-108, 98, 60,182,128,117,229,  4,247, 35,206,112,165, 26,118,216,213,223,214, 97, 21,216,182,147, 40,254,133, 57,181,222, 92,109,
- 47, 14,103, 86,230,126,129,227, 57, 47,166,216,191, 78,113,153, 39,113,112, 49, 82, 91,148,203,235, 73,152,226,139,104,113, 36,
- 43,122,209,247,139,132,222,254,225, 89,150, 55,  9, 91,188,238,181,153,181,226, 53,117, 59,108, 46,216, 86, 98,242,168,191, 25,
-168,244,155,211,211,233,159, 18,143,197,254, 52,228,  4,117,184,191,137, 45,134, 74,188,213, 21, 91,104, 82,237,107,247,213,109,
- 94,163,191,184,231, 74, 84,181,163,211,126, 94,210,183, 90,208,192,122,159,242,228, 61, 67,231,172,243,113,159, 84, 21, 54,152,
-200,248, 33, 20, 58, 63,213, 85,123,239,243, 83,247,191,171,165, 95,210,238,110,197,174,239, 45,120,243,233,242, 25,250,189,165,
- 95,188,174,102,167, 12, 41,209,229, 36,250,179,242,221,199,189, 75,117,188,203, 18,149,136,228,200,109, 45, 59, 49,164,  7, 27,
-125, 45,139, 39,205,108,148,220,129,160, 80, 85,237,223,165, 51, 69,185,207, 78,178,211, 52,122,  7,235,182,171,122,151,154,185,
-101,211,211,227, 57,158, 51,228,255,  0, 58,235,173, 68,228, 92,181,215,240,108,155,136,113,208,189, 71,112,243, 22, 82,143,126,
-211, 90, 51,222,215, 24, 67, 19, 50, 27, 12,184, 78,229, 99,208,110,253, 42,249,104,103,211, 94, 73, 35, 54,188,209,203, 71,145,
- 21,200,110, 67,118, 42, 90, 73, 67,164, 19,115,230, 46,250, 11, 90,213, 71, 89,186, 61, 68, 20,114,229,163,175, 18,254,135,104,
- 90,105,185,102,205, 85, 74, 83,226,103,249, 87,202, 28, 83,153, 94,115,211,252,251,216,  7, 20,178,227,113, 74, 84,180,178,165,
-117, 13, 58,133,165,105, 29,192,223,223, 86, 45,111, 82,203,150,228,115, 21,175,108, 81,205,154,212,156,  6,120,239,202, 92,151,
-115,140,231, 57,231, 38,147,154,121,149,165,126, 90, 11,136, 90,202, 53,  1, 79, 45,106, 93,189,137,183,190,150,238,243,217,203,
-110, 10, 62, 29,  1,107, 99,237,230,187, 55, 47, 14,147,105,235, 31,203,186, 61, 85,203, 99, 50,163, 56,188,103,229,208,196, 20,
-176,152,194, 64, 80, 11, 82,194,183, 23, 81,111,189,107, 90,170,104,183, 39,166,139,142, 92,213,117,226, 92,215,237, 75, 85, 37,
- 44,217,104,169,194,190,211,176,241,236, 89,194, 97, 96,226, 75,158,111,193, 48,212,127, 48,141,187,188,164,  4, 94,218,218,246,
-172,169,203, 52,155,233, 54, 33, 28,177, 81,232, 71,154,126,110,125, 92,252,182,  8,244,191,  4,253,167,206, 66, 94,228, 14,182,
-108, 91,138,175, 19,113,238, 59, 93,251,203,254,133,135, 69,215, 71,179,104,243, 62,246, 92, 23, 15, 31, 79,144,229,247,205,118,
- 85,220,199,139,249,188, 93, 30, 95, 14, 36, 47,151, 92,247,164, 30,155,241,143,138,205,114,136, 13,242,140,182,215,242,  0,169,
- 69, 76,164, 15,217,177,112,146, 60,  0,146,171,126,145, 61, 64, 20,110, 86,245, 26,139,152, 65,229,143, 15,120,109, 87,116,218,
-107, 93,169,172,210,227,238, 59,206, 51,214,191, 74,179, 57,  8,216,172, 95, 41,133, 39, 35, 49,196,177, 22, 59,106, 86,231, 28,
- 89,178, 82, 46,158,164,214, 52,244, 55,224,156,156, 90, 72,220,134,225,167,156,148, 99, 52,219, 48, 60,195,148,122,  7,156,245,
- 51,253,143,229, 24, 86,231,243,101,191, 31, 28,167,223,130, 29, 73, 91,169, 73,109, 37,211,250, 32, 44,123,170,237,171, 58,168,
-216,239, 33, 42, 67,143, 18,141,235,250, 57,223,238,231, 26,206,169,112,246,155, 81,232, 87,164,196,  2, 56,158, 50,199,255,  0,
-147, 55,254, 74,165,249,237, 71,251,229,231, 47,126,159,166,255,  0,233,199,204,121, 35,230,111,136,113,206, 37,234,142, 19, 17,
-199,177,177,241,216,215,241,113, 31,122, 52,118,210,219,106,113,201,146, 80,165, 16, 52, 36,165,  9, 31, 69,117, 91, 85,233,220,
-177, 39, 38,219,171,245, 35,143,222, 44, 91,183,168,140, 96,146, 89, 87, 15, 27, 61,108,255,  0,165, 60, 95,253,130,228, 28, 99,
-142,227, 99, 98,147,158,132,243, 11,248,118,210,218,124,245,180, 82,219,138,  9,234, 82,108,107,148,134,174,231,123, 25,205,185,
-101,103, 99, 61, 29,190,234, 86,224,148,115, 46, 71,147,254, 90,253, 67,139,233,103, 55,203,113,158,102,191,202,160,228,136,141,
- 37,217, 55, 66, 98,207,136,165, 36,  7,111,162, 18,119, 45, 42, 87, 97,  9,190,154,142,171,117,211, 61, 69,184,206,222, 45,122,
- 83, 57, 13,159, 86,180,215,101,110,231,101, 63, 67, 71,164,189, 93,245,235,132,113, 46, 27,144, 86, 23, 57, 15, 43,201, 38,176,
-184,248,184,144, 31,110, 74,210,235,169, 41, 75,174,121,106, 80, 66, 17,125,222, 43,110,181,133,115,250, 45,190,237,219,139, 52,
- 90,138,227, 83,164,215,110, 86,173, 90,121,100,156,159, 10, 58,156,199,228,223,131, 73,137, 11, 41,205,230,180, 80,156,137, 76,
- 76,113, 80,177, 44, 48,162, 93, 88,239, 74,151,100,255,  0, 96,213,253,243, 80,165, 37,109,127, 78, 47,195,195,137,157,176,105,
-156, 97, 43,175,250,176, 94, 47, 15, 81,235, 58,230,142,168, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 34,  2,
-129, 74,133,210,116, 32,234,  8, 52,  1,129,197,250, 97, 26, 19,205,174, 76,195, 33,159,134,147, 22, 67, 69, 54,243, 18,180,173,
-136,228,146, 79,247, 81,221, 91, 94,219,213,201,106, 91,224,188, 57,250, 72,212,  6,227,122,100,182, 24,144, 78, 76,174,123,240,
-188,180,200, 40,251,185, 37, 62,153, 11,151,247,175,114,182,218,211,250, 61,117,165,122,154,242,194,190,142,128,200, 89, 97, 56,
- 67,156,125, 82,147,142,152,143,134,148, 25, 96,180,227,101, 94, 92, 86, 88,112, 41,180, 16,161, 98,167,156, 46,238,238,211,219,
- 76,157,236,244,170,240,255,  0, 65, 84,104, 28,126, 29, 59,225,226,183, 54,123, 78,187,  9, 24,198, 35,150,152, 45, 39,201,198,
-203,110, 73, 42, 10,113,100,169,207, 44, 39, 66,  0,235,106, 71,121, 87,  5,198,190,149, 64,202, 51,  3,129, 57,  7,224,155, 76,
-182, 84,198, 60,199, 76,117,249, 78,121,202,106, 59,237,187,101,169, 79, 44,116,108, 39,192,144,  9,241,123,  3,165,126,181,195,
-136, 40,142,191,195,178,  9, 98,114, 32, 79,101,183,114, 45,207,143, 32,188,194,156, 72,106,116,183,228,160,163,107,136,178,145,
-231,169, 38,247, 10,235,165,172, 90,175, 42,170,174, 20,244, 36,189,129,148,140,191, 79, 86, 82,227,  2, 83, 42,138,167, 94,144,
-146,227, 46, 45,208,185, 42, 43, 90,110, 94,216, 19,117, 43, 80,221,236,109,217,114,239,204,117,  9,148,189,200, 98, 50,242,165,
-162,124,121,172, 53, 46, 50,222, 76, 63, 49,133, 56,132,198,144,210, 18,164,173, 33,196,221, 97,104,222, 21,123, 91,195,110,218,
-138, 51,138, 84,160,230,153,150,159,195,114, 88,120, 24,248, 88, 53,173,105, 98,104,125, 82,219, 70,231,154,105,184,  9,136,144,
- 82,151,216, 90,183,109,215,107,131,218,  8,171, 17,188,164,219,151, 71,182,189, 99, 92,105,192,217,241,214, 95,141,132,131, 30,
- 76, 68,193,121,150,146,217,136,218,183, 37,176,141, 18, 47,185,122,216,  2,124,106,215,180,245,170,183, 26,114,116,117, 30,184,
- 28,199,150,156,222, 43,227, 24, 12,130,242,  2, 80,198, 67,120, 45,165,181, 16,144,234,210,108,161,177, 38,228, 11,141, 58,218,
-172, 65,246, 70, 62, 35,104,201, 72,226,144,217,192, 97, 36, 41,176,192,221, 49,239, 10,148,183,213,170,181, 32,235,250,199,191,
-221, 82,198,218,150, 44, 99,149,  8, 47,231,115, 82,116,123, 33, 33, 99,245,124,197,  1,245,  2,  5, 76,161, 21,200,109, 89, 17,
-120,196,243, 66,182,241,235,242,115,248,230,212,150,159,  0, 20, 75,177,187,140,107, 96, 84,144, 47,127,214,254,213, 71, 92,142,
-188,133,165, 87, 88,188,111,163,220,131, 34, 82,188,178,195, 45, 30,162, 83,129,125,183,254,229,155, 35,254,149, 44,181, 16, 93,
- 98, 43,108,234,124, 71,131,227, 56,146, 92, 92,117,151,229,186,144,133, 60,164,132, 37, 40, 26,237, 66, 71,221,  4,245,214,169,
- 93,188,231,226, 38,140, 40,106, 42,  1,224,160,  1, 64,  2,128,  8, 37, 35,160,181,  0, 29,  0, 83,114, 78, 53,141,228,208, 76,
- 44,131,119, 35,196,211,169,209,109,171,189, 38,169,107, 52, 86,181, 80,201,113,123,215,136,189,163,214,221,210,220,207,109,251,
-159,140,226,153,223, 75,185, 22, 41,197, 42, 26,  4,248,183,240,169,189, 28,  3,218,147,252,198,188,251, 87,251,119, 81,105,214,
-223,110, 62,159, 49,232, 90, 79,220,122,123,170,151, 59, 18,244,121,204,225,227, 92,132, 43,105,197,202,191, 79,238, 87,111,174,
-213,147,250,102,170,191,241,203,255,  0, 22,108,126,167,164,165,123,216,127,228,139,204, 55,166,220,139, 40,226,126, 33,175,130,
-142, 79,137, 78,106,187,123, 18, 63,158,181,116,191,183,181, 55, 93,103,216, 93,124,124,198, 78,175,247, 22,154,210,164, 59,111,
-171,135,156,236,220, 87,136, 99,248,212, 80,212,116, 93,211,171,142,171, 85,169, 93,228,215,160,104,180, 54,180,144,201,  5,227,
-124,217,231,154,221,117,221, 92,243,220,126, 37,201, 26, 90,190, 80,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,
-  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64, 30,122,228, 63, 41, 28, 47,146,102,231,231,242, 57,204,227,211,242, 79,185,
- 42, 67,138,145, 20,221,110,168,168,129,120,166,201, 29, 18, 59,  6,149,185,111,121,187,  8,168,168,198,139,169,251,206,126,238,
-199,102,228,156,165, 41, 85,245,175,113, 91,252, 22,250,127,255,  0,215, 25,175,251,252, 79,254,107, 82,126,185,127,162, 62,103,
-239, 35,254, 63,167,255,  0,116,188,235,255,  0, 73,105,198,254, 82,248, 79, 24,207,227,121, 20, 28,174, 89,201,152,185, 13,203,
- 97,183,158,140,166,212,182,148, 20,  2,130, 99, 36,145,166,182, 80,168,174,239, 23,174, 65,193,168,209,170,115,247,147, 89,217,
- 44, 90,154,154,114,172, 93,120,175,113,160,201,252,187,113, 76,151,168,201,245, 49,204,134, 69, 57,177, 45,137,198, 58, 93, 99,
-225,124,216,201, 66, 82, 54,150, 10,246,144,129,127,218, 95,219, 80, 71,114,184,172,247, 52, 89,105, 78,117,245,147,203,107,181,
- 43,253,245, 94,106,215,149, 48,242, 29,133,  9,218,128,158,225,106,203, 53,206, 79,234,111,160, 60, 91,213, 14, 77, 11,149,102,
-103,100, 35,100, 32,198,106, 27,109, 67,113,132, 50, 91, 97,231, 30, 73, 80,113,151, 21,184,169,213, 94,202,233,106,211,211,110,
- 55, 52,240,112,138, 84,110,184,215,222,101,106,246,203, 90,155,138,114,110,169, 83, 10,120,250, 14,171, 29,175, 37,148,181,215,
-104,181,102, 26,167, 39,245, 55,229,219,129,250,151, 49, 89,137,109,187,140,207,172,  0,238, 70,  2,146,133,187,180, 88,121,168,
- 90, 84,133, 88, 11, 94,193, 93,151,173, 61, 46,229,122,194,202,177,143, 67, 50,117,123, 93,157, 67,204,240,151, 74, 48, 88, 15,
-147, 94, 25,143,158,220,172,206, 78,102, 90, 59,100, 43,225, 20, 81, 29,165,219,177,126, 88,222, 71,245, 86,154,187,115,123,189,
- 37, 72,165, 18,141,173,130,204, 93,100,220,186,184, 30,142,198, 99, 33,226, 33,179,  2,  3, 40, 98, 43,  8, 75,109, 52,218, 66,
- 16,132, 32, 89, 41, 74, 69,128,  0,116, 21,128,219,110,175,137,209,198, 42, 42,139,129, 50,144, 80, 80,  0,160,  1, 64,  2,128,
-  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  8,113,150,158,
- 27, 94,109, 46, 39,185, 96, 40,125,180,181,  3,143,103,184, 30,103, 15, 49,105,194,165, 82,241, 14,146,168,205,249, 75,121,198,
-  1,234,217, 40, 80, 59, 71,232,220,116,210,245,126,221,212,214, 44,130, 81, 42, 79, 20,229,146,136,100,198,125,166,215,162,252,
-184,206, 52,178, 15, 96,113,106, 33, 55,239,181,253,213, 47,121, 30,145,180,103, 84,226, 28, 74, 55, 27,136,146,164,164,206, 82,
- 66, 84, 82, 60, 45,160,126,130, 61,157,231,182,168,221,187,155,135,  2,104,198,134,154,160, 30, 10,  0, 20,  0, 40,  0, 80,  0,
-160,  1, 64,  2,128,  5,  0, 17,  0,232, 69,232,  1, 30, 75, 71, 93,131,234,160,  5,165,  9, 79,221,  0, 80,  1,208,  0,160,  1,
- 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,
-128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,
-  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,  0, 20,  0, 40,  0, 80,  0,160,  1, 64,  2,128,  5,  0, 10,
-  0, 20,  1,228,  5,124,243, 88, 95,253,130,253,239,248, 26,230,214,245,253,159, 87,192,235,223,237,223,196,250,126,225,179,243,
-217,111,247,  7,247,199,224,105,223,172,127,103,167,224, 49,254,223,252, 79,167,238, 27, 63, 62,  4,127,252,127,251,227,240, 52,
-239,213,255,  0,179,211,240, 27,250,  7,226,125, 63,112, 95,199,145,255,  0,213,255,  0,239,143,192, 82,254,175,253,158,159,128,
-126,131,253,255,  0, 79,196, 63,227,199,255,  0,235,255,  0,223, 31,129,163,245,127,236,244,252,  3,244, 31,196,250,126, 34,135,
-207,117,255,  0,220, 15,223, 31,129,166,254,177,253,158,159,128,191,160,126, 39,211,247,  7,252,118,127,128,127,124,126,  6,147,
-245,143,236,244,252,  5,254, 63,248,159, 79,220, 31,241,216,127,234,  7,239,143,192,209,250,199,246,122,126,  1,252,127,241, 62,
-159,184, 31,199, 97,255,  0,168, 31,190, 63,  3, 71,235, 63,217,233,248,  7,241,255,  0,196,250,126,225, 39,231,180,143,247,  3,
-247,199,224,105,127, 88,254,207, 79,192, 79,227,255,  0,137,244,253,194,127,143,  3,255,  0,171,255,  0,223, 31,129,165,253, 95,
-251, 61, 63,  1, 63, 64,252, 79,167,238, 32,229, 63,226,  5,249,108, 95,136, 30,157,249,203, 43, 13,161,191,206,182,220,155,158,
-191,  0,122, 91,186,172,216,220,123,201, 83, 45, 60,191,  2,174,167,104,238,161,155, 61, 93,120, 83,226, 86,199,255,  0,136,199,
-154,239,150,231,166,165,177,250,195, 57,187,255,  0,203,133, 90,158,170,138,169, 84,167, 29,  5, 93, 28,169,228,248,150, 14,127,
-196,  9,192,155,183,233,206,254,208, 63, 59,181,199,255,  0,119,154,170,183, 21,206, 62,159,129,103,244,175,238,244,124, 72, 31,
-255,  0,162,164, 21,  5,122,107, 98,147, 98, 63, 60,185,255,  0,240,234,179,249,190,162, 47,211,191,187,209,241, 29,115,254, 33,
-251,108, 91,244,220,173, 36, 94,255,  0,157,218,199,187,255,  0,163,205, 49,107, 58, 87,164,146, 91, 90,229, 58,249, 62, 35,103,
-254, 34,193, 42,  9, 87,166,196,  3,212,140,221,237,251,190,159,249,174,175, 72,207,211,113,249,189, 31, 19, 71,197,254,122,135,
- 42,200,179,139,137,193, 90,143, 37,243,102,195,249,189,161, 71,184,127,168,106, 79, 96,172,173,118,243,249, 91,110,114,182,218,
- 93, 15,224, 93,211,236,138,236,178,247,148,242,124, 78,156, 62, 97, 50, 97, 37, 75,226, 40, 27,126,246,220,158,224, 63,240, 81,
- 92,167,243,187,124,173,125, 95,105,176,191,105, 39,255,  0,189,244,125,196,152,126,191, 63, 53,241, 29,158, 50, 10,192,  5,197,
-124,119,129, 55,239, 38, 48,214,162,185,251,245, 65, 85,216,250,254,193, 95,237, 36,151,252,223, 71,220, 88, 79,245,189,184, 42,
-242,213,135,109,110,233,185,177, 54,196, 18, 46, 47,251, 10,130, 31,255,  0,160,185,127,248,255,  0,255,  0, 39,216, 50, 31,180,
-220,149,123,223,163,238, 51,217, 47,153,116,226,138,126, 35,139,168,165, 70,201, 90,103,  2,147,255,  0,131,245,173, 11, 63,189,
-123,222, 22,126,191,176, 89,126,211,167,254,239,209,247, 15,197,249,147,129, 32, 39,118, 21, 13,173,118,216,143,142,221,123,251,
- 68,123, 10,142,127,189,167, 31,255,  0, 29,191,251,254,194, 23,251, 94,159,251,191, 79,220,101,185,183,205,204,238, 34,219,174,
- 51,192,149,144,242,217, 83,192, 28,160, 99,113, 65,185, 78,145, 28,253, 27,144,126,138,215,219,127,117, 67, 86,210,112,201,141,
- 62,106,255,  0,242,162,134,171, 97,118, 98,218,158,108, 63,219,241, 51,188, 95,231,178, 47, 32, 90,155,149,193,213,  1, 65,191,
- 49, 63,248,212, 61,125,  9,215,253, 77, 26,123,117,173, 93, 94,238,236,112,134,111,251,190,209,154,125,147,189,141,115,211,254,
-223,136,254,107,231,133, 56,157, 91,224,134, 74,118,111,221,249,174,193,107,129,255,  0,196,149, 81,105,183,206,247,140, 41,255,
-  0,119,192,124,246, 44,175,254, 79,167,238, 39, 96,190,115,209,156,195, 77,203, 55,195, 91,101,112,133,204,101,101,238, 86,123,
-146,175,130, 23, 58,244,181, 23,183,183,110, 84,118,240,255,  0,171,224, 36,118, 53, 47,235,250,126,226,161,207,158,230, 26,157,
- 30, 42,248, 45,217,120,  5, 45,228,229,238, 81,127,232,252, 16,191,215, 82,173,225,184, 57, 40, 98,191,187,224, 58,123, 18,140,
-146,239, 62,159,184, 87, 46,249,233, 71, 25,106, 52,168,220, 15,243,  8, 50,128, 45,188,114,225,147,220,110,145,  9,206,135,219,
- 70,131,121,252,203,113,112,202,227,215, 95, 98, 42,234,118,142,229, 39,158,169,245,124, 76,227, 63,241, 21,101,114,153, 97,239,
- 78,188,166,158, 59, 67,199, 55,112, 20,122, 92,126, 94, 52,189,105, 75, 86,212, 91, 81,171, 92,171,240, 42,195, 67, 23, 53, 23,
- 42, 39,206,159, 19, 64, 62,122,201, 81, 74,184,  6,210, 63,242,199,224,107, 55,245,159,236,244,252, 13,117,251,127,241, 62,159,
-184,117, 63, 60,170, 80, 36,112, 45,  7,254, 88,252, 13, 49,239,116,254,143, 79,192,122,253,187, 95,253,207,167,238, 22,159,158,
- 21,155,127,250, 11,247,191,224,105, 30,248,191,217,245,124,  7,127, 27,252, 79,167,238, 28, 31, 59,138, 63,238, 39,239,111,193,
- 83, 63, 94,254,207,171,224, 59,248,215,226,125, 63,112,161,243,180, 79,251,139,251,219,240, 84,159,175,127,103,213,240, 23,248,
-207,226,125, 63,112,127,198,194,191,234, 39,239,111,193, 82,126,191,253,159, 87,218, 47,241,159,196,250,126,225, 99,231, 88,159,
-247, 27,247,183,224,169, 63,144,126, 31,213,246,139,252, 99,241, 62,159,184, 87,241,166,127,234, 55,239, 95,193, 82,127, 33,252,
- 63,171,237, 23,248,191,226,253, 63,112,147,243,173,111,247, 31,247,175,224,169,127,144,126, 31,213,246,136,255,  0,108,126, 47,
-211,247,  8,254, 54,127,192,223,189,191,  5, 75,250,255,  0,225,253, 95,104,159,198,127, 19,233,251,131,254, 54, 63,192,223,189,
-191,  5, 71,235,255,  0,135,245,125,161,252,103,241, 62,159,184, 74,190,118,138,127,220, 91,255,  0,231,111,193, 82,173,251,240,
-254,175,180, 71,251,103,241, 62,159,184, 49,243,178, 79,251,139,111,252,237,248, 42, 63, 95,254,207,171,224, 31,198,127, 19,233,
-251,131, 31, 59, 10, 39,255,  0, 65,116,255,  0,237,111,193, 82,126,191,253,159, 87,192, 95,227, 63,137,244,253,194,191,141,111,
-240, 63,239,111,193, 82,127, 32,252, 63,171,237, 23,248,199,226,253, 63,112, 63,141,111,240, 63,239,111,193, 81,252,131,240,254,
-175,180, 79,227, 31,139,244,253,192,254, 53,191,192,255,  0,189,191,  5, 71,242, 15,195,250,190,208,254, 49,248,159, 79,220, 15,
-227, 91,252, 15,251,219,240, 84,127, 32,252, 63,171,237, 23,248,199,226,253, 63,112, 63,141, 95,240, 63,239,111,193, 81,252,131,
-240,254,175,180, 63,140,126, 47,211,247,  7,252,106,255,  0,129,255,  0,122,254, 10,143,228, 31,135,245,125,161,252, 99,241,126,
-159,184, 31,198,175,248, 31,247,175,224,168,254, 65,248,127, 87,218, 31,198, 63, 23,233,251,129,252,106,255,  0,129,255,  0,122,
-254, 10,143,228, 31,135,245,125,161,252, 99,241,126,159,184, 31,198,175,248, 31,247,175,224,168,254, 65,248,127, 87,218, 31,198,
- 63, 23,233,251,129,252,106,127,129,255,  0,122,254, 10,147,249,  7,225,253, 95,104,191,197,255,  0, 23,233,251,129,252,106,255,
-  0,129,255,  0,123,126, 10,143,228, 31,135,245,125,161,252, 95,241,126,159,184, 31,198,175,248, 31,247,175,224,169,127,144,126,
- 31,213,246,135,241,127,197,250,126,224,127, 26,159,224,127,222,191,130,164,254, 65,248,127, 87,218, 31,197,255,  0, 23,233,251,
-129,252,106,255,  0,129,255,  0,123,126, 10,143,228, 31,135,245,125,161,252, 95,241,126,159,184, 31,198,173,191,220,127,222,191,
-130,165,254, 65,248,127, 87,218, 39,241,143,197,250,126,224,191,141, 93,127,244, 31,247,183,224,168,254, 65,248,127, 87,218, 31,
-198, 63, 23,233,251,129,252,106,255,  0,129,255,  0,123,126, 10,143,228, 31,135,245,125,161,252, 99,241,126,159,184, 31,198,183,
-248, 27,247,183,224,168,254, 65,248,127, 87,218, 31,198, 63, 19,233,251,129,252,107, 31,250,141,251,219,240, 84,127, 32,252, 63,
-171,237, 19,248,199,226,125, 63,113,227, 37,244, 21,134,142,165,140, 40, 84,136,141,141, 20,222,157, 81,148, 18, 17, 75, 81, 40,
- 40, 34,138,133,  5,132,211,106, 61, 33,192,130,105,181, 29, 65, 97,190,211, 77,168,228,128, 90,246, 81,152, 50,132,166, 72,236,
-161, 72, 71, 18, 51,131,109, 74,136,165,129, 65,146, 90, 31,158,196, 77,194,236,164,188,180,158,245,104, 62,193, 90, 86, 83,140,
- 28,186,112, 49,181, 87, 19,184,163,209,137, 84,234, 26, 37, 79, 48, 58, 43, 81,238,171,145,111,131, 41,198,143,129, 97,140,145,
- 29, 43, 72,117, 64,167,179,119, 65,236, 34,171, 95,132,154,192,177,110,137,226, 92,189,197,155,204,182,226,177, 73,  3, 32,218,
- 74,252,144,175,190,144, 47,116, 95,175,180, 85, 24,235,157,150,179,252,175,159,188,182,244,202,234,110, 31, 49,152,111,226, 32,
-191,228, 75, 70,213, 32,234, 22,157, 52, 61,160,253,181,172,242,206, 53,137,158,179, 65,209,150,115, 96, 69,152,203,153, 56,  1,
- 45, 54,146,  4,168,160,234,218,148,108, 20,128, 77,202, 15,217, 85, 45,221,148, 26,132,177,232,125, 62, 62,178,213,216,198,105,
-206, 56,116,174,143, 23, 81, 94,194, 85, 18, 74, 92,109, 68, 20, 89, 73, 82, 77,136, 32,245,189, 89,147, 83,141, 25, 90, 47, 44,
-143, 69,250,107,235, 27, 51,155, 70, 31,146,128,172,128, 72,110, 36,165,125,215,143, 64, 23,208,  7,  7, 97,232,125,253,124,195,
-121,253,188,224,251,203, 63, 47, 53,209,226,234,245, 29, 54,139, 95,157,168, 79,  7,211,210,111,115, 89, 57,120, 23,131,178, 82,
-166,218, 88, 42,  9, 70,160,116,178,180,239,246,215, 59,166,179, 27,234,139,137,209, 69,170, 84,226, 62,171,243,142, 67,  7, 51,
-  7,144, 97,156,121,216, 62, 79,149, 49,157, 75,100,165, 87,220, 45,219,110,218,239,182, 45,178,196,237, 74,213,196,148,171, 84,
-115, 91,190,186,254,154, 81,185,106,174, 60,209, 63, 17,207,178, 60,203, 22,208, 97,192,228,116, 91,114,174, 55,165, 67, 91, 42,
-250,220, 85,125, 70,213,111, 71,113,213, 98, 79,165,220,214,166, 53, 70,167,141, 75,125,217,255,  0,  9,146,  5,135, 71,137,177,
-107, 37, 64,244, 82,107, 31, 91,110, 42, 25,161,138, 52,161,218,173, 75, 94, 65,198,114, 11,135,151,152,204,207, 44, 61, 29,105,
-109, 79,221, 64,237, 73, 58, 94,228, 85, 77, 38,182, 10,112,139,143,  7,200,163,169,179,131,167, 65,229,188, 36,133,227,231,167,
-114,205,154,119,107,155, 78,155,  9,240,216, 31,125,122,238,166, 10,228, 60,104,228,244, 23,114, 58, 62, 78,135, 65,203,201, 38,
- 36,103, 93, 23, 14, 37,198,202,142,166,194,221, 10,108, 52,214,185,203, 48,237, 58,117, 27, 55,228,147, 76,163,225,217,161,  2,
- 76,248, 78,110, 68, 89, 32,134,246,139,128,180,155,167,175,101,106,107,108,230,130,124,202,154,121,246,240, 42,243,222,116,105,
- 87, 73, 41, 90,213,184, 42,214, 55,235,167, 90,151, 75, 73, 68,102,166,109, 92,161, 95,145,200,187, 54, 58,217,149,227, 36, 27,
-172,220,221, 93,110,125,181,102,205,149,  9, 86, 37, 13, 68,234,154,102,109,107, 14,176, 91,237, 29, 43, 81, 42, 74,166, 60,222,
-104,157,  7,138,228,211,147,197,183,231, 29,210, 34,217,167,143,105, 31,162,163,244,105, 92,222,186,207,117,113,211,132,177, 71,
- 93,182,106, 59,235, 42,188, 99,131,246, 26,102, 35,168,235,209,  7,178,178,101, 51,106, 49, 37, 37,155,118, 84, 46, 68,170, 35,
-169,106,152,228, 61, 68,113, 13,142,132, 83, 91, 21, 33,208,216,238,166, 84,125,  5,132,123, 41, 42, 45,  0,166,148, 69, 10, 65,
- 65,  5,155,246, 83,179,  8,226, 54,227, 90,104, 61,244,170, 67, 92, 70, 54, 44, 92,129, 82,213, 17,209,134, 16, 78,164, 82, 84,
- 90, 10,181,143, 74, 64,160, 53, 20,  0,  9,183, 83, 64,  5,184,158,148,180, 10,135,173, 32,  2,128, 12,  3, 72, 45,  3,218,170,
- 42, 20, 96,216,174,234, 42, 20,  6,210, 59, 40,168,180,  5,168,  0, 80,  0,181,  0, 11, 80,  0,181,  0, 11, 26,  0, 22, 52,  5,
-  1, 99, 64,  2,198,128,  5,168,  0, 90,128,161, 67,109, 43, 68,160, 54, 83, 78,168,193, 59, 41,106, 20,  6,223,101, 21,  0,195,
-102,146,162,208,117, 13, 19, 77,114, 28,162, 62,150, 64,168,220,135,168,139, 13, 14,237, 41,185,135, 80, 80,110,196,119, 82, 84,
- 90, 10,117,177,176,210, 69,226, 43, 69, 60,160, 18, 10,149,162, 83,114, 79,112, 21,118,  5, 43,152, 28,242, 81,122, 92,183,166,
-139,128,181,105,253, 81,160,251, 43,166,133, 33, 21, 19,145,186,157,201,185,244,151, 80,100,195,150,193,105,208, 27,121, 34,214,
-233,186,168,221,132,225, 42,174,  5,251, 51,132,163, 71,131, 18,188, 42,148, 60,214, 85,123,157,  7,178,149,106,121, 48,118,107,
-138, 38, 99,178,146,113,142,  8,210, 46, 18, 53,109,119, 32,131,236, 53,  5,235, 17,186,170,130, 19,148, 29, 25,123, 41,113,121,
- 28,119, 91,152,189,185, 84, 39,115, 15,237,254,244,  1,170, 73, 23, 37, 93,215,172,232, 41,105,228,156,126, 78,107,160,209,162,
-191, 22,159,205,203,172,195,173,114,241, 79, 20, 30,169,240,139,139,164,142,208,111, 93,  2, 81,186,170,100, 60,214,222, 38,155,
- 26,204, 12,196, 82, 82,160,214, 77,100, 32, 68, 13,217,  4,118,168, 40,171, 67,236,172,187,210,157,153,116,199,164,209,133,152,
-221,142, 24, 75,160,170,145, 21,252, 84,128,  9,186, 73,241,  3,166,211,221, 86,225,114, 55, 98, 84,148, 29,183,137,218,189, 62,
-231,209,243,168, 71, 22,229, 14, 40, 54, 83,229, 69,146,181,120,210,122, 32, 18,174,238,250,224,247,109,170, 86, 31,127, 97,120,
-215,172,234,180, 26,236,235, 36,248,151, 60,150, 28, 72,108, 43, 21,156,133,177, 40,240, 49, 57,180,221,144,177,211,120, 26,130,
-123,234,142,138,228,167, 46,242,212,188,113,231,228, 52,117, 42, 50,141, 36,176,233, 57,124, 78, 43, 37, 25, 55,242,220,113, 41,
-111, 37, 12, 23, 95,199,167, 68,202, 74,117, 54,  3, 77,196,123, 43,173,185,174,139,182,173,222,249,101,130,151,251, 78, 58, 90,
- 39,110,227,157,172, 26,226,186, 78,214,153, 16,231, 97,161,103,113,170,113,245,134,155, 42,105, 77,236,113,  4,253,228,216,244,
- 41, 61,107,131,112,157,187,178,181, 58, 44, 95, 60, 14,167, 77,113,202, 42, 84, 47, 22,236,140,214, 36,176,166,130, 66,134,215,
-148,173, 78,195,220, 63,150,179,212, 99,102,237,106, 90,189,  4,209,229,190,123,  1,172, 95, 39,146,134, 91, 75, 13, 52, 85, 25,
- 72, 79,221, 87,132,184,133,233,214,254, 33, 94,185,181, 93,119,116,233,183, 86,241,246, 52,112, 58,168, 43,119,221, 56,112,246,
-146,161,229,140,238, 58,140, 98,210,219,175,197, 82,164, 50,160, 84, 86,162, 19,101, 36,218,221,134,226,155,114,214, 75,185,184,
- 38, 94,140,251,203,125, 44,202, 67,156, 98,203,186,173,107,238, 66,237,173,239,222, 61,213,171,114,214,104,148, 44,221,203, 34,
- 86, 82,119,196, 56,151,214,155,221, 34,215, 61, 20, 59, 77, 67, 98,214, 85, 65, 53, 55,107, 42,148,238, 74, 75,183,  3,175, 91,
- 85,229, 10, 20,238, 93, 82, 43, 45,229,186,164,157, 53,211,220,106,223, 20,103,112,109, 23,156, 38, 67,208,249,  3,108,173, 10,
-248, 57,191,176,115, 67,107,171,238,159,161, 85,159,185, 65, 78,195,107,140,113, 52,118,139,178,183,168, 73,252,178,195,221,233,
- 59, 72,199,190,129,111, 41, 86, 26,125,211, 92, 31,122,159, 51,209,187,182,130, 44,148, 18,149, 36,133, 14,194, 44,105,115, 84,
- 40, 45, 45,253,180,214,199, 80, 95,147,122, 76,194,208,  1,165, 14,157,148,102, 65, 65, 64, 47,180, 83,112, 20, 88, 65, 58,154,
- 74,139, 65, 91, 47,165, 37, 69,160,130,215, 96,165,204, 37,  6,150,193,236,233, 79, 82, 26,226, 36, 53, 96, 62,202, 92,194, 80,
- 50,205,207,182,140,194,208, 79,195,147, 75,156,110, 80,190, 20,253, 20,103, 12,130,190, 27,254,122, 76,226,229,  7,195,142,234,
- 51,134, 80,254, 25, 61,212,153,195, 32,127, 14,  1,208, 81,156, 92,161,134,109,208, 81,152, 50,134, 26,191,186,147, 48,180, 21,
-228,166,147, 48,185, 65,228, 95,179,232,163, 48,101,  8,199, 22,233, 70,113, 50,137, 49,199, 96,165,206, 38, 81, 37,131,216, 41,
-217,132,202, 32,181,110,162,151, 48,148, 11,103,178,150,162, 80, 45,148, 84, 40, 30,218, 42, 20, 11,101, 45, 66,128,217,236,162,
-161, 64,109,246, 81, 80,161,159,218,118,244,173, 42,153,244, 16, 82,111, 75, 81, 40, 22,223,170,150,162, 80, 82, 91,246, 83, 91,
- 21, 33,212, 53, 77,114, 30,144,240, 74, 83,107,211, 42, 58,131,225,  9,219,165, 71, 82, 74, 14,  6,239,225,236,166, 84,117,  4,
-173,  1, 58, 10, 84,196,104, 67,164,  4, 88, 83,163,196, 73,112, 51,220,129, 95, 15,139,150,229,252, 91,  8,  7,250,218,127, 61,
-105,233, 22,107,145, 70, 94,181,229,179, 39,212,101, 48, 11,139, 37,223,133,148,  0, 10, 54, 73, 61, 43, 99, 84,165, 21,154, 39,
- 61,163,148, 91,164,129,200, 48,110, 99,158, 14,199,241, 52,117,184,236,163, 73,169, 87, 21, 31, 18, 77, 94,159, 35,205, 30,  3,
-220,127, 40,133, 60,152,210,214,  0,189,129, 38,215,239, 21, 30,174,195, 74,177, 34,177,122,174,140,233, 25, 78, 53,132,202,241,
-143, 63, 28,246,236,178, 45,104,193, 55, 89,  6,247, 82, 79,112,238,174, 94,198,178,245,173, 69, 38,187, 61, 38,212,237, 70,118,
-232,184,156,193,185, 89, 28, 92,132,180,255,  0,129,246,149,160, 61,213,214, 59,118,238,198,171,131, 50,161,114,118,221, 37,196,
-159,144,117,156,155,  9,117, 40, 22, 55,220,145,213, 38,171,218,139,180,232, 90,189, 40,220, 85, 72,169,134, 30,129, 41, 42,109,
-106, 66,183,120, 72,189,206,189,132,106, 13, 92,185, 75,145,197, 20,173, 73,219,150, 12,232, 47, 50,172,142, 41, 57, 87, 99,  2,
- 10,190, 30, 67,131,169,176,208,237,246, 91,173,115,169,247,119, 50, 39,214,141,201,201, 92,142,102,177, 51,145, 24, 68,105, 33,
- 94,105, 76,117,159, 18,130,119,169, 42, 26,141,186,232,116,182,181,163,114, 78, 81,225,137,155,110, 74, 50,226,118,126, 37,206,
- 49,249,204, 82,120,239, 38,125, 13,202,254,234, 22, 69,208,124,151,145,208, 50,253,193,  3,167,133,119,174, 35,112,219, 39,102,
-231,125, 97, 97,253, 81, 92, 87,247, 71,218,142,155, 73,171,111,179, 46,  6,199, 15,194, 33,196,117, 82, 99, 72, 74, 30,104, 27,
- 37, 65, 73,113,179,221,112,  8, 82,123,171,  7, 81,185,206,107, 44,150, 15,211,238, 52,251,168, 44, 81,103,137,194, 75, 75,206,
- 58,148, 37, 65,119, 89, 66,122,117,238,176,235,214,170,106, 53, 49,105, 34,116,161, 20,107, 49, 88,116,  6, 60,213,182,227,123,
-201,  1,  4, 94,254,203, 10,198,191,168,117,165, 81, 82,237,195,145,250,241,233,204,180, 67, 79, 41,198, 33,148, 71,140,128,185,
- 65, 73,  9,117, 78, 32,238,110,193, 90, 30,155, 72,246,215,105,251, 91,120,139,151,113, 54,234,248,116, 83,153,205,110, 48,204,
-179,174, 71,154, 33, 77, 48, 50, 74,242,194,118,238,243, 27,212,144, 82,189, 69,251,197,141,122,181,203,125,229,188, 76, 43, 87,
-178, 77,208,129,145, 89,109,253,195,165,247, 38,218,  1,122,177,101, 86, 37, 91,147,113,149, 70,132,165, 62,146,  9,247,246, 83,
-251,188,172,142, 87,115,145,208,176,151,200,190,134,164,106,168,129, 74,140,182,255,  0,104,151,141,141, 25,136,152,184, 10,147,
- 29,226,250,114, 47, 52, 92,124,158,196, 40, 21,109, 41,254,205, 86,252,178,184,222,105, 74,157, 11,129, 43,212,187,116,203, 24,
-215,165,146, 79,169,252,178, 58, 11,105,118, 50, 90,114,247,109, 17,155, 64,  4,246,232, 47, 81,189,163, 79, 62, 41,225,214, 75,
-250,206,162, 31,237,243, 26,156,100,207, 83,243,216,134, 50,216,222, 66,202,219,144,133,182, 88,113, 59, 84,155, 18,146,139,148,
- 40, 94,226,176,239,219,219,172, 93,118,231,105,225,205,127,169,208, 89,253, 67, 85,106, 55, 97,118, 56,242,107,253, 71,184,151,
- 59,202,206,200, 14, 43,202,219, 75,121, 88,219,153,102, 66,134,215,150,176,111,177,195,123, 40,254,170,169,187,134,217,110, 22,
-251,251, 31, 43,197,174, 94, 53,237, 36,218,247, 75,178,186,244,250,133, 73,172, 23,147,151,184,223,  4,215, 55, 83,172,160,171,
- 82, 11, 65, 64, 11, 82, 10, 30,206,148,149,  1,123,  5, 37, 69,160, 97, 34,146,162,208, 61,180,149,  1, 37,176, 69,169,106, 37,
-  0, 24,215,165, 46, 96,160,126, 64,235,106, 76,194,208, 48,192, 20,102, 10,  3,201, 22,181, 38, 96,160,101,144,104,204, 20,  8,
- 50, 55,123, 41,115,  5,  3,242, 69,206,148,153,130,130,131, 34,221, 53,164,204, 46, 81, 94, 72, 26, 91, 90,110, 97,114,135,240,
-233, 29,148,103, 12,161,136,224,223, 78,148,103, 12,161,252, 56,  2,246,164,206, 46, 80,139, 54,234, 40,204, 20, 16,166, 83,221,
- 78, 82, 19, 40,218,153,  6,156,164, 54,131,106,104,119,105, 79, 82, 27, 65,178,206,189, 41,217,132,202, 17,100, 82,230, 19, 40,
-146,207,178,151, 48,101, 18, 89, 20,185,132,202, 36,179, 75,152, 74,  5,228,154, 51,  5, 12,240, 77,146, 43, 78,166,117,  4, 20,
- 95, 78,202,117, 70,208, 48,138, 74,139, 65,196,183,115,122,107, 99,146, 30, 75,116,198,199,164, 26,153, 35, 83,173, 34,144,101,
-  2,150, 81,100,129,215,178,132,170, 43,116, 29,109,106,234,177,107,116,166, 52, 57, 49,196,132,173, 87,237,166,188,  7, 44, 88,
-195,168,241,220,244,169, 34,240, 24,209,153,229,251, 83,141,116,118, 42,194,222,219,138,213,219,241,184,140,141,202,157,211, 71,
- 51,137, 41, 81,157,  6,231,104, 53,213,220,134,100,112,214,238, 56, 51,163,226,115, 88,249,209,147, 22,109,172, 69,146,165,119,
-247, 87, 47,127, 77, 56, 75, 52, 78,150,198,162, 51, 73, 72,165,228, 56, 49,142, 90,103,193, 33,200,203, 58,237,253,  5,245,218,
-125,181,127, 73,169,239, 22, 73,113, 43,234,180,249, 59, 81,224, 72,227,220,149,248,239, 52,149, 60, 82,234,  8, 40, 89, 61,163,
-176,222,162,213,232,163, 36,240,192,102,159, 82,211, 88,151,252,170, 10, 51,168,252,221,155,  9,200, 33, 78,165,  3,194,162, 72,
-232, 70,154,246,214,118,134,235,176,251,183,242,154, 90,136,171,203, 50,226,140,214, 34, 82, 88,144, 80,225,216,146,118, 56,217,
-  6,197, 39, 69, 18, 59,107, 87, 81, 12,209,170, 42,217,184,171, 70,106,178, 28, 81, 57, 28,122,178, 88,118,212, 99,196, 71,237,
-148,148,148, 90,214,212,220,220,168, 19,173,133, 99,218,215,119,115,201,113,227, 47, 15, 49, 61,205, 61, 85, 99,200,159,194, 81,
- 50,102, 74, 62, 42, 28,116,201,146,243,126, 91,172,188,116, 61,133, 71,175, 91,233, 77,213,219,205,143, 94, 20, 44, 90,184,148,
-124,152,146, 57,175, 15, 24, 41,114, 19, 23,205, 66, 77,214,227, 79, 13,164,185,188,133,  4,148,245,212,125,  2,147, 79,168,149,
-114, 77, 98,176, 43,206, 10, 75, 52,121,148,188,110,118, 43,226, 76, 25,241,208,178,225,  9,253,181,210,139,157,  1, 27, 79,222,
- 21,103, 81,  9,165,153, 60,  5,177,117,124,188,206,221,233,127,168,144,240,185,102,184,230,110, 75,115, 48,101, 97,184,121, 98,
- 66,172,221,172, 16,181,107,253,133,125,  7,178,184, 13,247,103,119, 96,238,218, 77, 75,156,125,171,218,141, 91,122,134,227, 74,
-248,142,223,146,127,  8, 94, 74,225, 41,  9, 74,201,216,173,170, 78,131,180,139,127, 37,121,253,184,221,197, 58,151,173,202,116,
-164,139, 28, 44,156, 86, 82, 67, 80,131,202, 75,205,141,203,  1, 33, 40,247,233, 80, 93,181, 56, 98,240, 79,153, 94,243,148, 83,
-107, 19, 49,235,148,  6, 37,240, 89,204,195,112,  7, 18,146,166,148,108, 78,246,245,  2,199, 77,109,214,181,191,110,220, 86,245,
-209,120,180, 82,113,148,237,201, 62, 52, 62,116,100,110,202,219, 90, 21,114,141,200, 42,  7,245, 13,191,146,213,244,205,156, 83,
-169,198,221,147, 84,126, 24, 12,169,242,234, 60, 71, 91,105, 79, 81,163, 35,115,170, 24,140,225, 10, 32,212,147, 68, 80,144,111,
-168,164,165, 95, 65,164,138,168,147,149, 24,114, 28,243, 25,191,104, 23, 31, 69, 16, 84, 99,110,186,162, 11,234,220,208, 61,213,
- 98, 43, 18,172,221, 81,213, 61, 27,201,151, 99,100,112,203, 85,252,149, 38, 83, 35,250, 46,120, 23,111,164, 38,184,255,  0,220,
- 86,105, 40, 92, 92,240,126,195,187,253,175,168,172, 39,105,242,121,151,151,136,239,171, 24,100, 67, 56,254, 87, 17, 97,140,146,
- 30,110, 58,173,162,156,176, 42,109, 98,221,169,219,182,253,214,238,166,236, 58,135, 60,214, 37,140,104,223,139,165,121, 69,253,
-197,167, 80,112,212, 65,210,105,165,227,232,126, 67,160, 97,167, 43, 39,  5, 18, 95, 45,137, 86, 31, 16,203,125, 27, 81,  0,237,
-191,111,190,185,189, 77,174,234,110, 42,180,229,214,117,154,121, 78, 81,172,240,151, 53,209,212, 88,236, 21, 86,165,138, 10,  8,
-164,168,180, 22, 27,210,155, 81,104, 43, 96,164,168,180, 12, 32, 94,146,162,208,  1, 35, 91, 81, 80,160,123,  5,174,122,209, 80,
-160,176,209,177, 81,209,  3,170,206,137, 31, 73,166,230,  6,210, 85, 96,218, 59, 44, 71, 98,134,160,138, 42, 42,117,197,  3, 96,
-162,160, 22,193,106, 90,128, 54,107, 69, 66,130,146,216,185,164,108, 90, 10, 13,141,105, 42, 20, 22, 16, 59,169,181, 29, 65,126,
- 94,189, 41,181, 10,  0,183,160,239,162,162,208, 95,151,107, 10, 74,133,  3,242,133,172, 41, 51, 11, 64,148,216,181,168, 76, 74,
- 13,150,133,244, 20,252,194, 80,101, 77, 14,202,122,144,218, 12,169,189, 42, 68,198,180, 54, 81, 78,168,218,  3,101, 21,  0,182,
- 26, 42, 20,  8,182, 59,169,106, 37,  4, 22,199,117, 45, 68,160, 94, 85, 46, 96,161,152, 40,208, 86,181, 76,202, 13,169, 54, 62,
-202,122, 99, 67, 66,111, 72,216,169, 18, 27,110,162,108,145, 33,205,182, 35,186,155, 81,212, 29,242,183, 11,211,115, 14,202, 54,
- 26, 59,129, 35,165, 59, 48,218, 15,148, 92,130,  5,192,235, 81,212,146,129, 41,177,112,164,253, 52, 38, 35, 67, 46,160, 13,105,
-241, 99, 90, 50,220,181,187,226,100, 56,191,186,132,223,233, 36, 90,182, 52, 15,252,169, 24,251,138,255,  0, 12,155,228,114,213,
- 55,224,221,111,109,117,201,226,112,141, 96, 28,121,107,103,194,117, 77, 36,237,166, 16,155,137,181,227,185,111,142, 66,240,210,
-212,167, 35,201,181,128,241, 43,114,122, 40, 14,210, 43,  7, 89, 99, 35,239, 35,197, 27,218, 59,249,235,  9,112,101, 94,119, 12,
-246, 38, 70,244,148,173,147,226, 67,136, 59,146, 65, 54,  6,174,105,117, 10,236,105,204,175,169,211,187,110,171,129,163,225,121,
-180,190,180,194,151,101, 40,144, 26, 10,185, 10, 55,232, 77,255,  0,231,172,189,203, 76,226,179, 68,181,163,191, 92, 25,163,206,
-241,182, 93,124, 78,136,139,  7, 69,221,138, 53, 40,189,236, 71, 93, 58,253, 21,151,165,214, 53, 28,178,229,204,185,118,204,107,
-153, 17, 48, 57,167, 56,150, 89,166,167,111, 24, 57,122, 56,130,160,108, 58,116, 26, 40, 39, 90,155, 85,166, 90,187, 77,199,231,
-143,135,144,100, 46,187, 79, 31,149,155, 76,246, 43, 30,182,216,229, 60,112,252, 57,  5,  6, 75, 77,216, 41, 73,251,193,212,109,
- 62,206,206,181,139,165,212, 78, 45,217,187,143, 67,246, 23, 92, 87,204,134,185,  7, 39,107, 33,136, 18,150, 22,189,168, 66, 31,
-186,138,174,218,183, 21, 40,237,251,166,230,218,255,  0, 45, 90,181, 98, 78,226, 79,138,240,242,145, 74,145, 93, 71, 51,205, 67,
-105,192,153,208,212, 28,103, 82,128,  6,129, 33, 90, 92,142,182,189,181,  3,165,116, 58,107,141,118,101,196,204,189,  5,243, 33,
- 88,110, 72,150, 85,240,242,  2, 93,105, 95,179, 90, 79,133, 23, 36,  3,211, 80,  8, 31,163, 73,168,209,215, 21,131, 36,181,168,
- 92, 14,211,233,183,170, 18,158,204, 67,227, 57,137,104,145, 21,219, 53, 26, 75,218, 61,225, 23,218,146, 62,242,128,181,247,106,
- 71, 77,122,240,155,206,201, 21,106, 87,173,198,141, 98,210,225,225,225,192,214,177,170,237, 40,182,122,103,242, 21, 36,171,242,
-242,148,168, 50, 87,230,223, 85,  3,208, 15,105, 53,229, 75, 81, 95,155,164,185,223, 46,125, 38,111,158,240,183,115,248, 86,226,
-102, 68,136,176,208, 82,226,220, 75,150, 42,  9,  6,232, 32,118, 27,214,190,219,173,150,150,238,104,172, 95, 10,175, 72,218,194,
-234,203, 95, 49,243,231,154, 99,163,226, 57, 14, 83, 17, 25,  5, 44,196,125, 91,  9,237, 74,180, 29,167,184, 87,209,251,109,233,
- 93,177, 11,146,227, 36,112,122,200,171,119, 37,  4,184, 51, 54,149,139,123,122, 86,171, 69, 28,194, 66,182,174,253,244,180,170,
- 27, 90, 49,111,172, 41,191,104,214,155, 21, 70, 19,150,  2,  2,174,215,217,245,210,211, 17,181,192,136, 85,118,200,169,233,137,
-  5,112, 52, 28, 35,144,255,  0,179,121,133, 78, 38,201,114, 59,140,159, 14,227,115,101, 11,  3,165,238, 52,190,149,155,185,233,
- 63, 51,107, 47, 90,102,166,213,173,252,173,231, 62,152,180, 90,230, 51, 51,243, 72, 92,153,142, 43,203,117,123,128, 42,220,171,
-143,187,173,187, 59, 52,181, 83,211,233,225,101,210, 43,129,167,168,213, 79, 80,179, 73,146, 56, 30,108,241,252,226,140,215,157,
-115, 24,250, 54, 56, 83,227, 80, 81, 27,147,165,198,160,212, 91,166,155,243, 22,123, 41, 41, 34, 77,167, 86,244,215,222,118,220,
- 90,241,245,157,145,158, 77,199,221,  9, 34,114, 17,126,129,196,173, 31,202,155, 87, 15, 45, 21,245,253, 39,117, 13,195, 79, 47,
-234,243,147, 81,146,197,174,193, 19,163,168,158,128, 58,143,231, 53, 93,217,184,184,197,249,139, 81,212, 90,124, 36,188,228,193,
-123,  5, 39, 80,117,  4,106,  8, 62,218,132,176,131,  4,244,  9, 39,232,164, 22,160, 89,216, 55, 57,102,208, 58,149,157,163,235,
- 52, 44,120, 98, 53,201, 46, 36,  7,243,152,184,230,202,123,122,129,177,216, 44,148,255,  0, 89, 75,218, 62,171,213,152,233,174,
- 75,145, 94,122,171,113, 92,106, 84,171,151,170,116,180,227,248,244, 81, 42, 72, 63,182, 90,255,  0,186,108, 14,213, 47, 64, 61,
-214,189, 92, 91,126, 72,231,189, 44,171,151, 75,242, 25,139,113,157,217,228,181, 26,191, 66,241,178,197, 17, 80, 85,231,102,165,
-252,108,131,175,195,166,226, 50, 45,216, 17,250, 94,245,125, 85, 89,205,240,183, 28,171,167,155,242,251,139,209,211,174, 55, 94,
-119,232,243, 22,173,186,133, 39,195,162, 70,130,221,213, 77,197,162,250, 99,129, 64,246,211, 40, 40,160, 47, 72, 40,180,182, 15,
- 94,157,244,141,139, 65,228,180,144,  6,148,199, 33,212, 29, 12,167,183,182,163,204,199, 80, 87,146,145,161, 26,118,119,210,102,
- 97, 64,246,  1, 99,106, 42,  0,218, 59, 69, 21,  1, 91, 18, 69,133, 37, 69,  7,148, 52,  2,140,193, 65, 10,104,223, 74, 85, 33,
- 40, 52, 91, 80,185,181, 62,162, 80,142,164,144, 53, 21, 42, 99, 89, 29, 93, 13, 72,136,198,205, 56, 64,169, 64, 58,  0, 42,  0,
- 22, 20,  5,  2,219, 69, 68,161,151, 82, 52,  3,178,181,211, 51,104, 52, 81,173, 62,163, 40, 56,219,116,214,199, 36, 62, 19,107,
-  1, 81,212,146,129, 16, 82,108,104, 16,124,  1,180, 84,100,131,136, 78,227, 97,210,154,221,  7, 36, 45,127,179, 73,183,109, 53,
- 98, 43,192, 96,223,109,187, 77, 74, 48,109,196,220, 88, 10,114, 99, 90, 51,220,186, 50,151,199,114, 43, 79, 86,218,223,175,114,
- 72, 38,180,244, 19,165,248,248,204,173,202, 13,233,167,226, 57, 12, 39,208,242,124,167,149,178,227,194,174,203,251,107,180,185,
- 23, 28, 81,231,118,174, 87,  6, 33,230, 10, 10,129, 22, 35,249,233,209,149, 71,202, 34,224,204,114, 27,232,113, 42,218,164, 16,
- 82,161,165,141, 54,237,181, 53, 64,181,117,219,146, 58,140, 37,192,228,240,143,154,226, 89, 85,174,235, 40,  0,146,225,  0,  5,
-160, 17,208,144, 55,253,117,201,220, 83,211, 79, 15, 14,175,113,212,194,228,111, 64,198,100,177, 79,226,150, 30, 96,146,201, 58,
- 17,113, 98,158,191, 81,173,187, 55,213,213, 71,196,203,191,101,219,198, 38,203,142,115, 36,162, 56,248,143, 27,205,159,218,222,
-193,110, 53,182,199, 82,  8,184,183,109, 97,235, 54,234,203, 14, 30,166, 92,179,171,170,199,137,186,200,241,188,111, 39,132,204,
-136,167,114, 92, 65, 68, 87,133,138,154, 81, 29, 20,  1,  1, 61, 47,236,172, 11, 26,187,154,105,184,203,203,214,105, 56,198,228,
- 76,102,  3,151,100,120,206, 93,206, 47,147,116, 46, 18,221, 40, 75,141,237,186, 20,110,  2,133,129,  4, 42,253,157,245,185,170,
-208, 67, 83,105, 95,130,237, 80,163, 13, 67,181,115, 36,248,114, 55,248,174, 45,134,158,100, 33,233, 69,152,243,128, 12,182, 19,
-118,174,  1, 43,184, 22,208,143,182,178,109,223,147,105, 62, 49,230, 94,154,164,112,197, 28,243,145,227, 23,198,164, 77,199,184,
-240, 24,224, 66,155,  0,  5, 13,253,  8, 10, 70,239,208, 87,215,214,231, 90,221,179, 46,241,167, 78,210,240,245,153,247,123, 42,
-191,210,115,236,130, 84,210,195,204, 29,173,184,157, 71,120, 61,186,233, 91,246,157, 85, 25,147,115, 12, 80, 26,200, 41, 44,108,
-119,118,205,201, 90, 93, 79,128,161, 73, 34,196, 17,107, 29, 47, 68,172,213,224, 42,187,133, 31, 14,147,215,127, 46, 62,180,181,
-147, 96,241,142, 73, 49,175,206,163, 32, 55,  5,249, 43, 32,200,104, 27,  0,147,112, 55, 14,223,175,221,227, 31,187,255,  0,110,
-187, 50,239,236,197,228,127, 50, 95,210,252, 56, 27,218, 77, 87,125, 28,146,120,175, 73,234, 21,200,129,146,128, 21,150,144,202,
-131,119, 46,  4, 20, 45, 37, 34,253,151, 54, 61,230,184,  9, 75,188, 73,205,181, 37,195,165,249, 58,124,100,202, 50,183, 46,194,
-226,124,219,245,197,183,101,115,124,214, 90, 52,113, 27, 16,251,222, 76,102,129,185,  9,111, 68,168,157,163,239,  4,110,183,182,
-190,134,253,178,212,116,118,237,183, 89,165, 87,229,247, 86,135, 63,185,194,125,227,111,129,200,202,133,237, 93,165, 12, 10,129,
-106,  2,218,208,144,141,147, 33, 98,242, 89, 53,  6,224,198,113,226,173,  1, 72,211,235, 53, 13,203,246,237, 99, 38,145, 61,189,
- 61,203,184, 66, 45,151,206,112, 28,190, 57,  8,252,241,230,177,190,104,  5, 41,116,248,200, 63,209,208,214,114,221,109, 92,127,
-226, 78,116,232, 52,214,207,114, 43,252,146, 80, 34, 63,199,112,113,208,171,230, 74,214, 71,221, 67, 37, 66,255,  0, 88,169,163,
-171,189, 39,255,  0, 31,164,175, 61, 21,152,127,238, 87,200, 84,126, 90,215,156,148, 67,150,135,181,176,222, 11, 93,125,166,227,
-237,171,189,243,167,106, 52,244,149, 99,165, 82,146, 80,146,126, 60,  9,179, 34,228,161,134, 81, 45,165, 37,181, 27, 54,160, 66,
-155, 87,185,105, 36, 31,174,160,183, 59,115,174, 87,239, 45,106, 52,247,172, 53, 25,170, 87,135, 52,252,168,209, 98,157,202,114,
-153,241,120,206, 58, 27, 45,167,114,158, 67, 49,154,  2,234, 66, 73, 42, 90,245, 81,211, 77, 77,101,223,141,189, 44, 37,122,114,
-111,149, 91,245, 46,  6,141,137,207, 85, 53,102, 49, 75,158, 11,163,155, 54,143,122,119,204,241, 77,182,251,248,243, 33,165, 95,
- 68,131,167,118,181,133, 29,223, 73,117,180,165, 70,110,254,149,169,183,141, 20,138,108,156,126, 71,142,100, 58,238, 48,150,238,
-174,134,230,215,210,226,175,217,157,139,142,138,101, 75,214,181, 22,227, 87, 10,131,143,242,153,118,118, 26,227,188, 29,184, 90,
- 91,  5,105,  9, 73,209, 86,177,  2,215,181, 26,173, 12,112,146,106,158, 66, 61, 46,182,230, 49,164,151,156,214, 65,228,120,120,
-155,209,152,150,166, 69,137, 62, 55, 29, 80, 30,196,164,157,107, 26,238,142,236,191,227,141,124,198,151,230,224,190,121, 63, 73,
- 61,175, 81,184,211,208, 28,129,199,113,178,166,242, 39,151,182, 60,149,164, 37,144,210, 71, 82,147,127, 21, 39,233, 51,138,205,
-122, 74, 41,117,250,  4,183,175,140,166,149,180,229,228,246,152,156,130,204,137,207, 39, 54,225,105,109,157,170,134,194,183,169,
- 75,237, 42, 90, 77,133,107,218, 89, 96,187,165, 90,243,126,225,102,212,228,251,215,255,  0,108,125,172,190,194,185, 32,199, 68,
- 76,116,127,134,136, 59,  6,151,246,168,246,154,205,212,168,230,205, 55, 86,105,105,155,202,163,  5, 68,106, 97,227,213,162,159,
- 85,207,112,172,139,151,122, 13, 88, 91,233, 45,219,105, 40,176,  2,194,169,185, 84,180,149,  7, 82,144, 15, 77, 59, 41,141,138,
- 58,148, 21, 31,101, 49,177,201, 18, 16,216,168,155, 28,144,224, 65,189,169,181, 29, 65,196,161, 87,183,217, 77,108, 81,192,146,
-  7,180,118,211, 42, 40,118,  3, 83, 64,  6,  2, 79,187,178,144,  2,176, 29, 58,210,128,  8,  4, 90,128, 18, 69, 40, 13, 57,246,
- 83,208,214, 69,115, 90,149, 12,100,103,  5,234,100, 49,140, 30,182,238,167,141,  8,155, 82,136, 39,117, 45,  4,  6,234, 40, 21,
- 12, 42,138, 11, 80,239, 72, 45, 76,241, 64,181,251, 43, 78,165, 10, 13, 20,  2,108, 58,211,170, 50,130,210,144,154, 70,234, 57,
- 42, 14,142,194, 58, 83,  7,  7,176, 45, 96,246, 81, 90, 33,105, 82, 72,105,  4,127, 61, 67,153,146, 80, 82, 16, 27,  4,210, 55,
- 81, 82,160,219,170,222,108,  5, 58, 42,130, 60, 70,237,106,120,218,  5,176,154, 42, 37,  8,249, 28,120,159,141,153,  5, 67,195,
- 33,135, 26,191,181, 73, 54,251,106, 91, 55,123,187,145,151, 67, 76,138,253,149,114,220,160,255,  0,169, 52,121,189,  5,108,184,
-166,151,162,155, 81, 73,247,164,218,189, 69,210, 74,168,241,220, 98,232,249, 22,177,220, 18,146, 25, 55, 50,  7,220, 63,172, 63,
- 87,223,221, 84,230,178,227,200,187,  9,230, 84,230, 71,125,178,147,168,181,142,160,246, 26,150, 44,100,209,103,128,205, 61,143,
-146,144, 23,183, 93, 15,243, 85, 77, 86,153, 92,137, 99, 75,168,118,228,116,220,180,184,121,152,141,200, 44,164,170, 80, 66,188,
-239, 51,104,220,141, 23,185, 32,104, 78,151,246,139,215, 45,102, 18,181, 42, 87,135, 81,210,201,198,113,175, 73,206, 50, 72, 56,
-185,103,202, 80, 32,147, 96, 53,177,  7,182,186,107, 47,189,142, 38, 14,161,119,114,192,219,240,174, 92,226,159, 76, 41,107,219,
-  1,245,126,213,182,210,148,148,168,246,166,214,191,117,141, 96,110, 91,122, 75, 52,126,100,104,104,245, 46, 78,157, 36,191, 80,
-176, 17,223,104, 74,140,124,181,  1,225, 80, 77,144,164,147,187,239, 39,169, 23,251, 42, 45,171, 83, 40, 60,178,196,183,170,178,
-174,195, 14, 37,119, 31,230, 83,241,248,147,140,144,171,190,192,219, 29,229, 27,169,  8, 23, 59, 83,115,165,239, 86,117, 91,124,
- 39,119, 60,120, 62, 37,123, 58,137, 66, 25,101,197, 20,243,114, 89, 12,155,201,142, 16, 93,185, 88,100,216,170,247,208,233,219,
-245, 85,219,118, 97,109, 86,180, 35,157,217,220,236,208,131, 61,216,216, 72,191,  4,242,132,140,202,181, 12, 39, 86,153, 10,182,
-174, 43,169, 58,125,218,158,212,101,122, 89,150, 16,233,230,252, 94,242,173,217,198,194,202,251, 83,244, 47, 25,154,151,231, 41,
-127,181,121, 78, 11,220,167,162, 46, 59,128,210,181,109,209, 44, 17,153,113,201,190,211,111,212, 37,153,178,152,117, 14, 48,234,
-208,227, 36, 41,181,  3,170,105,101,110, 50, 84,107,136,206,246, 73,224,222,  7, 95,227, 30,173,114,121, 56,147,134, 68,160,211,
- 76,165, 94,105,113,229,  0, 65,234,108,163,109,123, 44,117,174, 43, 91,176,105,227,119,188,113,171,125, 71, 67,165,220,231, 40,
-229,194,168,131,205,102, 73,229,107,196, 97,113,235, 18, 36,182,133, 63, 53,109, 32,169,197, 60,225,  0,  5, 42,230,228,  1,160,
-171, 27,109,184,233, 85,203,147, 84, 79,  5, 94, 20, 66,234, 33, 61, 92,163,  8,190,182,102,229,240,204, 46, 42, 58,159,202,228,
- 74,164,167, 85,196, 96,165,107, 65,238,112,223,106, 61,197, 87,246, 86,165,189,198,237,217, 82, 16,195,165,251, 57,191, 48, 75,
-104,177,106, 46, 87, 38,240,228,188, 40,188,230,108,229,240,240,220,255,  0, 82,199,249,234, 29, 23, 33, 91,133,253,192, 86,167,
-229,238,205,118,165, 79, 17,145, 45, 86,150,219,255,  0, 29,188,221,114,100,143,246,195,144,173, 11,110, 43,226, 11, 43, 22, 82,
- 34,167,203, 54, 29,155,181, 87,219, 81,254,159, 97, 58,201,102,125,120,252,  4,123,166,161,170, 69,228, 95,219,135,167,137, 94,
-183,158,121, 74,126, 67,171,117,211,170,150,226,138,148, 79,188,222,172,168,165,130, 84, 69, 87, 41, 73,214, 77,183,214, 50,183,
-236,  8,191,178,212,245, 18, 39, 33,128,186,146,132,117, 39, 68,146,224, 74,153, 11, 62, 79, 85, 34,254, 18, 71,109,186, 85,123,
-144, 92,105,137, 98,213,199,194,184, 27, 79, 76,249, 38, 15,  7,146,159, 35, 32,234,152,158,226,  2, 35, 61,174,208,216, 59,150,
-144, 83,115,184,144, 59, 59, 43, 11,122,209,222,191,110, 42, 10,177,174, 43,175,145,209,108, 90,221, 61,155,147,119, 29, 36,248,
- 62,174,103,110,193,114, 94,115,200,217, 15, 97, 50,110, 96,184,234, 28,216,230, 90, 98,247, 89,203, 93, 35, 98,247, 37,  0,255,
-  0, 72, 19, 92,108,182,141, 44, 37,254, 72,169,203,204,151,141,172, 78,150,238,231, 43,159, 38, 11,207, 39,228, 49, 25,103,113,
-128,200, 76,188,206, 67, 35, 63,113, 34, 66, 94,216,222,227,247,188, 36,219,169,232, 52,173,155,118,229, 22,148, 33,  5, 31,250,
- 74,147,185,206, 82,151,254, 69, 63, 26,229,141,241,249,110,135, 97,183,154, 75,200, 41, 75, 50,  8, 74,211,220, 67,129, 42, 61,
-189, 44,106,198,179, 64,245, 17, 84,147,183, 78,143,112,205, 54,224,173, 54,168,166,250,203, 73, 92,198, 54, 97,118, 71,  9, 99,
-226,122,110,248,199,118,219,250,161,176, 79,215, 84,225,183, 74,202,255,  0,251, 14,159,244,175,120,255,  0,207,202,236,191,226,
-139,242,211,216, 68,115, 25,157,205, 52,136,206,198,139,137,132,147,114,212, 36, 41,181,168, 90,214, 91,138, 82,148,175,117,234,
-117,122,205,151,153, 57, 92,151,247,123, 23,  4, 75,249,107,247,150, 87, 72, 47,237,247,151, 56,158, 27,  6, 16, 31,179,222,177,
-218,106,133,253,198,115,230,104,233,246,235,118,249, 26,168,216,240,210, 64, 74, 66, 83,220, 43, 30,119,106,107, 70,221,  9,237,
-199,183, 65, 85,220,201,148, 71,210,199,125, 70,228, 58,131,129,180,138,110, 97,104, 56,148,138,107, 99,144,234, 83, 76,108, 81,
-224,158,158,202,142,163,135, 18,158,166,154,216,161,237,210,253,244, 84,  2, 82,108,155, 80,152,  9, 34,192,  1, 78, 16, 26,130,
- 41,  0, 43,139,210,138, 17,212, 29,105, 68, 25, 87, 67, 79, 67, 72,235,  3,160, 63, 77, 72,134,178, 50,135, 94,241, 82,161,131,
- 42, 77, 72,152,209,  4, 83,132,160,146,147, 75, 81,180, 16, 69, 40,129, 82,128, 47, 64, 21, 37,  6,192,158,149,114,165,106,  9,
-  8,  0,222,157, 81, 40, 40,181,185, 55,166,230,160,185, 67, 12,172, 39,173, 25,144,101, 18,148,147,165, 43, 98, 36, 73,109, 42,
-  3, 94,149, 19,100,169, 14, 17,113,106, 96,225, 59, 61,148,234,141,160,  3, 98,138,139,148, 80,110,253,148,218,139, 65,196,181,
-168, 54,166,185, 10,145,231, 94,113,133,119, 11,201,102,178,164,217,167,150, 95, 97, 93,133,183, 13,255,  0,150,189, 59,108,212,
-171,218,120,190,105, 81,249, 15, 38,221,244,174,198,166, 75,148,157, 87,148,163,101,210,133, 36,130, 65,  4, 20,145,165,136,173,
-  9, 70,166, 84,101, 70, 91, 77,201, 47, 42,241,147, 33, 40, 76,133,  1,230, 20, 36, 35,122,128,177, 81,  3, 77,199,169, 53, 78,
-221,149,105, 81,112, 46, 59,185,248,241, 43,220, 72, 26,166,172, 38, 67, 36,104, 56,254,101, 41, 87,193, 77, 90,188,133,233,116,
-157, 82,123, 20, 47,221, 89,218,189, 53,123, 81,226,104,105, 53, 63,211, 46,  3,217,136, 78,164,121,132,249,141, 29, 80,190,164,
- 19,254, 90,143, 79,113, 60, 56, 50, 91,240,243, 20, 12, 73,118, 35,193,109,171,105,191, 81,165,104,202, 10,106,140,205,140,220,
- 29, 81,209, 49,156,189, 46,192, 17,165,187,251, 75,120, 85, 96,119, 91, 91, 31,166,185,171,250,  6,167, 88,172, 14,142,206,181,
- 56,170,241, 41, 98,226, 93,228, 25,180,179, 21, 72,105,148,  0,227,203, 82,180, 66,  6,167,233,  2,175, 92,212, 45, 61,154,203,
- 23,200,173,221,187,247,112,193, 34,211, 63,203, 49,152,132, 57,132,226, 72, 10,145,183,203,149,147, 88,220,164,158,138,242,201,
-233,126,195, 85, 52,154, 11,151, 90,187,168,225,202, 62,242,109, 94,182, 22,255,  0,199,103,143, 54,115,167,208,164,149, 47,113,
- 90,201,220,181,155,146,163,222, 77,116,209,103, 59, 56,138, 67,169,113, 54, 63,123,180,210, 56,208, 69, 42,139,139,142,153,146,
-125, 49,113,236, 46, 68,133, 27, 37, 13,164,147,244,219,165, 36,239, 66,220,115, 77,209, 15,183,102,119,165,150, 10,172,233, 12,
-122, 95,  7,138,195,103, 59,234, 68,241,138,140,176, 28,143, 21,162, 28,150,245,143,221,109,176,110, 79,244,141,146, 59,235,151,
-158,247, 61, 84,157,173, 28,115,190,109,225, 21,227,126, 12,222, 91, 93,189, 52,115,234,101, 78,165,234, 50,217,143, 81, 94,218,
-236, 14, 39, 23,242, 92, 74,238,133, 44, 43,116,183,146,123, 93,112, 90,215,237, 74, 44, 59,239, 90,218,125,161, 97, 61, 68,187,
-201,253, 43,196,189,175,208, 80,191,188,206,153,108,174,238, 62,151,229,247, 24,199,164,201,147, 96,243,138, 90, 71,221, 73, 58,
- 15,112,233, 91,177,132, 99,193, 24,115,187, 57,252,206,162,152, 97, 75, 61, 41, 37, 42,  9, 24,212,178, 75, 41,109,187,147,175,
- 79,109, 85,114,171, 46, 40,164,134, 28,209, 58, 83,208,198,240, 16,134, 30,146,189,145,218, 91,202,237, 13,164,168,253,148,231,
- 37, 21, 86,232, 54, 48,148,221, 34,155,241, 11,115, 25, 53,144,163, 37,179, 26,221, 67,224,182,126,162, 41, 21,248, 75,229,117,
-241, 15,150,154,228,126,101,151,199,129, 29, 46,121,104, 87,121,169, 28,106,202,234, 84, 68,102,214,180, 58,151, 16,108,180,144,
-160,125,162,165,105, 53, 66, 36,218,117, 52,146,249,102,124,182,152,255,  0, 28,232,136,226, 66,131, 41, 81,  8, 61,134,233, 22,
-  4,214,109,189, 21,175,246,170,154,114,214, 92,141, 40,232,136,236, 57,150,148, 65, 73, 90,133,239,239,189, 62, 74,212,122,  7,
- 66, 87,174,116,147, 88,198,242, 52, 74, 18, 25,134,227,170,108,  2, 21,180,144,  1,214,171,202,245,135, 26, 57, 37, 82,104,233,
-245, 42,117, 81,110,134,179, 31,203, 64,142,166,101, 71, 76,119,209,181, 42, 46,130,158,150,  6,218, 92, 86, 53,221,  7,106,177,
-117, 93, 70,173,173,106,106,146, 89, 95, 89,125,134,229,114, 22,189,172,188, 92,105, 34,234, 18,  6,244, 91,167,133, 70,202,  3,
-233,172,237, 78,130, 41, 98,177,234,240,161,175,166,220,165,201,225,214,107,224,242,232,106,  1, 79,196, 80, 77,236, 92,142,160,
-177,167,110,213,109, 35,235,172, 91,187,124,215,  9,121,205,219, 59,156, 95,204,188,198,151, 29,145,197,228,238, 32,190,151, 28,
- 78,170,104,130,135, 64,246,165, 86, 63, 85,101, 94,179,114,215,204,189,198,181,171,246,238,252,172,176,216,  5, 86,169,100, 79,
-109,251, 41, 68,  0, 20,  0,180,139,104,116,166,177, 71,  0,166,138, 58,146, 47,122, 99, 20, 90,116,184,239,166,177, 69, 92, 31,
-117,  0,  2,  1, 23, 63, 69,  0, 17, 72,211,237,162,160, 36,167, 90, 90,128,130, 59,233,194, 13, 30,180,241,  6,141,192,167,136,
- 50,190,180,244, 48,105, 86,185,167,161, 24,209, 77, 58,163, 68,148,211,170,  2, 74, 41,106, 32,146,142,250, 90,137, 65,  5, 29,
-212,234,137, 65, 59, 13,237, 75, 81, 40, 85,218,246,190,130,213,108,174, 37, 41,220,187,118, 82,183,128,148, 28, 82, 66,109,182,
-154,152,225,206,169,183,125, 52, 81,  9, 78,213,116,165,111,  0, 67,212,193,225,128, 77,  0, 45, 45,222,154,216,180, 28, 75, 94,
-202, 99,144,180, 22, 27,166,212, 90, 11,  8,164,168,234, 24,111, 84,120,170,179, 56,100,228,226, 35,116,252,109,212, 82,145,117,
- 45,131,247,128,183,104,251,213,208,108,154,238,230,238, 73, 62,204,253,103, 55,191,109,255,  0,152,179,158, 43,181, 15, 74,230,
-112, 85,166,198,226,189, 21, 51,203,218,  2, 92, 35,232,161,160, 82, 29, 14,111, 23, 52,199, 26, 18,169, 84,108,168,161, 91,134,
-132,107, 79,165, 70, 60, 49, 46, 91,205, 62,228, 65, 29,203, 16,157, 42,139,211, 37, 42,162,236,117, 45,198,140,175,118,202,212,
-125, 53,102, 36, 19,196, 67, 47,169,  7, 97, 36,119, 82,202, 53, 35,140,233,129, 96,156,155,177,227,184, 65,178,148, 44, 79, 78,
-202,172,236,169, 73, 23, 21,247, 24,182, 85,161,197, 54,119, 27,149, 43,196,163,219,115, 86,218,169, 69, 54,177, 30, 82,252,212,
-237, 79,222,232, 45,219,236,166, 37, 70, 73,154,166,159,142,240, 12,150, 77, 95, 17, 44, 24,209, 18, 55,175,113,  8,218,143,214,
- 90,149, 96,145,239,172,157, 94,235,110,214, 17,197,248,112,233, 54,116, 91, 68,238,188,211,194, 62, 30, 98,253,254,119,  7,135,
-160, 99,120, 80,109, 83, 27,186, 36,101, 75,105, 83,101, 93,133,148,172, 18, 79,244,151,244, 10,205,142,215, 61, 99,207,169,174,
- 87,194, 53,199,203, 79, 82, 53,111,238,214,180,177,238,180,201, 87,156,189,221, 62, 51, 11,149,204,207,205, 60,244,156,131,203,
-149, 46, 65,187,210, 30, 81,113,197, 30,189, 79, 65,236, 21,208,216,211, 66,202, 81,130, 81, 75,130, 71, 49,127, 83, 43,181,205,
-139,124,202,159,133,182,157,189,106,238,114,135,118, 41,136,171,121,228, 48,202,119,186,179,100,166,146, 83, 73, 85,240, 22, 54,
-220,157, 22, 44,184,123,143,230,224, 35,204, 84,125,200, 34,254, 29,116,246, 85, 24,234,236,220,116,169,161, 45, 21,235,106,180,
- 42,158,148,180,157,174,164,161,193,212, 27,138,185, 27,107,145, 70, 87, 31, 62, 37,212,124, 11,111,192, 76,245,200, 46, 33, 71,
-196,150,135,221,190,182, 36,213,  9,234,156,103,146,148,241,154,182,244, 42,118,212,220,170,186,137,176, 24,118,  3,139, 78, 54,
- 76,134, 16,224,179,161,151, 86,141,195,173,142,194, 47, 80,221,154,154,237,164,252,105, 63, 89,106,204, 29,151,254, 57, 74, 62,
- 41, 53,234, 21, 37,236,139, 12,185,230, 79,124,199,  9,187,141, 60,242,221,109, 73, 79, 97, 74,201,  6,155,  8,219,147, 84,138,
-175, 82, 73,250,  5,157,219,145, 78,179,149, 58,219,107,204,204,203,152,201, 47,165, 42,134,218,158,222, 55,184,148, 36,217,187,
-157,  1, 87, 78,149,170,175,198, 63, 51,167,180,195,150,158, 82,249, 85,107,232, 33, 57, 14, 76,101, 35,207,105, 72, 11,213,  4,
-141, 21,110,234,177, 27,145,151,  6, 86,157,169, 67,230, 84, 58, 15,165,152,126, 49,157,206, 63,  7,147,166, 67,133, 49,156, 92,
-  6, 35,148,160, 45,244,246, 56,165,  3,100,129,226,208, 92,251, 43,154,223,117, 26,155, 22, 84,172,209,118,150,102,249, 46,164,
-116,187, 30,154,206,166,246, 75,157, 24,123, 78,218,214, 59,137, 98,150,219,177,241, 81, 35,184,210, 64, 69,247,175,196,  5,183,
- 88,171,175,109,112, 50,189,169,186,154,115,147,169,233, 86,236, 88,179, 74, 70, 42,133,238, 63,157,197,130,133, 71,121, 17,102,
- 69, 90,118, 45,153, 12, 54,161,183,216,160,  2,146, 71, 97, 74,171, 62,238,215, 41,186,172,209,125, 41,191,244, 21,206,211,166,
- 60,  6,114, 16,189, 54,229, 81, 75, 19,177,232,142,165,127,164, 65, 10, 32,158,208,161,101, 15,166,244,251, 87, 53,250, 89, 86,
- 50,175,135,155,212, 50,238,151, 79,125, 82,105, 63, 67, 57,151, 37,244,140,196,221, 43,138, 78, 83,240,212,146, 75, 11,212,139,
-118,  2, 58,215, 89,162,223,243,246,111,198,143,164,230,245,123,  6, 92,108,201,211,160,202, 48,140,246, 49, 94, 76,248,171, 32,
- 13,161,196, 38,224,  1,238,173,137, 59, 55,113,132,140,133, 11,246,157, 37, 18, 19,249,249,173,230,227,249, 62, 98, 21, 24,135,
- 15,150,162,133,146,174,227,110,234,158, 58, 72, 59, 46,180,196,169, 45,100,227,121,101,174,  7, 95,199,231,243,255,  0,151, 53,
- 57,246,148,235, 75,  0,126,221,133, 15, 31,104,243, 26,176,250, 72,174, 42,246,146,206,119, 20,233,226,126,198,118, 54,119, 43,
-170, 53,120,249, 61,197,212, 76,250, 36, 22,208,228,117, 37,215,  0, 33, 45, 45, 14,219,222, 14,210, 53,170, 23, 52,174, 53,105,
-224,186,112,247,151,237,238,145,124, 98,253, 99,241,179,216,153,114,101, 66, 98, 72, 50,161, 43,100,182,138, 84, 11,106,238, 38,
-196, 95,233,168,231,165,187,  8,169, 53,132,184,117,150,237,107,172,220,109, 70, 88,174, 36,164,228, 33, 92,  1, 37,171,158,129,
- 75,  9,189,186,253,235, 84, 46,212,250, 25,107,189,135, 74, 31,110, 83, 14,130, 90,121,165,164,117, 41,113, 36, 15,182,153, 40,
- 53,197, 63, 48,157,244, 58, 87,156,144,226, 28,105,147, 37,210, 17, 28, 88,151, 84,160, 16, 47,168,214,253,181, 18,105,188,171,
-136,238,242, 43,139, 67,109,190,203,137, 74,208,243,106, 74,134,224, 66,210, 65, 22,189,244, 38,156,226,215, 20,195,190,133, 56,
-160,191, 49,130,132,  7, 23, 41,160,218,133,210,162,174,163,191,165, 47,115, 54,233,149,140,122,155, 73, 87, 50, 30,102, 84,105,
- 59,140,119, 82,242, 80,118,169, 72, 55, 72, 36, 94,215,247, 26,100,161, 40,241, 84, 36,183,118, 55, 21, 98,234, 59,184, 91,219,
-217, 76,161, 40, 71,191,235,160,  4, 19,111,166,156, 32,210,251,169,232, 65,165, 26,114, 16,109, 93,253,180,244, 52,101, 64,138,
-122, 16, 65, 20,225,161, 90,128,  5,168,  0, 20,131, 75, 80,160,130,221, 45, 68,160,159, 44,222,150,162, 21,  4, 36,  0, 45,115,
-106,186, 86, 16,134,205,247, 29, 41,206, 66, 36, 61,180, 83, 42, 62,129,210, 10, 11, 80,  2,130,111, 72,216, 15, 33,186,141,177,
-201, 15,165, 29,212,198,199,208, 88,108,211,106, 45,  5,134,233,181, 22,130,194,  5, 54,162,208, 88, 71,101,174, 14,132,118, 17,
- 73, 81,104,112,255,  0, 82,125, 58,119, 22,235,185,204, 35, 69,120,199,  9, 92,136,232, 23, 44, 40,234, 72, 31,169,252,149,223,
-236,219,186,186,149,171,175,181,201,244,252, 79, 59,222,246, 87,109,187,182,151,103,154,232,248,122,142, 86,161,173,117,232,226,
- 90, 13, 14,109, 63,203, 67, 85, 21, 49,243,101,139,143,162,163,224, 73,196,105, 42,242,149,175, 67, 79,106,164,105,208,125, 43,
- 10,247,212,109, 18, 41, 13, 56, 44,111,210,158,134, 72, 90,182,187, 24,184, 78,163, 66, 41,171,  9, 80,125,107,  0, 61,168,191,
-103,101, 17, 18, 88,155,206, 31,199,226, 99,162, 39,146,114, 47,217,196, 73,220,202, 84, 60, 74,  0,139,165,176, 69,139,132, 27,
-128,116, 29,181,206,238, 26,185, 92,151,115,103,143, 63,143, 81,211,109,218, 24, 90,135,125,123,  5,203,225,214, 67,229,156,181,
-252,235,203,139,141, 74,161, 96,146,108,212, 66,173,203, 88, 79, 69,188,161,162,150,126,161,217, 83,232, 52, 17,176,179, 79,181,
- 62,158,142,165,208,138,250,253,198, 87,222, 88,118, 97,209,211,214,204,168,141,160, 39,237,173,124,230, 54, 64,126,205,  0,216,
-235,219, 70, 44, 29, 16,217, 82,110, 78,150,183,111, 90,122, 68,109,162, 70, 21,197, 70,148,137,169,232,133, 88, 19, 81,106, 86,
-104,229, 37,210, 60,178,204,119, 94, 46,252, 60,188, 47,132,148,148, 23, 72,187,101, 67, 83,113,208, 87,158,235,163, 59, 51,205,
- 30,  7,121,166,106,228,104,202,222, 83,233,131, 50,218,113,246,146,148,173, 34,231,244,109,238,239,171, 90, 29,237,193,164,202,
- 90,205,178, 51, 85, 57,196, 68,101, 56,100,181,  9, 44,124, 86, 41,223, 12,150,122,130,159,214, 79,113, 21,212, 92,118,245,145,
-193,229,146,224, 96, 91, 87, 52,114,199, 24, 62, 62,242,232,124, 34,  9,151,143, 88, 49, 29,  1, 65, 10, 30, 32, 21,220, 42,143,
-105,246,103,197, 27,138,210,107, 52,120, 49,248,216,248,179,136, 47,144, 80,122,  5, 11,127, 45, 71, 59,210,135,  1, 85,136,190,
- 36,174, 77,139,122, 47, 27,146,136, 10,  1, 62, 89, 81,105, 34,202, 41, 73, 10, 61, 61,130,161,209, 95, 82,212, 44,253, 34,107,
-109,211, 79, 37, 30,131, 93,242,213,232,196,158,100,243,222,161,207, 48,228,225,120,250,140,137, 16, 39,172,165, 18, 18,200,220,
-164, 95, 91,105,210,186, 61, 86,182, 22, 94, 78,108,227, 33,105,205,102,103, 56,245, 35,157, 99,102,122,157, 59,148,240,156,114,
- 48,112,144,230,214,161,183, 98,221,128,218,177,110,226, 52,169,229,167, 87,236,228,187,141, 71,216,212,203, 77,117, 78,219,197,
-122, 73,207,100, 57, 22,106, 50,114, 80, 87,231,198, 88,220, 82,209,186,209,125, 72, 41, 61,222,202,230,227,102,197,153,100,150,
- 15,172,236,165,170,191,122, 42,112,197, 50, 27, 17,121,  4,147,162,156, 23,239, 38,167,148,236, 71,160,100, 45,234, 39,205,150,
-173,197,228,240,209,116,184, 72,182,128,131, 84,229, 61, 60,223,  2,244,109,234, 96,184,139, 71, 35,229,184,245,110,110,247, 29,
-196,129,245, 82, 61, 30,150,231, 16,252,230,170,223, 35, 81,136,245,118, 40, 30, 71, 48,195, 41,192,  5,132,200,105, 71,153,239,
- 82, 21,100,171,236,172,141, 71,237,249,113,211,220,167, 84,184,121,203,214,183,212,149, 47,219,242,161,201,  7,210,174, 72,178,
-152, 89,150,162,228,222, 37,196,170, 90, 28,139,170,137, 33, 27,214,141,128,141, 19, 98,171,119, 82, 69,238, 90,117,218,182,229,
- 21,134, 20,151,150,137,212,101,203,187,118,162, 88, 53, 22,248,114,243,214,156,252,101,254, 15, 45,234, 55,  5,140,228,  8,141,
- 53,147,194, 74, 72, 45,135,155, 15,182,164,157,110,218,197,199,103, 80,106,157,239,201,234,235, 87,146, 92, 31,131,225,235, 27,
- 13, 37,228,251, 13, 77, 46,186, 63,137,154,228, 94,160, 79,126, 83,111,171,143,183, 18, 99,109,148, 23,216, 65, 66,156, 81,190,
-170, 35,173,201,171,250, 93,170, 10, 52,239, 42,186, 25, 78,245,235,144,120,219,117, 49,124, 95, 49,202,112, 51,102,100,226, 69,
-121, 79, 73,117, 78, 59,116,110, 65, 85,205,202,146,160, 65,235, 91,218,203, 58,123,209,140, 91, 93,149,129,155,162,119,225,154,
-106, 47,180,203, 53,115, 46,101,145,201,187, 54, 68, 37, 44,  4, 22, 88,101, 37, 77,180,216,190,170,176,234, 73,235, 85, 63, 78,
-210, 91,182,162,165, 78,111,165,154, 49,214,106,231, 55, 39, 30,165,225,210, 88, 99,179,188,224, 58,168,232, 75, 80, 81,123,175,
-204, 37, 40,177,189,180, 39,178,170,222,210,232,233, 92,100, 62, 31,155,156,168,232,188,102,133,249, 92,163, 54, 26,107,144,242,
-207,245, 84,  4,167,225,226,161,  9, 27, 81,247, 65,210,198,221,151,172,216,195, 79,102,174,213,156,122,100,217,163, 29, 45,201,
- 97,114,237, 23, 68, 82, 38, 51,136,227,123, 74,101,228, 37,204, 10,251,233,113,245,132, 27,245,186, 81,180, 85,121,106, 53, 31,
-211, 24,199,201,239, 47,199, 69,167,254,166,229,227,101,163, 45,113, 22,136, 45,193, 96,144,  0, 27,154,223,167,189,119,170,146,
-150,169,241,147,243,150,227,103, 77, 30, 17, 94, 98,242, 44,136,197,  1, 17, 82,150,219, 31,117,  9, 72, 74, 71,208, 52,172,249,
-194, 85,237, 23,224,227, 74, 46,  4,144,226,123,234, 42, 15,  7,152, 61,148, 80,  3,222,158,250, 40,  1, 21, 36,244,214,138,  0,
-133, 38,253,105,201,136, 54,164,138,114, 98, 13, 41, 29,180,244,196, 27, 41, 52,234,136, 17,  6,148, 64,169, 64, 42,  0, 59,119,
-210,  0,123, 69, 21, 10, 20, 65, 35, 74,208,169, 85, 33, 84,130,130,128, 20, 19,223, 73, 80, 22,148, 95,221, 77,108, 90, 15, 33,
-186, 99, 99,146, 36, 33,187,212, 77,143, 72,120, 32, 10,101, 71, 80, 88, 69, 54,162,208, 80,110,146,162,139,  8,164,168,162,130,
-  5, 54,161, 64,203,105, 80, 41, 80, 10, 73, 22, 41, 34,224,131,216,111, 69,104, 45, 14, 59,207, 61, 30, 46,173,204,183, 18, 64,
-  4,221,111,226,175,109,122,146,201, 63,251,  3,244,119, 87,111,181,254,225,162, 86,245, 30, 73,127,234,247,249,206, 19,118,253,
-185,153,187,154,127, 44,127,244,251,142, 45, 33,135,163, 58,182, 31,109, 77, 60,217, 41, 91,107,  5, 42, 73, 29, 65,  7, 80,107,
-188,132,148,149, 83,170,103,159, 78, 18,131,164,149, 26,  9,181,237,247, 26, 26, 17, 48,220,214,145,  3, 27, 67,155,116, 52,246,
-134, 38, 56, 86, 20, 61,180,202, 80,146,181, 37, 55, 33,168,241,181,109, 46, 21,  2,146, 20, 47,247,170, 39,  7, 41,113, 39, 87,
- 35, 24,112, 76,181,226, 88,182,242,217, 68,252, 81, 13,192,140, 11,242, 84,126,232, 74,117,170,122,251,238,213,190,206, 50,120,
- 34,222,223,103,189,185,143,203, 28, 89, 97,203,249, 82,243,243, 18, 16,129, 31, 29, 25,  1,152, 80,209,162, 27,109, 34,223, 74,
-148,117, 39,182,171,109,250, 21,167,134, 56,201,226,223, 75, 44,110, 26,247,126, 95,218,184, 35, 53,241, 27,123,117,173, 92,149,
- 50,179,208,105,201,157, 72,167,171, 99, 37,112,105,134,228,206,116, 50,194, 74,148,163,217,211,233,167, 73,198, 10,172,100, 33,
- 43,142,145, 47,156,225,211,203,  9, 44,171,116,149, 11,249,103, 64,175, 96, 61,245,156,183, 24,102,199,129,173, 45,170,121, 42,
-158, 36, 92,116, 69,146, 88, 32,181, 33,178, 66,219, 95,132,220,117,  4, 30,218,154,245,197,199,138, 32,211,219,174, 28, 26, 58,
-119, 14,124,197, 64, 10, 54,217,107, 41, 68, 88, 19,239,174, 79,113,142,102,117,154,  9, 36,168,201,124,139,157, 76,106, 71,193,
-178,149,121, 74, 59, 12,146, 46,128, 15, 91, 17,110,218,135, 73,182, 65,199, 51,227,208, 89,212,235,242,188,169, 97,211,200,129,
-130,110,  7, 34,117,121,  9,219,178, 13,166,237,166, 43, 75,182,213,142,244,147,122,177,170,115,211,172,145,236,117,178,181,152,
- 67, 81,219,174,101,208, 71,228, 76,199,137, 37, 43,157,228, 98, 88,108, 39,246, 46, 56, 20,179,110,228, 55,117, 84,186, 57, 74,
-113,236,214,111,197,237,100,215,239,198,218,237,210, 43,195,145, 69, 39,212, 24,144, 16, 91,195,196, 18, 31,181,132,169, 41,178,
- 19,237, 67,119, 63, 90,143,209, 90, 16,218,101,113,214,228,168,186, 23,181,251,140, 27,219,196, 99,255,  0, 28,106,250, 95,184,
-205,191,203,185, 28,231,  0,114, 82,213,115, 96,218,  5,134,189,128,  1, 90,177,219,236, 65, 97, 19, 42, 91,150,162,111,137, 38,
- 23, 45,229,220,114, 12,188,118, 34, 84,188,110, 46,120,219, 50, 42, 74,131,106, 36, 88,246, 11, 94,165, 86,237, 92,105,202,146,
-107,129, 90,231,121, 14, 78, 40,171,200,224, 50, 88,248,209,103, 76,  1, 44, 77, 23,105,194, 70,170,176, 85,187,250, 17,175, 74,
-117,173, 84, 46, 73,198, 60, 98, 62,254,138,229,152,198, 82,225, 36, 94,241,190, 89, 35,138, 69,126, 44, 84,151, 36, 72,219,185,
-195,170, 16,142,164,  4,158,164,247,214,110,179, 65, 29, 84,148,165,193, 23,244,122,249,105, 98,226,177,108,234,252, 87,147, 99,
-167,192,110, 74,139, 78, 60,173, 28,110,214, 82, 85,218, 15, 83,244,253,149,199,107,180, 87, 45,205,172,104,118,123,126,190, 51,
-138,150,  6,197,  2, 52,214,124,214,144, 10,122, 16, 64,184, 61,198,176,222,104, 58, 51,166,132,227,113, 85, 17, 94,197,199,115,
-239, 50,155,123,170,104,223,146,230, 36,173, 69,242, 43,100,241, 76,124,144, 74,152,  2,253,213,106, 26,233,199,153, 86,122, 40,
- 75,145, 81, 39,211,184, 15,164,128,157,183,236, 34,174,195,119,156, 74, 51,218, 45, 73,112, 11, 27,198,121, 95, 27,  5, 60,111,
- 49, 34, 19, 68,220,176,133,146,213,255,  0,168,171,167,236,165,189,173,211,106,127,230,182,164,250,121,249,248,149,227,181, 92,
-180,169,110, 77, 46,130,208,228,125, 68, 62, 25, 77, 65,150,239,100,135, 98,167,204, 31,247,178,129,246, 85, 78,231, 67,253, 46,
- 81, 93, 10, 94,250,147, 43, 26,164,168,212, 95, 91, 88,149,232,131,207, 16, 29, 13, 75, 12,182,253,252,214,154,101,144,130, 13,
-201,  0, 20, 27,117,239,171, 46,238,137,210,177,173, 58,223,188,111,229, 53, 53,205, 90,120,146, 33,127,176,185,233, 11, 47, 72,
-154,247,152,173, 77,156, 82, 71,119, 64, 64,169,255,  0, 83,179, 21, 69, 21,230, 19,244,203,210,117,148,223,156,146,199,167,179,
-202,193,122, 66,213,237, 82,201,254, 83, 81, 75,118,133, 48, 72,150, 59, 84,171,139,126,114,226, 47,  7,242,192, 14, 60,171,138,
-163, 61,206,188, 17,118, 27,122, 92, 89,102,207, 23,101,171,  5, 56,178, 42,172,181,173,242, 45, 71, 74,145, 57,188, 12, 80,  0,
- 37,103,233,170,239, 85, 34,101, 98, 36,248,240,209, 28, 89, 23,250,106,180,238, 57,113, 38,140, 40, 74,  8,239,168,106, 72, 40,
- 34,146,160, 30,218, 42,  0,219, 69, 64, 43, 80,  0,219, 75, 80, 18, 83, 69, 64, 34,154, 90,137, 65,  5, 20,234,137, 65,  5, 20,
-181, 16, 45,180,181,  0,108, 61,180, 84,  5,108,164,168, 20, 65, 26, 10,208,169, 84, 61,158,202, 42,  1,132, 26, 74,139, 65,105,
-110,154,216,180, 30, 67, 84,199, 33,201, 18, 80,208, 30,250,137,200,145, 33,228,162,152,216,225, 97, 20,218,138, 44, 38,155, 80,
-160,160,154, 74,139, 66,  6,115, 53,142,227,152,199,114,185, 53,148,198,108,132,165, 40, 27,150,227,138,251,168, 72,211, 83,106,
-179,165,211, 92,212, 92, 86,225,197,250, 58,202,218,173, 77,189, 61,183,114,124, 23,133, 14, 63,147,245, 79,148,230, 93, 91, 88,
- 52,163, 25, 20,125,221,155, 86,245,187,212,226,197,191,232,129, 93,181,141,143, 77,101, 86,239,109,250, 60,200,225,181, 27,238,
-166,243,106,213, 32,189, 62,118, 83, 30,101,234, 54, 49,237, 50,146, 22,190,187, 30,217, 33, 39,183,162,194,190,202,189,250,118,
-130,234,249, 23,147,  3, 55,245, 77,117,167,132,219,241,209,151,112,253,104,228,177,236,222, 83, 14,196,162, 52, 42,107,204,142,
-178,125,222, 49,246, 85, 11,159,183, 52,242,198, 23, 28,124,116,126,227, 74,215,238,123,241,255,  0,146,218,151,138,171,222, 86,
-114,159, 80, 56,143, 40,138,191,206,120,212,134,178,161,  4, 71,148,203,200, 74,194,134,128, 23, 54,  2, 83,239, 74,170,214,135,
-105,213,105,101,254, 59,201,195,154,105,250,171,237, 69,109,126,241,164,213, 67,252,182,101,158,152, 52,215,175,163,200,206, 91,
-127, 97,  0,215, 95, 67,137,168,123,238, 44,105, 40, 45, 70,207,125, 56,107, 13, 43,161,160, 76, 94,227,116,144,109, 99,113, 77,
-160,234,151, 17,178, 63,  5, 21,232,145,164, 44,174,102,212,190,  6,136, 13,167, 91,107,115,114,106,148,236,231,146,148,146,236,
-240, 47,194,247,119, 23, 24,203,230,226, 86,200, 42, 65,178,189,227,184,213,168, 98, 84,158,  3, 77, 54,244,167,  3,109, 11,168,
-246,157,  0, 29,228,246, 10,116,154,138,171, 27,  8,202,110,136,177,199,227, 14, 66, 95,229,248,246,190, 45,213,120, 76,131,184,
- 32, 19,212,161, 34,223, 65, 87,213, 85,174,223,238,227,158,111, 42,232,247,150,237, 88, 83,150, 72, 44,223,221,203,201,241,243,
- 29,191,136,250,110,246, 19, 28,169,146, 99, 37, 75, 41,220,124,221, 21, 98,155,131,180,216,216,158,138,174,  7, 95,188, 43,243,
-203, 23,230, 59,125, 22,221, 27, 48, 42,179,113, 94,129, 35,226,172, 18,132,219,194,  6,157,123,133, 91,211, 77, 92,142, 82, 91,
-176,161, 85,149,106,  6, 65,161, 49,198,195, 83, 91, 31,222,167, 66,176,  6,129, 67,182,174, 88,148,237,188,169,214, 37, 41,233,
-225,115, 23,131,233, 11, 11, 51, 28, 14,201, 78,145, 96,  9,107,239,  2,123,169,117, 54,238,127, 74, 31,102,212, 34,177,117, 46,
-165,170, 59,236, 28,148,230,145,  7,  4,207,222,148,248,216,135,109,250, 13,  3,170,212,123,147, 84, 45,169, 69,228,139,205,113,
-242, 92,186,223, 66, 39,157, 20,115, 79,179, 14,151,236,233, 57, 99,243, 25, 57,137, 47,241,181, 61, 10, 10,148,124,131,188,165,
-208,155,118,148,247,247, 87, 95, 27,111,186, 74,245, 37, 46,125,  7, 21, 43,171,190,110,205, 98,136, 18, 33,205,243, 60,233, 72,
-117, 74, 95,250, 71, 66,141,254,149, 85,136, 92,133, 41, 26,121, 10,247, 45, 92,173,100,159,148,186, 28, 99,201,138,169,114,210,
-124,164, 88, 56,165, 45, 44,167,121,253, 20, 18, 20, 84, 71,110,149, 71,243,153,165,150, 62,170,225,215,208,104,189,  2,183, 26,
-207,215, 76,122, 22, 14,164,136,248,216,156,127, 35, 10, 94, 69, 11, 24,247,238,133, 45, 67, 84,121,137, 33, 42,184,234, 47,221,
-175,217, 81, 78,244,181, 22,229, 24,124,200,179,110,196, 52,183, 99, 57,252,175, 15, 21, 87, 19,103,147,135,136, 84,246, 91, 81,
-142,238, 18, 91, 36,198,145, 17,  7,204, 74,210, 66,138, 22,173,196, 31, 15,221, 87, 67,109, 69, 97,217,185,117, 65,181, 85, 56,
-188, 84,158, 30, 53,229,229,233, 58, 11,208,131,154, 84,139,132,150, 13,123,124,134, 39, 53, 49,224,203,216, 39, 99,153,184,230,
- 74, 87, 22, 66,  7,237, 90, 37, 32,157,167,186,253,149,189,166,182,170,174,167,150, 79,138,228,206,127, 91,114, 84,118,101, 28,
-208, 95, 43,230,188, 93, 69,115, 24,229,230,158,101, 81,155, 90,130,146, 27, 74, 82, 18,149, 18,216,  0,157,183,181, 89,149,229,
-101, 58,191,  6, 82,134,153,234, 36,156, 83,232,229,203,202, 29,178, 56, 41,132,180, 86,196,134,143,137, 43,  4, 43, 78,197, 14,
-209, 71,248,239,195, 28, 83, 24,227,115, 79, 60, 48,104,233,156, 63,212, 37, 63,224,125, 39,207,105, 55, 91, 73, 27,129,236,184,
-185, 26, 26,229, 55, 13,167, 46, 43,131, 58,189,179,114,115,120, 97, 36,117, 92, 86, 83, 31,148,117, 17,202, 85, 30, 91,136,243,
- 16,203,160, 13,192,125,237,170,  4,131,110,222,218,227,239,216,157,164,223, 21,210,142,238,213,216, 92,241,151,163, 28,217,182,
-149,157,223, 50,206, 84, 57,249, 90, 20,116,166,247,236, 92,131,201,196,163,181, 58, 83, 29,246, 46, 81, 99, 22,129,250, 52,222,
-253,138,160, 41, 56,164,245,219,122, 71,124, 92,162,191, 44, 22,213,  3,234,164,239,133,202,130,252,177, 29,109, 75,223, 49,185,
- 70, 87,142,178,189,244,245,120, 76,164,117,194,219,112,117,181, 72,174,  9,148, 71,144,  5, 59, 48, 80, 34,221,141,  9,137, 64,
-246,209, 81, 65,180, 81, 80,  6,218, 42,  1,109, 52,181, 16, 34, 40,  0,173, 74,  1, 90,129,  2, 34,148,  4, 16, 41, 64, 73, 20,
-225,  2,181,  0, 29,168,  0,236, 41,  0,166, 75,122, 15,117, 94,108,175, 65, 65,170, 76,193, 65, 65,171,246, 82,102, 22,131,169,
-103,190,152,228, 57, 33,244, 55,236,168,220,135, 80,117, 40,  2,152,216,225, 97, 52,218,139, 65, 97, 52,149, 20, 59, 10, 64, 27,
-147, 38, 60, 40,238,204,152,234, 88,138,200,220,235,203, 54, 74, 71,252,186, 10,124, 33, 41,201, 70, 42,173,145,220,185, 24, 69,
-202, 78,137, 30,122,245, 51,159, 47,146,202,110, 12, 68,249, 88,120,107, 43,101, 42, 31,181,113,100,109, 46, 47,187, 79,186,158,
-206,218,244,189,151,106, 90,104,185, 75, 25,201, 99,208,186,151,188,243, 45,239,118,252,204,148, 35,132, 34,252,175,175,220,140,
-115, 79,188, 82,  4,116,168,169, 86, 26,116, 39,178,182,229, 21,204,197,140,219, 93,148, 60,218,242, 81,206,245, 52,230,206,219,
-110,181, 49,171,114,230,135,101,186,177,202,232, 40,229, 50, 41,116, 58,210, 28, 74,129,184, 54, 36,222,147,184,133, 40,232, 49,
-206,117,193, 50,  6, 78,108,185, 41,109, 50, 83,100, 32,146,143,  8, 26,171, 83,173,170,205,155,113,141,114,149,111,206, 79,138,
- 43,203,170,177, 29,254,202,178,145, 85,186,136, 13, 18, 65,237,238, 20,174, 64,160, 73, 68, 53, 27, 92, 88, 30,210, 59,234, 39,
-112,153, 90,  9,248,237, 35, 64,176,163,109,109,174,180,177,155, 99, 37,  4,136,187, 63, 84,222,165,169,  9, 41,248,161,152,145,
-228,164, 16, 92,184, 85,250, 18, 45,254, 90,134, 51,172,156,122, 11, 19,182,163,  8,201,115, 27, 18,  3,141,121, 46,139,143,209,
- 61,160,211,242, 81,213, 12,207, 85, 70, 45, 37, 69,  8,135, 24,120,222, 62, 50, 58,145,210,223, 79,109, 53,210,185,159, 34, 68,
-219, 89, 35,197,157,143,130, 98, 32,113,248,137,153, 45, 91, 93,112,  2,161,112,146,122, 92,107,175,109,112,251,166,162,122,137,
-101,143,  4,118, 58, 29, 60,108, 65, 87,139, 54, 25,110, 92,137,  9, 67, 44, 56,183, 10,  0, 74, 19,114,162, 18,158,130,253,109,
-173, 98, 88,208, 56,226,209,184,231, 26,113,169,151,124, 74,204, 57,226,185,108, 27, 88,245, 36,214,188,114,217, 69, 89, 55, 34,
- 60,126, 31,145,155, 56, 70, 97,149, 73,125,203,236,142,  9,190,212,246,251,133, 73, 61,194,220, 33, 86,232,186, 70, 70,204,228,
-232,138,236,158,127,137,113, 13,204,  8, 77,103, 57, 18, 52, 13,169, 68, 64,142,176,127, 72, 34,197,213, 11,126,176, 77, 90,177,
-165,212,234,241,204,237,219,250,223,254,159, 89,159,170,220, 44,233,112,162,185, 62,143,233, 94,243,  3,200, 57, 63, 33,230,121,
-  1, 55, 53, 37,114,223, 72,217, 29,132,  0,134, 25, 71, 98, 26,105,  0, 37,  3,216,145, 93, 38,151, 71, 99, 73, 12,182,214, 85,
-205,243,126, 54,114,122,141, 85,237, 84,235, 55, 87,209,209,228, 37,224,113,143, 33,229,135, 16,166,164,146,129,168, 40,113, 44,
-147,101,169, 55,237, 23, 72,191,101,234, 13, 85,228,214, 24,175,111, 35, 67, 67, 97,166,234,169, 44, 60,116,230,215,160,209, 98,
-155,136,135, 39, 49,146, 97,200,234,105, 30, 50,210, 30,116, 33, 74, 42,219,188,221, 91,146,164,128,173,229, 54, 61, 52,172,203,
-238, 77, 69,193,167, 87,205,165,224,250,171, 83, 79, 79, 52,165, 40,206, 45,120,170,252,252,106,186,233, 66,230, 55, 55,225,113,
-224, 77,227,220,142, 18,151, 45,162, 16,137,205, 36, 45, 69, 66,202,  5, 42,212,161, 73, 87, 93, 59, 61,182,170, 51,219,117,114,
-156,110,217,151,101,255,  0, 75,247,115, 77, 22,229,184,105, 59, 86,175, 42, 74, 56,102,165,126, 41,166, 85,203, 91,222,160,161,
-168, 24,198,138,208,133,  4,170, 66, 80, 26, 11, 45, 39, 82,  2,137,242,197,136, 82,207, 78,225,214,174, 90,138,208, 55, 41,188,
- 95, 46, 60,125,125, 68, 55, 90,215,219, 81,143,  5,198, 92, 43, 79, 82,233,126, 99, 63, 47,134,207,199,182,185, 49, 20,183, 26,
- 97, 96, 58,218, 85,185, 14,109, 34,225, 43, 72, 77,239,208,105, 99,223, 90, 48,220, 33, 55,150, 84, 77,250, 61,102,100,182,217,
- 66, 57,237,182,215, 71, 79,151, 15, 87,148,210,136,216,252,190, 53,  7, 15,229, 42, 76,133,135, 24,125, 68,  4,180,164,120,212,
-219,226,202, 81, 82,134,131,160, 58,247, 11,229,103,157,169,255,  0,146,180, 88, 53,211,208,227,225,235, 54, 90,141,248,127,134,
-142,184,215,161,241,106, 94, 31, 26,140,142, 77,158, 61,145,131, 55, 18,197,222,146,155,191,142,120,111, 40, 82,118,233,219,127,
- 22,235, 43,244,133, 93,179,101,234, 45,202, 55, 30, 17,225, 37,225,254,134,126,166,247,229,231, 23, 24,227, 53,140, 95,135,143,
- 30,101,118, 83, 60,214,113, 65,150,160,169,149,165, 59,109,112,171, 29,215,178, 72,182,157,131, 74,181,103, 74,236,246,156,170,
- 84,191,172,141,244,160,162,234,134,217, 10,197, 77,137, 54, 62,225,184,141,253,151,212,  3, 78,149, 46,194, 81, 99, 35,254,  9,
-198, 81,230,116,140,148,140,132,120,112,114,222,106,155,148,149,238, 97,212,139, 41, 59,  8, 32,131,218, 65,174, 90,204, 33, 41,
-202,221, 42,185,157,109,235,147,183,  8,206,180,103, 65,244,247,154, 43, 46,183, 48,153, 87,188,204,179,109,252, 75, 46, 43, 66,
-235, 36,144,160,127,164,131,246, 31,101,115, 91,182,221,220,165,118,218,236, 86,143,169,252,125,102,254,215,184,119,175,187,155,
-237, 82,190, 53,240, 58, 58, 54,232,107,151,103, 64, 74, 64, 21, 19,  1,192,144,108, 41,149, 20,112, 33, 37, 58,211,106, 56, 10,
-108, 90,227,165,  9,128,209, 64,  7,223, 79,168,131, 46,183,115,238,167,197,136, 68,117,  3, 90,158, 44, 66, 58,155, 22,169, 20,
-132, 25, 83, 64,154,122,144,148, 16, 90,167,102, 16, 73,108,210,212,  4,148,154, 90,128, 68, 82,128, 45, 64,148,  8,138, 80, 11,
-110,148, 84,  4, 17, 78, 16,108,138,112,130, 77, 40,130,105, 64, 59,208,  0,189,  0, 67, 74,  6,209,238,169,219, 35, 72, 88,110,
-155, 81,104, 44, 55, 77,168,180, 22,150,197, 53,177,104, 56, 19, 77,168,180, 20, 19, 73, 81, 69,237,166,212,  2,165,  2,163, 61,
-201, 49,124,114, 56,123, 34,239,237, 86, 46,204, 86,236, 94,115,220, 59,  7,244,142,149,119, 75,163,185,168,149, 32,176,230,249,
- 47, 14,130,158,171, 89,111, 79, 26,205,227,209,205,156, 79,150,243, 28,191, 39,148,150, 45,182, 34, 85,120,208,154, 39, 98, 73,
-208, 41, 71,170,149,237, 63, 69,171,189,208,109,214,180,209,175, 62,114,240,224,143, 63,220, 55, 27,186,169, 83,151, 40,175, 12,
- 73,252, 43,210,105,249,233, 63,152,102, 45, 23, 24,131,190, 68,167,116, 74, 64,215,233, 62,202,173,185,111,208,177, 28,150,251,
- 82,228,145, 46,223,177, 74,228,179,220,224,105, 57,  7, 46,225, 88,134,218,196,113, 12, 44,105, 63,  9,116,254, 99, 33,  1, 96,
-185,107, 41, 87,208,174,246,246, 36,123,107, 47, 73,183,234,239, 55,115, 81,114, 75, 55,244,174,143,103,175,196,106,222,214,216,
-177,216,179, 21, 38,185,242, 94, 46,146,163, 17, 31,155,115, 39, 28, 98, 19,139, 44,182,130,227,136,101,  8,101, 33,  9, 34,231,
-106, 18,158,151,173, 43,145,211,105,255,  0,166,175,202,202, 79, 85,170,188,187, 83,105,121,189, 68, 44,254, 19, 35,134, 74,  3,
-249,117,161, 74,  9, 81,218,173,246, 74,186, 31, 13,251,123, 42, 77, 53,248, 92,120, 91, 69,107,202,228, 21,123,198,102,162, 64,
-197,207,151,183, 63,149,113, 16,247, 89, 79, 36, 23,148, 14,186,132,246,138,212,149,219,144,143,248,160,171,230, 51, 28, 99, 63,
-249, 36,217, 87,152,135,132,132,251,177,224,173, 82,216,211,200,148, 71,150, 84, 10, 65,213, 39,165,137,181, 91,177,114,236,210,
-114,236,245, 20,175, 66,220,106,150, 61,100, 60, 70, 71, 29, 10, 28,212, 76,128, 36, 74, 81, 79,194,200, 43, 41, 40,183,222, 27,
-108, 65,191,217, 86,111,219,148,218,202,233,210, 84,177,117, 65, 58,162,185,217,206,188,118,164, 88,104, 18,145,236,237,169,227,
-105, 34, 25, 93,114, 27, 13, 92,248,181, 38,157,152,106,135, 72,110, 49,177, 59,136, 22,236,161, 74,162, 74, 20, 39, 40,  9, 24,
-116,165, 35,196,202,183, 14,251,116, 53, 93,118,110,248,203,109,102,177,226, 41, 20, 44,106,250, 51,  9, 16,101, 46, 52,150,222,
-  6,219, 79, 91,  3,111,172, 17, 81, 93,130,148, 90, 38,179,113,194, 73,155,134,102,200,248, 49,152,207,206,120, 99,236, 68, 72,
-202, 62, 39,151,253, 16,  0,210,176, 37,110, 57,251,187, 81, 89,185,190,131,163,141,201, 40,119,183,100,242,242, 93, 36,172, 39,
- 39,206,242, 28,131, 56, 14, 31,199,156,157,145,126,226, 60,104,193,111, 62,187, 11,147,177,  9, 61,148,233,109, 81, 93,171,147,
- 34, 91,203,225, 24,250, 73,179,243, 28,139,133,228,198, 47,149,226,222,198,100, 20,144,224,109,237,  9,  4,245, 26, 85, 95,201,
- 90,212, 69,187, 82,204,150,  5,191,213,103,  7, 75,145,203, 82, 55, 33,231,243, 27,199,169, 24,210,182,100,204, 65,109,217, 64,
-217, 94, 81,234,132,119, 95,244,189,154, 81,164,218,160,231, 89,226,163,203,175,165,251,  4,213,238,146,141,186, 67,  7, 46,126,
-227,158, 51, 17,233, 10, 74,213,254,149,123, 66,143,106,143,190,186,105, 92, 81,195,160,229,163,  7, 39, 94,147,107,134,196,  8,
-225,185, 78, 37, 40,195,199,242,140,217, 78,165,107,105, 10,113, 59,183, 56, 25,  5,106, 77,206,192,  6,128,245,235, 88,119,239,
-231,110, 63,214,235,149, 42, 85,211,146,174, 11,164,233,108,217,238,162,164,190, 85, 74,190, 88,243,116,197,174, 73, 23,252,177,
-156,123,108,124,102, 48,185,  6,116, 54,149, 33,164, 43,192,243, 96, 36,168, 21,182, 84,189,155,244, 27,122, 40, 30,149,151,160,
-148,220,178,206,146,140,157, 58,159,137,225, 90,116,242,102,166,185, 67, 35,156, 59, 46, 42,171,165,123,171,209,204,197, 65,229,
- 89,220,164,230, 35, 60,250, 16,167,128,101,111,182,211,104,120,182, 60, 91,  2,128,210,231,187,182,183,174,232,108,218,131,146,
- 92, 49,165, 93, 12, 13, 62,227,126,245,200,197,180,171,133, 82, 85,167, 69, 77,252, 79, 78,190, 36,180,195,202, 91, 18,166, 52,
- 23,  1, 62, 90,124,185,  4,128,167, 85,117, 93, 33, 13,131,226,222,119,147,217, 88, 23, 55, 76,177,115,141, 26,139,237,116,199,
-253,171,166,178,165, 85, 59, 41,115,169,186,180, 80,207,221,202,170, 77, 97,130,163,233,234,162,231, 86,228, 85,196,149, 23,131,
-188,246, 51, 34,191, 42, 46, 65, 46,180, 37, 70,  4,150,220,  1, 27,193, 78,167,105,184,210,199, 91,246, 29, 39,156, 37,173, 74,
-112,197,194,142,143,154,198,132, 74,228, 52, 85,183, 60, 35, 58,226,185, 60, 57,116, 18,185, 47, 36,149, 49,214, 50,171, 95,196,
-124, 60,114,210, 35,194,105,228, 33,196,110,220, 55,182,179,181,  2,250,232,155,251,234, 29, 30,142, 48, 78,218,194,174,181,147,
- 88,120,154,226, 77,169,189, 37, 75,141,185, 81, 96,162,165,143,142,188, 12, 30, 23, 31, 29,113, 63, 51,144,224,105, 42,124,178,
-227,235,243,  3, 76,130,  1,  4,249,122,221, 68,216, 95, 74,232,245, 55,100,165,146, 42,184, 86,152, 85,249,206,119, 71, 98, 61,
-223,123, 44, 59, 84,174, 52,143,155,164,146,220, 24,200,203,190, 96,186,204,137, 17,151,185,141,142,111, 75,237, 40,104,117, 39,
-197,216, 69,244,251,106, 23,118, 78,210,204,154, 79,142, 28, 25, 52, 45,195,190,110, 13, 55, 30, 24,215, 50,247,242, 39, 50,222,
- 49,244,166, 84, 23, 27, 89, 66, 85,116,232,135,146,  5,130,110, 47,226,235,216, 45,167,213,  4,157,200,246,100,159,176,179,109,
- 91,155,205, 10, 58,127,229,229,233, 27, 49,211, 46, 76, 84,  5,111, 14, 62,144,148,141,  8, 43, 88,  6,157,157,194, 50,125,  8,
- 73,193, 73,175, 25,211,125, 67, 97,196, 53,133,195, 64, 69,158,242, 75,238,  0, 47,162,149,100,223,217,161,174, 79,104,146,110,
-229,201,240,173, 13,189,198,180,140, 35,199,137,202,224,114,169, 80,121,116, 60,204, 69, 18,168,111, 33, 13,165, 63,166,210, 78,
-213, 15,237,130,126,186,235,238,232, 99, 61, 44,173,203,250,151,167,224,115, 54,119,  9,195, 87, 27,139,250, 93, 60,156,252,231,
-175,161, 76, 76,134,144,234, 15,133, 96, 16, 43,197, 46, 91,202,232,123, 84,101, 85, 82,209,151, 65,170,146,136,226, 82, 78,128,
-222,161, 98,161,192,123,197, 52, 81, 55,236, 29, 59, 41, 69, 18,173, 77,205, 42, 17,141, 44,219,252,148,244, 52,138,161,186,247,
-169,144, 13, 41, 29,191,101, 61, 48, 26, 45,158,218,117, 68, 18, 81,125, 77, 58,160, 36,163,234,165,168,  8, 40,191, 94,148,181,
- 16, 65,109, 52,234,128,146,139,123,169,106, 32,141,162,157, 80, 11,109, 21,  1, 37, 52,234,136, 54,164,211,147, 16, 65, 77, 58,
-162, 13,144,105,106, 32, 45, 74,  1, 80,  3,104, 70,131,221, 79,108,104,224, 77, 50,162,208, 80, 77, 37, 69, 22, 19, 73, 81, 69,
-  4,211,106, 40,176,154, 74,128,101, 52,149, 20,139, 42, 67, 17, 24,114, 84,167,  3, 81,153, 73, 91,174, 43,162, 82, 63,229,160,
-169, 97,  9, 77,168,197, 85,178, 43,147,140, 34,229, 39, 68,143, 53,114, 92,211,217,108,244,231, 80,167, 28, 47,200, 89,103,127,
-223,242,201,240, 36,247, 88, 88,127, 37,122,174,143, 76,173, 89,138,193, 81, 99,227,230,121, 86,179, 87, 43,183,229, 74,226,240,
-241,114, 58,199,165,158,151,170, 75,106,207,230,255,  0,213,241,145,172,169,114,156, 27,130, 47,168, 74, 71,106,149,216, 43,142,
-223, 55,172,175,186,183,140,159,  4,117, 27, 86,218,160,148,230,177, 26,245,159,152, 77,242,177,248, 44,114, 62,  7,  2,242, 28,
- 33,180,104, 84,150,148,  6,197, 17,214,247,220,174,253,  7, 74,119,237,205,190, 21,149,217,246,174, 42,122,121,251,135,239,186,
-169,219,140,109,199,  8,202,181,235,167, 35, 53,197, 49,188, 81,136,137,205,230,231,165,213, 52,164,249,184,182,197,221, 40, 88,
-208,133,125,209,111,210,185,210,182,245,151, 47,201,228,130,167, 89,141, 98, 16, 73, 73,244,121,136, 28,155,212,148, 23, 20,140,
- 26, 12,100,106, 55,133, 89, 90,141,166,196, 88,128, 71,101, 77,163,218, 90,198,101,125, 78,231, 24,170, 71, 19,158,200,206, 78,
-150,178,183, 22, 85,221,126,150,174,138, 26,104, 65, 96,115,247, 53,151, 46, 60, 70, 12,217, 43, 22,  0,222,164,238,226,138,253,
-236,216,166,225,100,231, 40, 37,166,150,234,143, 64,144, 73,251, 41,174,229,184, 44, 93,  7,198,205,219,143,  4,216, 83,176,121,
- 28,112, 73,150,130,210,150, 74, 82,133, 16, 21,107, 94,246,235, 75,107, 85,110,231,203,136,151,180, 87, 45, 46,214,  4, 84,180,
-227, 73,190,203,158,219,255,  0, 53, 76,228,153, 12, 98,227,141,  9, 12,187, 13,  9,220,176,177, 35,245, 77,138,116,212, 16,110,
- 62,171, 84, 82,140,219,229, 66,120, 92,130, 88,167, 82, 36,137, 10,112,216,159,  8, 38,201,236,214,166,132, 18, 42,220,157, 73,
-120,169, 41,  9,114, 58,254,234,135,216,106, 27,240,224,209, 54,158,231, 24,178,  4,148,108,113, 73,238, 58,123,170,196, 29, 81,
- 86,106,140,149,140,136,220,169, 12, 48,224,254,245,105, 23,246, 19, 81, 95,184,227, 22,215, 34,125, 61,181, 57, 36,249,178,219,
-157,228,151, 47, 48,152, 32,  4, 68,198,180,136,204,180,157, 18, 13,130,148,160, 59,201, 53, 75,107,178,161,107, 55, 57,186,178,
-230,233,117,202,238, 94, 80, 84, 59,231,164,178,189, 26,226,254,150,171,155, 99, 57, 76,140, 39,173,120,207, 57,104, 72, 86,206,
-183,  9, 66, 18, 65, 11, 74,211,162,181,170,187,149,219,213, 80,140, 28,148,154,229,203,166,188,168, 87,210,218,132,170,228,210,
- 72,225, 30,160,250,139,201,125, 75,205, 12,231, 39,125, 47, 76, 66,  3, 72,242,211,177, 33, 35,217,237,173, 29, 22,130,214,150,
- 45, 67,250,157, 89, 13,253, 68,174,181, 94, 69,108,118,255,  0, 48, 67,123,175,240,209, 26,185, 39,174,134,234,176,237, 36,157,
-163,232,165,155,238,219,233,147, 39,183, 30,246,137,240,138, 58, 44, 30, 23, 53, 56,148, 77,145, 42, 52,  7, 86,217,151, 11, 26,
-180, 33, 69, 72, 79,233, 21, 47,196, 79,135, 91, 17, 92,212,247,  8, 59,185, 82,148,149,114,202, 93,126, 36,116, 81,210,228,183,
- 86,227, 23, 76,202, 20, 92, 60,111, 31, 81, 72,199, 52,200,112,247,221,101,136,209,231, 99,114,109,111,114, 43,251,202, 83,114,
-166,214, 18, 82, 69,210, 72, 38,202,  7,173, 94,150,219, 13, 98, 77,183, 25, 65,241, 94,117,229,241, 16,189,202, 90, 73,101, 81,
- 82,132,213,104,252,169,164,250, 60,117, 27,227, 48, 29,229,207,136,173, 71,106, 28, 23, 28,218,166, 91,222,160,175, 44,  5, 21,
- 45, 75, 82,148,162, 46, 44, 58,118,246, 82,235,110,173, 34,204,219,148,169,199,199,209,208, 63, 69,  7,172,170, 73, 70, 53,225,
-226,233,124, 95, 28, 23,  3, 77, 51,136, 96, 80, 39,194, 97,208,156,142, 49,194,147,163, 77,184,149, 37,  1, 97, 73, 91, 64, 16,
-111,113, 99,123, 40, 88,138,203,134,190,255,  0,102, 77,118,102,186,218,227,208,252, 40,234,153,163, 45, 22,157,230,138,249,160,
-250,147,241,166,188, 43,197, 16, 17,234,167, 35, 49,143, 31,157,141,103, 38,230, 61,203, 34, 72, 37,162,149, 52, 72, 11,233,225,
- 62,219,142,234,176,246, 59, 25,187,216, 77,195, 58,225,199,143, 46,178,164,119,139,174,182,165,109, 92,112,124,120,112,231,213,
-232, 51,109, 73,201,103,121, 52,121, 25,164,134, 82,238,244, 69, 41,177,105, 15, 41, 36,166,198,228,110, 38,221, 79, 91, 86,164,
-161,110,198,157,171,120,210,149,233,167,184,163,  9,221,191,170,140,175, 42, 44, 84,122, 19,229,229,246,157, 35, 21,195,167,100,
- 35,184,152,241, 25,106, 76,114,189,225, 71,204, 42, 85,183,163,226, 55,143, 19, 78,166,251, 29,106,197, 10,208,131,106,230,245,
- 27,133,187,105, 85,186, 75,253, 30, 90,112,148, 95, 24,203,230, 92, 13,200,105,174,202,110, 49, 75, 15, 47, 90,205, 92,105, 37,
-193,199,131,227, 83,  7,201, 38, 47,137,230, 94,110,  0, 67,177, 39,182,164,207,128,237,212,218,210,149,169, 35,117,172,111,161,
-  1, 64,223, 75,246,214,238,142,218,213,218, 78,120, 56,190,204,151, 30, 30, 24, 24,250,251,207, 71,118,145,163, 83, 93,168,190,
- 15,195,164,142,196,245,229,227, 51, 34, 36, 15, 38,114, 84, 88, 98, 74, 54,169,213, 16,  1, 37, 74,  8,  4,216, 16, 47,212,253,
-117, 36,173, 43, 82,106, 82,172,120,181,203,214, 36, 46,247,208, 82,140, 41, 46,  9,241,126,162, 27,156, 55, 36,194, 27,148,182,
- 72, 97,193,184, 92, 18,160, 46,  5,200, 32,117, 38,167, 91,141,185, 55, 20,241, 69, 71,181, 92,141, 29, 48,102,159,128,225,254,
- 59, 57,140, 37, 59,131, 50, 55,184, 15, 95,217,106, 44, 61,245,147,186,234, 50, 89,159, 90,245,154,218, 11, 57,220,122,153,172,
-230, 60,173,150,178,188,154,110,207,  3, 76, 24, 56,135,  7,232,236, 73,108,155,127, 89, 87,172,109,191, 66,221,187, 49,233,121,
-167,235,245, 22,181,154,149, 23,113,190, 74,145,240,241,156,187, 21,197,178,208,242, 88,247, 39,179,240,234,145,181,198, 24, 89,
- 30,114,154, 80,209,123, 65,184, 29,196,215, 93,127, 93,106,118,228,160,235, 78, 47,149,122, 12, 45, 38,219,122, 23, 96,230,169,
- 94, 11,157, 58,105,239, 61, 69,129,113,198, 32, 48,210,141,202, 82, 61,245,228,154,164,165, 54,207, 94,177, 85, 20,141, 36,103,
- 21,161,190,181,149, 52, 90, 69,147,110,  2, 60, 85, 86, 72,112,247,152, 45, 96,117,166, 80,  1,191,234,162,128, 18,150, 53,165,
- 72, 65,133, 18,173,105,235,  1, 68, 20,168,211,170,  2,124,179, 75, 81,  2, 45,154, 42,  1,121, 71, 93, 41,115,  0,133, 52,109,
-210,156,164,  3,106,104,142,130,156,164, 32,202,155, 80,236,169, 19,  1,  4, 26,112,131,101, 52,234,136, 38,212,  0, 69, 52,181,
-  0,138, 69, 45, 68, 16, 81, 75, 80, 16, 81, 78,168,130, 10, 41,213, 18,130,118,107, 75, 80, 16,148,232, 61,212,230,196, 28,  9,
-166,212, 81, 64, 83, 69, 22, 19, 73, 80, 20,  5, 52, 81, 65, 61,244,149, 20, 75,138, 67, 72, 83,142,172, 33,164,  2,165,173,102,
-201, 74, 82, 46, 73, 61,128, 82,164,219,162,226, 35,105, 42,179,137,115,222, 98,238,101,255,  0,135,134,162,222, 22, 57, 42,109,
- 63,117, 79,172,127,164, 87,179,245,  7,211,214,187,237,171,110, 86, 85,101,243,191, 71, 87,188,224,247, 93,201,222,121, 99,242,
- 47, 79, 95,184,160,224,188, 55, 39,204,185, 27, 95,  8,141,169, 73, 46,186,242,142,212,161,182,245, 43, 81,238,  0, 86,150,233,
-184,219,209,216,121,159, 87,156,200,219,244, 79, 81,121, 77,224,142,233,152,203,196,137,  5, 16,216,112,163, 15,143,108,  5,189,
- 98, 11,235, 78,133,197, 14,213, 18,108,129,238,175, 61,211,233,229, 57,230,107,183, 55,230,234,247,158,139, 59,145,183, 26,183,
-217, 71, 23,229, 48,242, 25,230, 93,228,249,112,168,184,148, 40,177,  0, 30,151, 70,190, 83,125,235,214,234, 53,222,232,101, 29,
- 61, 45, 91,198, 79,139,246,190,163,134,215,255,  0,247, 13,220,184,232,151,202,188, 57,156,204,187, 36, 44,178,151, 21,181, 90,
-109, 36,141, 59,143,101,117, 57, 99, 74,208,228, 29,201,167,149, 50,195, 31,199,178,121, 55, 82,219, 49,220, 90,151,109,137,  9,
- 39,249,170,181,221, 93,187, 74,173,162,213,141,  5,219,174,137, 51,115, 27,211, 67, 29,180,124,122,194, 93, 90, 66,139,105, 32,
-148,223,177, 93,198,185,249,239, 57,159,101, 96,117,150,182,  8,194, 61,183,141, 56,123,201, 14, 96,120,230,  1, 41,118, 99, 98,
- 68,149, 13,205, 71, 39, 85, 91,180,129,107, 38,227,169, 63, 93, 69, 29, 86,163, 80,233, 23, 69,210, 62,238,151, 75,166, 85,106,
-178,232, 35,191,201, 50,238, 36,183,141,109,184, 13,  0, 72,106, 19, 97,  4, 11,118,175,169,169, 35,163,180,177,155,114,127,220,
-253,133, 41,107, 46,188, 32,148, 87, 81,139,158, 84,167, 84,235,229, 74,117, 90,149, 40,220,235,239,173,235, 92, 40,184, 24, 87,
-219,173,101,196,170,125,223,213, 87, 78,202,185, 24,153,215, 38, 66,112,151, 85,225, 26,212,235,  2,171,196, 72,105,199, 21, 96,
- 13,199, 90, 92,201,  6, 86,201,134, 25,134,202,100, 72, 37,  5,119,242,145,111, 18,173,219,110,239,109, 65,222,103,116, 69,158,
-231,187,142,105, 97, 94,  3, 15,159, 49, 33, 99,239,118,212,145,192,130,120,226, 74,130,181,177,240,239,164, 92, 32,133, 18, 59,
-129,214,161,186,148,170,139, 22,100,227, 73, 18,121, 38, 61,239,138, 86, 69,164,169,200,175,  4,146,232, 23,178,173,109,125,245,
- 30,142,234,203,145,224,209, 54,190,196,148,187,197,140, 89, 65, 90, 38, 81, 99,143,198,170, 81,108,169, 42, 95,154,173,173, 52,
-139,238, 86,182,190,128,246,233,160,170,215,111,101,175, 81,110,205,140,212,111,159, 35, 87, 14,  9,194, 45,226,236, 50, 28, 66,
-  2,220, 96,238, 62, 20,120,212, 10, 92,  9, 32,144,  9, 29,134,177,174, 93,239,210,164,188,191,232,111, 89,178,172, 54,242,226,
-151, 15, 79, 53,199,163,164,186,201,115,168, 25, 38, 35,178,228,208,244, 70, 26, 83, 12,197,113,181,184,224, 74,172, 64,185, 72,
- 36,220,126,146,190,154,163,103,108,157,182,218,141, 27,117,110,180,246,251, 60,133,155,154,251, 55, 40,220,234,169,242,209,183,
-143,147,214,200,112, 56,156,222, 81, 45, 43,110, 42, 82,211,104, 13, 53,231, 21,  6,210,148, 19,225, 27, 10, 77,202,183, 92,223,
-175, 77, 42,123,186,232,233, 97,139,226,249,113,240,165,  8,150,147,243, 23,105,151,130,231,193, 44,122, 41,206,184,244,245, 18,
-163, 72,153,233,150, 72,188,228, 99,240,225, 97, 46,182,131,184,165, 74, 30, 23, 90,223, 99, 98,  5,138, 79,179, 90,134,112,142,
-231,110,137,227,225,131,167,175,208, 89,140,255,  0, 77,117,167,102,184,165,235, 85,244,167,213,137, 30,126,117,121, 23,151, 51,
- 24,212,135, 84, 11,203, 98, 60,159, 37,128,145, 37, 94,106,183,168,175,122,211,187, 84,131,245,212,150,180,170,218,203, 54,151,
- 10,181, 87,195, 12, 48,162,192,100,181, 25,187,118,212,155,198,137,229,143, 28,113,198,173,120, 84,107,141,194,114, 67,109, 76,
-151, 17, 82,150,203,139,114,124,116,157,143,173,213, 57,185, 70,202,208,171, 97,186,  1,176, 61, 41,250,203,138, 45,198, 50,203,
- 85,217,124,169, 79, 85,120,137,163,182,220, 20,165, 28,205, 54,228,184, 54,235,235,203,192,232,188,154,  7,167, 19, 48,236,156,
- 60,148, 42,100,244,239,101,  0,  4, 31, 41, 54, 10, 82,134,165, 39,168, 59,190,233, 23,234, 43,152,209, 93,215,194,235,239, 22,
- 17,245,251,124,156, 78,130,242,210, 94,183,217,165,100,189, 28,252,222,134,114, 56, 94,160,115, 88,200,248, 24,153, 69,150, 79,
-236, 82,181, 37, 10, 37, 36,216, 92,148,220,253, 55,174,210,230,211,164,147,205, 40, 99,196,226,237,111, 26,200,246, 99, 58,242,
-171, 73,155,252, 63, 30,197,166, 11,121, 46, 66,226, 76,153,239,  8,209,148,166,126, 38, 67,174, 41, 73,111,122,247,  2, 16,128,
- 84,158,228,141,  6,166,176, 47,106,110, 57, 56,218,225,  5, 87,142, 85,211, 69, 78, 47,  7,214,116,214,236, 90,133, 37,123, 23,
- 55, 74,181,153,190, 85,125, 11,197, 74, 19,166,195,197,122,115,145, 75,211, 91, 14,226, 95, 36,164,109, 86,230, 10,198,197,  2,
-128,110,  2,128, 27,182,247,130, 58,216, 83,183,114,230,227, 10, 69,210,107,211,207,143,168,181,113, 90,208, 58,201, 82, 13,242,
-229,225,204,143,156,245, 23,143, 72,198, 38, 35,114,213, 57,196,161, 72, 64, 74,  8, 89, 73, 22,  1, 86,  2,228,  3,107,155,119,
-157,106, 77, 54,209,126, 55, 51, 56,229, 33,189,186,105,149,186, 41,231,195, 14,146, 23,  2,201, 70,197, 52,230,106, 66, 72, 83,
-  1,247,136, 72, 36,139, 13,  7,214,106,125,214,204,174,181,109,115,162, 42,232, 46, 40,195, 60,185, 85,153, 62, 77,153,102,102,
- 12, 22,156,220,228,199,188, 73,181,143,128,149,168,253,100, 86,206,139, 76,225,123, 21,242,175,129,137,174,191, 25, 89,170,120,
-201,252, 77, 79,166, 88, 52, 22,255,  0, 49,146, 10,222, 85,172, 85,169,183,188,214, 70,245,169,117,200,184, 29, 46,195,164,164,
-115,203,139, 59,110, 53, 59,172,  7, 78,202,224,111, 51,186,129,163,140,222,130,179, 38,203,  8,176, 66,116,170,173,142, 28,  0,
- 10, 74,128, 70,129,  2, 32,147,167, 78,218, 80,  6,221, 45,217, 69, 64, 61,183,214,146,160, 30,203,210, 84,  1,176,245,181, 21,
-  0,121,127,243,210,212,  4,150,253,148, 84,  6,212,223,178,158,164, 40,210,155, 55,233,165, 61, 49,  6, 20,215, 93, 41,234, 64,
- 54,166,197, 61, 49,  6,203, 67,186,157,152, 65,  5,190,234,117, 66,130, 74,  8,165,168, 80, 73, 20,162,  9, 41,165,168,  9, 40,
-165,168,129,121,116,181,  1,132,143,  8,247, 84,140,104,176,154,109, 69, 22, 19, 73, 81, 69,  4,211,106, 40,160, 41,  0, 74,156,
- 66, 18, 84,178, 18,148,130,165, 41, 70,192,  1,169, 36,158,128, 82,164,216,141,208,228, 92,255,  0,212, 20, 74,140,184, 88,161,
-191, 19,125,178, 36,116, 47, 41, 38,224,  1,250,151, 31, 79,186,187, 93,171,105,113,150,105,252,252,151, 71,196,226,247,125,214,
-177,113,135,201,205,244,252, 12, 38, 51, 31,147,229,147, 82,136, 81,213,228, 38,197,207,213,  2,250,146,123,  5,116, 55,238,219,
-210, 66,178,120,156,246,155, 79,115, 87, 60, 22,  7, 98, 86,119,  5,193,240, 63,148, 64, 66, 68,199,192, 19, 36,167, 87, 87,123,
-126,201, 54,232,155,245,239,174, 33,105,111,107,175,119,147,224,184, 46, 75,175,198,118,185,173,104,225, 74,148,190,100,172,171,
-  2, 92,244,169,168, 40, 59,146,200,254, 85,123,109,210,175,210, 54,158, 88, 99, 46,147, 58,237,233, 93,198, 88, 71,160,231, 92,
-191, 52,228,237,184,246, 92, 34, 19, 74, 42,106, 58, 84, 75, 73, 82,206,165, 41,239,236, 38,186,125,191, 79,145,102,124, 78, 87,
- 91,168,115,121, 81,127,233,239,167, 41,125,164,114,174, 68,201,252,137,151,  2, 82,146, 45,241, 14,167, 95, 41, 23,237,253,110,
-225, 89,187,182,241,149,247, 22, 95,109,175,252, 87, 75, 53, 54,173,169, 63,242, 92, 58,  3,153, 73,105, 82,190, 29,102, 51,100,
-248, 26,103,192,148, 39,160, 74,109,216,  6,149,205,171, 17,124,113,241,157,130,121,120, 96, 81,100,166,183,142,136,252,233, 23,
- 83,108, 39,113, 79, 66,181, 19,100,167,251, 68,218,180, 44,218,119, 36,162,185,149, 47,221, 86,160,230,249, 28,201,199,103,228,
- 36, 57, 58, 64, 83,175, 62,173, 84,  1,219,115,209, 41,246,  1,160, 21,214, 40,194,220, 84, 86,  9, 28,116,157,203,141,206, 88,
-215,194,134,149,172,115, 56, 88, 49, 39, 78, 83,110,166,114, 28, 95,148, 82,181, 22,195,103, 64,178, 44,  5,202, 15,180,123,171,
- 46, 87, 93,233, 56,199,250,124, 61,165,232,217,238,226,164,249,156,231, 45, 53, 47, 60,227,128,248, 84, 73, 31,242, 21,211,105,
-237,229, 73, 28,190,170,234,109,178,190, 54, 62, 92,235,173,134,212,180,222,222, 17,122,179, 59,177,135, 22, 84,181,167,157,223,
-149, 26,164,241,198,176,236,  4,204,105, 82,115, 79,160, 41,168, 77, 88,134,  2,136,241, 62,123, 13,186, 35,175,125,133, 99,189,
- 99,188,251, 46,144, 92,223, 63,250,125,254, 99,114, 58,  5, 97,118,150,105,190, 75,151,253, 94,226, 74, 56,227,233,105, 78, 49,
- 27,200, 64, 59,190, 34, 69,150,233,254,200,240,139,253, 53, 19,214, 38,232,221,122,151, 15,121,114, 58,  6,163, 88,198,157,111,
- 23,230,224,101,243, 10,109,135,148, 28, 90,164, 72, 58, 21,172,220,233,165,107,233,211,146,193, 81, 28,254,177,168, 75, 23,154,
- 69, 83, 43,222,173,171,211,119,221, 63,205, 87, 36,168,140,232,202,174,132,212,169, 72, 96, 50,128, 66,194,141,255,  0,170,106,
-  6,171, 42,178,202,170,133, 23, 73,177,226,249,184,137,140,188,126, 65, 10, 91,141,253,196,164,110,220,147,217,106,195,215,105,
-164,228,167, 14, 12,221,208,106,163,151, 36,184,162,163,151,181,199,147, 45,191,203, 33,184,195,219,108,250, 13,208,146,231,245,
- 15, 79,109,170,238,223, 43,249, 94,121, 38,185,120,188,101, 13,198, 58,117, 37,146, 45, 63, 55,160,209,240, 25, 56,252,116,232,
-121, 39, 27, 75,147, 33,219,202,142, 78,196, 44, 40, 41, 36,146,  2,136, 35,117,193,177,214,179, 55, 72, 78,228, 37, 10,210, 50,
-226,249,242,247, 26, 91,114,143,102, 74,153,163,203,207,239,243,143,243, 28,211,249,172,228,185,225,182,152,113,246, 12,118, 33,
-178, 84,181, 36,175,122, 65, 87, 66,109,188,171,238,139,155,  1,165,233,154, 13, 60,108,217,140, 21, 90, 78,173,191, 39,186,156,
- 73,245,115,156,174, 74, 77,170,181, 68,151,183,207,209,137,147, 95, 18,153,143,242,159,125,167,153, 82, 74, 84,133,188,132,249,
-101, 64,232, 14,213, 40,166,231,190,181,214,225, 27,149, 73,167,226,226,100,173,177,194,146,197,120,210,167,161,186, 29, 91,142,
-114,140, 35, 28,121, 49,225,178,219,153, 86,193, 65, 75,182, 91,173, 27,217, 73,216,  8, 80, 35,179,179,182,185, 29, 78,146,255,
-  0,230, 51, 57, 53, 30,172, 19,232,199,129,211, 90,149,155,214,104,148, 92,150, 20,106,173,116,224, 98, 57,102,101,252,190, 93,
-140,124,189,234,117,118, 33,231,147, 96,175, 37, 10,242,147,216,  9, 42, 35,119,209, 91,218, 27, 10,213,183, 56,250, 58,218,169,
-151,172,187,154,228, 45, 58,248,223, 82,116, 93,120,241, 46,184, 76,232,184, 12,153,196,229,113, 50, 30, 47, 50,235,190,116, 80,
-135, 86,250, 84,164, 16,187, 58,180, 92,160,  3,185, 58,235,236,170, 91,141,167,168,183,158, 19, 74,141,124,213, 89,120,225,130,
-124,122, 73,244,119,191, 47,115, 35,131,109,167,195,250,171, 76,113,107, 21,225,129, 73,205,103, 12, 44,214,167,241,255,  0, 54,
- 11,143, 40,180,168,239, 33, 41, 81, 66, 64, 36, 41,171,169, 34,196,130, 59,138,141,170,230,219,107,190,131,133,218, 74,156,215,
-177,224,255,  0,208,131,115,188,236, 56,206,221, 98,223, 46,174,138,117,123, 89,159,131, 59, 43,153,117,230, 86,150,217,105,242,
- 12,132,176,132,178,167,148,225,218, 55,168, 13,214, 61, 84,  1,214,180,174,218,183,101, 38,170,218,225, 92,105, 78,131, 58,197,
-235,218,134,213, 18, 79,141, 21, 51, 87,165,241,241,155,188, 47, 15,195,101, 34, 73,133, 26, 91, 75,125,166,144,227,225, 13,182,
-180, 13,234, 82, 70,213,167,197,225, 41,241, 89, 87, 23,174,127, 83,175,189,106, 81,156,162,232,219, 75, 23, 92, 41,203,174,184,
- 96,111, 88,209,216,185, 23,  4,211,105, 99,130,167, 62,140,121,116,134, 57,196, 12, 76,105, 92, 79,144,180,250,148,218,128, 18,
- 34, 89, 87,242,215,125,219,129, 74,146,160, 83,123,129,175, 95,101, 34,219,110, 92,148,117, 22, 90,241, 72, 46,110, 54, 96,157,
-139,201,248,215,134, 14,190,242,135,145,242, 40,220,141,214,126, 18, 59,140,227, 89,220,218, 18,224, 32,175,114,138,137, 58,168,
-146, 78,165, 68,222,180,116,154, 89,216,171,156,171, 55,137, 71, 87,171,134,161, 70, 48,139, 80,143, 73, 64,150,227, 98,166, 41,
- 50,146, 11, 65, 62, 98, 63,152, 94,180, 91,149,216,118,120,153,169, 66,196,233, 46, 28, 77, 27, 18,190, 27,  6, 89,105,176,151,
- 50, 68,184, 66,255,  0,209,198,  4,235,244,251,107, 46, 80,205,122,173,252,158,153, 27, 16,149, 44,255,  0,215,232,137,135, 32,
-228, 50, 13,176,199,137,173,219, 91,  0, 88, 90,253,109,237,235, 93,  2,255,  0, 29,182,223, 19,151,167,125,117, 70, 60, 15, 68,
-240,252, 89,137,141, 97,173,182, 85,129, 53,230, 59,133,252,247, 27, 61,115, 65, 99, 37,180,142,141,141,138, 82,144, 45, 92,197,
-235,134,228, 99, 66,253,150, 66, 64,172,217, 72,144,123,109,169,149,  1, 54, 52,160, 36,147,217, 74,  2,147,168,164, 96, 44, 10,
-104,162,182,139,210, 84,  3,217,175,117, 21,  0,  0,105,  0, 59,105, 64,  0,167,180,138, 42,  2, 74,127,205, 75, 81,  6,212,142,
-250,122, 98,141, 41, 26,116,167, 38,  3, 42,108, 27,127, 45, 61, 49,  6,212,216,191, 79,162,158,152,  8, 82, 41,201,128,130,154,
-117, 68, 26, 82,105,201,128,130,145, 78,168,130, 74,105,106, 32, 91,105,106,  4,100, 39,194, 61,213, 35, 98, 11,  2,144, 81, 96,
- 90,154,  0, 38,222,218,  0,109,231, 91,101,181,190,250,195, 76, 54, 46,183, 22,108,144, 41,241,139,110,137, 85,140,156,212, 21,
- 91,162, 57, 71, 54,230,200,154,195,144,154, 82,153,198, 47,194, 25, 79,247,242, 71, 95, 21,186, 38,255,  0,163,245,215, 99,182,
-237,174, 18, 82,120,203,167,148,124, 58, 78, 63, 95,186,103, 89, 86, 17,232,231, 35, 37,134,225,147,114,201, 25, 28,227,166, 14,
- 36, 18,166,218, 87,222, 82, 70,182,255,  0, 61,108,234,119, 24, 90,236, 90, 89,166,103,105,118,185,223,237,222,121, 97,208, 95,
-228, 57, 92, 76,108,115,134,226,145, 66, 18, 64, 74,188,171,157,202, 26, 93, 74, 55,172,235, 90,  9, 92,151,121,126, 94,115, 95,
- 81,184,198, 17,238,172, 71,135, 71,181,145,120,127, 24,201,114, 12,162,103,100, 84, 93, 80, 88,  8, 22, 42, 66, 73, 54,190,128,
-212,219,134,182,222,158,222, 72, 96,101,105,180,243,187, 60,247, 29,104, 76,245,  7,147,150, 54,113,188, 58,202, 89,142, 71,156,
- 80, 78,175, 36,144, 85,236,208,237,  3,233,168,118,173, 30,111,243, 92,231,234, 19,113,212, 81,228,129,  7,132,250,118,238,110,
- 72,157,147, 42,103, 28,200,243, 36, 60, 65,176, 72,253, 17,253, 35,217, 83,110, 91,186,177, 28,176,198, 79,130, 36,219,118,142,
-241,169,220,224,117, 12,148,135,102, 55, 30, 42,110,214, 54, 10, 11, 80, 34, 15,184,211,119,185,254,210,191, 72,215, 37,102, 10,
- 13,203,140,165,140,159, 73,215, 56, 37,193, 80,167,117,171, 92, 85,232,200,141,163, 19,234, 48,146,222,  5,183, 25, 66,150,219,
-114, 80,167,194, 69,206,221,170,  0,251,129, 53,189,179,229,119,154,127,237,195,208,115,155,230,117, 97, 56,170,210, 88,250, 76,
-  6, 35,153,203,194,203,109,231, 34, 38, 92,102,200, 43,136,226,212,150,213,183,161,240, 16, 65,246,215, 73,127,110,133,232,210,
-180,125, 39, 37,111,117,157,188, 26,170,232, 28,207,243,199, 57, 19,254,100,184,190, 66, 69,128,101,151, 22, 17, 96,144,155,144,
-162,110,173, 53, 52,221, 46,214,180,234,145,117, 45,254,181,110,113,164,237,186,213,255,  0, 87, 38,184, 83,169,153,132, 54,228,
-199,146,219,105, 42, 82,136,  9,  0, 86,171,106, 10,172,231,146,119, 37, 68,118, 92, 23, 14,147,132,142,211, 50,199,147, 40,165,
- 46, 58,145,170,147,188,  5,  1,236, 32,117,174, 31, 85,184,198,252,155,142, 40,244,221,  6,129,233, 32,151,245,250,190, 37,243,
- 48, 35, 50, 74,146,216, 46, 40,149, 45,197,106,165, 40,245, 36,157, 73, 53,157, 43,178,151, 50,236,109, 70, 60, 17,151,230,153,
- 79,134,142, 99,182,118,128, 53,247,214,182,219, 99, 52,170,204,125,211, 81,146, 20, 71, 26,144,234,159,121, 78, 40,220,147, 93,
-212, 35,149, 80,243, 75,146,114,147, 99,208,113,239,207,121, 45, 52,146,110,117, 34,163,187,118, 54,213, 89, 45,141, 60,174,202,
-136,219, 75,227, 78,226,225, 51, 57,208, 84, 65, 74, 28,  7,180, 16,108,127,154,176, 45,235, 21,217,184,163,170,187,183,187, 54,
-212,217, 75,  5,243,136,200, 51,149,181,194, 87,117, 36,141, 10, 73,177,171,247, 99,223, 65,219,234, 49,173,190,230,106,231, 89,
-173,231,144,155,201, 53, 31, 51, 21,  1, 69, 73, 74,156,216, 52,239,  6,253,196, 26,198,218,238, 59,109,219,145,181,186,105,243,
-197, 92, 70, 53,191, 37, 72, 13,175,111,122, 73,236,  7, 66, 62,131, 91,110,169,213, 24, 49,163,193,154,191, 79,154,131, 23, 44,
- 22,181,182,203,205,149,173, 14,186,144,164,165, 69, 27, 82,187, 43, 67, 98,123,107, 35,118,148,229,107,  4,218,232,242,240, 54,
-182,187,113,140,154,224,254, 24, 51,115,155,200, 45,204, 60,136,179,188,144,208, 82,131, 50, 84,180,151,109,169,220,171, 27,109,
- 32,125,253, 59,171,  6,205,180,239, 41, 65, 58,211, 20,184,127,175, 81,178,156,213,183, 27,156, 49,163,124,124,166,127,129,240,
-232,252,175, 43, 33,226, 63,213,159, 63, 16, 80,171,161, 75, 47, 29,192, 41, 66,199,104, 77,180,239, 36,214,142,229,184,189, 37,
-180,159, 21,135,138,157, 29,102,101,141, 15,127, 89, 69,210,189,175, 29,113,163,234,166, 30,146,111, 56,225, 24,156, 51,126, 92,
- 53,169,132,149, 41, 11,100, 27,132, 45, 58,165, 90,104,149, 39,168, 87,104,246, 26,135,111,220, 46,220,151,107,181,133, 83,233,
- 94, 24, 53,201,248,139, 23,116,246,229,109,209,101,166, 13,116, 63,122,226,159, 53,212,206,127, 19,152,114, 21,199,100, 24,177,
-229, 60,207,247, 18, 86,149,135, 82,118,237, 36,109, 82, 69,200,235, 97,173,116, 55, 54,251, 10, 79,180,226,159, 21,203,212, 97,
-218,221, 47,184,170,198, 50,107,131,231,235, 53,156,127,143,183,154,113,233,185,185, 73,111,225,219, 43, 90,128, 72, 87,247,126,
-105,  9,190,187, 71, 98, 83,169,235,173, 99,234,181, 78,205, 33,105,124,207,219, 76,125,236,223,179, 97, 92,173,203,207,130,246,
- 87, 14,174,175, 40,254,127,143,163,139,134,178, 14, 44, 56,222,228,  5,182,176,148,169,104, 85,212, 20,  8,183, 75, 91, 93,111,
-219,173, 71,164,213,189, 85, 96,176, 36,213, 88,142,157,103,228, 87, 30, 67,132,110,107,121, 44, 42,252,169, 42,109,196, 78,101,
- 45, 44, 41,208, 64, 41,184,  3,109,193, 29,255,  0, 77, 90,252,165,231,  7, 11,152,170,172,174,171,  2,148,117, 90,117,113, 92,
-182,232,232,243, 42, 58,190,143, 49,143,125,246,223,156,185,146, 18, 73, 90,201, 80, 86,165, 62,195,107, 86,212, 98,227, 12,168,
-201,147,140,174, 57,207,155, 44, 50, 60,138, 42, 90, 75, 49,152, 13,170,219, 82,218, 44,163,245,219,219, 85,172,233, 37, 90,201,
-151,245,219,133,154, 37,110, 52,116,228, 86, 49, 13,233,175,166, 86, 93,194, 25, 65, 10, 91, 67, 85,  4,245,  0,223, 65,187,178,
-245,110, 87, 20, 35,150,218,196,203,179,167,119,103,154,243,162,246,124,121, 13,230,115,107,152,165,199, 96,237,105, 86, 75,132,
- 29, 54,167,162, 19,253, 17,246,211,180,250,101, 12, 95, 31, 12, 70,107,117,189,227,203, 14, 30, 24,120,141,111,166,220, 85,114,
-228,167, 33, 33, 30,  4,253,203,214, 46,243,174, 80,142, 68,110,236, 59,115,147,239, 36,143, 66, 98, 32,165,  1, 58, 89, 32, 88,
- 87,154,234, 46,212,244,171,112,161,172,136,198,208, 52,250,107, 26,228,170, 90, 44, 18,144,  5, 86,108,  2, 58,155, 26, 80, 16,
- 72, 23,165, 20, 66,117,185, 52,230, 32,176, 41,162,138,181, 32,130,137,181,169,  0, 48,175,174,146,128, 30,225,214,138, 10, 24,
- 34,128, 14,255,  0,101, 32,  4,123,233, 64, 73,  6,148, 65,181, 36,246,211,147, 20, 65, 72,181, 45, 64,109, 77,138,122, 96, 33,
- 72,167, 38,  3, 74, 64, 52,244,196, 25, 41,167,166, 32,218,147, 78, 76,  6,200,167,  8, 21, 40, 17,210, 52, 23,238,169, 27, 26,
- 42,144,  3,181,  2,149,121,140,254, 51,  6,129,241,174,254,221, 66,232,142,146, 55,145,222,111,208,125,189,192,213,189, 62,146,
-229,247,217, 88,116,148,245, 26,187,118, 87,105,227,208, 98,229, 49,202,249, 36,149,205,125,244, 98,176,194,255,  0, 14, 95, 73,
- 43,  9,233,251, 54,149,219,253, 53,139,214,236, 39,166,211, 69, 69, 44,243,231, 79,107,246, 35, 14,118,117, 26,169,102,147,201,
- 14, 85,227,230,246,178,177,200,252,115, 12,162,152, 17, 14, 87, 42,126,244,185, 31,180, 81, 87,176,116, 21,109, 78,253,229,219,
-150, 72,116, 44,  4, 86,116,246, 62, 72,231,151, 75,196, 66,112, 28,135,145,184,149,228, 28, 44,197, 61, 25, 70,154,119, 83,158,
-170,198,157,118, 21, 95, 72,191,149,189,168,125,183, 69,208, 50,238, 54, 10, 29, 24,156, 46,210,128,118, 75,157,216, 77,236, 80,
-131,221,250,202,250,169,241,189, 54,187,203,158, 72,251, 95,184,133,219,183, 94,238,223, 14,111,216,139,172,254,121,190, 19,132,
- 70, 50,  1,104, 76,154,202, 86, 93, 74,174,226, 54,170,224,160,139,109,189,187,123,180,170,122, 93, 35,214, 93,207, 62,  9,144,
-234,239,171, 16,162,226, 97, 56, 62, 52,242,110, 72,210, 29, 73, 33, 75, 42, 39, 85, 30,251,244, 53,191,185,222,252,182,157,180,
-101,109, 86,127, 49,126,178, 85, 71,161,178, 42,109,168,140, 97,160,161, 45,192,136,144, 20, 27,  4,  7, 28,  2,219,149,123,222,
-213,230,118, 83,114,119, 37,243, 75,208,143, 66,141,181, 21, 68, 80, 60,192,215, 75, 86,148,100, 53,196,166,201, 60,196, 38,139,
-146, 84, 18,  7,103,125, 94,179, 25, 77,209, 21,110,201, 65, 85,156,159,148,114,147,149,117,120,216,159,221, 40, 16,187,126,175,
-111,215, 93,142,135, 67,221, 44,242,226,113, 91,134,225,222,190,238, 39, 75,224, 30,143,225,242,156, 62,118,119, 45, 16,186,176,
-141,219, 21,112, 72, 82, 78,213, 11,107, 96, 70,181,147,173,221, 47, 43,180,132,168,162,199, 67, 71,102, 49, 81,113,171,145,194,
-185, 87, 31,107,  7,151,114, 27, 96,145,186,205,143, 97, 58, 10,235,244, 90,167,122,214,102,115,122,237, 44, 45, 92,164,121,157,
- 79,137,240,152,120, 95, 35, 33,145,108, 72,156,218, 16,236,116,253,223, 45,210,  1,241,139,120,173, 92,126,191,114,157,234,194,
- 14,145,224,250,215, 81,219,237,187, 92,108, 82,115, 85,151, 46,166,105,228, 45,217, 14,173,247,212, 86,243,138, 43, 90,213,169,
- 42, 61, 73,172,152, 37, 20,146,224,141,201, 98,234,202,252,132,182,113,241,212,251,196, 11, 15,  8,246,213,155, 86,221,201, 81,
- 16, 93,184,173,198,172,226,188,175, 56,114, 18, 22,134,205,193, 39,113,174,243, 65,165,238,227, 86,121,198,233,173,239, 37, 68,
- 82, 99,113,174,228, 36, 37,148, 14,167, 90,208,189,121, 91,141, 76,157, 54,154, 87,167, 68,118,222, 39,195,163,227,163, 33,247,
- 27,  5,195,168,189,112, 58,253,198, 87, 37, 68,207, 77,219,246,216,217,141,105,137,111,153,197, 35, 35, 17,216,170, 77,148,180,
-144,143, 98,134,163,237,170, 90,123,238,220,148,139,186,173, 58,187,  7, 30,147,138,204,108, 41,183, 35,170,224,161,106,  8, 65,
-208,130, 13,136,174,242,219,197, 51,206,174, 66,169,197,150, 28, 91,150,156, 32, 48, 50,109,  9, 16, 53,  9, 65,212,162,253,154,
-254,141, 85,215,104, 59,238,212, 29, 36, 63, 71,184,187, 43, 36,241,143,168, 71, 35,119,  9, 57, 70, 92, 20,136,235, 89, 27, 91,
- 70,150, 39,191,178,157,163,141,232,118,101,136,221, 91,179, 53,154, 56, 50, 14,  6,107, 31, 24,  3,247, 82, 90, 59,124,193,160,
-177, 54,171, 26,171,111, 46, 28,201, 54,219,209,119, 41, 46, 92,203,254,101,141, 15, 41,167,113,238,169,214, 10,  2,130, 66,183,
- 36,145,238,235,110,202,206,219,175, 82,170,106,140,209,221,180,249,232,224,235,212, 73,226, 60,186,111, 31,104,141,171,176,182,
-240,  2,110, 70,186, 88,145, 81,110, 27,124, 53, 12,102,135, 92,236,198,146, 79,  1,158, 67,156,155,202, 66,156, 91,229,182, 85,
-100, 56, 28, 88,108,132, 39, 75, 33,  0,157, 72, 54,185, 61, 59, 42, 77, 38,158, 58,106, 42, 85,174, 31, 22, 87,213, 95, 87,243,
- 56,225,153,246,170,252,152, 47, 15, 17, 92,129,139,134,148,162, 44,167, 19,219,229,184,128,161,220, 53,176,171, 15,188,155,172,
-146, 33,132,109,195,  4,217, 97,143,202, 71,107, 30,238, 31, 35, 20,204,136,226, 20,134, 36, 52,218, 94, 90,  1,  4, 39,122,  9,
-  4, 41, 58,120,135, 81, 85,239, 88,147,154,185,  9,101,107,138,110,158,110,163, 70,213,212,160,237,206, 57,163,201,172,124,235,
-165,116,131, 47, 53,156,148,100,194,129, 17, 81, 49,164,219,205,119,112,  2,194,214,  0,146, 71,176,104, 40,211,219,118,229,154,
- 82,205, 46,161,154,139,145,185, 14,238, 17,106, 61, 44,172,157, 23, 25,139,101,181,133,164,149, 38,246, 66,181,233,161,189,187,
-251, 42,213,169,220,186,218, 42,220,181,102,196, 83, 50,234,121,217, 79, 20,197, 73,186,180,173,117, 21,  5,218, 48,229,114, 87,
- 37,217, 92, 71, 92,117, 24,205,169, 97,  5,201,202,  0,169,247, 19,225, 73,183,232,  3,212,251, 79,249,233,138, 46,239, 28, 35,
-209,239, 31, 41, 43, 31, 42,172,186, 95, 47, 23,188,150,220,105,211,216, 30,110,230,162,  2, 86,111,247,150,165,117, 82,137,234,
- 79,121,168, 92,225,110, 88, 98,203, 17,179,114,236,113,194, 62,190,178,235,139,112,167,179, 51,146,181, 54, 83, 13,  7,169, 29,
-106,134,187,114, 86, 97,199, 19, 75,110,218, 29,233,213,174,202, 61,  1,129,192, 53,  5,150,216,101,  1, 41,  0, 10,243,125, 86,
-169,205,182,207, 77,211,233,213,184,164,141,180, 40,158, 88,  0,141, 59, 43,  2,237,202,154,  9, 80,184,101,189,162,169, 73,143,
- 29, 58, 15,109, 48,  6,137, 52,241,  6, 22,187,170,213, 34, 66,138, 73,  2,145,136, 44, 42,155, 65, 69,110,164,160,128,221,173,
- 20,  0,110, 20, 80,  2,189,  2,131,112,162,130,  7,190,212, 80,  5,121,148,148,  0,183,247, 26, 40,  1, 21, 82,208, 80,137,165,
- 16, 73,177,165,  1,  4,118,158,148,162,141,148,232,105,245,  1,165, 35, 74,114, 98, 12,169, 58,233, 82, 38, 32,201, 73, 29,105,
-245,  1, 54,165,  1,132,141,  5, 72,198, 10,164, 20,129,152, 70, 85,200,155, 49, 15,181, 30, 65, 54, 91,207,  2,118,164,246,166,
-221,191,242,210,172,233,221,181, 47,242, 38,215, 81, 94,250,184,227, 75,109, 39,214,103,163, 99, 97, 98, 22,100,182,133,100,115,
-  4, 29,249,  9,  3,114,238,122,236, 26,132,253, 26,251,107, 74,119,167,121, 81,188,144,255,  0,106,246,244,148,237,233,225,105,
-230,249,167,254,231,225,128,110, 99, 50, 57, 85,111,156,233, 75, 71,244,  1,236,164, 87,173,218, 84,138,196,145,218,149,207,153,
-150, 16,240, 48,162,  1,229,180, 55,119,145,173, 86,185,170,156,248,178,104, 88,140,120, 34,131,212, 92,156,252, 54, 29,180, 66,
- 97,193, 26, 73, 90,102,204,109, 36,134,154, 72, 30, 18, 83,247,119,223,175,112,173, 45,162,204, 47, 93,110, 77, 86, 60, 23, 75,
-246,208,201,222, 47,220,181,105,101, 78,143,230,107,146,246, 84,230,152,238, 73, 29,136,142,124, 59,205,148,170,221,164, 44, 17,
-221, 99,165,253,181,213,222,209,202, 82, 85, 76,229,108,235,162,163,131, 69, 74, 89,159,200,101, 40,180, 20,189,196,238, 80, 23,
- 29,122, 10,184,229, 13, 60,113, 41,168,207, 85, 44, 15, 64,250,119,195, 17,197,112,233,201, 60, 64,203, 74, 73,109,187, 18, 20,
-132,168, 92,168,118,141, 62,218,243,109,223,113,122,171,185, 23,201, 31, 73,232, 27,110,138, 58,120,117,151,238, 53, 97,238,172,
-216,200,214, 50,252,135, 63,143,196,178,178,227,137, 46,164,104, 47, 90,250, 77, 36,238,188, 22,  5, 29, 78,166, 22,149, 91, 56,
-135, 35,228,217, 28,252,133, 51, 23,118,194,108, 45,221, 93,254,143, 69,110,196,107, 35,130,214,235,174,106, 37,150,  3, 88,110,
- 50,252,121,172,166, 64, 38, 68,155, 29,167, 82, 18, 85, 97,246,138,118,167, 91, 25, 65,211,130, 42, 90,208,202,220,214,110, 50,
- 61,116,166, 34,241,191, 74,152,220, 29, 18,119,167,106,148,178,150,118, 33,  5, 86,  9,176,185,185,177,189,121,162,151,125, 38,
-241,171,159,146,135, 66,234,174,242,164, 98,121, 50, 24,107,148,122,141, 19,226,212,  4, 79,136,243, 92, 39,161, 75,126, 43,107,
-126,182,181,122, 69,198,244,186,  9,101,227, 79, 89,206, 91, 95,153,214,197,114, 79,212,118, 73, 27,157,117,110,158,171, 81, 81,
-250, 77,235,134,134, 10,135,163,208,129, 49,214, 97,176,169, 15, 27, 36,116, 29,230,172,219,139,155,162, 34,185, 37,  5, 86,113,
-174, 99,202,158,156,250,152, 97, 86, 64,211, 78,130,187,157,187, 66,161, 26,179,128,221,119, 39, 55,150, 38, 49, 45, 21,157,199,
- 82,107,117,202,135, 48,161, 83,167,122,125,199, 67,174, 33,213,166,234, 36, 19,165,114, 91,182,174,138,135,115,179,104,146,197,
-157,141, 48,130, 91,  8, 78,128, 11, 90,184,135,114,172,237,212, 48, 35, 61, 24,234, 20, 61,198,165,140,198, 56,156,127,212, 62,
- 60,168, 25, 20,100,161,164,249, 83,148, 75,169,  3, 68, 60, 53, 39,216, 20, 53,247,222,187,109,163, 87,222, 91,201, 46, 49,245,
-124, 14, 23,122,210, 59,119, 21,200,172, 39,235,248,152, 73,110, 52,160, 18,164,126,220,125,250,232,109,167,211,129,203,221,113,
-120, 53,137,  1,213,128, 72, 66,172,148,234, 59,170,196, 87, 73, 78, 77, 46,  5,166, 38, 43,230, 41, 90, 83,181, 46,171,194,178,
- 58,219,186,170, 95,156,115, 83,160,209,209,219,150, 74,244,154,232, 16,228,  4, 37, 75, 94,137,182,150,172, 91,183, 35, 83,106,
- 17,146,230,107,177, 15, 22, 27, 45, 39, 27, 30, 83,107,235,230,167, 95,231,172, 93, 68,115, 58,231,113,241, 26, 54,219,166, 49,
- 76,212, 67,131,139, 90,124,233, 60, 78, 58,175,169, 45,185,107,247,104, 69,100,220,187,113, 97, 27,239,204, 89, 80,131,227,109,
- 13, 75,137,199,223,113,  1,190, 42, 82, 77,190,235,163,187,218, 41,246,238, 95,138,198,247,160,125, 45,255,  0,244,202, 44,188,
- 94, 62,149,175,102, 14, 67, 47,  0, 65, 40,124, 90,253,230,180, 52,243,191, 76,110, 38,188, 69,121,184, 87,228,102, 90, 70, 75,
- 14,212, 97, 29,232, 82,  3,202,221,102,214,160, 19,107,233, 98, 58,233,214,181,225,102,235,149, 84,149, 10, 51,187,106,148,113,
-117, 51,178,147,138, 66,124,231,224,176,200,234, 60,231, 22,179,244, 11,139,253,  2,180,224,238,183, 69, 38,252, 73, 20, 46, 70,
-194,198, 81,138,241,182,202,135,178,190,106,252,140, 91, 97,  7,160, 83,104, 13, 36, 15,163,196,126,147, 87, 99, 98,138,179,126,
-211, 58,122,186,246,109, 42,120,149, 62, 37,223, 30,227,108,189, 33, 47, 78, 87,156,249,177,219,123,235,237,170, 26,189, 99,140,
-105, 28, 17,167,161,219,162,229,154,125,166,116,168,188, 61,153,133,  9, 90, 66, 90, 22,240,  1, 92,172,247,  7, 14, 28, 78,194,
- 58,  8,203,143,  3,123,134,192,177, 13,164, 54,195, 97, 41, 29,194,213,206,234, 53, 78,110,173,155,150,108, 70, 10,137, 26,232,
- 56,224,144,  9, 26,214, 45,219,213, 46,165, 66,229,150,  2, 69,136,210,168,202, 85, 30, 60, 83,180,105, 76,173, 64,101,103, 91,
-223, 81, 79, 64, 48,226,246,131,223, 79, 72, 65,128,111,214,164,  1, 64,210,  0,160,171,127,146,146,130,135,230, 26, 40, 32, 55,
-170,138, 10, 13,234,162,128, 15, 48,209, 64,  7,153,223, 69,  4,  7,153,255,  0, 53, 20,  0,121,148, 80, 80,121,131,165, 20, 16,
-  5, 96,138, 40, 40, 55, 95, 80,104,160,  5,184,142,218, 40,  3,241, 35, 61, 57,225, 29,129,117,145,114, 78,128,  1,218,106, 91,
-118,156,221, 17, 29,203,138, 10,172,178, 87, 26,158,127,210, 51,255,  0, 73, 95,246, 53,111,242, 51,233, 94, 30, 66,167,231, 97,
-208,198,151,198,178, 61,138,104,251,148,127,201, 75,249, 43,157, 65,249,200,117,140,185,198,178, 67, 80, 27, 81,246, 43,252,160,
- 83,191, 39,115,168, 95,206, 91,235, 43, 39, 99,229, 64, 33, 50, 91,219,191,238,168, 16, 65,183,113, 21, 12,237, 74, 15, 18,123,
-119, 99, 63,149,144,108,111,106,105, 40,202, 83,225, 30,234,123, 99, 69, 90,144,  6,214,128,177, 98, 52,238,167,167, 64, 26,248,
-102,193,184, 72,167,103, 98, 80, 88,100, 30,202, 76,193, 65, 97,176, 58, 10,109, 69, 49,158,167,229,127, 47,227,110, 99, 91, 32,
-202,202,  5, 54, 83,125, 68,116, 88,184,109,237,209, 31, 77,110,236,150, 59,205, 66,155,225, 15, 95, 47,121,133,189, 95,201, 97,
-193,113,158, 30, 78,126,239, 41,230,137, 24,215, 25,  9, 42, 78,199, 28,186,192, 23, 78,151,175, 85,133,228,207, 39,157,134,188,
-167,161,125, 41, 78, 51, 33,135,130,192,198,166, 43,240,219, 63, 17, 41, 42, 37,111, 44,170,233, 82,129,184,  4,116,210,188,219,
-126,115,183,118, 79, 51,106, 92,185, 47, 17,233, 59,  4, 51, 90, 85, 94, 30,211,167, 75,153, 30, 34, 11,146, 22, 18,  7, 75,157,
-107,145,183,110, 83,116, 72,235, 27, 81, 71, 57,229, 28,253,166,194,227,192, 55, 95, 75,138,233,244, 91, 83,120,204,197,213,110,
- 49,142, 17,226,115,101,198,203,114, 89, 94, 50,165,  5, 30,189,154,215, 84,167,107, 77, 19,155,148, 46,234,101,137,208, 56,215,
-167,177,161, 37, 47,201, 69,214,123, 15, 91,215, 53,172,221,165, 55, 72,157, 14,147,108,133,181, 87,196,174,199,198, 94,115,156,
-190,168, 98,241, 88,123,201,108,164, 92,  6,163,248, 46,  6,151,185,  4,213,171,179, 86, 52,107, 55, 22,171,229,102, 52,255,  0,
-205,170,147, 92, 19,167,152,232,190,186,242, 41, 24,206, 43,139,196,173,101, 42, 12,175,203, 73, 27, 86, 80,179,112,162, 59,  1,
- 29, 52,170, 59, 46,158, 87, 39, 28,202,153,113,243,144,234,102,161,  9,201,115,103, 13,244,127, 30,169,153,201,153,135, 83,185,
- 16,218, 81,  4,244, 46, 57,225,  3,237,189,116,255,  0,184, 46,228,179, 27,107,250,159,168,169,251,110,206,123,178,184,255,  0,
-164,235,138,108,117, 58,  1,219, 92, 98,103,119, 67,152,115,252,218,208,149,178,130, 66, 70,129, 34,186,205,171, 76,158, 39, 41,
-187,234,156, 98,210, 57, 33,220,234,202,213,170,149,169,174,207,130, 60,255,  0, 25, 58,178,243,  3,134,127, 37, 45,180, 33,  5,
- 72,  4, 94,168,106,181, 10,220, 91,108,214,208,233, 37,118,107, 12, 15, 69,241, 46, 59,249,116, 68,173,104,178,136, 22,210,188,
-199, 95,172,239, 37,196,245, 29, 30,155,187,137,163, 84, 80, 58, 11, 86, 90,153,123, 41, 10, 67, 23,  4, 17, 98, 42,120, 72, 99,
- 70,103, 63,139,106,116, 39, 99,184,128,164,168,106, 15,179, 93, 61,181,173,164,190,225, 52,209,157,170,176,174, 65,197,172, 14,
-  1,155,198, 59,142,158,182,157,212,116, 66,173,109,201,255,  0, 45,122, 62,154,242,185, 10,163,203,245,154,103,106,229, 24,219,
- 17,177,173, 58,218,221,108,190,116, 82,155, 87,133, 62,237, 53, 52,233, 78,227, 78,142,132,113,181,105, 58,181, 82,218, 70,100,
-187,109,140, 33,182,217, 22,109,180,232,144, 61,213, 78, 26,106,115,197,151, 94,170,156, 17, 13,222, 71, 53,  6,233,  1, 54,232,
- 59, 42,104,232,224,202,242,215, 73,112, 30,137,207, 51,145, 45,229, 41,171, 39,166,228,  3, 77,185,181,217,159, 26,140,142,231,
-117,116, 22,195,213,254, 84, 16, 27, 31, 14, 19,255,  0,185, 91,249, 13, 82,254, 63,166,173,113,243,147, 45,230,242,232, 12,250,
-193,201,200,  3,203,137,239,242,213,255,  0,101, 73,252,123, 79,211, 47, 56,239,214,175, 62, 81, 42,229,122,135,157,149,117,168,
-199, 66,149,214,200,191, 95,235, 40,213,184,109, 22, 99,211,231, 35,150,237,121,174, 94, 99, 63,145,206,101, 39, 16,167,223, 54,
- 69,236, 18,148,182,145,127,234,129, 90,118,116,182,225,193,123, 76,235,218,171,179,226,253,133, 66,220, 82,213,117,146,181,158,
-210,110,126,154,184,146, 92, 10, 13,183,196,188,192,225, 50,217, 23,146, 34, 52, 66, 73,251,228,105, 84, 53, 90,155, 86,215,105,
-154,186, 29, 29,235,178,236,163,181,113, 62, 26, 32, 54,151, 36, 93,199,205,174, 77,112,122,253,199,188,116, 92, 15, 72,208,109,
-202,210,199, 22,116,172,118, 45, 41,  3,195,221, 92,173,235,231, 69, 11,116, 52,176,160, 37, 54,184,172,171,151,106, 78,145,112,
-211,  0,105,106,165, 41, 10, 59,107, 15,117, 48,  6,157, 85,133,233,241, 64, 69, 89,235,217, 82,161, 72,171, 81, 81,247, 84,201,
-  8, 34,156,  1,220,210,  0, 87, 52,160, 30,227, 73, 64, 20, 20,105, 40, 40, 97, 70,138,  0, 46,105,  4,  8,147,221, 74, 40, 68,
-142,234,  0, 23, 29,212,162,  5,113,217, 64,  5,123, 82,128, 47,220,104,  0,110,183, 83, 69,  0,208,241, 68,149,202,126,218,168,
-165, 41, 30,245, 42,180,116, 43,180,204,237,115,236,163,166,102,248, 31, 40,192, 68, 19,167,195,  6, 32, 23,113,214, 22, 29, 13,
-223,245,237,168,247,244,246,215, 85,169,218,245, 22, 35,154, 81,195,171, 26,120,206, 91, 77,186,105,239,203, 44,101,143, 94, 21,
-241, 16,185, 70,  0,241,156,131, 88,231,101, 34, 67,171,142,212,133,148, 13,187, 84,232, 62, 30,167,165,186,247, 84, 58,221, 47,
-229,166,160,221, 93, 19,243,147,104,181, 95,153,131,154, 84, 85,107,204, 82, 26,166, 93, 40,185, 77,142, 61, 55,235,230,166,223,
- 81,170,122,207,147,202, 93,209,252,254, 67, 27,109,107, 28,217, 25, 72,208,123,170, 70, 32,173,166,146,162,128,164,247, 81, 80,
- 11,111,117, 21, 16, 48,217, 62,234, 74,128,187, 33,176, 84,162,  0,  0,149, 41, 90,  0,  6,164,159,117, 38, 44, 14,121,143,194,
- 35,159,228,243,188,167, 43, 37, 48,184,198, 42, 50,195, 15, 58, 46,146,211, 32,148, 32, 13, 60, 78,155,159,167,217, 93,157,191,
-254,218,220,108,197,246,223,105,248,250, 61,135, 27,169,188,175, 92,119, 26,172,126, 85,226,230,253,167,  7,147,183, 47,148,105,
-136,151, 74, 66,138, 91, 74,180,178, 73,208, 87,111, 15,240,219,110, 71, 27, 53,223,221, 81,137,232,190, 35,139, 79, 23,227,173,
-164,167,108,151, 83,189,194,123, 47,208, 87,152,110, 23,222,170,251,232, 71,168,232,108, 45, 61,148,185,152,174, 91,200,165, 62,
-241,140, 28, 86,166,214,  6,183,180, 26, 56,197, 86,134, 94,183, 85, 38,242,162, 14, 11,138,203,204, 56,149, 58, 10, 91, 38,254,
-218,177,170,215, 70,202,192,175,166,209, 74,235,171, 58,166, 27,141, 67,197, 52,159,  0, 43, 29,181,199,234, 53,146,186,206,154,
-206,158, 54,214,  2,121, 86, 93, 56, 60, 36,201,233, 54,117,  8,217, 24,119,188,239,129, 26,123,  9,189, 59, 67,167,239,239, 70,
- 28,185,248,151, 18, 61,109,254,230,204,165,207,151,141,240, 41,189, 29,134, 34, 44,228,221,111,113,104,143, 45, 74, 27,130,148,
-  8, 36,107,212,158,209, 90,123,221,231,153, 69,121,142,111, 71,102,150,221,121,152,191, 93,249, 35,153,254, 69, 41,229,174,232,
- 65,218,148,128, 18,128,128,  0, 72,  0,116,208,116,174,147, 99,131,113,207, 46, 50, 48,183, 70,161, 21,109,114, 45,189, 43,198,
-136, 92, 73,167,138,108,228,199, 11,203, 87,120, 26, 38,177,183,219,217,245, 45,127,181, 80,233,182, 27, 29,222,149, 62,114,196,
-214, 74, 90, 27,101,106, 86,137,  2,228,214, 60, 19,108,221,147,162, 56, 87, 58,152,211,175,173, 40, 55, 82,141,133,122, 22,215,
-109,168,158,123,188, 93, 79,  3, 59,132,196,187,145,148,134, 80, 52, 36,110, 53,167,169,212, 43,113,169,143,163,210,187,179, 72,
-244, 79,  8,225, 49, 49,241,144,243,136, 27,200, 22,184,237,175, 49,220,247, 41, 92,149, 17,233,250, 29, 12, 44,196,223,162, 54,
-196,237, 72,208,116,174,113,206,166,194, 64, 84,107,244,161, 76, 40, 65,147, 24,245,234,106,196, 38, 49,162,150, 92,107, 92, 29,
- 73,171,246,230, 65, 40,156,223,154,113, 70,242, 77,171,203, 77,156,253, 21, 14,160,215, 81,182,235,157,183,137,205,238, 90,  5,
-122, 61,103, 43,122, 49,139,189,183,  0,243, 91, 37, 10,239,186,116,174,194, 51,205, 70,184, 51,133,156, 50, 54,159, 20, 86,173,
-253, 72,212, 10,180,162, 84,148,136,175,174,226,192,222,213, 52, 81, 86,108, 38, 90, 97,  0,185, 61,229,178,155,110,105,  8, 70,
-247, 23,238,  4,128,  7,180,210,201,201,225,  5, 95, 96, 66, 17, 88,220,110, 61, 24, 98,198,214,252, 29, 66, 24,117,122,232, 86,
-224, 26,123,146,159,231,167, 40, 79,155, 94,111,136,199,114,215, 40,183,229,248,  1,185,  9, 54,  8,199,182,225, 22,177, 81,116,
-159,177, 66,145,195,251,159,163,220, 58, 55, 23, 40, 39,255,  0,151,188,150,204, 60,212,162,  4,104,137,104,118,108,108,  2, 47,
-237, 55, 63,109, 67, 43,150, 99,243, 74,190, 82,204, 44,234, 39,242,198,158, 79,  6, 93, 64,244,255,  0, 47, 61,126,108,197, 20,
-238,212,149,106, 77, 81,187,187, 90,182,169, 19, 74,206,199,122,227,172,217,177,196,122, 99,  5,133,165,201,  7,205, 35, 91, 30,
-149,135,168,222,167, 37, 69,129,208,233,182, 11, 80,117,120,157, 35, 19,130,143, 21,  1, 12, 52,148, 36,  1, 96,  5,114,218,141,
- 84,164,234,217,213,217,211,198, 10,137, 26,184, 24,224,144,  9, 26,214, 61,219,198,132, 33, 67, 73, 14, 40, 77,180,210,178,238,
- 92, 39,161,106,219, 65, 34,213, 77,200,  7,117, 20,192,  8,171,180,209, 64, 35, 56,171,246,251,170,100,128,138,234,180,176,235,
- 82,197, 10, 49, 82,  8, 10, 80, 10,128,  5,  0, 24,212,210,  0,160, 45, 72,  1,208,  2,173, 72, 40, 86,160,  2,182,183,160,  4,
- 26,112,  2,129, 40, 36,210,128,130, 44,105,192, 17,165,  3, 73,196,211,127,138, 87,245,  7,242,214,158,137,113, 51, 53,207,129,
-217,120, 55, 34,229,249,124,172, 46, 52,222, 85,127,151,184, 20, 30, 15, 33,183,202, 99,182,155,169, 32,184,149, 29, 64,218, 47,
- 93,174,219,171,212,221,185, 27, 42,125,151,198,180,120,121, 78, 43,114,210,233,173, 91,149,231, 14,210,225, 74,172,124,135,109,
-252,131,  8,162,165, 57,143,142,235,139,  0, 45,199, 26, 66,214,160,144, 18, 46, 84,  9, 54,  2,213,221,126, 86,215, 56,167,228,
- 56, 95,205, 93,229, 38,188,167, 34,245, 91,132,227,176,173, 49,157,195,180, 35, 71,121,223, 34, 84,100,104,216, 90,129, 82, 86,
-145,217,123, 16, 71, 74,227,183,189,186, 22, 82,187,109, 81, 55, 70,142,199,100,220,103,121,187, 87, 29, 90, 85, 76,226, 28,169,
- 95,234,108,142,247, 63,145, 38,184,109,111,202,188,103,115,162, 93,167,226, 50, 58,222,178, 77,113, 13,167,194, 15,178,149,176,
- 23,182,146,160, 30,218, 74,128, 54,129,168, 20, 84,  2, 81,181, 42,  3, 27,205, 50,175, 61,229,113,108,105, 42,200,100,  0,248,
-162,142,173,198, 61,158,247, 58,127, 86,245,185,183, 88, 81,173,249,252,176,225,215, 47,135,172,198,220,111,225,221, 71,140,184,
-245, 47,137,155,231,171,143,196,184,170,112, 81,214, 76,247,236,236,141,167, 64,165, 38,225, 36, 11, 18,  0,239,237,173, 93,169,
- 75, 87,169,239, 95,202,176, 71, 53,175,159,115,105,165,196,193,122,113,136,102, 70, 73,121,137,246,242,163, 13,196,244,  4,142,
-202,232,183,141, 67,141,190,238, 28, 89, 83, 99,211, 41, 77,221,151, 35, 97,202,185,203,142,147, 18, 33,241,159, 10, 82, 43, 19,
- 67,182, 37,218,145,208,235,119, 26,118, 99,196,137,197,184,220,172,164,129, 46,101,214,181, 27,235, 83,107,181,145,181, 28,177,
- 35,209,233, 37,113,230,145,216, 49,184,230, 32, 50,150,219, 77,149,109, 84, 43,137,189,122, 87, 29, 89,212, 66, 10, 42,136,150,
-180,155, 84,  9,146, 28,167,212,153,234,155,149,133,199,227,221, 73,141,105, 18, 64,255,  0,219, 92, 22, 66, 79,245, 82,111,253,
-170,236,118,107, 74, 22,165,121,243,193,120,185,250,125, 71, 47,186, 92,239, 46, 70,210,229,139,241,242, 58, 14,  2, 66,184,103,
- 18,121, 76,179,229,203,125,141,178,214,226, 18,162,144,162, 72,216, 13,205,200, 29,127, 70,213,143, 59,210,189,168,116,106,143,
- 15, 14,130, 71,102, 52, 73,255,  0, 78, 39,153,243,210,  6,107, 52,232,117,205,158,107,135,105,189,245, 81,181,171,210,116,176,
-238,108,170, 46,  8,226, 53,116,191,122,141,241,103,160,113,204, 70,137,143,143, 30, 34,118, 70, 66,  0,109, 35, 65,107,117,183,
-101,250,215,155, 94,148,167, 54,229,196,244,248, 70, 17,141, 32,169, 30, 69,  7, 48,203, 34, 12, 53, 52, 13,150, 71,138,180,182,
-251, 14,114,169,159,174,190,161,  3,132, 79,125,121,  9,202, 85,238, 47,100,215,161,218,130,183,  3,205,175,205,222,184,117,127,
- 77,120,166,245, 37,247, 83,170,181,174, 59,121,215,211,  4,118,219, 62,135, 42,171, 59,188, 56,168,109,164,182,145, 96,145, 97,
- 94,121,114,109,186,157,130, 84, 39,165,144, 71, 74,172,228, 56, 34,197,250,139, 82,169,131, 34, 63, 28,106, 64,169,163, 49,165,
- 52,184,224, 92,246,213,235,115, 35,104,207,203,134, 22, 13,199, 94,181,165,110,229, 10,211,133, 78, 23,207,120,244,252, 86, 98,
- 68,182, 90, 82,241,210,213,231, 54,226,  1, 59, 84,175,188,149,  1,211,197,123, 87,161,109, 90,184, 93,180,162,223,106, 56, 30,
-121,187,232,231,110,235,154, 85,140,177,192,201, 53, 29,201, 64,217, 32, 33, 39,198,165,120, 82, 61,164,154,217,148,212, 78,121,
- 91,148,184,  9,248, 88,204,189,101,168, 77, 95,232, 49, 28,146, 10,143, 77,202,181,128, 31, 93, 59, 60,164,191,219,214,253,194,
- 43, 81,139,199,182,250, 35,237,101,182, 55,133,101,243,110,153,115,174,218, 84, 69,238, 53,176,208,  1,220,  0,233, 84,239,110,
-118,172, 44,176, 52, 52,251, 61,237, 68,179,220,194,166,198, 23,167,184,200,225, 59,219,243, 23,218, 77, 97, 93,221,174, 75,153,
-209,218,217,108,195,149, 75,168,252, 82,  3, 95,221, 70, 72,183,109,170,132,245,211,124, 89,165, 13,  5,184,240,138, 46, 35, 97,
-144,128, 54,182, 19,238, 21, 74,122,150,249,151,161,167, 72,181, 99, 16, 52, 59,117,170,114,212, 22, 99,100,182,139,141,  2,222,
- 26,167, 59,197,152,219, 46, 35, 66,181,180,170, 51,184, 88, 81, 47, 98,197,181,174, 45, 89,243,184, 74,139, 70,144,  0,246,213,
- 73, 49, 71,130,173,239,168,232, 32, 55, 95,173, 20,  1,165,158,160, 83,208,164,119, 20,  6,181, 34, 66, 17,149,226, 55,169,144,
-  9, 34,212,162,133, 64,  2,128,  5,  2,  6, 58,208, 40,170, 65,  3,235, 72, 40,116,  0, 61,148,128, 10, 80, 16,117,165, 16, 34,
- 41, 69, 19, 74, 32,133, 13,105, 80,  9,167,  1,168,226,137,179, 18, 21,222,180,143,168,127,158,181,180, 60, 25,147,173,226,142,
-139,192,115,113,176, 28,170, 14, 66,106,182,195, 59,216,125,206,196, 37,212,237,220,125,128,218,254,202,233, 54,189, 68,108,106,
- 35, 57,112,224,252,167, 55,186,105,229,127, 79, 40,199,143, 21,228, 61, 48,219,141,188,218, 93,101,105,113,165,128,164, 45,  4,
- 41, 36, 30,132, 17,214,189, 65, 52,213, 87,  3,203,218,105,209,241, 57, 79,172,249,248, 71, 31, 27,142,178,226, 92,156,167,147,
- 34, 66, 82,110, 90, 67, 96,132,133, 91,161, 81, 58, 14,225, 92,151,238, 13, 84, 50, 43, 73,214, 85,171,234, 58,223,219,250, 89,
-231,119, 90,236,210,139,172,243,183, 44, 63,178,140,158,245, 40,253, 64,127,150,188,227, 91,193, 30,141,162, 88,179, 45, 89, 70,
-168,104, 79,132,123,168,108, 81, 86,246, 82, 10, 29,180,189, 32,  9, 61, 41, 64,174,202,228,163,226,160,200,200,202, 54,143, 25,
- 59,212,  7, 85, 30,129, 35,218,163,160,171, 86, 44,202,236,212, 35,197,144, 93,187, 27, 80,114,151,  4,100, 61, 62, 17,152,111,
- 43,206,249, 42,212,189,170, 90,208,147,125,100, 43,238, 39,118,154, 38,224,  1, 91,123,182,105, 56,105,108,248, 47,137,201, 90,
-148,158,107,178,120,183, 95, 15, 81,198,185,151, 39,153,203,243,210, 36, 58, 84,183, 36, 56, 72, 73,213, 33, 36,233,110,234,238,
-118,253, 20,116,150, 82, 92,145,202,106,111, 59,247, 40, 74,200,228,135, 29,136,214,  2, 33,188,192,  2,229, 91,168,113, 98,225,
- 38,221,194,161,179,103,243, 18,119,101,195,145,175,123, 80,180,208, 86, 99,243,115, 45,120,119, 26,123, 37, 33, 50,101,  2,181,
-168,222,230,169,238, 58,197,110, 57, 98, 94,219,180,110,111, 52,184,157,203, 21,141,106,  3,  9,109,180,139,128, 46, 69,121,245,
-251,206,227,171, 59, 75,118,212, 85, 17,110,219,100,245, 21, 77,200,152,139,149,150,198, 54, 20,140,132,163,104,241, 91, 83,174,
-119,144,145,123, 15,105,232, 42, 91, 22,221,201,168, 71,140,157,  8,174,220, 86,224,228,248, 36,113, 44, 35,207, 79,207,126,111,
- 48,  5,169,215, 85, 34, 81, 94,169, 64, 58,219,168, 39,104,232,  7,117,119,218,152,171,118,123,184,242, 84, 71, 17, 98,227,157,
-215,114, 92,241,102,147,156,243,  6,229, 64,121,134,174, 30,109, 62, 75,132, 27,165, 64,  0, 55, 14,150,232,110, 61,213,151,182,
-109,238, 51, 77,240,226, 92,212,234,210,182,215, 51,138, 97,177,175,231, 51, 94, 91, 36, 39,200, 62,114,138,142,164,110,176, 72,
-208,221, 70,253, 43,188,212, 94, 86, 44,213,243,192,227,116,182,101,168,191,135, 44, 79, 69, 60,243,112, 98,239, 81,178, 26, 72,
- 72,191,110,209,106,243, 24,197,206, 84,233, 61, 81,181,  8,227,200,226, 60,219,144, 46,100,149, 48,218,174, 73, 55,247, 87,125,
-182,233, 20, 35, 86,112,123,174,179, 52,178,162,187,137,225, 85,146,158,128, 83,116,164,138,179,175,212,247,112, 42,109,186, 94,
-242,103,167,184,182, 25, 16, 32,182, 18,139, 44,129,217, 94, 77,174,212, 59,147,103,167, 88,182,161, 26, 26,166,154,184, 23, 22,
-172,137, 72,176,137, 72,108, 11,109,212,212, 45,138, 45, 77,133,107,219, 72,152,132, 85,180, 42, 85, 33, 74,201, 81,119, 40,217,
- 53,110, 19,160,210,170, 76, 34,161,170,122, 85,200, 92,160,199, 18,131, 47,198, 35,228,219,216,232,208,139, 26,209,211,235,101,
-105,213, 21, 47,105,163,113, 81,152,199, 61, 38,195,151, 74,149,114,  9,190,222,202,221, 91,245,218, 24,175, 98,176,221,104, 88,
-196,224, 88,140,126,223, 34, 58, 73, 29, 20,161,173, 85,185,186,221,185,197,150,237,237,182,109,252,168,183,111, 10,129,162, 82,
-  0, 21, 74, 90,150, 93, 86, 81, 37,188, 58, 82, 62,237,253,245, 19,212, 18, 43, 72,125, 24,155, 91,195,165, 70,239,142, 86,201,
- 72,197, 14,182,168,157,241,253,217, 49,156,117,187, 42,  9, 94, 30,162, 77,106,  8, 73,233, 85,229,116,114, 69,131, 49, 82,155,
- 27,107, 85,165,112,113, 53,  9,176,210,160,108, 81,192,  7, 81, 77,  0, 94,128, 18,165,216,123,105, 82,  1,162,163,123,211,232,
- 32,194,201, 87,186,164, 64, 32,142,250,112,162, 72,165, 16, 69, 40,160,160,  1, 64,  2,128, 12, 43,190,146,128, 30,225, 69,  0,
- 61,194,138,  0, 46, 59,232,  0, 94,144,  2, 52,160, 21,239, 74,  2, 79,125, 40,130,105, 68, 18,109, 74, 41,164,226,242,152, 67,
-111, 70, 90,130, 93, 82,183,164, 29, 46, 45,109, 43, 83, 69, 52,147, 92,204,189,108, 27,105,242, 52,154, 30,149,166,102, 18,163,
-228,242,113, 26, 44, 69,155, 33,134, 79, 86,154,121,104, 71,212,146,  5, 77, 11,215, 34,169, 25, 52,186,155, 34,149,155,115,117,
-148, 83,125,105, 17, 73, 42, 37, 74, 37, 74, 81,186,148, 77,201, 39,180,147, 81, 18,208,203,114,183, 80,167, 99,178, 13,214,128,
-165, 40,119,110,181,191,146,178,181,178, 85, 72,212,209, 69,209,179, 59, 89,198,144,226,109, 97,238,166, 48, 21,167,109, 32,160,
- 52,162, 12, 58, 72, 26, 10,124, 64,229,254,160,204,201, 77,201,195,195, 54,195,177,241, 13,173,  5,249,238,161, 77,198, 84,135,
- 62,232,243, 20,  2,108,132,158,254,183,238,174,183,105,183,110, 22,229,113,180,230,214, 17, 92,104,186,184,226,115,123,164,231,
- 57,168, 81,168, 46, 47,149,124,125, 70,107,212,137, 19, 99,227, 88,198, 99,208,227,184,152,151,109,201,113,210,165, 70,117,196,
-132,130,160,180,167,106,174, 45,173,235, 91,103,132, 29,199, 57,180,166,249, 62, 41,120,140, 29,202, 78, 54,210,133, 90,234, 57,
-230, 42,208, 97,185,144, 64,248,140,163,138,242,225,197,111,246,139, 74,143, 69,169, 34,228,  1,217,237,174,150,255,  0,110, 74,
- 15,  8,243,126,195, 19, 77, 75, 86,220,215,106,111,  8,165,143,150,131,188,107, 27, 30, 94, 64, 57,147,148,211, 47, 21,220,165,
-247, 18,133, 95,218, 20, 69, 51, 91,122, 80,133, 33, 22,215, 82, 37,219,236, 70, 87, 43,114, 73, 62,182,122, 55,139,194,198, 71,
-138,132,197,125,151, 21, 97,226,109,105, 88,251,  9,175, 48,215, 92,185, 41,118,147, 94, 67,211, 52,208,132, 99,217,104,214,176,
-211, 90,120,211,127,120,172, 89, 73,151, 73,123, 80,  5,129,  7,218, 42, 26,177, 78,109,234,244,233,145,120,251, 76,198,142,235,
-177,159,125, 38,107,141, 33, 75,  8,109,189, 82, 20, 64, 54, 10, 89, 79, 90,234,127,111,218,132,175,182,218, 77, 44, 42,249,191,
-114,169,206,239,183, 37, 27,  9, 69, 54,155,198,157, 31,235, 67,138,196,153,150,201, 75, 68, 56,209,221,132,133, 16,147, 37,244,
- 45,  9,  6,246,208,139,118,246,238,174,242,229,187, 86,227,154, 77, 75,169, 28, 60, 46,221,185, 44,177,139,143, 91,169, 63,154,
-113,217,120, 72,233,100,102,217,201,  5,130,183,156, 96,135, 82, 20,123, 22, 66,143,136, 27,245,168,180, 58,152, 92,159,252,110,
- 61, 31,  0,212,217,186,161,140,213, 60, 95, 18,211,210, 89, 12, 28,100,140, 90,218,138,  2,102, 38, 82,230,148,167,226,148, 80,
-144,150,218,223,123,236, 42, 55,219,218,106,166,252,166,165,153, 55, 71, 26, 83,151, 60,124,126, 15,145,123,246,237,168,102,147,
-111, 18,255,  0,156,100,242, 13,199, 82, 35, 68,144,166,128, 32, 41, 45, 44,131,244,129, 89, 91,101,152, 57, 85,201, 87,198,142,
-151,114,189, 56,197,229,139,126, 70,113,101,121,174,200, 82,228,248, 30, 81,213, 43,240,144, 62,154,238,213, 20,105, 30,  7,159,
- 99, 41,183, 44, 25,217,189, 49,198,227,  7,150,165, 74, 99,204,234,161,230, 34,247,250,235,133,222,175, 92,199,178,252,204,239,
-118,123, 86,212,112,106,190, 51,188, 70,109,189,169,216,164,216, 13, 44, 65,175, 60,155,124,206,168,176, 66, 83,165,200,170,205,
-138, 60, 54,159,187, 76,  0, 88, 90,247,250, 40,  1,167, 18,158,241,122,114, 96, 69, 90, 81,174,162,222,250,153, 54, 41, 21,198,
-218,215,196,145,244,138,154, 45,136, 66,113,168,247, 54, 90,126,177, 83,169, 72, 66, 10,218,102,250,173, 31, 88,171, 10, 76,104,
-210,218,103,166,244,219,222, 41,234, 76, 74, 14,182,203, 26,120,209,245,138, 99,147, 22,136,125, 12,179,109, 86,159,172, 84,110,
- 79,160, 81,240,211,  3,162,211,245,138,143, 52,133, 28, 75,108,129,247,147,245,138, 99,108,  7, 16,134,251,  8,183,190,154,219,
-  1,244,165, 55,234, 42, 54,216,163,233,  2,194,196, 84,108,  3, 29, 77,  0, 31,187,173,  0, 37, 84, 32, 26, 81,235, 79, 64, 54,
- 73,167,136, 38,148,  2, 52,  0,131, 78, 20, 65,  2,148,  2,165,  0, 80,  0,160,  1, 64,129, 82,128, 40,  0, 80, 32, 61,212, 10,
- 11,170,128, 11, 95,166,128,  6,189,180,  0, 84,160, 36,210,128, 84,  0,180,249,223,161,187,232,189, 57, 84,107,160,250, 63, 48,
-255,  0, 71,231,127,103,127,243, 84,139, 63, 42,140,121, 57,208,115,255,  0, 29,219, 79,138,183,253,210,159,254, 95,238,244,140,
-255,  0, 23,246,250,  8, 46,121,155,213,230,223,204,191,139,117,247, 95,219,122,133,214,184,147,170, 83,  1, 52,128,127,255,217,
+255,216,255,224,
+  0, 16, 74, 70, 73, 70,  0,  1,  2,  0,  0,100,  0,100,  0,  0,255,236,  0, 17, 68,117, 99,107,121,  0,  1,  0,  4,  0,  0,  0,
+ 70,  0,  0,255,238,  0, 14, 65,100,111, 98,101,  0,100,192,  0,  0,  0,  1,255,219,  0,132,  0,  4,  3,  3,  3,  3,  3,  4,  3,
+  3,  4,  6,  4,  3,  4,  6,  7,  5,  4,  4,  5,  7,  8,  6,  6,  7,  6,  6,  8, 10,  8,  9,  9,  9,  9,  8, 10, 10, 12, 12, 12,
+ 12, 12, 10, 12, 12, 13, 13, 12, 12, 17, 17, 17, 17, 17, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  1,  4,  5,  5,  8,  7,  8, 15,
+ 10, 10, 15, 20, 14, 14, 14, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,255,192,  0, 17,  8,  1, 15,
+  1,245,  3,  1, 17,  0,  2, 17,  1,  3, 17,  1,255,196,  0,218,  0,  0,  1,  5,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  6,  0,  3,  4,  5,  7,  2,  8,  1,  9,  1,  0,  1,  5,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  2,  3,
+  5,  6,  1,  7,  8, 16,  0,  2,  1,  3,  3,  2,  4,  3,  6,  2,  6,  5,  4, 10, 12, 15,  1,  2,  3, 17,  4,  5,  0, 33, 18, 49,
+  6, 65, 34, 19,  7, 81, 97, 20,113,129, 50, 35, 21,  8,145, 66,161,177, 82, 51, 36, 22,193,209, 98, 23,  9,240,225,114, 37,241,
+130, 67, 83, 99, 52,180,117, 55, 24,146,178,163,227, 68,116,212,228, 53, 85,133,197,162,194,210,226,115,131,147,179,195,148,164,
+ 69,165,181, 86, 17,  0,  1,  3,  2,  3,  5,  4,  8,  4,  5,  3,  3,  2,  7,  1,  0,  1,  0, 17,  2, 33,  3, 49, 18,  4, 65, 81,
+ 97, 34,  5,113,129, 50, 19,240,145,161,177,193,209, 66,  6,225, 82, 98, 20,241,114,130, 35, 51,146,162, 21,178,226, 67,194,210,
+ 99,131,163,211, 52, 53, 22,  7,255,218,  0, 12,  3,  1,  0,  2, 17,  3, 17,  0, 63,  0,247,246,146, 73,105, 36,150,146, 73,105,
+ 36,150,146, 74,150,239,187,123,114,199, 36,184,139,172,132,113,228, 28,128, 33, 53,216,158,129,152, 14, 32,252,137,208, 23, 58,
+134,158, 23, 60,185, 76,  9,110,244,162,176,183,211,181, 23, 45,121,177,129, 49,223,233, 85,114,  8, 97, 80,106, 52,122,175, 95,
+116,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146,
+ 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73,
+ 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,
+146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75,
+ 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 88,215,184,190,221,222, 27,171,
+158,224,195,134,184, 89,152,203,117,109,213,212,158,172,159, 17,242,214, 15,172,244, 73,153, 27,214,170,245, 49,219,221,242, 91,
+238,139,215, 32, 34, 44,221,163, 80, 75,103,127,205, 85,118,111,185,183,248, 18,152,236,199, 43,172, 98,158, 33,206,243, 66, 58,
+120,254, 32, 62, 26, 11,166,117,233,216,107,119,185,163,191,104,249,163,186,167, 64,134,161,238, 89,229,158,237,135,228,182,252,
+118, 74,203, 45,107, 29,237,132,203, 61,188,130,170,232,106, 63,230, 58,244, 75, 87,161,118, 34, 80, 46, 10,243,139,214,103,106,
+ 70, 19, 12, 66,151,169, 84, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146,
+ 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 72, 55,185,253,215,246,231,179,110, 77,143,114,119, 29,157,149,242,
+208,189,167, 51, 44,234, 15, 78, 81,196, 29,150,191, 49,162,237,104,239, 93, 15, 24,146, 16,119,181,182, 45, 22,156,128, 43,174,
+217,247, 87,219,190,241,184, 22,125,185,220,118, 87,183,172,  9, 75, 65, 39,167,112,192,117, 43, 20,129, 92,129,242, 93,114,238,
+146,245,160,242,137,  1, 43, 58,219, 55, 75, 66, 64,148, 97,161, 81,137,105, 36,150,146, 74, 38, 79, 41,142,194,216, 79,149,203,
+221,197, 99,141,181, 95, 82,226,238,225,214, 56,163, 94,149,102, 98,  0,220,211, 78,132, 12,139, 68, 57, 76,156,227,  0,101, 34,
+192, 39,109, 46,237,175,237, 97,189,178,149,103,180,184, 69,150,  9,163, 60,145,227,144,  6, 86, 82, 58,130, 13, 70,184, 65,  5,
+138,116, 72, 33,198,  9,237,113,117, 87,174,115, 14,249,137, 59,125, 47,160,108,228, 48, 45,220,184,240,234,103, 72, 25,184,137,
+ 25,  1,168, 82,118,174,159,229,203, 46,102,166,245, 31,153, 28,217, 94,184,178,176,211, 20,137,105, 36,150,146, 73,105, 36,150,
+146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,
+105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 74, 21,198, 82,210,222, 83,109, 86,154,236,  0, 77,188,  8,210,200,  1,
+232, 88, 40, 60, 65,175, 86,166,146, 74, 44,253,193, 13,155,192,183,246,119, 54,191, 82,222,156, 28,150, 57, 75,201, 66,120,133,
+129,228,106,237,253,154,105, 36,159,253, 78, 98,  3, 69,141,187,144, 17, 94,145, 70,127,132,146,161,210, 73, 61,105,127,109,123,
+205, 97, 98,179, 71, 79, 86,  9, 20,164,169, 94,156,145,168, 69,124, 15, 67,225,164,146,149,164,146, 90, 73, 37,164,146, 90, 73,
+ 42, 62,239,151, 53, 15,111,222, 63,111,169,108,159, 16, 35,227, 66,225, 73,243, 21,  7,249,169,211, 85,221, 68,222, 22, 37,228,
+248,253, 48, 86, 61, 56, 88, 58,136,249,222, 15, 76,120, 44, 37,135,184,110,196,177,202, 23, 39,205, 83, 55, 93,121,215,151,212,
+206,203,159,238, 94,145,230,116,193,182,223,251, 84, 59,220,135,120, 99,184,125,125,213,245,183, 58,240, 18,201, 34, 19, 79,133,
+ 78,134,189,115, 91,101,188,195, 56,190,242, 81, 54, 45,104,111, 63,150, 33, 38,220,  2,138,189,195,220, 46, 66,174, 74,237,152,
+244,  2,105,  9, 63,211,161,198,183, 82, 75,  9,203,214, 81,  7, 67,166,  1,204, 35,234,  9, 62, 15, 63, 56,107,167,176,185,112,
+231,147, 74, 99,115, 82,124, 73,166,157, 45, 14,170, 92,230, 18, 60, 88,166,199, 95,165,143, 32,156, 71,  7, 10, 95,110,119, 78,
+103,180,175, 12,150,140, 68, 68,255,  0,136,179,146,161, 30,159, 17,224,126,122,151, 67,212, 47,104,167,203,134,216,149, 22,187,
+167, 89,214,195,155, 29,146, 11,125,237,110,238,198,119, 85,159,212, 89,183, 11,132,160,184,182,127,198,140,127,172,124, 14,189,
+ 63, 65,212, 45,106,225,154, 24,237, 27, 66,242,237,127, 79,187,163,158, 89,225,176,236, 41,174,238,239,254,209,236, 65, 98,253,
+217,146, 76,100, 89, 25, 26, 27, 89,101, 87, 49,151, 64, 24,134,101,  4, 46,199,171,106,230,206,158,229,231,200, 29,149, 37,253,
+ 77,187, 45,156,179,171,172,102, 83, 29,153,177,131, 39,137,186,142,243, 31,114,162, 75,123,152, 24, 60,110,135,197, 88,108, 70,
+161,148, 76, 75, 16,197, 79,  9,137,135,137,112, 84,189, 53, 57, 82, 79,222, 61,169,107,148, 24, 75,156,213,148, 89,134,117,136,
+ 88, 60,241,172,230, 73, 41,197,120, 19, 90,154,236, 53, 48,179, 51, 28,194, 37,183,168, 13,251, 98, 89, 76,131,238,117,119,168,
+ 84,233,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,190, 18, 20, 22, 99, 69,  2,164,159,128,210, 73,  8, 97, 61,210,236, 30,
+228,207,191,108,246,254,114,223, 39,151,138, 39,158, 72,173, 73,149, 21, 35, 96,173, 89, 20,112,168, 36,109,203, 69, 92,210, 93,
+183, 12,242,139,  4, 29,189,101,155,147,201,  9,  2,120, 35, 13, 10,140, 75, 73, 36,180,146, 85,157,197,105,149,191,192,228,172,
+112,119,131, 29,152,185,182,150, 43, 43,246, 79, 80, 65, 51,169, 11, 39, 26,138,149, 38,163,253, 58,146,220,162, 36, 12,131,135,
+193, 69,118, 50,148,  8,137, 98, 69, 10,242,151,183,255,  0,180,203,204,140,215,153, 31,115,238,229,250,199,158, 80,150,214,147,
+  6, 50, 81,205,102,150,102, 12, 91,212, 62, 96,  5, 13, 55,109,234,163, 73,169,235, 44,194,200,167, 31,115, 44,182,151,161,187,
+202,249,171,224, 15,180,158, 40,107,223,223, 97,113,190,213, 99, 49,221,225,218, 87,183, 41,106,110,210,218,104, 38,144, 52,144,
+204,202,210, 69, 44, 82, 40, 86, 20, 49,145,226,107, 66, 14,138,233,189, 66, 90,137, 24, 92,  3,  4, 39, 84,233,145,211, 68, 92,
+182, 78, 62,140,189, 39,251,127,239,108,135,125,123,107,139,202,102, 36, 51,101,160,245, 44,239, 39, 61,100,123,119, 42, 28,252,
+217,120,150,249,215, 89,238,163, 96, 89,190, 99, 28, 49, 90,110,153,168,149,237, 60,101, 44,112, 61,203, 82,213,114,179, 95, 25,
+149, 20,187,144,168,160,150, 98,104,  0, 29, 73, 58, 73, 47,  6,254,227,253,240,111,112,114,173,218,189,183,112,127,201,120,201,
+124,210,161,218,254,229, 54,245, 77, 58,198,166,190,152,241,252, 95, 10,109,250,102,131,201,142,121,248,143,177, 96,122,183, 81,
+243,229,146,  7,144,123, 79,203,114,246, 55,182, 36,159,111,251,104,159,254,172,178,255,  0,201,211, 89, 13, 79,249,101,252,199,
+222,182,186, 95,240,195,249, 71,185,101,222,240,254,230,112, 29,150,183, 29,189,217,141, 30,115,188,  9, 48,151,143,243, 44,237,
+ 36,233,231,101, 63,153, 32, 59,122,105,227,248,136,165, 13,166,139,165, 78,239, 52,249, 99,237, 42,163, 95,213,225,101,225,111,
+154,126,193,233,185,100,223,181, 12,198, 79, 59,238,151,112,230, 51, 23, 82, 94,100,239,177,237, 53,213,212,199,147,187,181,196,
+ 91,159,234,  0,108,  6,195, 86, 93,102, 17,133,136,198, 33,128, 63,  2,170,250, 21,201, 79, 81, 57, 72,185, 35,226, 23,181,245,
+145, 91, 68,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73,
+ 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 37,196,178,197,  4, 79, 52,206, 35,138, 48, 89,
+221,141, 21, 84,110, 73, 39, 73, 36, 57,153,206, 94,197,105, 28,240, 71,244,150,119, 18,164, 17,205, 43,112,186,148,189, 72, 16,
+196, 65,243, 48, 20, 94, 94,109,235,199,109, 36,150, 37,220,190,244,119,  5,212,199,  9,237,198, 52,227,173, 42, 65,188,186, 95,
+ 82,246,105,  9,243, 48,136,122,132, 31, 26,191,156,252,181,103,107, 74,193,228, 16,210,185,185, 14, 99,219,188,187,119, 44,189,
+229,222,151,153, 36,200,205,249, 88,117,185,121,162, 46,251, 84, 48, 99,229,135,113, 95,237,146, 23,110,186,153,161, 46, 80,  2,
+103, 48,169, 79,223,247,223,115,204,197,175,115,215, 49,242, 63,135,234, 12, 43, 95,146,169, 81,252,  6,166, 22,160, 54,  4,204,
+210, 59, 81,135,180,189,243,157,206,119, 85,190, 42, 73,198, 83, 29, 12, 18,198,215, 82,249,165,136,144, 28,210, 95,196,192,112,
+ 81, 70,168,243,104, 61, 77,168,101,204, 40,166,183, 34,236,183,253, 86, 34, 82,210, 73, 45, 36,146,210, 73, 42, 87,174,146, 72,
+  7,189,125,194,197,118,224,146,198,193, 18,243, 53, 74, 20, 27,199,  9,248,185, 30, 63,236,141,102,250,167, 91,183,165,120, 67,
+154,126,193,219,242, 90, 94,151,208,238,106,154,115,229,183,237, 61,159, 53,134,100, 50, 55,217,123,183,188,191,153,167,185,144,
+238,205,253,  0, 14,128,124,134,188,214,253,251,151,231,154,103, 49, 43,211, 44, 88,183, 98, 25, 96, 50,128,141,242, 25, 30,218,
+246,107,178, 79,121,247, 44, 38,239, 37, 57, 88,236,236,214,130, 73,103,144, 22, 88,208,154,241,  0, 10,187,120,127,  1,175, 89,
+251,119,160,136,128, 27,156,135, 39,242,240, 94, 69,247, 39,220, 14,229,249,  1, 96, 63, 49,222,176,153,191,120, 94,224,155,255,
+  0, 94,219, 23,139,139, 30, 26,162,200,197, 35,249,126,  6, 78, 96,215,230, 53,233, 35,161,217,102,114,235,203,207, 95,191,153,
+192, 12,182,254,208,238,190,218,247,247,181, 46,178, 24,251, 65,140,239, 12, 88, 81,121,105, 80,212, 98,  9, 82, 24,  1,202, 55,
+161,165,119,  7,250,112, 31,113,125,188, 36, 63, 87,211, 47,129, 94,141,246,215,220,100, 23,250,112,148,119,113,  8,123,182,115,
+119, 61,181,156,130,249,  9, 85,141,253, 59,168,186,114,140,154, 48, 63,103, 81,243,215,148,116,253, 92,180,154,129, 45,142,210,
+ 28, 54,175, 91,234, 58, 72,234,244,230, 27, 89,226,120,236, 81,127,122, 83,165,207,106,118,140,241,144,200,247,147,176, 35,161,
+  6, 21,215,208,221,  0,131, 57, 17,184, 47,156,126,227,  4, 66,  0,239, 40, 47,177,255,  0,114,157,193,218,253,153,134,237, 62,
+205,237, 86,203,205,138,181,  9,125,117, 48,150, 69,230, 89,152,241, 72,  5, 64, 21,234,205,191,195, 70, 95,233,112,157,201, 78,
+228,242,230, 52,244, 40, 29, 63, 87,157,187, 81,183,110, 25,178,138,250,  5,163,251,115,251,186,197,119, 22, 98,223,  1,222,184,
+161,131,187,185,144, 67, 21,244, 82, 23,182, 18,177,160, 89, 21,192,100,169,219,149, 72,248,211, 64,234,186, 52,161, 28,214,206,
+ 97,237, 86, 58, 78,185, 27,146, 16,184, 50,147,183, 98,200,189,195, 42,127,117,150,236,180,223, 55,139, 35,237,172, 52, 58,179,
+211,255,  0,250,243,252,178,248,170,141, 79,255,  0,178, 31,205, 31,130,217,189,208,253,209,199,218,153,211,217,157,141,137, 25,
+238,225,129,197,189,204,210, 23, 48, 45,193,216,195, 26, 69,230,145,193,216,208,138, 29,183,213, 78,147,164,249,144,243, 46, 28,
+177, 87, 90,222,179,229,207,203,181, 28,210,248,238, 66,183,159,185, 15,123,251, 61, 96,202,119,191, 99,195, 14, 14,103, 10,100,
+244,230,183, 59,239,196, 73,206, 64,172, 71, 64,235,162, 99,211,116,183,105,110,229, 80,147,234,186,187, 45, 43,182,249, 86,171,
+127,251,144,236,219, 63,110,108,125,199,130,218,230,242,194,238,237,113,211, 88,197,192, 92, 91,221, 24,222, 70, 89, 57, 16, 54,
+225,212,117,168, 58,173,143, 76,184,111, 27, 68,128, 64,126,208,173,103,213,109, 11,  2,240,  4,130, 89,183, 20,  3,152,253,223,
+140,141,172, 48,123,119,218,119,121, 76,195,169,123,148,186, 86,100,132,  3, 64, 56, 91,242,103,168,222,181, 80, 52,116, 58, 54,
+ 82,247,102, 34, 61, 55,170,249,245,220,193,172,192,200,250,110, 81,189,188,253,220,223,229, 59,158,219,182,187,243,  9, 14, 56,
+ 94, 76,182,169,121,107,234, 33,134,103, 60, 84, 75, 20,165,141,  9, 32, 18, 14,223, 13, 59, 83,209,132,109,153,219,147,178,110,
+147,174, 25, 92, 16,187, 22,122,127, 20,117,239, 23,238, 83,183,253,177,190,255,  0, 47,227,172,206,111,185,130, 44,147,192, 31,
+210,183,182, 14, 42,162, 87,161, 37,136,223,130,142,157, 72,208, 90, 46,151, 61, 64,204, 78, 88,251,209,218,254,173, 13, 49,200,
+  6,105,123,150,101,101,251,189,238,196, 11,115,221, 61,151,233,118,237,200, 41,245,118,158,188,108,  3,138, 85, 90, 96, 81,190,
+202,138,234,198, 93, 26,222, 16,159, 50,172,143, 93,184, 43, 59,124,167,104,116,  3,251, 84,189,180,177,247, 39, 35,144,186,149,
+ 96,177,183,198, 93, 79, 60,207,229, 84,138, 55, 70,102,111,128,  0, 87, 70,117,152,147,100,  1,142, 96,129,232,114,  2,252,137,
+195, 41, 90,102, 99,247, 99,220,253,195,220, 15,128,246,155,181,134, 76,  2,194, 27,139,165,146, 89,165, 84, 59,200, 34,140,168,
+ 69,255,  0,166,223,109, 52,  4, 58, 69,187,112,205,122,108,172,167,214,174, 92,158, 75, 16,204,149,167,238,155,190,251, 67, 57,
+111,138,247,107,180, 70, 62,214,226,140,103,182, 73, 34,153, 99, 38,133,213, 93,157, 36,  3,196, 43, 13,112,244,155, 87, 96,101,
+102,110,144,235, 55,172,204, 70,252, 27,211,218,180,175,112,255,  0,114, 61,161,237,245,198, 38, 41,172,238,178,182,249,155, 37,
+201, 89,221, 89, 24,253, 51, 12,140, 85,127, 27,  3, 83, 74,234,191, 77,211, 46, 95,  5,136, 25, 75, 85, 89,234,250,181,173, 57,
+139,131, 44,193,195, 33,110,202,253,202,230, 61,196,247, 55, 25,219,216, 12,  1,183,236,153,204,233,115,144,157, 29,238, 57, 71,
+107, 36,170, 75, 33,244,227,171,170,138,111,162,117, 29, 50, 54, 44, 25, 74, 92,251,187,208,186,110,173, 45, 70,160, 66, 49,228,
+173,123,143,114,244,120,232, 15,199, 84, 11, 70,188,153,251,203,239,107,121, 33,194,123,123,102,226, 75,161, 47,234,217, 21, 90,
+213,  0, 86,138,221, 13, 63,181,206, 70, 35,228,167,196,107, 81,208,236, 23,149,211,134,  3,226,178, 61,127, 80, 26, 54,134, 56,
+159,130,217,253,134,236,233,251, 39,219,140, 70, 38,241, 61, 60,131, 70,110,111, 84,245, 89,238, 88,200,202,126,104, 24, 39,221,
+170, 93,125,241,122,244,164, 48,217,220,175,186,118,156,216,177, 24,156,113, 61,165,105,186,  5, 88, 47, 44,254,226,189,218,201,
+103, 50, 99,217,111,110,203, 93,229,111,223,233,115,119, 22,198,173,201,191, 21,162,176,216, 80,111, 59, 86,138, 42,167,249,181,
+165,233,186, 56,194, 62,125,218,  1,135,207,228,178,189, 83, 91, 43,146,253,189,154,147, 67,242,249,255,  0, 21,143,251,223,237,
+109,143,181,221,177,216,214, 41,198,108,197,248,201, 77,149,189,  2,134, 89, 80, 90, 81, 87,199,130,114, 33,  7,218,122,147,171,
+ 62,157,172,150,162,119,  9,192,101, 97,235, 85, 61, 79, 69, 29, 45,187,113, 24,156,206,127,210,189,177,237,135,254,143,187,107,
+255,  0, 54, 89,127,228,233,172,126,167,252,178,254, 99,239, 91,125, 47,248, 97,252,163,220,131, 59,119,216,142,207,236,165,204,
+103,150, 47,212,123,130,233,110,174, 31, 35,116,  1,120,204,193,152,172, 43,210, 48, 43, 74,143, 55,196,232,187,218,251,183,154,
+ 38,145, 13, 79,154, 14,207, 78,181, 99, 52,128,121, 23,169,248,110, 94,123,253,157,127,233,  3, 45,255,  0,155, 15,254, 81, 22,
+175,186,231,248,163,252,223,  2,179,159,111,255,  0,154, 95,203,241, 11,220,186,199, 45,194, 90, 73, 37,164,146, 90, 73, 37,164,
+146, 90, 73, 37,164,146, 90, 73, 37,164,146,196,253,199,108,132,157,223,151, 75, 64,242, 27, 92, 26,220,194,194,254, 75,  1,111,
+ 34,200,255,  0,156,161, 72, 18, 48,254,193,235,171, 93, 59,100, 15,249,183, 58,130,120,170,252, 63,123,231,172, 46,238, 98,199,
+ 59,223,223,230, 36,197,199, 21,205,202, 25,184,131, 96, 37,114, 34,245, 16,115,114,127, 15, 63,142,159, 59, 49, 34,180,  1,253,
+235,130, 69, 88,201,238,183,120, 12,117,206, 72, 91, 99, 82, 44,109,173,181,213,228, 64, 73, 43, 74,102,187, 54,164, 70,233, 49,
+ 80, 13, 57,120,211,166,250,103,237, 96,237, 90,159,131,174,231, 41,156,239,125,103, 46, 47,172,115,146, 53,178,227,177,217, 44,
+130, 91,227, 33,105, 18,233,133,132, 14,212,156,242, 32,134,160,219,142,219,107,176,177, 16, 12,118,144, 43,218,145,145,197, 72,
+143,221, 46,244, 75,104,149,172,236,100,189,188,123, 19,104,210, 43, 70,129,111,137, 28, 89, 22,118,122, 86,156, 36,218,162,187,
+105,191,181,182,248,154, 63,179,185, 44,229, 16,218,254,171, 99,113,221, 25,220,197,173,181,253,214, 25,140,230,234, 41,231,140,
+250,208, 99, 45,166, 17,199,110, 80,175,  2, 77,106,101,173, 73,219, 80,150, 34, 49,  5,159,230,118,167, 86,165, 91, 89,247, 14,
+110, 12,237,166, 11, 35, 37,165,211,220, 75,110, 94,234,218, 55, 69, 17, 92,217,223, 79,196,  3, 35,249,149,237,  5, 26,187,163,
+116,174,250,140,219,137,137,144,127, 66, 62,105,206, 93,149,117,143,122,103,174, 98, 76,164,194,215,244,248,228,182,138,107, 88,
+226,147,213,115,113,106, 39, 98,178, 25, 72, 20, 39, 97,192,233,242,179, 17, 74,191,226,185,152,166, 63, 93,238, 11,107,198,187,
+184,187,183,146,251, 33,143,199, 61,156, 54,182,210,202,170,110,101,153,138, 36, 94,183,230, 48,  0,209,203,162,208, 85,182, 26,
+238, 72,144,205, 64, 74,227,148,213,135,112,103,242, 23, 50, 95,223, 73,  9,181, 97,130,140,216,122,114,167,  9, 37,204, 77,104,
+206,165, 46, 89, 67, 86, 54, 99, 78, 65,188,138,106, 16,243,236,173,196,  6, 31,171,254,151,220,144, 39,220,165,175,120,119, 33,
+180,199,220,  6,177,105,115,150,246,215, 86, 41,233, 72, 69,168,184,191,180,181, 41, 40, 18,213,232,151, 64,212,113,243,171,120,
+105,190, 76, 28,227,203,237,161, 63,  5,220,197, 23,118,237,245,229,245,140,166,253,163,123,171,107,171,155, 71,150, 37, 49,163,
+139,121,154, 53,110, 37,154,132,128, 42, 57, 29,244, 53,200,128,105,185, 60, 21,  3, 59,155,196,217,228, 22,223, 47,116,145, 91,
+ 91, 70,183, 11,106, 73, 47, 60,196,185, 79, 40,  4,149, 65, 25,111,133,105,240,211,  0,117,213, 85,219,150,247,221,207,144, 94,
+238,202, 22, 72,104,127, 71,178, 39,203,109,110,223,206, 64,168,245,165, 31,136,255,  0, 42,249,127,181, 87,150,  1,113, 23, 89,
+ 98,113,120,230,145,236, 44,160,181,121,153,164,153,225,141, 35,103,119, 53, 98,197, 64, 36,147,166,153, 19,137, 72,  0, 21, 47,
+117, 88, 99,251,150, 35,219,151,177, 36,182,142, 11,222, 74,225,127, 42, 48, 40, 89, 89,129, 10,212, 59, 31,244, 87, 74, 50, 49,
+ 46, 18, 33,241, 94,124,126,205,246,251, 31,117, 40,141,238,242, 49,164,141,232,183,  8,226, 28, 65,242,249,228, 50,147,246,240,
+ 26,185, 25,136,192,  4, 33,  1, 21,118, 94, 99,183, 59, 95, 52,183,150,120,209, 98,179, 40,182,158,115, 43, 72,237, 27,184,242,
+176,162,175,226,161, 90, 45,107,183,142,160,191,110, 82,142, 56, 39,192,128, 86,255,  0,170,180, 74, 90, 73, 37,164,146,226, 89,
+ 98,130, 39,154,119, 88,225,140, 22,121, 28,133, 85, 81,212,146,116,217, 72, 68, 57,160,  9,209,137,145, 96, 28,149,142,247,191,
+186,178, 92,122,152,190,216,115, 28, 27,172,217,  1,179,176,241, 17,252,  7,251, 93,117,130,234,191,112, 25, 61,187,  6,155,101,
+242,249,173,255,  0, 74,251,120, 69,174,106,  5,118, 71,231,242, 64, 88, 94,219,201,231,253,123,136, 85,133,180, 42,242, 77,112,
+192,144, 74,130,196, 15,137, 58,207,104,186,109,221, 83,200, 82, 33,201, 62,152,149,162,214,245, 43, 90, 86,137,172,139,  0, 61,
+ 48, 10,166,  7, 17,205, 28,140, 42,170,202,196,124,129,174,171,109,203, 44,129, 59, 10,179,185, 28,209, 32,109, 10,255,  0,247,
+ 81,218,185, 78,237,246,227,  9,159,192, 70,215,150,248, 89,158,230,238,  8, 65,102,250,123,136,192,245, 64, 29,120, 21, 21,249,
+ 26,235,232,238,133,170,182, 39,141, 38,  3, 21,243, 79,220, 26, 75,134, 20, 21,129, 46, 23,136,117,184, 94,126,189,111,251, 60,
+237, 92,182, 55,245,190,243,200, 70,214,184,107,168, 82,222,213,164,  5, 68,171, 27, 25, 30, 65, 95,229, 90,  0, 15,142,255,  0,
+ 13,100,122,246,166, 20,139,248,106,120, 45,175,219,218, 89,214,109,226, 96, 56,169,217, 41,227,185,200,221,220,196, 41, 20,211,
+ 73, 34, 15,246, 89,137, 26,249,170,252,196,238, 74, 67,  2, 74,250,119, 79,  3, 11,113,137,196,  1,238, 85, 63,186, 83, 47,251,
+182,236, 49, 45,121,137,164,235,215,255,  0, 23, 90,107,232,111,180,159,202, 15,142, 72,175,156,126,241,111, 52,182, 25,228,181,
+ 63,218,220, 93,177, 63,181,152,239,210,189, 22,190, 67, 32,203, 42,211,213, 23, 70, 70,175,169,227,186,211,141,127,150,154, 93,
+ 88, 79,247,  7, 54, 27, 59, 19,186, 49,135,237,163,151, 29,189,171,205,127,186,111,242,241,247,114,225,123,104,196,215,  2,218,
+  1,148, 54,196, 17,245,245,106,212,174,220,248,240,229,243,235,190,180,157, 35, 56,211,243, 96,244,236, 89,110,180, 96,117, 60,
+152,176,126,213,198,119,235, 63,245,132,237,241,120, 79,234,  2,239,  4, 46, 11,117,245,132, 86,225,171, 95, 26,245,211,109,183,
+236,164,216, 52,254, 41,247, 95,247,241,124, 94, 31,  4, 29,219,118, 29,207,115,238,137,176,197,100, 83, 19,221,141,127,117, 28,
+ 87,151, 36, 40, 91,174, 78, 24, 18,202,222,102, 53,  3,110,186, 50,244,173,141, 59,200,102,139, 10,112, 64, 88,133,195,169,104,
+156,179,115, 83,189,109,157,225,237,207,191, 51,224,100,177,239,126,250,199,167,111,221,188,112, 58,223,206,145, 66,242, 51,  3,
+ 26,242, 49, 13,234, 54,223, 84,214, 53, 90, 65, 55,183,108,230, 27,191,138,190,212,104,245,134, 13,118,232,202,119,159,193,  6,
+247,207,181,221,213,237,143,180,151,118,185,251,155,105,236,178, 89,187, 27,139, 49,106,237, 34,135, 91,107,149,118, 53,  0,110,
+ 56,244,209,122,125,100, 53, 26,144, 98,  8, 34, 39, 30,208,129,213,104,174,105,180,164, 72,130, 12,131, 55, 97, 94,129,253,166,
+ 97,113,177,123, 97,111,125, 28, 10, 46,175, 46, 39,123,153,104, 57, 59, 35,148, 90,159, 26,  1, 65,170, 46,177, 50,117,  4, 29,
+128, 45, 23, 68,128, 26, 96, 70, 36,149,133,126,227,237, 45,108,191,112, 22,230,222, 53,136, 77,250,100,211,113, 20,228,229,130,
+150, 52,241,162,141, 94,116,194, 78,144,255,  0, 82,207,245, 96,  6,180,127, 74, 27,147,232, 19,247, 17, 57,239,110, 34,199,245,
+233, 13,233,185,167,165,196,200,125, 50,252,182,225,248,126, 92,126, 90,154,167, 69,253,188,114,161,249, 70,188,249,184,103,171,
+175,118,247, 84, 61,161, 31,100,228,229,238, 19,109,254, 91, 54, 82, 27,167,148,175,164, 97, 49,154, 83,192,147,252,148,222,180,
+166,177, 86, 68,252,193,151,196,235,123,124,219,242,142,118,202,203,243,219,219, 88,238,165,178,239,148,199,  6, 51,158,222,185,
+101, 11,248,189, 37,158, 22,147,167,254, 12, 53,117,189,213,144, 13,183,252,227,220, 87,157,104,129, 49,186,223,144,251,194,176,
+246, 75, 15,223,185,172,213,253,175,183,153,200,112,217,129,  2,180,194, 86, 10,243, 66, 31,112,149, 71,175, 19, 66,105,168,250,
+133,203, 48,136, 55, 99,152, 58,151,166, 91,191, 57, 17,102, 66, 37,150,139,222,126,208,123,197,221, 87,216,220, 23,123,119,150,
+ 50,247, 41, 73, 38,197, 88, 93,220,170, 78,202,120,172,134, 53, 17,169, 53,160,254, 31, 45, 87,216,215,105,173,131, 43,118,228,
+  6,210,202,203, 81,211,245, 87, 72,141,203,145, 39, 96, 39,240, 64,254,248,118,190,103,179, 45,251, 35,182, 51,242, 71, 46, 75,
+ 31,137,146, 54,120, 73,100,244,218,238, 86, 64,  9,  0,236, 13, 52,111, 78,187, 27,166,228,227,129,151,192, 42,254,167,102, 86,
+ 69,184, 75, 17, 31,137, 94,225,246,163,183,113, 88, 62,195,192, 90,227,237,210, 40,133,149,187,158, 32,  2,210, 73, 26,179,185,
+248,179, 49, 36,157, 98,245, 87, 12,238,200,157,229,110,244,150,227,110,204, 68,112, 96,172,125,195,239,140, 87,183, 93,165,144,
+238,172,169, 13, 29,162,113,182,182,175, 22,184,185,125,162,137,126,108,122,252, 22,167,160,210,211,105,229,126,224,128,218,187,
+170,212,199, 79,108,206, 91, 61,165,121, 19,216,206,206,203,251,193,238, 53,255,  0,185,125,223, 91,155, 75, 91,175,169,118,113,
+228,154,251, 99, 28,106, 63,239,112,168, 83, 79, 15, 32,233, 93,105,250,141,248,233,172,139, 54,241, 35,217,248,252,214, 75,165,
+233,229,170,190,111,220,168,  7,214,127, 15,146,247,  4, 81,172, 81,172,107,176, 81, 77, 99,214,221, 98, 95,184,255,  0,121, 38,
+246,211,  1, 22, 23,  4, 74,247,102,114, 57,  5,173,197, 60,182,182,235,229,121,170,118, 47, 83, 72,199,199,115,210,134,231,166,
+104,124,249,230,151,134, 62,213, 71,213,181,231, 79, 12,177,241, 75,217,197, 96,126,196,247,223,180,190,222,164,249,254,234,185,
+187,187,239, 11,210,194, 73, 82,217,230, 88, 34, 38,165, 21,201,  4,179,157,221,190,239,182,231,168,233,181, 23,206, 88,  0, 32,
+ 56,226,168,186,102,171, 77,167,  6, 83, 36,204,240,195,211,106,103,247, 45,238,207,103,251,163,254, 87,255,  0, 41,189,195,140,
+ 72,191, 23,127, 81,  9,134,159, 83,244,220, 56,212,154,255,  0,116,213,212,157, 43, 71,115, 79,155, 62,214,248,168,186,190,186,
+214,167, 38, 71,229,127,107, 47, 72,123, 17,238,159,105,247,126,  6,199,181,240,210, 78,217, 92, 46, 54,209,111,150, 88,140,104,
+ 10, 70,177, 30, 44, 78,254, 97,172,238,191, 73,114,212,140,229,132,137,101,167,233,218,219,119,160, 33, 28, 99, 16,235, 85,204,
+127,244, 77,255,  0,255,  0, 23,151,255,  0,104,117, 93, 15, 16, 86,147,240,158,197,226,127,217,215,254,144, 50,223,249,176,255,
+  0,229, 17,107, 93,215, 63,197, 31,230,248, 21,138,251,127,252,210,254, 95,136, 94,229,214, 57,110, 18,210, 73, 45, 36,146,210,
+ 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,149, 70, 71,181,187,111, 47,118,183,249, 76, 85,173,237,226,168, 69,154,226,
+ 36,145,184,169, 36, 15, 48, 59, 10,234, 72,221,156, 67,  2, 66,225,136, 41,172,143,108,246,180,214,151,141,144,197,219,189,172,
+188,110, 47, 63, 42,165,141,186, 16,173, 69, 21, 37, 87, 97, 79, 13,181,216,220,155,134, 43,132,  5, 71,115,115,237,141,173,149,
+220,115, 67,102, 44,146, 27, 72,175, 35, 75,102,117,244, 37, 83,115,110, 25, 81, 13, 86,138,100,233,229,165, 77, 53, 48, 23,137,
+ 24,189,126, 69, 55,149,117, 55,251,181,183,204, 73,144,154,218,211,245,137, 47,254,130, 91,143,167,119,113,124,234,181, 12, 66,
+ 16,181, 18, 14, 78,124,181, 59,154,235,131,205, 49,106,179, 63,114,239, 43,167,176,216,239,110,166,144, 89, 97,108,108,217,228,
+154, 91,142, 17,192,127,190,198,202,177, 51, 18, 87,111, 77,220,  4,222,134,181, 90,138,235,147,149,220,100, 79,241, 72,  8,166,
+ 44, 59,195, 25,119,140, 91,136,173,  2,100,178, 51, 88,253,117,180,176,201, 20,114,173,229,204, 22, 15, 34,180,138,  4,161, 20,
+133,168,175, 64, 58, 83, 78,149,146, 14, 52, 15,236,  4,164, 36,155, 91,175,109,197,132,182,194,201,  5,128,150, 41, 85, 62,142,
+114, 38,102,111,167,137,225,164,100,200,181, 62,152, 41, 81, 67, 79,194,119, 77,117,221,235,218,185,202,186,185,238, 14,211,198,
+227,163,253, 34,200, 52,181,138, 72,237,150,210, 85, 88, 90, 41, 77,154,153,184,165, 34, 42,209,188,107,206,155,169, 30, 26, 66,
+220,228,106,125,189,233, 56, 11,135,155,219, 59, 72,178, 17, 61,164, 86,246,169,231,184,151,233,102, 72,164, 22,211,  8,143,162,
+234,158,113, 20,142, 23,242,141, 22,191, 13,117,174,150,170, 92,170,124,255,  0,228,204, 53,189,133,211,227,190,159,213,140, 27,
+ 59,104,173, 37, 50,172, 86,242,125, 93, 76, 40,133,148, 68,231,212,221,124,164,252, 78,152, 60,201, 18, 31,219,220,187, 64,163,
+199,146,236, 11, 75,171,152,236,173, 86, 91,146,214,210,205,244,182,146,203,202, 73, 25, 46,237,213, 10,161,  5,152,184,153, 85,
+ 62,  5,188, 14,187,150,233, 21, 62,222,227,242, 73,194, 36,194, 93,227,111,236,126,183, 20,133, 45, 39,150, 87, 60,163,104, 89,
+164,245,  8,145,138,184,  6,165,129,173, 70,160,152, 32,177, 78,  8,107, 33,125, 13,180,113,155,139, 88,238, 50, 55,139,245, 55,
+ 44,251,240, 18,143, 44, 85,165, 72, 85,242,236, 71,199,199, 82, 91,131,213,112,149,215,103,231, 32,143, 16,184,232, 45,166,184,
+ 54, 50,201,108, 77,180,101,227, 86, 70,175, 18,213,160, 52, 32,252,129, 26,142, 97,139, 46,133,116,249, 76,196,136,205, 14, 38,
+ 72,209,106, 89,164,120,249,241, 31,216, 64,106, 91,224, 13, 52,197,213,155,247,135,117, 37,181,132,184, 11, 23, 63,169, 93, 30,
+121,105,183,175,162,251,198,170, 72,  4,171,169,175,241,  7,204, 88,  3,180,214,159,152,168,110, 75, 98,206,181, 98,135, 93, 97,
+177,115,247, 70,114,215, 21,101,230,133,100,  6, 73,  6,233,234, 13,235,183,132, 99,206,223,237, 80,117, 26,142,115, 17, 14,118,
+ 39,  0,235,212, 54,240,173,181,188, 86,232, 89,150, 20, 88,213,156,242, 98, 16, 82,164,248,157,181, 74, 75,148, 98,115, 92, 73,
+ 45, 36,144,151,184,248,156,174,103,182,101,180,196,146,102, 18, 36,146,194, 13, 12,177, 32, 53, 65,247,208,253,218,164,235, 58,
+107,183,244,198, 54,241,119,109,227,114,188,232,186,155, 90,125, 72,157,220, 25,159,113,222,178,238,214,246,207, 41,147,185, 18,
+102, 34,107, 75, 68, 59,196,118,145,254, 95, 33,172,167, 77,251,122,229,201,102,190, 50,196,108,218,126, 65,107,122,151,220, 86,
+237,199, 45,131,154, 71,110,193,243, 43,109,199, 97,172,113,182,107,101,111, 10,164, 33,120,112,  2,130,154,244, 40, 90,132, 34,
+ 33, 16,192,108, 94,119, 59,179,156,140,228, 94, 71,106,243,183,122,246,220,221,179,156,158,208,130,109, 37, 38, 91, 73,  8,217,
+163, 99,211,237, 94,135, 94, 75,213,116, 39, 75,124,199,233, 53,143,103,224,189,115,164,235,198,174,192,151,212, 41, 46,223,197,
+ 91,246,111,184,183, 93,185, 15,233,185,  8,141,238, 36,215,138, 87,243, 35,  7,168, 90,236, 71,200,234,195,165,245,217,233, 70,
+ 73,140,208,217,188, 42,254,171,208, 97,170,151,153,  3,150,123,119, 21, 58,225, 61,134,188,187, 57,139,142,218,180, 57, 34,121,
+177, 56,248,203,151,235, 83,183, 18,126,122,218, 15,187,173,  8, 55,153, 62,202,172, 65,251, 58,233,155,155,112,237,162,135,221,
+ 62,225,156,157,145,194,224,109,191, 78,196, 16, 18, 78,130, 73, 16,116, 90, 46,202,191, 33,172,119, 84,235,243,212,196,194,216,
+203, 19,142,242,182,125, 43,237,248,105,100, 39,112,230,144,195,112, 67,157,177,132,155, 63,152,130,202, 53, 38, 46, 65,238, 28,
+116, 88,193,223,248,244, 26,169,233,154, 35,170,190, 33,179, 25,118, 43,126,169,173,142,150,193,158,220, 35,218,180,159,120, 61,
+149,143,221,108, 30, 27, 20, 50,135, 18, 49, 82,188,202,201,  0,156, 63,168,129, 56,208,186, 82,148,215,185,104, 53,191,181, 36,
+136,187,142,197,224,253, 71, 67,251,176,  1,147, 49,125,235, 35,188,253,157,228,177,241, 66,253,173,221,211, 90, 92,180, 98, 59,
+223, 82, 54,141,100,111, 22, 95, 74, 74,128,127,178,107,246,234,214, 61,108, 31, 28,  1,220,169,229,208, 12,127,199,112,141,234,
+251,219,159,218, 94, 35,182,242,246,249,238,232,200, 54,106,246,217,196,208,219,122,126,157,176,148, 26,134, 96, 75, 51,144,119,
+ 21,160,249, 29, 65,170,235, 19,185, 28,176, 25, 65,245,162,116,157, 14, 22,164, 39, 51,152,143, 82,187,238, 31,219,106,102,125,
+210,135,220,148,207, 60, 70, 43,203, 91,223,211,190,148, 48,255,  0,  9,195,201,234,122,163,241,112,235,199,109, 67,111,169,152,
+ 88,242,114,236, 33,223,122,154,231, 73, 19,212,121,217,182,130,205,187,189, 47,117,127,108, 56, 14,254,201,183,114, 97,239, 95,
+  5,220, 82,209,174,164,141,  4,144, 78,235,209,217, 42,165, 95,109,217, 91,238,174,187,163,234,179,177, 28,132,102,138,230,183,
+163,219,191, 44,241, 57,100,129, 23,246,149,221,153,137,237,226,238,238,247,158,251, 27,108, 71,167, 16, 18,204,193,126,  9,235,
+ 72, 85, 54,241,161,209,191,243, 48,136,228,182,  1, 64,255,  0,193, 78,100,121,151,  9,  3,211,106,213,187,207,216, 60,103,114,
+251,109,139,246,231, 25,146,151, 23, 97,138,185,142,234, 25,221, 77,228,140, 99, 73, 20,134,230,233,248,140,132,214,191, 96,213,
+101,142,161, 43,119,141,210, 51, 18, 59, 21,174,167,166,194,237,129,102, 39, 40,137,237, 69, 30,211,123,122,125,179,237, 43,126,
+215,250,211,144, 22,239, 35,253, 73,140, 66, 91,213, 98,212,226, 25,233, 74,252,116, 54,175, 81,231,220, 51,102,116, 86,143, 77,
+251,123, 66,219,187, 32, 15,115,255,  0,110, 67,220, 62,253,135,189,198,125,172, 90, 53,182, 79,162, 22,162, 81,254, 21,171, 94,
+126,170,254, 47,250, 59,104,253, 47, 83, 54, 45,121,121, 95, 29,187,251,149,126,175,164,139,247,133,204,205,133, 27,119,122,147,
+238,207,237,187,183,189,203,150, 60,204, 23, 77,136,238,100,141, 98,150,242, 36, 18, 71, 58,198, 40,190,172,100,173, 72, 27,  6,
+ 13, 90,124,118,211, 52, 93, 78,122,113,149,179, 71,114,126,187,165, 91,212,156,207,150, 91,247,246,172,207, 25,251, 63,206,203,
+ 44, 86,157,197,221,178,207,131,132,212, 89,219,163,238, 62,  3,212,114,169,246,241, 58,177,159, 91, 24,194, 21, 85,144,232, 50,
+194,119, 30, 59,145,223,181, 95,182,136,125,181,238, 75,140,219,230,142, 90,222,226,214, 75, 57, 44,229,181, 88,148,164,164, 19,
+ 83,234, 61,118, 20,165, 52, 14,179,170, 29, 68,  4,114,229, 98,248,163,244, 61, 32,105,166,101,155, 51,134,102,252, 80,255,  0,
+117,126,208,237, 78,101,243,158,223,231,230,192, 72,206,100,142,212,171, 58,194,205,212, 69, 42, 58,186,143,128, 53,251,116, 69,
+174,181, 44,185,110, 71, 50, 26,247, 66,142,108,214,164, 96,153,237,223,218, 93,204,185,200,115,157,249,220,215, 57,169,161,117,
+127, 77, 12,136,238, 83,112, 26,103,118,122,124,150,159,110,187,119,172,242,229,183,  1, 31, 77,201, 90,232,124,249,174,204,203,
+211,122, 52,247,143,246,238,158,234,229,177,153, 81,156,124,103,233,214, 98,197, 96, 91, 97,112, 24,  7,103, 13,200,202,148,252,
+ 84,165, 52, 38,139,169, 29, 52, 76,114,230,114,248,163, 53,253, 40,106,164, 37,155, 43,  6,193,254, 43, 97,237,236, 89,194, 97,
+108,113, 38, 79, 87,232,160,138,223,212, 35,143, 47, 73,  2, 86,155,210,180,213, 84,229,154, 68,239, 87, 16,142, 88,136,238, 11,
+195, 95,184, 79,116, 23,221, 30,251,183,237,172,101,244,118,253,159,135,159,233, 96,187,145,138,219,201,112,205,194,107,183,167,
+ 84, 95,194,157,124,160,145,248,169,173,167, 77,210,126,222,209,153, 15, 34, 63,128, 88, 62,169,172,253,205,225,  0, 90, 17, 44,
+251, 56,159, 79,138,244, 71,183,222,226,251, 27,216, 93,177, 97,219,184,238,235,177, 88,172,227,  8,206, 75,  6,146, 67,187,200,
+222, 95,196,236, 75, 29,103,175,233,117, 87,166,103, 40, 23, 43, 77,167,213,233, 44,219, 16,140,195,  5,121,157,253,194,251, 97,
+139,237,252,150,115, 27,152,139, 53, 46, 58, 52,115, 97,100, 73,154, 70,149,214, 52,  0,176,  0, 14, 76, 42,124,  6,163,183,211,
+111,202, 98, 36,101,125,165, 73,115,170,105,227,  3, 33, 44,205,176, 32,142,193,247, 19,219,143,220,102, 86,124,127,115,246,132,
+ 16,119,  6, 46,  3, 53,170, 93,148,190, 86,180, 46,170,197, 37, 49,198, 65, 12,203,201, 74,248,138, 19,189, 11,212,233,175,104,
+162, 12, 38,114,157,212,170, 15, 73,171,177,175,145, 19,128,205, 17,182,180, 90, 63,251,140,246,167,255,  0,249, 76,111,255,  0,
+203, 71,254,173, 87,254,250,255,  0,231,151,173, 89,127,199,233,255,  0, 36,125, 75,205, 63,187, 78,198,237, 78,203, 61,160, 59,
+ 99, 21,109,140,250,239,212,190,171,233, 99, 88,189, 79, 71,233,120,114,226, 55,227,205,169,246,235, 71,209,175,220,185,159, 60,
+137,102,199,189,102, 58,238,158,221,172,153, 34, 34,249,176,238, 94,141,246,115,178,187, 95,  9,218,152,108,222, 39, 23,111,101,
+147,191,198,217,181,229,204, 17,170, 73, 41,104, 81,207, 50, 58,213,141,117,157,214, 95,185, 59,146, 18, 36,128, 75, 45, 54,138,
+197,184, 91,140,163, 16,  9,136,127, 82,208, 51, 31,253, 19,127,255,  0,197,229,255,  0,218, 29,  9, 15, 16, 70,207,194,123, 23,
+137,255,  0,103, 95,250, 64,203,127,230,195,255,  0,148, 69,173,119, 92,255,  0, 20,127,155,224, 86, 43,237,255,  0,243, 75,249,
+126, 33,123,151, 88,229,184, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,180,146, 75, 73, 36,136,  4,
+ 16, 69, 65,216,131,164,146,207,177,158,215,219,217, 75,  1,185,188,250,152, 18, 43,152, 39,140,199, 78,106,241,181,189,182,228,
+159,238, 96,145,163,251,244,108,181, 36,224, 61, 54,250,202,140, 65,115,103,237,137,183,130,113, 46, 71,213,186,159, 29, 45,177,
+159,211,161, 25,  9,165, 50,181,223, 83,189, 66, 80,124,190,122, 71, 82,231, 13,190,205,201,100, 86,125,189,217, 83,246,229,220,
+183, 54,119,169, 39,172,150,113, 50,201, 25, 60, 82, 20, 85,185, 43, 70,252, 83,149, 15, 95,  3,241,212,119, 47,103, 12, 70,255,
+  0,195,212,186, 34,202, 61,175,100,228,248, 99,227,191,191,129,211, 18,182,241, 89,122, 48,178, 22,142, 43,235,107,201, 61, 78,
+ 78,119, 34,213, 17,105,211,115,227, 77, 56,222, 21, 97,143,200,143,138,230, 85,198, 39,219,247,198,125, 52, 74,246,105, 13,147,
+219,122, 51,195,110,203,113, 44,118,211,172,191,154,229,206,229, 81, 87,110,167,205,242,210,157,252,219,234,144,139, 39, 31,178,
+178,145, 53,234, 88,223,192,182,249, 73,158, 75,225, 44, 44,206,163,235,231,188, 95, 76,171,141,248,207,233,183, 47,135, 33,240,
+210,243,133, 28, 97,242,  1,119, 42,110, 31,111,218, 41, 38, 69,107, 37,128,201,206, 43,133,183, 63, 86,234,110,227,185,227, 35,
+151,166,193, 56,121, 71,155, 98,122, 83, 72,234, 59,125,  3, 46,101, 87, 57, 44, 62,118,226,250, 44,165,149,237,180,119,182,226,
+234,222,  1, 44, 44,209,139, 91,177,  9,163,  0,224,151, 71,133, 90,189,  8,219,110,186,142, 51,136, 12, 70,239, 98,113,  5, 14,
+101,123, 58,255,  0, 21,130,142,195, 17, 44,146,145,127,101, 55,212, 66,132,207, 12, 22,120,248,173,  3,113, 73, 98,102, 37,160,
+ 21,  9, 34,154, 63,192, 26,205, 27,194, 82,115,184,251, 75,166,152,176, 69, 93,165, 21,220, 24, 11, 72, 47,109,  5,148,241,250,
+139,232,142, 85, 42, 36,110, 50, 16,239, 43,  6,113,231, 96,210, 49,169,220,215, 67,221, 32,200,177,116,232,224,179,158,237, 57,
+188, 87,214, 64, 33,  6,100, 10,144,100, 57,131, 26,198,196, 40,149,212,209,135,  5, 53, 32, 84,109,214,154,158,  7,149, 52,226,
+155, 76,149,199,106, 89,195,128,194, 92, 52, 98,  1,202,242,111, 43, 51,206,219,182,228, 29,255,  0,180,126, 63,102,165,141,177,
+ 42,148,195, 38, 80,103,206,230,174,118,155, 33,112,227,251, 62,163,  1,252,  1,  3, 83,  8, 68,108, 77,114,162, 62, 49,123,208,
+188,120,247,244,115,248,232,217, 98,156,  0, 82,238,134,178, 65,189,  1,101,  2,181,254,215,253,182,163,124,133,246, 46,179,142,
+ 43,188,111,179,221,193,145, 42,249,103, 16,196,122,139,169,  3,248,215,251,152,104,159,251, 45,118, 90,136, 14, 43,130,217, 90,
+159,104,246, 62, 51,180,150, 71,183,115, 61,220,170, 17,166,101,  8,170,131,126, 40,163,240,130,122,239,160,174,222, 51,236, 83,
+ 70, 12,138, 53,  2,122, 90, 73, 37,164,146, 90, 73, 47,129, 84,116, 20,210, 73,125,210, 73, 83,119, 39,109, 99,123,154,196,217,
+100, 35,169, 30,104,165, 93,158, 54,248,169,208, 90,205, 21,173, 84, 50, 92, 31, 49,216,142,209,235,110,233,110,103,182,126, 71,
+181, 98,153,223,107,187,139, 21, 35, 53,154, 11,251, 90,249, 90, 61,164,  3,230,167,253,  7, 94,125,171,251,119, 81,104,189,190,
+120,251,125, 75,208,180,159,113,233,238,134,185,201, 47,103,173, 14, 30,218,238, 16,220, 78, 46,234,189, 63,185,122,127, 26,106,
+167,254, 51, 84,255,  0,227,151,250, 74,184,255,  0,147,210, 51,249,176,255,  0, 80, 87,152,111,109,187,139, 41, 34,253, 68, 95,
+ 69,110, 79,153,164,221,233,242, 81,254,157, 90,233,126,222,212,221, 47, 62, 65,199, 31, 82,169,213,253,197,166,180, 26, 28,231,
+134, 30,181,179,118,175,104, 99,251,106,212, 69,110,149,148,239, 36,173,187,179,124, 73,215,160,104,180, 54,180,144,201,  1,218,
+118,149,231,154,221,117,221, 92,243,220, 61,131, 96, 68,186, 61,  0,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,
+150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,150,146, 73,105, 36,171, 59,143, 12,189,197,130,200, 96,164,186,184,
+177,139, 35,  3,219, 73,117,100,235, 29,194, 36,163,139, 24,217,149,192, 52, 52,175, 29, 73,110,121, 36, 36,192,182,245, 21,219,
+126,100, 12, 92,135,221,138,243,241,253,153,118,  5,118,203,230,105,255,  0,233,237, 63,249, 46,174,255,  0,231, 47,238,143,168,
+252,213, 15,252,  6,159,243, 75,214, 63,246,165,255,  0,169,151, 96,127,245,190,103,255,  0,219,218,255,  0,242, 93, 47,249,203,
+251,163,234, 63, 52,191,224, 52,255,  0,154, 94,177,255,  0,181, 90, 98,191,105,189,135,140,178,202,216,253,110, 74,230, 28,181,
+184,182,144,220, 75,  1, 49, 20,145,101, 89, 35, 41,  2, 81,195, 32,235, 81, 74,138,106, 41,245,139,210, 32,176, 25, 79, 31,154,
+150, 29, 18,196, 68,131,200,230, 13,179,228,136,125,165,246, 11,  1,237, 85,245,222, 82,206,238,124,134, 78,237, 61,  3,117,112,
+ 21,120, 65,200, 55,  5, 84,  2,149, 32, 22, 36,239, 65,211, 80,107, 58,132,245, 32,  2,  0,  1, 19,161,233,182,244,164,144, 73,
+ 37,107,250,172, 86,171, 54,247, 99,217,142,221,247,116, 98, 78,122,242,246,209,176,255,  0, 81,244,223, 67, 36, 49,134,250,191,
+ 75,159, 63, 86, 41,107, 79, 73,105, 74,120,234,195, 73,174,158,153,242,128,115, 54, 60, 59,213,110,183,167,219,213, 54,114, 70,
+ 87,195,143,113,220,141,187,123, 13, 15,111, 97,108,112,150,238,210, 91,216, 65, 21,172, 79, 33,  5,202, 66,129, 20,177,  0, 10,
+208,111, 65,160,167, 51, 57, 25, 29,165,209,246,224, 33, 17, 17,128, 12,167, 92,192,183, 86,211, 91, 57, 33, 38, 70,141,138,245,
+  1,193,  6,149,175,199, 77,  5,139,167, 16,225,150, 81,237,159,176, 29,177,237,110,114,231, 55,130,190,200, 92,205,115,  1,181,
+116,190,146,  9, 16, 33,117,122,129, 20, 49, 26,213, 71,142,172,117,125, 66,230,162, 34, 50,  2,133,232,255,  0, 53, 87,163,233,
+150,180,178, 50,129, 36,144,213,111,144, 90,230,171, 85,170, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73,
+ 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,
+146,226, 72, 98,152,113,154, 53,145,126, 14,  3, 15,233,215, 93, 37,143,103,187, 15, 51,135,188,117,194,171, 93,226, 37, 37,173,
+163,244,158,105, 32,  7,172,100,163,  3,196,127, 45, 71, 77,171,163,237,221,  4, 84,168, 37, 21, 82,123, 83,187, 46,136,132,219,
+ 79, 20,111,179,250,118,210, 68,228, 31,  1, 35,177, 11, 95,141, 43,246,106, 95, 50, 59,211, 88,173, 83,180, 59, 74,219,182,237,
+ 20,178,169,190,101, 10,197, 71,150, 52, 31,200,159, 47,137,241,208, 55,110,230,195,  5, 52, 98,200,155, 80, 39,165,164,146, 90,
+ 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 37,164,146, 90, 73, 47,132,  3,177, 21,210, 73,113,232,196,119,224, 63,134,146, 75,
+181, 69, 95,194,  0,210, 73,125,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,
+146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210,
+ 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45,
+ 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,
+210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73, 45, 36,146,210, 73,120, 25,127,226, 89,203,111,247, 97,189, 43, 65,158,175,255,
+  0,118,141, 48,205, 76, 45, 18,186, 63,241, 42,162,169, 62,216,208,183,135,235,219,236,127,243,110,184, 38,229,114, 86,242,128,
+ 74,237,255,  0,226, 74,200, 35, 45,237,136,227, 40, 12,164,103,246,161, 52,223,254,173,211, 69,215,126, 11,178,180, 67,113, 92,
+143,248,148,157,185,123, 96, 86,189, 43,157,235,246,127,213,186,239,152,186, 45,111,162,125, 63,226, 65,206, 48,235,237,158,252,
+128, 42,115,189, 16,255,  0, 49, 35, 26, 70,218,143,206, 98,204,166,142,149,195,191,166,245,204,159,241, 38,137, 92, 36, 94,218,
+250,135,112,237,250,229, 23, 99, 79, 41, 56,234,159,224, 52,241, 50,206, 67, 38,249, 17, 50,104,201,251,147,135,254, 35,245,245,
+ 26, 31,108,249,197, 31, 30, 82, 28,239, 17,230, 52,233,250,113,241,212,126,126, 14, 42, 81, 31,177,114, 90, 84, 27, 91,241, 76,
+ 55,252, 73,248,177, 95,247,101, 82, 58,159,215,182,255,  0,253,110,165,140,223, 98,134,122,108,187, 83,177,255,  0,196,128,200,
+  9, 30,217,210,130,160,126,187,212,237,176,255,  0,171,180,201, 94, 98,204,166,181,160, 51,219,177,240, 79,175,252, 70,  9, 80,
+ 79,182,180, 36,128,  7,235,159, 31,254,206,212, 95,185,174,  8,200,116,151,139,153,177,125,163,241, 77, 79,255,  0, 17,201, 96,
+ 52,255,  0,118, 60,135,199,245,234,127,247,118,164,134,162, 50, 80,222,233, 83,182, 89,253,137,165,255,  0,137, 50, 18, 65,246,
+211,137,249,231,104, 63,143,233,218, 54, 49,140,133, 36, 59,232,132, 26,104,146,198, 68,119,126, 42,100, 95,241, 23, 18,154, 15,
+109,182,240, 63,174,108,127,255,  0, 31,162,191,106,115, 54,254,  8,235,125, 44, 79,235,246,126, 42,125,167,252, 66,241,243,152,
+197,199, 97, 53,176,106,243,102,203, 23,161,  4,236,  2,216,212,234,186,237,189, 84, 95, 37,177, 62,201, 55,188, 43, 27, 93, 14,
+204,152,202,246, 95,254, 89,255,  0,220,164, 15,223,210,186, 23,143,176, 21,208, 26,  6, 25,160, 65,  7,113,210,192,239,242,213,
+ 84,250,132,161, 44,179,129,137,227,252, 21,189,175,179,227,114, 46, 47,143,244,255,  0,222,158, 95,223,170, 50,  6, 61,131,196,
+158,160,230, 41,252, 63,192,239,166, 14,166, 95,193,237,252, 17,227,236, 48,206,117,  0,127, 71,253,234, 45,247,239,231, 33,101,
+ 27, 92,255,  0,187, 35, 53,138,142, 79, 60,121,186,241, 30, 28,151,244,237,181, 45,142,165,110,228,178,158, 83,199,224,171, 53,
+255,  0,102,221,210,140,217,243,195,243, 70, 56,118,140,212, 81, 97,255,  0,136,108, 83,198, 36,139,219,202,130, 42, 71,235, 94,
+ 96,126, 99,244,253, 88,121,135, 96, 65, 90,251,114, 23, 35,154, 55,191,219,255,  0,114,117, 63,226, 14,135,105,125,188,244,207,
+196,230,170, 63,143,208, 15,233,213,182,134,206,159, 81,203, 59,190, 84,247, 74, 52,238,150,111,250,132, 80,183,254,222,185,106,
+185,179, 71,120, 31,  7, 79,175,239,243,158,201,237,240,229, 64,119,204,144,  5,122, 84,254,159,243,214,171,255,  0,229,127,248,
+191,237,165,120,230,247, 32,127,227, 98, 98,226,111,253, 63,138,238,203,247,249,111,112,233,  5,223, 96,155, 43,135, 52, 83, 46,
+ 96, 24, 15,142,210,139, 42,125,204,  6,177, 29, 95, 75,172,233,196,153,218, 50,128,250,162, 92,123,149,174,131,160,216,212,  0,
+ 37,127,203,153,118,  6, 20, 39,112,150,127,250,132,123,212,220,223,239,158, 92, 93,183,212,218,123,127,245,161,  5,110, 19,245,
+131, 19,  0,124, 83,252,  3,115, 31, 26,107, 53,166,235, 62,108,154, 80,203,186,175,235,165, 21,198,191,236,153,233,237,231,133,
+209,113,188, 64, 71,221,204,115,113, 67,113,127,196, 90, 57, 24, 70,125,185,226,230,164,  3,155,248,127,246,126,175,161,112, 75,
+ 26, 44,236, 58, 32,145,203,230, 87,249,127,238, 83, 98,255,  0,136, 50,201, 85,255,  0,119,116,151,168, 67,155,  2,163,228, 77,
+128,223,229,215, 90, 14,153,160,211,234,206, 73,222,242,167,184,198,135,249,101,154,189,148, 42, 61, 79, 68,185,104,208,230, 28,
+  5,125, 79,233,181,151, 57, 15,248,130, 92,217,  3, 44, 62,218,125, 77,170,254, 41, 19, 57, 70, 81,241,101, 24,227,183,204, 19,
+162,186,151,219,186,173, 36,115,196,121,144,218, 69,  8,237,143,241, 85,231, 70, 31,197, 78,207,197, 70,181,255,  0,136,172, 87,
+ 72,197,125,185, 42,235, 79, 47,235, 85,173,122, 80,254,159,252,117,156,  2, 38,209,155,225,179,142,239,122,177,210,244,136, 95,
+112, 46, 16,127,151,254,239, 94,228, 67,143,253,246,197,144, 81,195,177, 56, 74,160,122,209,156,184,170, 49,173, 63,248, 16,170,
+237,248,134,180, 93, 63,163, 67, 87, 18,215, 50,202, 34,177, 49,245,125, 88, 29,255,  0, 26, 37,169,232,146,177, 32, 37, 42, 28,
+ 41,235,219,177, 43,127,223,100, 67, 57, 22, 31, 43,216,191, 65, 28,172,170,151,159,171,250,177,176, 59, 49, 81,244, 43, 94, 45,
+177, 21,249,234,179,168,104, 37,165, 51,139,230,144,142,104, 12, 51,239,203,141,125,234, 93, 47, 68,133,219,162, 19,185,144, 18,
+217,178,208,118,243, 10,113,216,138, 48,255,  0,187,200,111, 51,151, 56, 60,191,104,156,100,214,143,198,103, 25, 31, 95,200, 72,
+  2, 69, 95,165, 74,174,224,159,145,174,129,210, 67,247, 86, 60,203, 85,147, 56,142,253,236,119,142,197,113,173,251, 67,246,210,
+  0,221,120,159,171, 43,  7,216,252,212,127,227,130,215,237,253,201,130,120,210, 69,177, 28, 29, 67,171,  9,249,  2, 15, 66, 15,
+167,184,213, 65,215,126,159,111,224,170,103,208, 37, 18, 70,124, 63, 79,226,190,201,238, 58,161, 52,199,114,167,254, 30,159,255,
+  0, 15, 75,247,223,167,219,248, 37, 30,130, 79,215,254,223,197, 50, 61,207, 67,255,  0,246,223,255,  0,168,255,  0,222,244,223,
+249,  1,249,125,191,130,147,255,  0,231, 79,231,255,  0,111,253,203,133,247, 73, 25,248,126,151, 79,159,212,127,239,122,103,252,
+143,233,246,254,  9,199,237,194,  3,249,159,237,255,  0,185,119, 47,185,162, 42, 19,139,219,199,243,250,127,238,122,113,234, 13,
+244,251,127,  4,200,253,188,255,  0,249, 63,219,255,  0,114,168,191,247,161,172,255,  0, 14, 11,213,248,127,139,227, 95,253,196,
+232,107,189, 88,195,232,126,255,  0,193, 88,217,251, 79,204,198,235,127, 71,253,202, 21,191,191, 34,225,138, 46,  0,  7,240, 31,
+ 91, 90,255,  0,238, 26, 24,117,215,250, 63,221,255,  0,106, 38,127,101,229, 15,231,127,179,254,245,103,  7,188, 95, 80,188,147,
+  8,193, 70,236, 77,197, 40,  0,173,127,186,212,241,235, 15,244,123,127,  4, 20,254,213,203,141,223,246,255,  0,220,167,193,238,
+135,172, 20,156, 87, 16,221, 63,196, 87,229,255,  0,123,212,227,169,191,211,237,252, 16,147,251,119, 47,254, 79,246,255,  0,220,
+173, 97,239,127, 86,159,224,105, 95,252, 53,127,252, 77, 63,254, 67,244,251,127,  4,  4,186, 70, 95,175,217,248,169,240,247, 39,
+170, 42, 45,169,255,  0,235, 63,252,221, 47,249, 31,211,237,252, 16,146,208,101,250,189,159,138,155, 30, 87,157, 63, 38,149,255,
+  0,107,254,109, 33,212, 31,233,246,254,  8,105,105,155,106, 87, 89, 41, 45,237, 39,185,142, 15, 85,224,  5,189, 62,124,106,  6,
+253,120,159,234,211,142,188,128,121,112,227,248, 37,111, 78, 37, 49, 18, 89,248, 33, 25,253,203,146, 30,152,158, 71,255,  0,140,
+208,127,251,173, 87,221,235,121, 15,131,253,223,130,208, 71,237,240,127,242,127,183,254,229, 75,121,239, 76,150, 82,  5,147,  0,
+ 74,237,200,139,189,192, 52,222,158,133, 15, 95,142,161, 31,112,127,240,255,  0,221,248, 38, 75,160,144, 60,127,237,252, 85, 21,
+199,238, 54, 91,112, 79,249, 91,157,  5, 79, 27,254,149,232, 15,248,109,180,125,174,170, 39,244,251,127,  5, 87,123, 64,109,237,
+246, 42,251,143,221, 11,192,229, 63,202,138,244,167,153,114, 85, 93,197,122,253, 46,143, 26,167,216,171,165,  6, 95, 15,238,138,
+ 69,254,247,180,196,100,169,101, 13,145, 36,237,224, 64,180, 36, 87,195,109, 56,106, 41,130,140,209,125,179,253,208, 61,228,230,
+ 31,242,188, 54,227,131,200, 37,184,202,250, 81,158, 10, 91,143, 35,105, 78, 77, 74, 40,241, 59,105,126,227,130,224, 41,135,253,
+212,186, 30, 63,229, 16, 90,165, 72, 25, 47, 17,243,250, 77, 33,169, 27,151,100,  8, 95, 23,247, 86,236,241,160,237, 14,  5,168,
+ 29,164,201,113, 85, 36,159, 17,104, 73,  0, 10,244,211,252,238,  9,153,151, 31,250,214,200,  9, 15,217,220, 72,  0,129,250,137,
+241, 62, 63,224,246,219,125, 51,247,  1,240, 93,114,185, 63,187,  9,  1,161,236,241,243,255,  0,172,255,  0,249,166,186, 47,190,
+196,220,201, 73,251,175,146, 52, 18,127,147,191, 44,129, 70, 57, 42, 84,248,255,  0,240, 79, 13,116, 95,  4,178,230,116,191,245,
+174,186, 16,173,195,118, 75, 45,188,132,172, 83, 28,151,145,153,122,138,253, 38,196,124, 53, 54,101,207, 51,130,248, 63,118, 50,
+149, 15,254, 75,110,  4,241, 13,250,137,167, 46,180,175,210, 82,180,211,162, 92,174, 27,164,  7,101,216,253,215,177,224,163,179,
+255,  0, 49,232,  2,254,165, 77,201,165, 43,244,186,115, 40,198,161,246, 34,159,247,249, 34,246,238, 55, 59, 47,110,  8,229,200,
+ 95, 28,119,209,155,224, 74, 56,147,211,168, 97,111,230,248,211,142,173, 45,232, 51, 90, 51,204,213,141, 27,243, 75, 46, 46,175,
+ 52,154, 25,106, 53, 22,108,196,214,244, 76,191,148, 12,196,246,176,139,236, 68,173,238,146,255,  0,155, 37,237,100,196,179, 24,
+ 32, 91,153,175,125, 98, 35, 84,101, 36,  2, 61, 35,189, 86,157,116, 80,233, 31,217, 23, 51,227,177,191, 20, 63,149, 31,219,121,
+198, 88,200,129, 29,237,150,190,211,234, 80,237,125,223, 23,152,220,158, 70, 12, 55, 37,178,186, 54,118,209, 11,160, 90,225,197,
+ 20, 31,238,168,181, 99,199,199, 81, 71,166, 18,199, 53, 11,236,220, 91,126,247, 77,141,177, 35,108,  2,115, 76, 60,129, 30, 16,
+231,215,202, 12,142, 10, 31,126,251,218,123, 22, 75, 56, 36,193,173,229,205,202,150,146, 33,121,233, 24,202,128, 78,226,  7,228,
+ 42,105, 93,180, 13,221, 56,128,  5,221,248, 32,101,120, 57,100, 21, 47,238,174,104, 36,104,229,236,210,140,164,169, 13,146,161,
+  4,124,190,147, 67,101, 81,254,227,130,143,255,  0,173,187,  2, 65,236,218, 16,105,190, 79,255,  0,154,105,101, 72, 95,224,190,
+255,  0,235,108,127,255,  0,143,222,149,255,  0,233, 61,186, 86,159,248,167, 93, 63,203,226,185,251,142, 11,242,145, 24,113,173,
+119, 59, 87,224, 52, 17, 10,227, 57,245,169, 51, 40,111, 81, 80,114, 68,165, 26,187,  1, 79,244,159, 13, 69, 29,138, 73,177,229,
+221,181,124,163,188,104,174,251, 71,229, 84, 98, 75, 40, 59,236, 62, 26,235,128, 83,  0, 57, 64, 59, 18, 12, 94,129, 78,203,211,
+239,235,164, 67, 39,198,170, 65, 30,156,110,180, 60,136, 42,228, 31, 37, 42, 15,134,162,196,162,118,109, 11,231,213, 50,148,226,
+ 56, 85,120,200, 84,126, 58,125,189,  9,174,244,211,196,  1,199,185, 71,230,100,102, 29,201,241, 53,177, 68,149,165,115, 59, 18,
+179, 66, 22,138,192, 10,131,202,187,239,181, 41,168,178, 73,200, 96,219, 10, 48,220,182,194, 89,139,224, 64, 20,111,226,154,138,
+  8,229,105, 11, 74,145,133, 82,233,202,180,102,248,127,217,212,134,225,  0, 81,211, 69,129, 41, 73,228,212,245,171, 56, 34,138,
+ 59, 56,230, 36, 60, 82, 85, 79, 22,171,164,128,  0, 67, 10, 13,183,208,114,145,148,200,244,101,123,167,132, 68, 98,118, 84, 30,
+  9,191, 81,213, 74,183,226,233,241, 52,212,145,128,145, 77,185,120,194,  1,252, 88, 54,244,242, 15,204, 18,204,156,144, 26,201,
+ 21,105, 80, 69, 60, 53, 19,209,129, 83,243, 74, 68,204, 56, 77,205,  4, 82,  1,197, 89,  9,165, 55,228,  8,241,248,106, 72, 18,
+159,114,200,155, 80,135,247, 38,146,216, 69,201,144,178,114,160, 66,134,170,126,209,162,172,235,174,218,164,101, 77,161, 11, 29,
+ 29,179,152,135,220, 27,  7, 79,135,185, 68, 37, 10,184, 96,105, 32, 28, 72,111,133, 27, 86,150,186,172, 75,137, 71, 44,142,  6,
+ 63, 37, 52,172, 94,136,120,145, 33,234,247,166, 34, 92,178, 86,112,140,  5,  8,224,  8, 38,191, 26,120,104,232,157,104,183,148,
+140,240, 59, 36,  1, 29,219,187,149,108, 35,120, 75,204,  0,196,240, 53, 86,182,217,236,133,185, 38,230, 39,224, 14,222,178,146,
+  8,240,220,106,166,238,131, 78, 98, 51,219,149,163,190, 47,241, 90, 93, 55, 93,213,218, 60,195, 52, 65,250,199,196, 34,108, 55,
+125,216,218,220, 52,146, 66,190,156,138,201, 34,254, 37,224,219,108,172, 65,168,214,127, 83,246,241,191, 16, 45, 92,  4,141,135,
+148,250,214,155, 79,247, 78,156,188,110,  2, 34,123,199,207,216, 83, 55,248,252,  6, 82, 86,184,192, 94, 37,188,252, 75,250, 77,
+ 88,213,154,159,202,  8,  4, 18,126,237, 65,  8,235,116,160,121,240,147,111,252,119, 46, 92,211,104,181,124,218, 75,128, 79,242,
+224, 59,134, 35,133, 59, 85, 41,154,123,121, 90,222,254, 35, 28,209,117, 44, 58,252,245,113,107, 85, 25,  0,252,209, 42,168,220,
+156, 36, 99,112, 52,162,156,138, 83, 24, 99, 19,242, 86, 53,226,  9, 41, 79,178,186,191,209,245, 91,250, 71, 22,102, 12,127, 36,
+131,199,187,104,237, 12,133,158,154,221,193,155,105,250,162,166,139,196, 96,137, 32,167, 33,230,  6,140,140,126, 68,237,255,  0,
+178,215,160,104,190,228,210,234,136,133,239,236, 22,194, 94,  3,253, 95, 54,237, 85, 55,180,151, 44, 70,131,204,  7, 19, 17, 95,
+ 82,181,199,221,205,100, 22, 52, 60,237,148,212, 91,200,121, 70, 77, 63,148, 15,159,246,117, 15, 84,251, 71, 69,172,  6, 64,121,
+ 55, 36, 60,112,248,236, 35,218,138,208,245, 43,186,114, 50,243,196,125, 59, 95,224,162,102,240, 86, 87,239, 38, 67, 24,171,109,
+126,202, 92,218, 56, 10,142, 71, 94, 60,118,  7,237,216,235,206,117, 63,107,245, 62,159, 14,104,249,214,177,205, 10,200, 13,242,
+143,137,187, 30,136,235,159,183,213,204,202,207, 45,209,140,112,115,223, 71,236,199,114, 19,138,242,107, 89, 94,215, 34,142,147,
+ 70,220, 95,154,209,151,151,129,  7,127,191, 66,217,187, 25, 68,125, 81, 59,149, 61,141,116,161, 35, 11,193,164, 11, 97,236,252,
+ 81,  5,142, 78, 80,170, 36, 62,164, 31,202,228,  6, 96,  1,174,255,  0, 17,226,117,187,233,223,113, 94,179,  1, 11,207,114,222,
+201,125, 80,109,227,235, 27, 43, 85, 36,244, 16,156,188,203, 96,  3,185,233, 47, 86,  7,107,133, 46,124, 54, 63, 37, 24,187,182,
+113,  5,243, 26,137, 97, 80,177,242, 59,209,214,187,214,180,240,251,245,166,191,209,244,122,241,251,157, 44,132,101, 47,168, 86,
+  7,120,148,113, 28,120,170,216,194, 80, 34, 50,120,200,127,171,183,113, 31,193, 70, 70,200, 98,238,145,174, 80,195,113, 27, 18,
+147, 15, 52,111,247,211,112, 71,242,157, 97,117,122, 93, 79, 78,185, 27,128,229, 47, 73, 10,191,111,233,225,181,104, 52,186,152,
+234, 65,183,122, 53, 27,240, 60, 71,111,172, 35,220,124,248,158,232,197, 54, 58,242, 16, 38,  6,172, 16,129, 36, 77,177, 89, 33,
+ 61,124, 77, 79,220,117,172,211,234,108,117, 75,  6, 23, 35,150,113,241, 13,163,242,202, 28, 56,227,177, 86,235, 52,167, 79,113,
+221,224,124, 61,167, 24,158, 59,134,  4, 62,213,113,113, 29,250, 98,160,204,196,121,102,187,112, 42, 79,112,128,132,186,198, 19,
+233,197, 47, 26,154,152,185,  8,166, 83,252,172,167,160,174,188,231, 95,163,187,210,117,113,144,164, 46, 23, 13, 72,198,123, 99,
+253, 66,173,234,192,173,207, 74,214,199, 89, 96,218,188,210, 49, 45,253, 63,155,187,110,234,146,107, 21,184,251, 85,238, 26, 95,
+ 88,195,143,158,122,218,200,212,179,118, 35,148, 82,108, 90,  6, 36,239,230,175, 31,245, 29,115,171,104, 99,122,207,239, 44, 10,
+125,113,196,130,245, 62,188,123, 93, 85,206,209, 19, 54,231,226,142,223,204, 54,123, 61,196, 98, 43,174, 11,151,126, 67,241, 22,
+218,135,227,241,214, 48,200,148, 57,182,  2,135,119, 43,170, 86,148,122,212, 87,196,  3,191,221,168,103, 38,  8,155, 81,  4,168,
+118,247,197,100, 36,173,107,183,200, 87,161,219, 80, 70,225, 37, 19, 59, 46, 20,167,200, 25, 23,133, 64, 61, 41,227,169, 77,196,
+ 56,176,213, 85,115, 68,210,164,156,250,117,  4,245,208,230,168,232, 75, 41, 12,134,166, 65,107,114, 86,159,143,205, 25,175,225,
+ 62, 59,120,234,178, 80,  2, 74,238, 39, 60, 93, 93, 99,174,101,101,227,207,103,160, 36,158,181,223,122,157, 23,104,150, 85,151,
+237,129, 86,193, 21, 99,157, 74,170,147, 83, 83, 79,176, 26,109,171,  8, 21, 69,124, 85, 21, 88, 49, 42, 13,122,116,209, 42,134,
+248, 68,150,117, 32,105,196, 42, 91,170,230,220, 80,111,165,  1, 85, 91, 53,101, 26,  7,  4, 54,235, 34,241, 97,163,114,  2, 65,
+252,193,144, 82, 45,220,179, 44,182, 44, 91,220,220, 64,232,120, 43, 50,130, 15, 22,235,177,  6,132, 86,159, 17,170, 75,177, 16,
+ 47, 32,224, 81,109,244,218,156,241,  4, 20, 17,153,199,205, 10, 73, 60,112,189,229,172,127,222, 60, 41,202,120,193,218,178, 66,
+181,102,  3,251, 81,147,243,  3, 85,211,209,219,191,254, 25, 52,191, 41, 87,182,132, 46,242,146, 33, 35,131,158, 83,217, 44,  7,
+100,187,138,  6,190,138, 27,171,117,150,210, 69,154,214, 74,183,171, 27, 18,173,242, 52, 52,216,143,183,227,167,216, 55, 44,145,
+ 25,196,196,251,251, 55,172,255,  0, 80,209,206,204,204,103, 19, 25,110,218,134,174,172,195, 30, 33,119, 31,112,166,180, 54,174,
+ 85,214, 86,253,166, 76, 75, 98, 56, 69, 57, 53, 18,130,148, 39,147,134,142,130,135,109,133, 41,199,229,162,132,208, 50,134,228,
+217,181, 80,160,189,184, 48,134, 80, 88,  2,164,241, 90,113,228,107, 74,141,206,221,119,212,152,132, 44,168,186,250, 64,241,161,
+ 30, 68,140,241, 45,183,149, 93,182, 32,126, 38,241,174,218,128,207, 98,148, 49,  9,191,160, 70,168,165, 84,249, 86,139,215,238,
+ 34,187,235,166, 69,116,196,  5,246,203,  5,147,204,100,150,207, 25, 19,221,223,186, 59,  8,213, 90, 73, 10,198,133,142,192, 19,
+176, 30, 58,146, 50, 57, 91,138,128,176,147, 15, 71, 80,222, 22,154,146,206, 57,220, 22, 44,243, 57, 37,218,180,160,106,237,229,
+167,195, 73,210,202, 29, 72,201,137, 46,238,166,150,254, 75,137,110, 37,144, 59,188,193, 67,158, 98,174, 88,116, 12,118,160, 27,
+124,117,211, 32,227,120, 76, 49,114,170,154,205,  1,101,134,166, 21, 38,133,186,241, 39,202, 72, 27, 86,159, 13, 21,230,238, 92,
+202, 20,161, 21,239,209,152,139,202,108,185,161, 49,242,111, 76, 58,171,  4, 36,116,228, 22,160,124,180,225,123,122,104,182,201,
+180,181,149, 12,176,159,192,244, 19, 41,  0,242,224,106,  5,104,118,168,240, 58, 58,220,176, 39, 21, 25,180,  0,112,182, 62,215,
+199, 71,145,192,118,  5,141,194,164,139, 46,106,227,138,190,198,150,222,164,219, 10,111,180,122,213,232,224,250, 98, 65,108,128,
+ 72,250,228, 61,236,182,118, 33,229, 92, 23, 93,141,173, 25,144,237,185,253,177,236,186,137,251,117,165, 75,239,113, 59,207, 35,
+ 51,164,  9,113, 37,157,146, 72,220,145,109,108,151,211, 37,124,  7, 38, 87,111,191, 86,154,152, 24,249, 54,162,  1, 36, 70, 84,
+198,161,219,214, 86,124, 76,106,237, 89,211, 91,137,140,159, 46, 46, 73,148,155, 55, 13,253,129,213,159,103,225,110, 18,207, 31,
+ 13,210,114,133, 23,245, 59,161,196,  5, 89, 37, 60,163, 70,166,213,  7,255,  0,107,161,181, 50,132,  1,140,118,114,142,236, 79,
+199,189,119, 91,118, 19,212, 92,185,110,144, 13,  8,127, 44, 70, 92,221,224,127,185,101,254,227,202,153, 78,237,105,110,145,218,
+206,217, 66, 50,161,  9, 33,  7,207,177, 96, 64,234, 60, 53,158,214, 75,157,135,210, 25, 84, 69,136, 64, 67, 11, 61,244,241,218,
+219, 68,210,220, 74, 66,197, 26,144,  9, 36,120, 19, 77,246,213, 99, 20,136, 77, 90, 70,241,207,110,  2, 33,244, 28,186,199, 56,
+ 83, 17,145,133, 57, 63, 48,194,155, 45, 69, 41,182,154,154,202, 63,169,111,250,159,234, 63, 66,188, 12,158,183,209,215,242,195,
+143,251, 90,113,229,230,227,198,148,242,244,211,243,  7, 77,218,188, 59,108,226, 41, 57,208, 61, 13, 56,183, 66, 52, 36,195,134,
+ 87,240, 44,118, 46,216,108, 40, 40, 84,236, 64,174,154, 18,152, 59, 23,126,115,249,164,212,131,196,182,251,146, 42,117,202, 96,
+156,242,169,198,172,185,231, 32,126, 98,136, 73,251,134,147,  6,100,211,114, 64,186,112, 93, 72, 19,210, 87,  7,205,177,160,  3,
+109,182,211,114,  7,117, 36,111, 75,194,233,166,174,225,186,252,117, 32, 81, 77,201,109,169,232, 34,245, 28, 32, 44,236,127,178,
+ 43,191,194,154,142,114, 96,232,136, 64, 18,219, 84,182, 17, 58,250,101,217,156,212, 70,130,137,230,248,145,168,162, 76, 75,133,
+104,209,152,202, 92,157,130,130,188, 84,188,122, 90,196,179, 71, 51, 24,231,113, 72,200,165,  1, 30,  7,226,  8, 62, 31, 45, 65,
+122, 82,147, 17,128, 69,233,140, 45,  3,153,193, 78,172, 69,129,156, 74,165,193,  1, 86,156, 65, 93,247, 62,  2,148,215,  5,198,
+229, 99, 84,117,168, 25, 28,249,170, 48,236, 78, 72,178,150,114,164, 48,112, 63,  5,  8, 42,105,214,154,100, 12,104,232,171,242,
+153,  5,170,101,185, 60, 34,191,188,141,226,142, 26,197,  1,229, 40, 69, 85,226, 64,161,169, 20,248,107,132,218,133, 94,167,  5,
+  9, 23,102, 88,143, 13, 79, 43, 49,244,238, 95, 94,217, 86,216, 72,210,170,202,104,171, 13,  9,228, 41, 82,192,138,233,145,155,
+205,154,136,198, 62, 91,230,173,  7,111, 21,192,128,220, 30, 11, 84,168, 28, 88,142,167,236,174,165,128,175, 20,251,128,154,108,
+165,127,  5, 41,236,174,109, 34, 75,137, 96, 47, 11,213, 22,230,220,212,242, 30, 12,131,113,162,244,253, 78, 80,145, 16,145,132,
+135,171,219, 68, 68,180,205, 17, 41,195, 52,118, 78, 63, 17,138,149,106,210, 52,117,130, 81, 34,159,  3,253,125, 63,209,173, 30,
+159,238, 59,214,233, 56, 70, 96,109, 28,167,228, 79,114, 34,222,128, 78, 47,110,120,239,175,226,186,154, 43, 73,129, 23, 54,170,
+ 83,167,168, 66,154,124, 79, 32, 42, 53,125,107,170,244,205, 64,231,229,145,252,241,111, 84,162,255,  0,  4, 30,163, 67, 49,226,
+182, 37, 29,225,143,226,163,156, 54, 58, 74, 53,172,174,132,244,226,220,215,238,229,254,189, 93, 71,164, 89,156,  4,237,203, 44,
+119,130, 37, 19,217,138,168,150,150,201, 45, 18, 95,211,122,230,124,126, 79,210,244,227,149,110, 16,108,177, 74,212,  2,191,216,
+ 39,167,241,213, 94,191,237,120,  3,202, 34,228,127, 41,199,210,133, 62, 51,212,152,150,150,113,186, 71,220, 79,205, 85, 52, 57,
+ 28, 99,134,224,235, 25,223,113, 85, 53,248,145, 81,170,125, 95, 66,191,167,151, 33, 44,112, 36,124, 85,101,187,247,244,197,200,
+ 45,185, 76,180,200,193, 56,227, 33, 49,200, 60,172,  9,248,159,142,218,207, 92, 23, 32,241,148, 78,226,118, 45, 46,143, 95,102,
+240,  4,156,167,115,213, 88,198,206,161, 68, 14, 22,155,240, 63,132,128,106,105,240,175,196,106,211,166,245, 77, 86,134, 95,217,
+159, 47,228,149, 99,234,217,220,139,212,104,173, 95, 31,150, 91,198, 42,202, 60,170, 16, 86,230, 49, 17,110, 68, 51, 30, 74,104,
+ 40,187,211,168,223,109,122,111, 74,251,151, 75,170, 45, 63,236,222,106,103,172,  9,109,147, 56,118, 75,214, 85, 29,237, 53,203,
+  0, 70, 67, 52, 31, 17,143,126,215,236, 92,228,113, 54,153, 54,231,114,164,206,  6,211,163, 15, 85,148,116, 59,245, 31,110,180,
+ 58,223,182,116, 58,200,243,193,166,  3,188, 88, 25, 62,215,218,219,202,171,121, 93,108,199, 48,118,  7,104,  3, 97,199,219, 85,
+ 88,248, 76,174, 44,122,150,181,188,181, 62, 98,136, 41, 40, 83,189, 74, 26,236, 62, 90,243,125,127,217,250,253, 23, 53,131,230,
+219,197,135,141,184,199,217,199,114,177,211,223,149,138,120,135,207,228,149,150, 69, 75,  9,109, 36,  1,247, 12,167,196,143,  6,
+ 83,172,230,135, 95,127, 77,127, 53,142, 73,125, 81, 56, 73,191, 52,127,129, 10,212,203, 79,171,183,142,108, 64, 59, 65,247,132,
+ 81,143,191,180,200,161,181,158,138,210,249, 90,  2, 65, 71,  2,135,202, 91,169,168,251,117,233,122, 30,173,166,234, 79,110,228,
+ 64,184,127,241,203,  9,113,129,250,187,234, 21, 46,166,197,235,  2, 36, 72,152,143,168,109,225, 47, 74,240, 95,101,194,100, 49,
+115, 27,236, 41,145,141,185, 50,122, 85,172,177,134,216,133, 36, 81,193,173, 56,157,233,172,247, 80,251,122,238,150, 94,118,153,
+222,221,127, 84,123, 54, 75,177, 88,232,250,140, 77,177, 11,167, 48,151,183,211,208,163,174,206,238, 75,108,163, 44,140, 35, 75,
+133, 73, 35,184,199, 16, 56, 60, 83, 47,  9, 40, 27,249, 29, 77,  8,240,241,240,211,236,222,177,214,116,210,179,120, 24,201,171,
+ 29,199,101,200,158,222,248,154, 26, 20,233, 70,125, 62,112,185,111,154, 32,210, 71,118,216, 72,123, 65,218,219,  8, 80,177,215,
+115,246,118,112,218, 92,177,108, 21,211,112, 73,150,165, 65, 12,120,181,  9,175, 52,252, 39,251, 75,190,168,197,187,157, 43, 81,
+150,232,205,102, 96,  3, 38,196,143,168,238,220,119,226,180, 66,253,190,161,108,155,116,187, 26,128,245,109,145,247, 26,237,239,
+ 94,163,236,158,229,253, 90,219,232, 46,218,185, 59,101,217,152,129,235, 70,  5, 67, 46,231,112, 58,252,122,235, 41,247, 15, 71,
+253,149,207, 54,216,254,212,205, 63, 73,221,241, 31,130,  6,221,225,116, 19,180, 99,223,181,189, 24,246,133,127,112,165,144, 10,
+121,151,198,164,215, 88,217,163, 96, 88,170,217,137,134,135,193,134,205, 74, 86,159, 45, 13,225, 70,195,153,115, 21,217,117, 12,
+195,161,219,109, 40,204,148,233, 90,106, 41,137,112,146,161,  7,115,226, 53, 33,144, 40, 99,  2, 10, 19,191,152,155,195, 29,127,
+  9,168,175, 77, 85, 92, 60,204,175,236,195,145,212,203, 39,  0, 47, 29,168, 69,126,221, 79,  9,236, 67,221,  8,203, 27, 33,110,
+ 35,144,161, 62, 27,208,157,171,171, 11,107, 55,168,139, 34,236,105, 29,  7, 65,163,128, 89,253, 66, 40,177,169,  3,229,167, 42,
+ 43,202,246, 21, 52,  7, 78,132, 92,170,169,149, 97,  7,225,  7,225,171, 24,142, 81,193,  9, 52, 57,220,246, 95,226, 76,128,121,
+101, 80,199,237, 93,181, 95,172,181,204,120,213, 92,244,235,220,141,185,  1,229,109, 10,159, 84, 47,  7,  6,170, 87, 98, 10,248,
+252,117,144,213,218, 56,135, 29,152,173, 86,154,235,209,  2,231, 48,118,215,143, 38, 72, 72,214, 25, 86, 60,126,178,213, 65,121,
+ 77, 63,248, 68, 76, 61, 57,212,116,171, 82, 79,131,106,125, 23, 87,185, 31,237,221,  2,228,119, 31, 76,119, 26, 30, 42,235,247,
+158, 93,175, 42,236,124,219, 59, 99, 47,164,126,147,226,129,254, 87, 31,165,  4,229,146,227, 18, 35,155, 61, 10, 67, 96,228, 42,
+231,109, 11, 73,141, 44,237, 69,245,133, 12,150,164,244,164,160,173,122, 62,181,118,173, 89,187, 16,108,200, 67,132,176, 61,146,
+217,253,109,218, 85, 69,254,135,111, 82, 12,244, 51,206,113, 54,230,194, 96, 51,242,156, 38,195,176,129,143, 53, 23, 43,104, 36,
+  3,139,250,145, 48, 47, 12,129,129,137,131, 10,212, 26,208,130,  7, 81,174,220, 23, 45, 28,151, 35,150, 91,143,167,181, 97,111,
+216,157,185,101,156, 76,100, 28, 16, 67, 16,155, 54,204,224,115,171, 34,249, 81, 11,114,160,  3,109,171,181, 43,167,103, 65, 27,
+107,153, 45,199,164,170, 23,126,165,216, 81,171, 74, 83,169,216, 83, 81, 25,115, 22, 77,183,109,118,150,228,220, 43, 91,167,  3,
+183,165, 24, 98, 10,181,  6,225,188,187,131,184, 58,112,154,156,193,194,230,215, 36,246,151,183,118,240,220,201,109,125,244, 17,
+181,179,192,207, 19,255,  0,227, 46,210,183, 52,165, 79, 13,154,164,213,126, 67, 86,250, 50,  6,138,254, 90,200, 74, 15,217, 92,
+ 56,215, 14,195,129, 90,221,102,150,221,207,183,161,118,213,188,173,127,251,132, 86,177,134, 76,219,242,203,110,200,202, 68, 40,
+246,214,182,207, 60, 81, 78,197, 98,118,  9,201, 23,153,  4,154,  0,  5, 71, 82,105,160,116,241,243,174,194, 24,102,144, 30,178,
+179, 26, 13, 15,238,117, 54,236,225,157,240,216,  4,101, 35,236,138,234,226,212, 64, 30, 25, 96,113,231, 33,222, 64, 67,176, 82,
+120, 16, 95,112,  8,240,  2,135, 67,220,140,179, 49,250, 73, 30,212, 12, 98, 49, 10, 17,183,105,152,115,114,194,129,122,239, 69,
+ 20, 31,109, 52, 64,160, 77,200,157,146,204,112, 30,145,127, 76,208, 30, 85,  3,159,195,109,142,185,  2,229,148,114, 98,164, 91,
+226,163,164, 38, 70, 85,138, 86,100, 70, 44, 75, 33, 20,171,178,173, 77,  5,118,241, 58,180,181, 90,168,159, 45, 86,205,219,144,
+ 45,150, 39,183, 47,238,192,104,236,224,201,221,205, 33,161,114,238,  2, 44,138, 77, 60, 57,124,245,182,233,178, 51,210,152,140,
+103,144,127,184,201,189,202,211,169, 95, 49,104,  3, 89, 89,179, 15, 96,145,126,240, 21,182, 90,210,194,215,183, 48,248, 91,233,
+ 69,188,121,153,  5,221,196, 85, 38, 73,104, 13,211,196, 64, 38,164,210,141, 79,229,174,172, 44, 93,156,175,220,187, 16,254, 88,
+202, 56,125, 32,252,187,149, 79,157,114,205,209,229,158, 96,241,  7,185,137, 30,241,185, 19, 91,195,115,131,194, 24,238,232,114,
+121, 14, 43, 53, 54,  3,144,160, 81,242, 69,213, 68,165, 27,215, 92,120, 99,233,237, 81,220, 17,128, 34, 56,  0,200, 35, 25,218,
+ 86,185,254,229,189,206, 95, 40,253, 34,218, 82, 65,110,146, 75, 16, 30, 95,176, 82,167, 64,152,255,  0,116,201, 56, 91, 17,141,
+113, 64,221,223,137,138,246,235, 35,155, 69,139,233,231,186, 54,209,198,174,171, 32,120,212,114, 99, 16,  4,149,166,193,182,223,
+ 65,223, 99, 34,219, 40,163, 98,206,131,159, 11,113, 48,  9, 20,108,  9, 70,146, 58,255,  0, 58,165,121,  5,167, 83, 80,116, 33,
+ 77,103, 85,198, 40, 13,178,175,164,  4,225,139,151,166,229, 73, 13, 94, 92,169,181, 56,241,165, 41,191, 93,113,115, 34,240, 84,
+ 48,179, 81,182, 65, 83,231, 99, 78,154, 26, 82,101,119,110,209, 35,103,122,236,142, 77,224,107,243,215, 48, 78,203,205,191,177,
+ 62,109,103, 22,226, 74, 58,194,199,200,140,107,200,129,185,  0,124, 53, 30,120,230,109,169, 27, 82,202,107, 77,201,183,140, 34,
+  9,  2,150,  4, 80,242,218,132,244, 59,125,154,124, 75,150, 76,185,  0,  0, 33, 54,  1, 66, 55,168, 27,255,  0, 29, 61,221, 69,
+ 24,157,235,160,170,  5, 75,121,250,113,165, 69, 15,141,116,220,104,136,133,176,196,189, 85,133,191, 36, 18,173,180,100,137, 21,
+106, 77,  8,  4, 80,146, 14,213,223,195, 67, 77,169,152,224,143,182, 41,203,181, 76,181,130, 89,145, 96, 88, 12,142,172,100,156,
+ 10, 43, 44, 74,181,169,241,160, 59,237,168, 46, 76,  2, 75,176,217,218,172,109, 91,148,128,163,182, 59,219,223,234, 80,205,232,
+132,201,110, 16,  6,  5,135, 39, 64, 72, 39,109,137,220,104,168, 88,206, 65,116, 55,238, 99, 23,143,188,111, 82, 37,200,122,164,
+152,162,134, 36,112,170, 99,141,118,242,  2,  1,220,147,227,190,157,251, 25, 71, 18, 79,127,201, 88, 29, 92,101,225,102, 52,245,
+ 36,147, 51, 40, 78, 84,  2,191, 46,186,158, 58, 88,154,148,248,220,163,  5, 97,107,149,184,182,133,225,129,184,130,164,114, 21,
+ 87,161,234,181, 29, 84,252, 14,163,159, 75,181,112,190, 99, 77,140,139,134,168,198, 36, 13,222,157,201,216,114, 56,248,167,105,
+100,180, 50, 32,161,142, 54,122,173,118,173,106, 43,241,165, 60,117,  4,250,108,200,202, 46,  1,197,148,163, 81,107, 19, 19, 76,
+ 48,246,169,182,217, 76, 71, 57,227,116,149,109,228, 80, 64,217,154, 54, 27,130, 60,219,255,  0,103,236, 58, 18, 93, 55, 80,192,
+131, 23, 28, 89,213,157,157,110,148,188,101, 18,222,237,219,118,171, 59,108,174, 38, 72,166, 87,115,111, 34,128, 96,  8,172,188,
+143, 74, 29,207,135,141,116, 29,206,151,171, 18, 28,185,159, 26,130,175,180,221, 75, 77, 82,103,149,248,124,215,198, 78,222,185,
+225, 57,151,210,144,211,155, 91, 55,  6,216,124, 27, 99,191,199, 81,139, 90,203,110,209, 45,196,124,145, 82,142,138,232,205, 25,
+136,203,124, 75,122,198,222, 46,160,200,183, 81, 41,116,227,119,  8, 52, 28, 29,125,111,189, 70,142,141,211,  9, 52,131, 30,194,
+222,212, 41,243, 64,167,247, 64,252,164,102,249, 40,146, 79, 19, 58,141,214, 95,236,113,225, 32,254, 52, 58,178,210,223,149,162,
+ 39,106,114,129,218, 98,125, 74,179, 81, 59,119, 14, 89,  0, 78,226, 26, 94,157,137,196,158,225,  2,209,171, 93,248,201,185,160,
+249,143,245,107, 93,166,251,159, 93,  0, 60,209, 27,163,253, 50, 61,241,248,133, 95, 45, 20,126,130, 98,120,213, 74, 75,212, 80,
+ 12,168,201,224, 88, 81,151,127, 26,141,107, 52, 63,115,232,174,242,220, 50,180, 79,230,240,190,236,209, 67,220,211,221,182, 29,
+159,178,189,235,235, 89,226,242, 42, 76,145, 71, 51,236, 57, 15, 41,251,106,180, 59,124,245,119, 29, 61,173, 85,179, 48, 35,116,
+ 22, 14, 42, 49,224,131,185, 99, 79,120,180,133,127,210,125,107,147,135, 84, 31,225, 39,116,  2,166,146,249,192, 95,151,142,129,
+213,253,167,165,212,102,242,164,108,202, 56,156, 98,120,101, 78,183, 43,182, 91, 44,140,163,176, 29,131,183, 18,154,107,123,232,
+195,122,145,153,146,180,  6, 47, 50,159,184,239,172,158,163,237,173,125,184,177,183,230,219,137,110, 74,251, 49, 86, 49,214, 84,
+187,191,177,125,182,186,113,193, 97,170,167,226,244,100,217, 69,124,  5,119, 31,213,166,244,222,179,212, 58,112,201, 25,102,137,
+ 53,181,113,219,176, 31, 20,123,155,189, 41, 89,177,126, 66, 64,101, 59,253, 62, 42,242,211, 49,110,211, 71, 29,234,148,113, 65,
+196,154,  6, 84,  2,160, 63, 79,232,215,175,244,143,186,116, 90,249,  1, 39,179,119, 12,179, 34,189,146,194, 94,201, 42,171,246,
+175, 88,  6, 50,  0,131,245,  7,247, 47,153,140, 69,189,194,125,124,158, 75,210,224,153,226,  1, 72, 90,  6,  5,133,104, 70,255,
+  0,204,186, 63,168,253,183,164,215,131,114,240,105,187,198, 81, 96, 99, 92,  8,194, 95,212,235, 57,173,213,139, 19,143,237,139,
+ 17,143,234, 63, 19,218,169, 30, 11,171,101, 12,127, 61, 65, 46, 37,140, 48,112, 54, 60,136, 27,128, 14,188,123,172,125,179,170,
+209,196, 73,188,216,137, 19,154, 52,147,108,160,193,183,  7,101,161,208,245,187,119, 70, 89,208,157,135,122,191,195,119, 87,163,
+ 26, 67,149, 38,226,196, 48, 97, 57,171, 50,148, 38,129,192,221,135,204,105,221, 51,238, 73,  0, 33,170,231,182,227,155,234,141,
+126,177,182, 60,113,222,167,212,232,114,196,206,197, 11, 30,202,210,155,143,177, 18,228,225,198,221, 60, 57, 91, 27,213,181,202,
+ 18, 13,165,244, 92,120,147,184, 30,162,143,196,166,156,107,253,122,211,245, 77,  6,159, 81, 17,170,133,200,219,186,239,  9,140,
+ 59,  8,220, 66,166,208,235, 47, 11,134,192,129,157,188,188,195,111,104,  7,211,115, 20,134, 86, 11,164, 22, 25,164,142, 44,140,
+158, 89,237,165, 96, 18, 82, 55, 18,196,224,143, 41,165, 54,252, 39, 99,170,187,183,227,122,216,179,170, 25, 36, 92, 16,252,167,
+245,196,238, 63, 79, 26, 43,109, 36,101, 27,143,104,185,166, 83,181,134, 49,226,118,157,225, 24,118,102,107, 39,138,185,181,183,
+ 50,149,189,176,  1,177,140,245, 28,226,218,177,203,208,213,  0, 35,253,164,223,195, 67, 67,167,155,150,206,138,255,  0, 52, 79,
+248,229,250,119,127, 61,188, 71,230,141,119,171, 73,106, 99, 93, 68,  5, 48,152,227,249,187, 37,129,221, 38,218,189, 69,219,183,
+214,221,199,135,131, 43,102,  7,  9, 11, 44,177,236, 76,114,166,206,166,159, 62,159, 45,120,231, 80,233,183, 52,119,229,102,224,
+172,125,163,127,122, 44,222,142, 32,208,135, 30,156, 54,174, 39,176, 82, 86, 67,230, 66,107,182,226,159, 34, 58,234,154, 86,234,
+143,133,227,130,106,107,  8,163,132, 24,216,214,133,136,161,219,127,150,163,148,  2,124, 47, 19, 42,170, 87,187, 22,183, 52, 20,
+165,127, 15,199,229,160,101,115, 44,149,152,181,158, 42,191, 37, 10,200, 68,209,209, 88,176, 33,142,192,131,255,  0,103, 67,221,
+139,243,  4, 94,158,100, 80,165,102,229, 79, 19,179, 46,219,116, 36,109,211, 92,183, 42,165,116, 58, 49,197,201,229, 90,237, 65,
+196,183,137, 35,227,171, 91, 69,103, 53, 49,170, 53,197,117, 31,  3,227,242,213,148, 86,107, 82,140,113,177,115,  3, 78, 43, 57,
+168,147, 43,232,210,138,  6,137,132, 40,170,100,106,165, 66, 54,166,141,128,163, 40, 36,162,231, 33, 89,109, 82, 66, 43,192,211,
+248,138,106, 13, 72,  6, 17,151,114, 35, 71, 51, 25,144,179,252,180, 27,181, 71, 34,118,169,249,107, 23,171,196,133,173,211, 77,
+  8,228, 32,119, 71, 27,148, 80, 57, 80,109, 64,124,181,167,204,234,137,164, 36,225, 91,201,140, 80,197,228,114, 90,179,203,  3,
+ 18,231,102,148,  0, 84,212, 26,173,  8,163, 41, 27,239,215,225,173, 22,154, 66, 66,158,181, 67, 57, 74,212,243, 68,229, 40, 66,
+239,182, 97,129,158,243,181, 38,143,  5,127, 37, 94, 92,123,198,210,225,110, 31,122,  7,183,  7,148, 12, 72, 31,153,110,105,254,
+206,180,122,125,108,227, 28,147,  2,228,  6,201,127,233, 56,199,250,105,250, 85,204,122,213,173, 92, 69,173,124, 51,182, 23,  7,
+138, 60, 95,119,  2,107, 42,202, 68,  6, 80, 99,238, 43,107, 27,232, 49,189,225,106,123,114,254,226,134,220,207, 42, 62, 62,237,
+ 65,220,218,222,175,229,146, 71,242,200,  1,  4,211,125, 29, 13, 53,189, 71,255,  0,142, 78,111,201, 34,  4,187, 35, 44, 39,236,
+ 59,194,  3, 89,246,229,200,192,222,210,200, 93,182, 15,245,119,224,252,  0,  2, 71, 17, 22, 87,243, 90,113,147,117,242,108,193,
+122,146,173,184,161,218,166,134,149,233, 93, 86,144, 99, 35, 18, 57,134, 34, 95, 28, 15,197,100,173,145, 25, 12,241, 36,  3, 81,
+ 81,220,118,143,122,140,241,128,220, 61, 39,  9, 32,243, 75, 26,122,196,113, 53, 28,163, 81,200, 84,117, 41,207,166,244,209,214,
+163, 98,240,104,159, 46, 91,  4,207, 36,187, 38,217,160,127,156,101,253, 74,216,233,172,106, 63,252,121,  1, 39,255,  0, 21,194,
+ 34,127,162,126, 27,159,202,114,207,123,149, 11, 16,214,153,107,158,226,123, 59,168,228,134,218, 44, 74,219,222,217,178,204, 22,
+ 81, 52,239,234, 41, 12,192,178,150,226,201,226, 42,132,110,117,101,110,213,253, 46,142,228,165, 28,178,243,109,144,254, 25,114,
+ 13,184, 74, 50,  7, 97,102, 90,105,106,110,116,174,151,164,243, 96,100, 37, 59,241,187,110, 64,130, 96,100, 99, 40,177,171,179,
+ 30,208, 42,190, 39,163, 40,138,226, 53,  9, 36, 57, 11, 91, 59,200,144,209, 97,156, 93, 65,206, 48,219,121, 89, 28, 73, 17,109,
+202, 48,241,174,150,134, 17,150,182,204,237,120, 37, 60,193,255,  0, 75,230,137,227, 22,239, 12,118,170,206,159,162, 26, 62,166,
+ 24,231,132,109, 93,187,  9,254,120,121, 51,202,237,180,102,  2, 67,127,107,171, 59,172,123,172,146,100,111,  8, 22,242, 79,113,
+ 28, 73, 33,102,103,244,170,196,  1, 81,229,  4,170,215,151, 95,178,154,172,148, 36, 98, 46, 18,217,137, 61,163,127, 99,172, 64,
+137,140, 99,216,160,195,107,  8,228,179,161, 43,193,138, 52, 96,  6,245, 66,158,  0,146, 15,148,159,197,254,141, 54, 37, 60,154,
+ 80,167, 86,209, 35,146, 17, 41, 18, 33,110,114,194,141,186,173, 60, 73,  4,  2, 71, 67,190,164,129,202, 73, 10,  1, 19,183, 98,
+157,101,111, 36,115, 70, 68,107, 48, 74,145, 12,131,154,  0, 78,245,  6,157,118,175, 77, 23,108,229, 36,154, 50,134,247,132,158,
+ 11, 70,195, 72,249,254,220,193,217,194,226,221,238,110, 82,216,128,164,114,183,138,121, 76,192,  3, 77,157, 33,101,168,254,213,
+ 70,189, 11,167,152,218,180, 39,136, 22,223,188,198, 45,234, 50,126,229,101,247,  6,152,105,181,230,223,229, 22,199,255,  0, 76,
+ 31, 98,148,253,155, 63,122,119,191,109,247,116,205,255,  0, 80,118,189,132,146,227,173,106,105, 38, 74,246, 70,137,101, 63, 21,
+138, 36, 36, 15,246,245, 52,245, 35, 77,102, 86,159,158,114, 57,187,  0, 31, 50, 63, 16, 16, 58,114, 45, 90,148,232,103, 49,144,
+ 15,201, 28,103, 46,217,114,198, 59,134,115, 66,200,182,245,167,238, 44,227,227,237,100, 34, 28, 84,106, 46, 38,161,162,188,131,
+118,248, 84,128,120,143,191,166,170,226,  5,139, 78,113,158,  8, 49, 19, 57, 62,192,190,247, 52,246,120, 92,100, 56,172,124,126,
+145, 17,138, 70, 13,120,175, 81, 95,137, 39,118,175, 93,  5, 25,144, 12,202,125,194,178, 59,188,119,226,156,144, 93, 72,243, 19,
+231,171, 18,118, 29,118,167, 93, 86,101, 53, 43,145,168, 67,215,248,233,213, 13,205, 15, 23, 38, 46,124,170, 73,  2,164,111,191,
+ 67,166, 59,208,174, 24,170, 79,164, 78, 34, 63, 71,204, 27,159,169,203,170, 17,210,157, 54, 58,237, 29, 61,151,231,173,157,212,
+209,243, 10, 65, 89, 23,139,114, 80,223,109, 42, 54,208,119, 32, 10,180,177,116,130, 98,244, 43,236,113,171, 50,154,168, 32,244,
+ 53, 21,166,184, 74, 80,182,228, 23, 83,153,216,  4,141,202,183, 18,204, 65,110, 66,135,167, 79, 31,134,160,  0, 98,136, 37,169,
+181, 51, 48,226,170,  9, 99, 32, 34,128,249,151,133,  5,  7,220,116,248,213, 69, 50, 91,122,233,  0,144,137,165, 45,192,176,161,
+160,252, 68,143,133, 60, 52,137, 34,129, 62,  0,101,205, 44,  2,238,241,161, 51, 51, 69, 25,244,133, 65, 32,113, 44,107, 90,145,
+ 86,166,155,108, 22,169,170, 38,244,  6,108, 20,171, 88,189,123,  7, 49,205, 39,171,234,  5, 41,183,167,197,106,251,159,158,161,
+186, 76,102, 28,  6,111,193, 17,167,  2,118,232, 72, 42,106, 76,109,204,196,237, 17, 53,118, 37,125, 97,201,124,168, 72, 28,169,
+242,173, 52, 49,142,102,223,236,237, 71,192, 49, 47,135,183,128, 81,248,199,118, 65,145,124,228,150, 14,164,108, 35,243, 53, 70,
+222, 26,157,140,  5, 61, 29, 56,  8,202,132, 61,113,220,219, 56,168,211, 99, 20, 34, 72, 10, 85,216,133, 21,163, 17,242,240,212,
+176,190, 92,226,161,185,160,131,  3, 64,231,189, 71,244, 36,134,188, 89,210,149, 13, 67,176, 62, 58, 46,222,174,113, 46, 10, 26,
+ 90,105, 68, 80,200, 47,190,165,212, 96,  0,234,202, 41,185,  3,196,124, 70,136, 26,210, 67, 16, 61, 75,185,110,194,153,129, 20,
+ 78, 69,245,211, 86,175, 24, 79,137,255,  0, 80,212,214,133,203,130,129,130,124, 60,249, 59,152,178,146,182,119,146,  0,213,139,
+125,137, 28,129,219,238,209, 95,181,145,124,205,237,  8,184,218,189, 38,108,170,114, 89, 93,240, 80,100,138,130,158, 38,191,213,
+163,142,150,246, 81,205, 20,116, 44,205,177, 30,157,201,231,199, 92, 21, 40,172,180, 21,165,  9,166,250, 44,104,102, 40, 11,178,
+116,244,243, 33,168,163,156,109,252,123,112,  5,171,229, 42,212, 59, 13, 55,246, 23, 64, 25,162, 16,199, 79,118, 56,123, 10,102,
+107, 60,164,209,145,115, 11,202, 20,249, 10, 16,197, 79,200,214,186,229,190,151, 41, 68,145,104, 75,140,114,250,122,194, 22,252,
+117, 51, 31,220,204, 91, 13,173,223,143,168,166,132,153, 91,101, 70,  9, 39, 21,217,132,168,205,191,142,244,168,212, 26,142,144,
+209,137, 16,148,  8,199,111,240, 76,181,174,213,218,222, 70,226, 10,147,  6,122, 26,112,187, 70,129,235,179, 21, 37,127,143,252,
+218,164,189,102,113,144,205, 19,146, 46, 91,121, 87, 26,110,189,104,130, 46, 60, 36,118,181, 20,191,168,180,153,139, 33, 86,111,
+251,236, 71,137,219,230,189, 52, 62,146,253,203, 39, 60,103, 43,103,244,146, 15,177,149,173,217,233,239,224, 35, 62, 35,230,159,
+143, 33,117, 25,170,184,149,185, 80, 36,128,131,226, 70,235,246,120,141,122,  6,135,238,237,109,162,124,193, 11,185,119,242,204,
+187,253, 66,155, 54,130,170,110,105, 65,108,178, 32,147,129,195,211,212,172, 96,205,218,122,139,245, 40, 98,160, 53, 98, 42,149,
+251, 69, 69,126,223,134,183, 26, 79,187, 52, 82,151,247, 51, 90,148, 64,164,197, 36, 79,234,141, 61, 96, 40, 78, 97, 66, 41, 90,
+140,  2,180,142,218,215, 35, 16,175,167, 49, 42,170,171, 94, 68,243, 32,114,  4,116, 10,  9,222,187, 83,166,175, 39, 98,198,174,
+ 34, 87, 35, 27,160,136,129,132,177, 56,230,  6,148,247, 38,220,191,  0,209, 14,213, 37, 77,155,179, 18, 85,111,161,186, 11, 18,
+176, 65, 12,228,205, 27, 81,106,222,100, 28,135,198,148, 58,166,212,253,137,163,184,127,181, 57, 64, 51, 24,158,113,139,209,200,
+ 35,155, 18,231,177, 85,255,  0,253, 21,219, 77, 25,199, 54,211,238, 30,197, 80,246,249,252,  3,  6,120,204,150,238,190,161,137,
+152, 75, 25, 67,181, 65,  4,178,215,231,170,248, 79,173,244, 90, 17,251,155,  2,140,249,155,176,158,104,246, 84, 34, 37,111, 75,
+174, 25,224,114, 75,142, 14,167,225,174,177, 55,146, 70,158,160,182,185,169,173,180,160,238, 72,252, 64,245, 52,232,  0,213,230,
+151,175,233,181,238, 33, 44,151, 15,209, 42, 72,127, 47,230,238, 85, 23,180,126, 69,200,202,224,229,143,250, 79,199,222,167,228,
+240, 22, 23,151, 46,214,225,172,238, 22,139, 27,162, 80, 59,166,212,145,118,  4,252,198,250,168,234, 93, 27, 79,169,145, 49,254,
+220,153,220,109, 63,168,109, 71,217,215, 92,211,128, 93,235,130, 17,159,  9,149, 73,  4,112,180,113, 93, 68, 76,145, 70,242,  4,
+ 89,  5, 55,224, 79, 66, 72,252, 45, 74,235,207, 53,157, 26,253,153,  8,137,136,254, 81,152,229,150,252,187,  1,125,133, 90, 70,
+252,181, 17,243,108,120,160,106,216,225,237,142,245,113, 99,144,181,200,162,225,187,186,  9,109,238, 97, 32,197, 59,  2,183, 54,
+231,240,135,141,135,226,143,228, 43,174,198,246,104,155, 26,232,150, 20,205,245, 68,236,111,205, 30,207,114, 42,222, 77, 88, 18,
+179,201,126, 21,203,241, 28, 15,241, 69,214,146,100, 49, 48, 71, 22, 98, 67,115,135, 86, 31,167,119,  5,175,153,225, 21,162,150,
+252, 94, 83, 95,194,106, 55,167, 67,171,123,114,191,164,134, 91,178,205, 98,134, 23, 99,140, 14,195,181,251,123,176,162, 52,  8,
+ 95, 37,154, 55,136, 34, 80, 52, 18, 27, 95,113,248,214,152,163, 15,110,187,223,184, 61,175,204, 69, 14, 81,254,183,182, 50,180,
+118,186,141,189, 75, 89,249, 31,199, 83,248, 28,114,243,129,183,192,210,186,168,234, 93, 50, 55, 27,207, 35, 44,129,201,120, 86,
+ 47, 34,245,253, 37,235,198,177, 56,162, 52,183, 63,113,108,217, 35,251,176, 60,163,105,  1,191,250,131,212,120, 99, 29,159,177,
+ 59,130,218, 28,197,239,100,122,198, 91, 75,115,245,221,191, 49,218,182, 23, 39,154,198, 65, 53,229, 27, 22,140,253,159, 61,100,
+117,253, 50, 67, 79,152,140,183,108,114,221, 27,227,244, 92,142,240,112,145, 24,150, 59,213,158,166, 89,196,111, 12, 46, 15,247,
+ 10, 72,112,192,200, 12, 64,112, 91, 42, 58,202,198,241,194,193, 95,168,102,168,248,129, 93,192,214, 54,243,178,139, 77, 32,100,
+129,239, 68,159, 81,192,159, 50,241,101, 99,243, 29, 62,122,163,184,106,203, 81,101,178,186,102,237,217,162,138, 70, 99,204,184,
+136, 47, 80, 71, 31, 15, 29, 54,100,176, 42, 75, 65,137, 28, 29, 73, 41,232, 92,200,  5,  8,228, 84, 63, 46, 71,202, 74,215,250,
+ 52,224,194, 74, 23,205, 16,138,177, 18,169, 59,244, 32, 50,143, 26,129,241, 63, 29, 90, 91, 84, 58,168,148,115,137,106,  5, 31,
+ 30,191,110,172,224,178,218,144,142, 49, 67, 96, 15,134,166,106,172,190,165, 94, 45, 41,163, 99,130,171, 41,228, 59,141, 79,  3,
+ 85, 25, 11,237,220,126,173,156,209,245, 32, 18, 62,237,245, 28,226,246,229, 29,213, 74,212,154, 96,160,108,180, 85,  5,135,148,
+210,187,120,235, 31,174,183,204,235, 81,166,146, 17,189,132,183, 37,175, 29,169, 67,208,239,170, 43,128,173,  5,169,  4, 53,123,
+  1,146,164,141,247,228,122, 19, 83,227, 79, 29,244, 77,139,185, 74,172,214, 64, 98,170,164,179, 78, 95,138,135,126, 85, 93,128,
+160,165, 41, 90,157, 95, 91,154,160,149, 84, 43,187, 72, 47,177,243, 99,114, 86,137,144,197,204,167,214,176,154, 53,150, 41, 62,
+101, 90,158, 97,224,224,130, 62, 58, 50, 49,140,169,152, 71,137,252, 17, 26, 61, 93,237, 52,222,212,132, 15, 31, 15, 97, 27, 70,
+241,240, 89,118, 88,100,125,186,231, 39,107,222, 94, 12, 28, 69,203,246,143,114,217, 94,253, 50,174,236,203,101,144, 72,156, 70,
+ 41,248, 85,228,227,241, 45,173, 29,187,209,185,108, 66,237,203, 55,163,132, 94,230, 75,145,221,148,204, 68,247, 23,136, 11,122,
+109,219,234,143, 27,145,142,120,138,206, 50,  6, 12,223,152, 86, 56, 97, 39,141, 90, 49,138,186,237,143,116,187, 35,186,227,140,
+ 73,116,184,108,171,254, 59, 11,167,140,197,203,255,  0,  7, 60, 36,161, 30, 35,152,141,190, 90, 58,127,106,107, 36, 51,216, 30,
+104,111,205,  2,125,113, 38, 18,226,205,196,  5,130,213,244,105,218,240,145,114, 18, 44,192,243,240, 45,179,129,124, 16,135,113,
+247,205,174,  7,185,123,143,244, 32,111,187,130,250, 75,  4,176,184,180,156,199,108,176,197,  4, 77, 43, 92,198,202, 99,157, 25,
+189, 68,112,226,160,142, 92,133, 53,200, 70,122, 77, 17,211,220,  6, 55, 13,209, 47, 42, 64, 74, 25, 41,136,194, 15,139,193,139,
+156, 87,165,233,250, 63,238,180, 58,123, 87,192, 38,216,150,113, 76,238,105, 30,119,160,135, 48, 44,100,241, 12,219, 64,140,125,
+241,121,154,201,101,240,253,147,107,250,222, 66,250,240,101, 47, 51,121,145, 76, 85,149,236, 41,194, 25, 98,142, 37, 84,150, 88,
+213,138,198, 88,113, 99, 70,161,213,246,158,238,150, 55, 72,183, 16,217,179, 57, 15,144,225,202,205,240, 59,115, 42,141,120, 23,
+225,251, 93, 12, 99, 41, 90,  4,121,152, 66, 32,229,120,196,145, 95, 12,123, 27, 25, 85,110, 56, 60,245,230, 99, 29,141,180,207,
+222,219,223,231,177,214, 73, 22, 78,242,214, 57, 32,172,171, 36,132,204,214,174,129,213,100, 12,174,243, 67,206, 63, 83,159, 33,
+ 24,213, 47, 80,208,155,183, 51,219,144, 50, 35,195,128,  0,110,198,156, 49, 11, 23,173,232, 58,171,  7,152,231,229, 21, 30,231,
+194,156, 91,130,185,158, 18,243,122,141, 28,106,172,170, 80, 66,  7,166, 84, 14, 33,150,133,148,242,165,121, 41,161, 53,214,120,
+192,196,177,161, 89,233,  2, 11, 26, 21,247,233,247, 63, 17,184,215, 32,106,184,172,146,218, 40,228, 51, 10,139,116, 30,161,228,
+ 84,178,170, 14, 76, 73, 20, 30,  4,232,136, 73,226,114,138,177,239, 82,105,236,155,151, 97, 15,207, 40,199,253, 82,  3,226,140,
+241,179, 73,101,216, 11,121, 98,232,217,104, 33,188,182,198,169,168,103,186,115, 53,189,178,  2,213, 60,140,147, 39, 93,190, 26,
+245, 27, 86, 50,222,133,169,120, 64,183,155,178, 34, 38,103,177,162, 81, 61, 86,  6,231, 80,150,114, 32, 39, 51, 86,122, 18, 70,
+106,110,141, 81,238, 59,211,197, 99, 32,237,236, 80, 96,109, 85,113, 86,146,157,197, 44,225,142, 57, 37, 39,196, 37, 58,252,118,
+213, 69,231,187,112,222,159,213,206,127,168,146,  7,127,185, 82,206,110, 75,111,167,205, 68,178,137,251, 58,235, 45,121, 60,193,
+241,147,136,218,201, 92,143, 82,105,104, 24,200,120,252, 42, 85,137,235,182,153,118,127,185, 17, 13, 80,239,195,130,138, 35, 33,
+ 39, 98,172,147, 29,147,238, 11,104,111, 34,141,164,200, 93, 72,210,204,140,193, 82, 40,200,162,242, 53,226, 41,240,249,232, 91,
+185, 69, 30,137,194, 38, 65,247,166,110,123, 36,199, 97, 53,213,229,208, 19,198, 15,229,198, 42,163,109,170,199,227,168, 60,168,
+202,133,115, 46, 90,186,  0,185,181,221,229, 88,145,213,  5, 89, 31,240,239,229,249, 19,190,251,104,  9,169, 65,205,218,135,205,
+176,245,  2,112, 90,  0, 71,171,191, 35, 82, 26,164,215,194,148, 31, 45, 55, 48, 93, 95,154,113,176,122,  5,252,180,174,203,212,
+ 87,161, 58,128,209, 27, 41,  9, 22, 20,  9,197, 61, 20,108, 86,187,248,245,211, 10,144,  2,121,118, 41, 67,140, 64,  4,163, 72,
+224,130, 58,236,195,250, 14,162,172,145, 18,140, 96,121, 84,199,153, 26,209, 28, 73, 71,142,137, 26, 20, 21, 40, 15, 81, 77,190,
+ 53,174,160, 17, 34, 88, 98,138,132,134, 87,124, 18, 23,210,203,109, 44, 18,204,244,122,113,  6,158,158,199,161, 90,117,249,131,
+174,249, 81, 18,  4,  5, 33,148,167,  2,  1,161,216,184,184,177,186,129, 35,141,193, 19, 31, 50,173, 13, 40, 55,241,  3,122, 29,
+118, 55, 99, 34, 78,197, 36,172, 76, 69,136,230, 78, 71, 12,214,142, 68, 18, 36,139, 35, 45, 35,  7,105,  1,  4,134,161, 20,162,
+212,131,174, 74, 98, 98,163, 15, 98,108, 45, 74, 18, 97,204,254,222, 43,130, 30,221,217, 57,  1, 87, 82,106,125, 64,220,119, 21,
+ 35, 98,  6,159, 12,178,196, 28, 59, 17, 70,220,224, 67, 22,168,119,174, 10,123, 82, 95, 78, 98, 81, 97,245, 57,152,144,212,114,
+125,234, 20,239, 70,226,  6,134, 28,174, 54,182, 42,202,113, 23, 50,144, 88,  3,179,105, 43,152,110,222, 57, 82,118, 28,157, 67,
+  2,133, 65, 95, 48,160, 20, 63,105,212,146,176,227, 40,218,160,141,247,158,109,162,141,179,211, 21,246,  5, 18, 72,145,145,201,
+ 27,165, 69, 60,199, 76,152, 34, 36,238, 70, 89,202,110,  8,227,153,125,108, 82, 74,165,227,141,227,134,133, 21,128, 12, 11, 40,
+240,174,155, 27,205, 71,121, 39, 75, 64, 36,237,203, 28, 61, 91,148,200,251,122,238,  8,199,146, 59,164,112, 90, 50,172,170,198,
+148,216,105, 91,213,  9, 77,131,130,141,142,132,216,139, 72,  9,141,155,240, 76,189,162, 64,105, 50, 77,106, 79,246,185, 34,127,
+ 17, 81,163,161,173,191, 16,209,153,110,223,130,239,237,116,248,152,152,123,  7,175,  5,212,113,220, 87,148, 55, 53, 65,208, 56,
+ 89,  6,142,181,214,117, 32, 49, 32,246,128,186, 52,  0,151,132,233,254,165,245,103,190,140, 26,250, 82,150,235,177, 67,253,103,
+ 87, 17,251,130, 97,204,237,197,182,183, 42, 24,105,175, 71,  9,  9, 30, 52, 78, 38, 82,224, 26, 75,110,234, 84, 83,242,153, 88,
+125,224,211, 87, 86,254,226,180, 24,145, 56,118, 52,130, 28,121,206, 68,162,237,184,167, 83, 45,103,252,252,162, 93,205, 90, 54,
+ 82, 73,235,186,244,174,173, 97,214,180, 87, 64, 18,148, 54,227,  3, 25, 87,245, 67,122,108,111,101,171, 74, 42,100, 23,182,146,
+237, 21,194, 22, 62, 28,193,254,134,223, 86,118,238, 89,190,  8,181, 49,153,176,207,152,122,143, 48, 62,197, 61,189, 76, 28, 84,
+ 41, 94,162,144, 14,204, 60, 73,163, 10,142,155,125,218,179, 17,242,252,186,115, 68, 23,248,  5, 47,152, 38,251, 65, 77, 73,  5,
+147,212, 73,109, 27, 29,201,  1, 81, 13, 73, 31, 47,142,159,107, 71,167,187, 18,110, 91,140,206,230,142,110,231,249,161,117,  6,
+ 35,  0,  7,176,119,178,109,113, 24,233,  2,149, 94, 37,193, 28,150, 82,180,174,198,130,164,138, 14,132,141,  6,122, 30,134,228,
+159, 40,230,254,146,220, 98,231,214,113,216,132,148,162, 34, 67, 17, 33,180, 18, 71,119,114,238,219,182, 82,231,211, 84,188,150,
+ 63, 87,136, 66,202,178, 40,234,  1, 34,170,122,  3,170,185,125,183,106,118,192, 23, 37, 28,213,193,240,193, 58,236,252,160,101,
+ 18,100,202, 59,246,230, 98,209,203,216,204,142,206,  8,103,141,218,220,144, 42,  8, 32,212, 86,166,154,169,143, 70,213,233,101,
+155, 79,112, 63,  3,148,158,234,199,214, 80, 58,155,192, 22,156,115, 56,236, 83, 44,179,157,217,135,100,245,109,101,151,210,221,
+217,127, 29, 24, 83,172,101,129, 52, 63,137,134,175,180,157,123,169,233,131, 95,181,230, 13,225,135,176, 56, 62,196, 20,167,102,
+229,  3, 96,213, 27, 55, 58,184,143,187,113,121,  7, 16,223,200,109, 47,249, 42,152, 46,  1,137,142,251,159, 49,161, 52, 39,175,
+240,214,146,223,220,218, 93, 75,  9, 75,203,150,233, 12,190,246, 77,178, 77,153,101,  1,179,113,117, 46,239,  9,143,202,137, 37,
+154, 53, 94,114,149,134,104,  9,228,  0, 94, 93, 78,199,113,183, 77,  3,212,116, 58,109, 83,155,145,  2, 78, 50,200,120,187, 65,
+ 10, 81,172,156, 98,  0, 52, 17, 36,131,131,251,221, 83, 61,223,112, 96,249, 82, 81,148,198,199, 41,142, 70,173,102, 69,166,245,
+ 36, 19,176, 29,119,251,117, 79, 13, 70,191, 65, 34,237,168,182, 14, 63, 88, 30,155,208, 55, 35,102,228, 70, 94, 73, 19, 81,177,
+ 69,185,199,203,121,120,111,251,110, 88,101, 23,181,105,177,242, 48, 66, 88,145, 82,165,188,164,147,240,106,143, 29, 87,222,187,
+ 27,228,203, 78,115,121,158, 43,115,218,119,199,113,  8,232,233,117, 26,121,  9,219, 35,151,104,192,141,199, 98,157,107,150, 49,
+ 71, 14, 43,184,241,242,122,  8,  1, 22,247,  8, 82,120,119,173, 96,144,210,160,211,227,161,124,217, 88,136,183,170,129,149,168,
+140, 37, 89, 68,240,150,208, 54,112,195,114,185,179,118,214,176,230,183,253,171,251,190,147,196, 29,191, 62,  8,187,  7,109,123,
+101,106,215, 24,105,211, 51,130,147,123,188, 97,218, 88,215,194,129,133,  9, 31,204,187, 87,196,111, 93, 31,160,177, 61, 61,179,
+ 61, 60,133,251, 50,241, 91,220,251,159,111, 10,  3,195, 20, 77,235,226,236,132,110,131,106,224,194,123,219, 30,238, 56,141,135,
+ 23,179, 19, 99,241,248,243,121,139, 35, 43,219, 55,108,226,243, 15, 50,242,150,222, 83, 94, 70, 33, 80, 65,  6,140, 99,240,240,
+209,162,220, 44,218,148,237,  3,122,204,143,247, 45,181, 98,127, 72,196, 24,253, 81,219,136, 93, 23, 76,174, 15, 52,249,115, 30,
+  9,126,110,221,224,224,  8,194,160,143,164,220,246,221,235,165,181,189,213,157,241,186,143, 21, 89,240,215, 80,176,146,225,173,
+217,255,  0, 54,  7,  3,114,  0, 21,  3,168, 52,219,109, 29,167,233,182,167,100, 24, 72, 94,182,199, 33,218, 98,124, 86,229,192,
+ 96, 55, 16, 54,197, 58, 93, 95, 33, 50,185,  3, 25, 19,253,192, 42,  1,  7,146,228,119,214,167,243,  7,124, 93,122, 47, 23,221,
+ 22,253,201,133,181,203,160,244,102,145,  8,146, 58,249,132,139,248,133, 13, 58,141,250,107,231,255,  0,184,122,100,250,110,170,
+118, 36, 14, 88,214, 39,124, 79,132,252, 15, 16, 85,254,128,139,182,227, 56,225, 47,103,240, 63, 52, 45,148,153,210,229,185, 55,
+ 46, 39,240,215, 96, 41, 65,211,110,131, 88, 43,197,138,218,105,162, 12, 20,  3,114, 38,153, 29,  1, 72, 81,212, 23, 10, 11, 84,
+244,  7,227,176,219, 80, 25,130, 81, 94, 94, 88,144,113, 33, 92,137,195,152,234,200,194, 96, 30,139,185, 12, 91,112,124,107,241,
+ 58,154, 50,175,106,173,200,207,141, 17, 38, 46, 65,182,252,136,219,111,128,219,109, 91, 90,193, 83,106, 34,142,177, 50,244,248,
+106,214,  6,139, 43,169,138,208,113,140,  8, 83,241,235,162, 86, 71, 80, 21,234, 17, 77, 25,  3, 69, 86, 66,250, 26,141,246,105,
+  3, 85,194, 40,165, 70,193,139, 41,232,195, 83,192,255,  0,112,141,225, 15, 32,200, 63, 37, 23,226, 82,  9,226, 72,160,235,177,
+219, 89,157,116, 30, 33,104,244,242, 66, 23,177,158, 71,110,191,213,172,229,216,173, 13,169, 81, 81,223, 68, 75,138,143, 10, 16,
+  5, 58,116,233,165, 96,209, 69,169, 14, 21,116,177, 84,128, 23,146,138,133, 90,252,118, 29, 60,127,175, 87, 54,234, 86,118,244,
+ 25, 70, 91, 97, 83,204,112,  2,160, 84, 31,198,180,218,159,126,142, 20,141, 21,116,137,106,213,102,253,239,157,239,236,156,178,
+118,223,182, 24,219,137,111, 11,  8,178, 29,198,228, 90,219, 91,181,120,152, 96,150,114,170,210,  3,179,178,114,225,209,124,221,
+ 36,183,117,170, 14,102,239,195,217,235, 91, 45, 22,131, 79,162,136,212,107,155, 48,172,109,150, 60, 65,148,107,153,246, 12,164,
+111,115, 65,229,158,233,155, 41,148,203,155,126,227,104,242, 57, 60, 98,201,101,115,116,  2, 76,243,136,229,114, 75,203,196, 25,
+ 79, 34, 66,187,213,184,154, 13,180,235,115, 37,200,163,215,119,185,122,117,205, 53,187,178,  2,118,193, 34, 45, 42, 59,141,204,
+112,108,  0, 17,  6,167,108,138,161,184,155, 55,113,104,216, 64,143,  6, 17, 36,118, 48,139,132, 89,  8, 98, 73,142,164,249, 99,
+167,226, 85,165, 77, 73,213,144,234, 19,242,132, 12,220,246, 18,179,154,152,106, 37, 25,233,225,111, 37,128, 73, 32, 92,128,145,
+171,136,158, 96,208,111,166, 45, 87, 39,114, 38,237,188,228,248,139,118,196,197,137, 75,172, 97, 62,123, 56,189,  9,144, 57, 32,
+ 18,120,185,168, 32,111,200, 31,187,109,118,198,174,228,106,224,142, 52,247,226,159,110,252,108,195,201, 22,140, 97,131, 68,197,
+191,219, 34, 95,181, 29, 96, 61,206,194,165,237,133,189,244,183, 19, 89, 65, 42,186,217,219, 56, 75,203,112,122,152,140,166, 73,
+201, 10, 88,108,105, 77,186, 29, 91,216,234,164,200, 12,167, 46,250, 48,239, 79, 55,173,152,200, 66, 81, 23,  0,164,101,226,236,
+ 49,252, 56,173,203,219,172,190, 11,185, 59,118,246, 75,123,249,155, 55,108, 86,123,220, 92,200, 34, 64,125, 83, 11, 93,196,128,
+121, 13,202, 20,146,100, 83,195,213, 66,212, 12,204, 89,250,201, 67, 81,103,205,142, 49, 44,119,183,166, 11,  5,247, 47, 78,157,
+139,158, 96,143, 36,206, 35,121, 21, 29,197,242,239, 70, 17, 90,137,103, 84, 10, 17, 77,  1,171, 81, 70,219,177, 45,225,227,170,
+ 56,111, 88,245, 19, 63, 59, 88,118,230, 78,229, 34, 89,174, 61, 15, 66, 24,220,176, 83, 45,219, 45,186, 31, 47, 90, 25, 57, 83,
+229,163,250,116, 35, 45, 93,152, 16,226, 87, 32, 15,250,131,251, 22,143,237,237, 39,238, 58,141,160,101,148, 68,249,143,184, 91,
+231,246,182, 59, 49,170, 32,196,230, 98,205, 46, 28,180,106, 49, 54,215, 87,153,  9, 98, 77,148,190, 26,237,163,129, 67,154, 83,
+148,158,126, 52,234,131,127,143,173, 74,222, 81,112,196,243, 16, 32,255,  0,206, 57,169,192,  6,126, 37, 80,221,181, 40,198, 23,
+161, 44,194,118,172,157,142, 77,235,121,136,197,233, 18, 92,251,150,159,105, 48,198,218,199,114,209,189,200,183, 65,109,  9, 85,
+164,151, 55, 87, 13,235, 92,202, 42,118, 64,198,164,159,135,203, 89,123,145,243, 36, 67,179,212,254,152,138, 68,118,170,130, 64,
+ 99,142,197,  3, 45,218,241, 92,220,195,220,189,207, 41,191,146,  7, 30,134, 57, 73,253, 62,208, 50,212,121,  7, 31, 85,159,161,
+105, 42,163,249, 87,227, 28, 53, 20,242,237,140,161,177,218,126, 73, 27, 97,243, 74,190,224,141, 38,150,206,210, 52,191,145,150,
+218,209, 97,165, 27,200,  2,126, 32,  2,237,191,221,170,184,130,121,113, 46,137,112,  3,160, 30,225,207,181,226,201, 29,181, 98,
+179, 59, 70, 58, 52,172,253, 89,135,133,  7, 65,163,132,114, 14, 40, 73,205,208, 77,204, 97,147,129,167,  1, 83, 90, 84,244,248,
+253,218,171,186, 54, 31, 90,108, 36,169,248, 71,178,112, 28,129, 36,189, 55, 32,211,106,214,155,125,154, 10,184, 34,153,126, 97,
+206, 44,149,  2,192,135,213, 79, 43, 49,252, 45,254,208,251,117,  4,115,189,112, 87, 23, 50, 12,  5, 87, 17, 80,  2,166,131,149,
+  1, 36,244,223,125,252, 52,233, 40,227, 33,137,166,197, 40, 60,124, 37,139,151, 54,160,244,138, 13,131,  6,  7,115,183,241,212,
+ 44, 92, 20, 68,167,  2, 12, 66,148,183, 54,254,128,180,158, 35, 18,187, 30, 87, 74,  1,122, 13,217, 40,106,  8,229,208,141, 68,
+ 97, 44,217,129,126, 31, 21,216, 93,137,134, 82, 25,246,168,104,133, 36,169, 28,145, 60,212, 36, 14, 74, 58, 86,154,156,151, 10,
+ 43,113, 49,145, 34,161, 74,105,175, 25,126,178, 86, 96,225,201,119,230, 85,137,109,136,  0,252, 62, 90,136, 70, 47,148,110, 70,
+ 19, 50, 51, 78, 53,125,254,152, 46,163,183,  0, 77, 15,  1, 44,196,172,162, 80,223,201, 66, 89,118,241, 53, 26,228,166,236, 93,
+182, 50, 34,205,182, 50, 27,152,187,236,224,172,132,210, 75,106,134, 46, 49,195,  8, 34,161, 84, 30, 64, 81,233, 80, 24, 43, 85,
+105,243,169,208,102, 32, 74,181, 39,208, 43,123,115,145,  0,199,195, 23,221,176, 85,189,126,244,253,171, 37,186,122,123,122,196,
+  7,227, 34,130, 10,190,245,222,180, 60,127,134,149,216,230, 47,179, 10,112, 83, 88,148,193, 17, 20,219, 86,192,254,  9,152,161,
+182,150,225,164,184, 86,146,  3,200,145, 25, 17, 84,145,182,244, 34,159, 96,213,143,151, 47, 45,161, 73, 54,218,170,211, 56,155,
+199, 57, 50,134,234, 70,170,241, 22, 83,106,178,164,178,153, 88,129, 25,219,210,141,106, 89,129,242,120,215,168, 58,160,160,155,
+ 72,  6,219,188,251, 86,166, 48,207, 23,  4,185,226, 24, 39, 98,178, 23, 22,241, 79, 29,203, 92,220,  7,243,219, 47,144, 43,145,
+ 80, 20, 10,215,237,211,165,123,203, 50,137,136,136,144,164,141,104,140,179,104,222,  2,121,156,199, 96, 52, 18,106, 97,142, 61,
+138,202,208, 70,211,170,197,  2, 36, 40, 77,192,138,230,146, 85,149, 69, 84,201, 68,102, 83, 77,129, 58,138,235,194, 38, 70, 68,
+191, 43,199,151,217,131,239, 86, 90,113, 25, 72, 67,192,213, 32,140,216,108, 39, 19, 19,240,101, 62,234, 56, 33,191,119, 37,126,
+129,100, 27,  2,  4, 96,178,134,244,205,126,  6,163, 67,217,186,101, 96, 64, 62,127,120,244,170,177,191,107,251,249,152,101, 32,
+119,112, 76, 92, 89,246,204,234, 76,237,  4, 82, 22,222, 84,117,132,138,255,  0,208, 96, 43,247,104,171,112,213, 66, 56, 75,212,
+ 83, 39, 99, 74,103,204, 99,  0,120,129, 85, 69,145,197, 97,160,102, 22,217,216, 21,171, 64,147, 17, 32, 35,254,148,116, 63,209,
+171,  8, 93,212, 24,135,182, 72, 84,119,109,216, 24, 94,140,101,250,155,222, 63, 20, 55,122,208,219, 23,  2,230,222,224, 19,248,
+237,220,182,223, 99,133,109, 94,217,148,174, 48,156,  8, 11, 55,169,189,110,219,145, 56, 18,255,  0, 73,117, 29,111,161,127, 42,
+184, 31, 26,237, 67,242,174,166,156,103, 16, 67,114,161,225,173,183, 35, 67, 84,232,117,148,249,145, 76, 85,216,149, 26,142, 66,
+ 32,146,123, 17, 49,158,125,129,187, 23, 34, 56,208, 86, 22,120,202,255,  0, 97,217, 71,240,174,139,177,122,237,178,  4,103, 40,
+190,226, 71,184,161,231,102,211, 56, 24, 46,210,242,246, 58,136,174,217,128, 32,176,145, 67,157,129, 53,233, 93,129,214,130,215,
+ 89,215, 91,142,111, 51, 48,218, 12, 68,143,185,208, 70,223, 55, 44,139,241, 79,199,153,186, 95,239,160,142, 96, 41,234, 50, 49,
+141,136,240,173, 67, 13, 89,217,251,146,224,137,205,110,  5,252, 70, 47, 18,119, 62, 41,178, 55, 92, 23,118,245, 43, 91, 62,234,
+178, 71,229,117, 12,240,138,113,228,168,178,130, 77, 40, 73, 82,  8,242,237,176,213,141,175,184,236, 63, 52,101, 16,  0, 21,174,
+206,  8,123,183,102, 65,161, 98,106,173, 32,205, 97,111,125, 53, 92,148,112,188,106,121, 52,204, 99,231,227,210, 78, 29, 72,  3,
+174,158, 58,141,139,128,  8, 76,123,189,234,163, 83, 63, 48,185,161, 86,214,214,164,122, 50, 43,197, 53,180, 37,100,107,136,235,
+196, 15,239,  8, 99, 74,120,127,107, 68,195, 81, 86,  5,202, 30, 22,139,112, 69,115,219, 90, 92,217, 71,111,113, 18, 93,122, 84,
+ 89, 61, 68, 89, 21,204,194,135,175, 47,237, 18, 52, 92,165, 11,180,184, 51, 14, 33, 20,100, 64, 50, 29,200, 55, 37, 99,136,195,
+242,185,180,150, 76, 90,172,230, 42,194,242, 11,115, 39, 34,200,140,132, 50,168,162,238, 64,173, 78,170,110,136,105, 99,154,  4,
+218, 99, 66,228,199,212, 92,123, 20, 57, 32,224,151, 99,138,141,113,121,141,202, 33, 75,155,139,139,127,204, 50,173,229,161, 89,
+128,122,134,220, 39, 26,169,249,174,171,117, 29, 71, 63, 44,222,  5,223, 60, 37,242,124,119, 35,163,164,181,122, 47,110, 89,189,
+135,218,153, 78,209,250,217,  4,152, 28,205,189,236,179, 81,132, 79, 25,183,148,143, 46,206,130,161,169, 94,187, 29,116,232,236,
+234,197,100,  9, 31, 80,229,145,254,109,135,217,218,153,110, 90,205, 36,158,220,233,186, 85,  7,241, 87, 48,199,222, 56,187, 69,
+250,252,107,223, 90,113,  1, 33, 45,245,144, 21, 98, 64, 59, 19, 34,154,  3,179, 45, 52, 89, 58,205, 60,  8, 49,243,  0,223, 80,
+123,252, 94,245,105,102,245,155,178,121,199,203,152, 56,131,235,236,117,105,142,184,237,247,190, 89, 44, 46,223,183, 51, 43, 26,
+ 25, 98, 52,150,218, 82,212,226,172,132,133, 21,106,236,120,176,248, 87, 71,105,197,131,119,251,114, 58,123,204,  9,  7,194,123,
+ 65,163, 30,233,110, 33, 62,229,203,185, 57,199,155, 29,132, 22,144, 27,247,251, 43,181, 94,228, 35,158,107,200,204,176,193, 97,
+150,  2,151, 82, 10,181,181,232, 21, 40,  9,216,146,105,228,173, 28,117,  5,134,218,208,141, 60,205,209, 32,208,153,  1,219,193,
+ 49,196,240,217,245, 71,124,131,160,225,168,181,228,200, 18, 72,205,202,248,196,237,236,127, 82,169,142,255,  0, 17,107,123, 46,
+ 86, 21,151,  8, 26,127, 74,234,242, 50,226, 27,123,248,232,190,120,152,  5, 49,178,176, 12,234,  7,129, 59, 29,157,  9, 88,180,
+110, 92,  3, 40,145,107,155,163, 40,237, 35,142,217,110,169,218,129,150,166, 96,130, 77, 72,219,236,  5,106,120, 12,205,197,154,
+200,110, 26,134, 94, 51, 20,135,207, 19, 75, 31, 82,149, 21, 33,144,211,167,250,245, 79,214,186, 28,122,133,200, 18,121, 76, 37,
+106,127,201, 62,104, 72, 31,205,110, 96, 72,108, 98, 85,151, 77,234,199, 75, 25,219, 33,164,254,100, 67,225, 48,192,199,249, 46,
+ 71,148,154,229, 59, 30,170,247, 45,145,146,234,127, 85, 73, 40,  2,147,203,106,150,223,111,145,174,190, 70,234, 86, 46,105,181,
+ 55, 44, 92,164,173,200,196,247,124,241, 11,223,186, 92,173,222,211,194,236, 60, 55,  6, 97,216,126, 59,248,166,173,167,150, 38,
+145,107, 86,112, 23,129, 28,129,249,252,136,166,128,137,217,189, 27,114,  0,129,193, 95,218, 76,146,250, 50,167,150,106,241, 32,
+128,  0,122,242,254, 28,116, 84,  8,  4, 21, 83,118,  4, 56, 56,122,124, 81, 38, 38, 96,164,161,217,129, 53,161,  4,127, 29, 89,
+218,154,165,212,193,234,142, 49, 19,138, 39, 47,191,225,171,123,101,194,203,234,161,138, 61,194,222,  6, 74, 87,166,218, 50, 53,
+ 89, 77, 93,166, 40,150, 43,128, 86,181,211,196,200, 84,146,133, 83, 75,123, 63, 54, 11,103, 41,161,160, 60,163,161,249,238,218,
+236,102,164, 54, 98,222, 33,237,249, 41,  9,125,118,179, 71,198,198, 70,168, 35,241,196, 63,173,180,243,112,139,145, 59,112, 81,
+ 27, 48, 49, 60,227,212,126, 72,103, 57,123,152,142,123,133,139,  5, 44,149,110, 74,126,170,221, 43, 95,180,154,104,125, 76, 34,
+115,  9, 56,175,  5,117,163,181,100,196, 61,208, 63,166, 69,  1,229, 50,189,223, 29, 62,159,180, 68,213,174,237,147,182, 64, 62,
+240,132,234,156,217,210,145,205, 57,247,  8,252,214,175, 77,166,209, 31, 22,165,191,249, 82, 63, 20, 45,125,158,247, 47,205,232,
+246, 29,187,211,101,229,154,128,124,255,  0,239, 99, 76,141,174,153, 22,121, 94,238, 22,255,  0, 20,108,244, 61, 60,179,234, 71,
+125,185,143,132,149, 13,206,115,221,242, 72,143,219,252,112,  3,193,243,144,245,240,161, 85,213,205,163,211, 34, 92, 11,255,  0,
+236, 31,250, 85, 61,237, 22,128,  2, 69,240,127,215,255,  0,218, 80, 46, 51, 94,250,178,159,163,236,108, 28,110, 79, 89,115, 76,
+232,120,158,165, 20,173,107, 93,183,209,145, 58,  1,  6, 17,187,235,143,194, 10,134,118,116,134,185,253,121,191,251,104,127, 59,
+220,255,  0,184,204,  6, 35, 33,157,187,237,174,219, 75, 60,116, 38,103,150, 59,249,100,153, 66,149, 81,233,169,145, 67, 73, 83,
+201, 84,154,125,187, 13, 62, 23,116, 34, 45,114, 23, 27,121,144, 30,224, 84,154,109, 21,139,215, 99, 11, 64, 92,145, 56,  9,201,
+203, 87,108,  6, 32,126, 96,188,135, 30,103, 41,144,118, 89, 33, 76,125,188,164, 41,138,214, 48,243,188,136,194,174,101,153,221,
+154,167,119, 33,169, 83,176,219, 98,181,186,139, 50,128,133,152, 70, 48,221, 93,152, 57,223,194,131,  5,177,233,250,221,109,233,
+230,184, 77,177, 51,132, 34, 51,120,134,210,106,  3,115, 74, 68,212,150, 81,175,165, 11, 19,218,218,198,147, 90,176,230,236,236,
+104,236,105,210,148, 27, 17, 82,107,247,106,174, 17, 25,156,146,254,158,159, 20,181,247,  0,183, 43, 54,162, 39,108,243, 72,146,
+121,137,221,179, 96,114,251,124, 40,175,180, 61,178,239,174,252,179, 55,253,161,129,151, 35,135,142, 70,136,100,167,104,109,108,
+139,138,114,142, 57,174,164,141, 28,167, 86, 72,217,136,241,211,140, 36, 15, 53, 21,  5,206,161,163,182, 76, 65,142, 59, 77,  3,
+182, 27,105,193, 20,100,189,173,238,142,210,199,153,189,193,179,184,181,226, 16, 90, 92,240,138,251, 17, 40, 65,200, 67,245,150,
+207, 33,134,110, 68,112, 89, 60,173,208,241,235,161,110,  2, 34,114, 81,213,215, 76,213,217,213, 78, 49,205, 27,173,179, 96,236,
+ 37,143,175,185,104,158,200,204, 49,189,242,216,203,134, 70,124,166, 50,104,173,222, 18,254,156,174, 66,220, 68, 60,192, 30,145,
+186,113,240, 96,117,105,165, 50, 17,156, 29,227, 56,  9,  3,233,222, 59,148,255,  0,116, 91,243,186,116,164, 34,198,220,132,136,
+224, 41,241, 94,137, 88,151,212, 71,101,  5, 13,  9, 64,105,253, 62, 26, 97, 14, 23,144,136,170, 62,255,  0,183,191, 61,155,146,
+ 24,203, 73,175,174,163,250,105,126,146,220, 51, 74,241,197,115, 27,184, 80,190,110,130,164,141, 29,210,111,121,122,219, 19, 37,
+132,110,  2,123, 54,173,127,218,247, 45, 91,214, 25, 93, 34, 32,219,184,  1, 36,  6, 38,  4, 12,125,138,167,217, 57,100,135,178,
+ 59,102,215, 41, 36,176,189,165,128, 25, 27, 86,222, 73,167,153,196,210, 37, 24,238,121, 53, 93,122,131,212,236,117,235,196, 25,
+233,161, 48,  1, 51,133,185,  3,187,144, 85, 84,117,189, 33,211, 78, 16,136,203, 40, 66,212, 50,224,217,109, 64, 23,225,136, 91,
+237,189,212, 81, 64, 51,151,182,183, 57,  7,138, 16, 49,248,171, 68,105,204,146, 51, 22,170, 34,248,147,199,147, 61, 17,122,215,
+ 89, 91,192,135,183, 18, 35, 94,105, 26,122,112,106,149,144,182,216,227,185, 63,151,238, 76,238, 10,202, 39,135,  1,119,148,189,
+185,144,172,179,160,136, 67, 20,161, 75,213,213,164,228, 21,105,197,104,164,244,233, 93,  7, 27, 54,238, 22,206, 34,  0, 82,202,
+228,162, 48,116, 36,231,189,115,119,113,203,148,196,222,170,243,118, 51,206,145,199,  0,141, 27,202,209, 70, 37, 98, 11,108, 69,
+106,105,169,222,204,  7, 44,129, 80,200, 78, 88,132,214, 70,222,234,218, 78, 55, 80,201, 17, 29, 22, 69, 42,127,137,235,161, 68,
+140,131,148,164, 25, 85, 78,161,150,160,124,205,126, 31, 13,180,  5,224,163,141, 10,129,192,122,159,133,120,215,151,167,191, 26,
+ 86,180,175, 90,120,104, 38, 47,153,145,185,134, 85,249, 90,140,234,181,  7,118,219,226,117, 17,  1, 90,185,  2,139,179, 27,  5,
+ 86, 44,  8,114,106, 13, 65, 20,248,237, 77,254, 90,227,166,202,  5,171,129, 95, 56,142,160,248,108, 79,196,120,105, 58, 89, 43,
+ 77,201,254,101,227,142, 50, 64, 68,170,162,248,212,158, 71,126,154,141,152,146,156, 11,176, 59, 19,235, 52,252, 26, 66,165,133,
+127,157,106,139,225,212,248,233,153, 66,158, 19,145,204,119, 38,196,183, 68,188,130,178,240, 30,119, 99,204,  0,219, 84,214,189,
+107, 77, 72, 99, 28, 19, 97,114, 99,155, 16,173,236,241,246, 43,101,250,155,221, 82, 50,254,140,112,191, 16,228,249, 57, 63, 29,
+207, 16, 24,211,227, 67, 78,154,  6,237,217,230,200, 35,197,253,106,210,197,168,  8,249,143,193,189,233,139, 99, 28, 78,229,255,
+  0, 49, 57,150, 69,220, 45, 42,120,159,143,220,117, 45,192,100,219, 40,141,211,217,230, 38, 85, 14, 72, 10,116,151,242, 74,205,
+ 42, 34,199, 80,196,122,117, 28, 65, 29,  1, 53, 34,190, 58, 28, 89,  2,142,234,207, 32,147, 73,182, 28, 61,158,155, 84, 88,230,
+ 49,121, 80,176, 35,249,124, 55,213,168,184,204,200, 33,166,180, 77, 98,253,170, 81,200, 76, 33, 91,102,185,111, 66,188,140, 60,
+207, 30, 85,173,105, 93,112, 90,178,101,156,196, 58,176, 23,114, 71, 32, 44, 55, 40,239,120,161,124,179, 40,106,254, 32,219,128,
+ 62, 20,212,199, 33, 12,192,215,106,138, 90,160,  5, 38,  7,122,110,123,168,184, 41,121,249, 48,167,224, 45, 67,242,254,141, 50,
+228, 70,103,  4,118, 12, 20, 87,117,144,202, 51, 77,207,105,175,  4,192,187,136,242, 67, 33,101,240,106, 19,253, 26, 80, 17,  5,
+246,161,191,117, 25, 60,115, 56, 78, 40,102, 67,233,195, 36,160,158,138,140, 69, 63,215,171,104, 95,189, 40,180, 65,110, 10, 63,
+ 46, 44, 72,137,151,113, 77,201,107,120, 65, 97,107, 45, 13,105, 85,160,223,237,249,107,178,177,119, 28,178, 80,206,221,195,244,
+ 75,212,153, 56,235,249, 54, 48,144, 24,138,115, 42, 62,206,167, 82, 13, 53,210, 48,246,161, 37,165,186, 79,132,247,175,163,  9,
+144,113,248, 81,  1, 36,208,190,224, 13,188, 52, 68,116,114, 98,248,252, 20, 99,167, 95,144, 20,  0,118,167,211,183,242, 53, 28,
+110, 17,107, 74,128, 94,181,249,237,169, 15, 70,156,229,193, 77, 13, 29,240, 41, 49,235, 82,225,193, 94,146, 85,239, 35, 20, 30,
+ 97,197,137,235, 64, 60, 52, 69,174,138, 37, 47,242, 48,142,214, 70, 67, 75,168,  3,154,113,168,226,164,175,111, 58,238,110,234,
+212,242, 21, 79,  6,240,235,215, 86,182,250, 36, 99, 16, 69,195, 80,254, 28, 65, 44,216,169, 63,101, 34, 79, 54,  5,176, 78,183,
+109, 50,202,149,200, 23, 73,138, 21, 16, 66, 37,112,197,138,159, 42,191, 47, 47,136, 34,186,146,127,110,194, 25,127,189,226, 56,
+ 70, 25,142,223,202, 73,229,222, 67,113, 66,101,184, 76,207, 51, 71,120,106,240,216,125,111,193, 73, 94,210,148,145, 26,228, 67,
+ 36,164, 39,228,162,202,107, 93,135,150, 74,242, 32, 19,197,169,211, 77, 61, 23, 32,113,113,199,134,153,118,119,191,197, 71, 55,
+102,115,254,153,123,212,184,251, 22, 57,209, 73,203, 49,103, 17,243,255,  0, 14,  8, 82,236,203,189, 92, 15, 40,  4,159,224, 53,
+ 87,115,164, 59, 28,197,219,242,161,174, 12,162,170, 71,251,185,185,181, 38, 75, 92,187, 71, 32,228, 43, 20, 46,140,172,187,145,
+228,147, 98,  6,205,240,233,166,142,157, 56,225,113,187,136, 65,229,140,139,176, 86, 49,246,247,117,227,214, 55,135,184,150,111,
+ 85, 22, 71, 89,224,121, 40,178,121, 64, 44, 73, 53,168,161, 28,190,122, 62,221,157, 76, 89,174,211,136,116,239, 40,212,  4,246,
+ 90,239, 53,139,181,174,126, 91, 25, 44,101,127,166,146, 49, 28,168, 71, 34,124,161, 95,146,  2, 41,202,167,125, 19,118,253,219,
+112,107,162, 18, 18,237,247,224,160,242,206, 97,152,176,  8,126,207, 17,218,179,207,235, 37,197,244, 49,115,111, 45,167,165, 34,
+ 71, 29, 55, 60,151,145,216,255,  0,104,116,219, 89,232,219,211,153, 80,202,  0,238,193, 22,116,128,115,137, 18,119,130, 61,202,
+251,244,142,212, 82,232,185,171,162,128,176,183, 91,200,194,184,141,127,  9,243, 68,162,164,131, 79,187,199, 69,194,222,156, 22,
+206, 95,141, 62,  8,187,102, 98,178,172, 64,218, 54,162,140, 78, 50,222, 40,249, 99,187,204,177,228,188, 45,231, 22,247, 49,152,
+252,  1,141,220, 48,169, 45,203,137,  3, 90, 13, 32, 49,240, 94,122, 97, 35, 25, 10,123,125,202,  9,203,110,  5, 94,228, 49,211,
+ 77,135,119,203, 91,216,228, 21,153, 22, 65,109, 27,  7,  0,213,137, 85,243,245,173, 91,207,173, 32,  2,118,178,221,136,152, 44,
+128,152,153,  7, 44,242,145,181, 82,219,225, 47, 19, 26,199, 27, 52,145,216, 57,101,107, 27,170,221,218,185,143,110, 60, 77, 36,
+142,149,217,144,214,190, 26, 42,213,130,  1,242,100,195,242, 74,176,249,142,226,145,185, 54,  2,231, 52,193, 53,223,219,190,136,
+119, 19,153,205,166,102,234,216,207,111,103,144,117, 72,254,131, 48,228,217, 94,196,  1, 81, 31,170,224, 43,144, 54, 71, 98,178,
+111, 79, 54,170,110,234, 26,121,  8,242,238,140,  4,171, 27,157,255,  0, 87,  3, 73, 69,170, 10, 26,119, 72,137,  4, 59,173, 55,
+ 29, 20,150,216,104,149,113,255,  0,164,128,141, 44,150,147, 74,178,197,  7, 18,106,136,232, 72, 10, 43, 85,160, 20,  6,148,  3,
+ 68,232,117,145, 36,219,105, 66, 67,233, 34,159,209, 44, 36, 55,  0, 87,117, 54,103, 27, 48,156,  0,144,223,155,156,111, 21, 53,
+ 29,213, 68, 86, 78,183, 22,203, 48,252,113,240,142, 88, 77, 22, 69, 82,181, 83, 67, 95, 46,219, 48,219, 94,  9,255,  0,250,111,
+ 75, 54,181,112,214,196,114, 94, 25,101,194,113,192,255,  0, 84,125,203,216, 63,255,  0, 57,234,194,238,154, 90, 57, 17,154,201,
+ 38, 53,126, 89, 23, 35,250, 79,193, 91, 90, 57,137,222, 69,242,250,108,161, 19,241, 87,115, 77,246,254, 58,242,104, 17, 16,189,
+ 70,232,112,  1,218,172, 45, 39, 35,126,140,192,252,  9,161,252, 84, 39,166,136,129,162, 14,236, 17, 29,133,204,  7,211,  1,105,
+197,106,236, 88,211,144, 36,208,125,212,209,214,228,204,169,175, 91,149, 81,166, 46,236, 85, 74,154,174,192,  3,177,248,234,222,
+220,214,107, 81,105, 24,227,111,  2,159, 41,165,122, 83, 86, 49,146,206,106, 45, 58, 40,178,188, 38,128,154,141, 75,138,163,189,
+105, 91, 67, 48, 99, 81,247,107,162, 59,149,124,162,202,106, 72,121,196,127,218, 31,211,166, 94,147,101, 59,164, 16,198, 52, 41,
+140,220,127,226,  9,254,210, 15,232,209, 26,216,185, 61,138, 77, 36,185, 80,165,228, 96,177,242,  0, 62, 95,209,172,181,192,  9,
+162,191,181, 42, 42,199,128,212,149, 95, 42,138,177,175,135,207, 85,147,131,151,100,110,106, 50,129, 44, 37,133, 15,195, 97,183,
+ 79,187, 71, 89, 44,170,181, 17, 98,163, 27,113, 80, 84, 83,254,109, 91,194, 65, 85,205,194,202,191,113,183, 49,216,251, 71,152,
+ 73, 88,250,183,215, 22, 86,145, 29,200,228,211,250,167,145,161,218,145, 19, 95,142,166,147, 56,101,162,251,110,201,150,170, 83,
+ 24, 70,220,159,250,178,195,255,  0, 82,241,106,218, 89,217,194,215,185,  2,162, 11,116, 79, 88,157,163,102, 82, 60,188,  7,226,
+ 36,244, 26,126,121, 76,180,126,175, 90,245,191,218,233,244,208, 55,181, 36,101,128,139,191,132,144, 71, 46, 95,170, 71, 96,175,
+ 98,214,255,  0,111,254,200, 69,238, 28,205,222,125,233,106,255,  0,228,187, 73,138, 99, 49,101,130,140,157,204,117, 44, 37,  9,
+ 87, 88, 33,168, 14,188,135, 38,242,127, 43,234,207, 81, 31,219,  8,198, 33,228, 67,186,241,254,175,212,167,168, 50,183, 88,192,
+ 29,225,206, 62, 33,136,196,114,189, 54,135,195,213,120,222,192,237,220, 14, 79,245, 30,217,182,110,223, 18,177, 55,216,172,107,
+  8,113, 55, 96,131, 67, 37,139, 43, 64,146, 46,196, 79,108,145, 72, 58, 84,169, 35, 66,141, 92,165,  6, 37,199, 26,172,209,134,
+ 94,102,174, 14, 41,235,108,123,253,106,218,243, 25,105,121,103,117,141,190,183, 75,156,117,244, 79,109,125,105, 47,247,115, 65,
+ 32, 42,200,212,251,106,167,170,157,198,250, 81,150,106, 20,241, 57, 90,152,185,  2,210, 11,204,125,157,134,131,183,253,243,198,
+118,196,151, 14,227, 15,144,188,180,179,118, 96,100,104,  4, 50, 75,  7, 50, 70,245, 18, 81,252,191,139, 82,232,228,228,  3, 76,
+130, 96,118,212,143,138,246, 14,167,114, 58,142,139, 59,248, 25,192, 83,136, 49,117,233,177,104, 20, 33,101,228,191,192, 26,120,
+ 86,159, 13,115, 57,142, 43,198, 90,170, 46,110,234, 92, 46, 30,247, 37,103, 24,158,250, 36,  3, 31,  3,158, 43, 45,228,197, 98,
+183,140,144, 65,163,204,232,166,158,  7, 80,185,153, 17,143,138, 69,135,105,160, 71,105,109, 70,237,192, 36,  9,136,140,167, 60,
+190, 44,144,137,148,242,254,172,163,151,139, 32,222,218,201, 65, 40,107,224,208, 95, 51,250,232,249,  8, 63, 34,196,200, 37,101,
+146,120,201, 97,233,169,149, 89,131, 85,131, 54,203, 90, 84,123,238,150,216,253,157,168,198, 68,196, 66, 13,180,200,  8,134,237,
+120,250,163, 87, 83,125,199, 41,157, 76,129,  6, 37,160, 36,  9,115, 30, 72,188, 65,253, 62, 18, 77,105, 90,173,195,180,253,105,
+109, 88,218,178, 71, 43, 50, 30, 78, 68,242,133, 96, 20,243, 94, 96, 16,190, 21, 58,201,245,  6, 18,175, 30,  3,185, 99,173, 87,
+  5, 15,188,251, 55,184,242,152, 73,253, 59,215,203,101,125, 84,158, 36,149, 22,218, 52,137, 57,  6, 88,212, 22,140, 48,229,200,
+ 87,241, 82,135, 66,233, 53,118,173,220, 15, 17, 24,225,189, 73,114,220,136,222, 81, 53,149,150, 66, 94,218,198, 90,228, 45,125,
+ 28,148, 16,162, 79,  8, 33,130, 50, 47, 29,153, 79,194,158, 58, 19, 52, 69,201, 16,104,164,  0,152,135, 21, 79, 95, 89, 75, 60,
+144,188,201, 37, 17, 72,144,171, 10,116,174,234,118, 32,145,174,194, 96, 96,185, 40,146,129,123,139, 29, 12, 28,167,181, 85,141,
+ 88,134,150, 21,101,226, 43,208,208, 29,181,205, 84, 57, 51, 13,136,105,  6,193, 14,113, 83, 32, 95, 85,253, 32,132,143, 47,243,
+154, 30, 52,229,248,121, 15,197,253, 26,171,229,118,205, 68,179,  6, 95,147,107, 84, 66, 24, 84, 54,255,  0,246, 52, 41,169, 87,
+207,148, 49,193, 72,245,164,150, 37,135,164,107, 82,194,187, 18, 64, 21,223,199, 81,229,  0,186,144,206, 87, 35,192, 38,203, 34,
+198, 25, 65, 14, 13, 27,126,181,220,105,224, 18, 80,114,152, 24,  5,245,  9,126, 76, 72,165, 41, 70, 52,173, 77, 53,194, 25, 62,
+ 15, 44, 84,149,102,142,223,129,126, 75, 37,120, 68,164, 30,131,204,104,  6,213,240, 58,141,156,162,  4,140, 99,148,154, 41,176,
+ 90, 71, 21,171, 59,187,  5,116,  4,219,147,187,115,243, 10, 83,168,219,125, 15, 59,132,201,189,168,187, 54,192,137,115,142,206,
+213, 30,106, 77, 28,112,161, 22,241,  6, 99, 18,144, 40, 57,108, 65,115,185, 31,208, 53, 44, 28, 18, 77, 74,238, 92,236,  1,203,
+185, 71, 88,166, 59,250,167,143, 74,141,245, 47,152,  6,197,209,106,243,248,215, 53,153,127,238,167,126,155, 15,134,165, 23, 27,
+ 96, 77,145,187, 31,173,112,239, 43,  1,205,205, 15,135, 77,244,140,223, 96, 80, 78,119,  8,230,146,229, 81,152,128,166,164,248,
+124, 62,221, 40,135, 44,  2,132, 89,156,141, 10,180,130,202,192, 32, 19,220,115,147,196, 43,  5, 93, 77, 27, 36,156, 22,142,214,
+143, 74, 34, 60,201,230,151,104,101, 45, 32,195,165, 40, 35, 36, 80,158,114,  3,252,106,117, 97, 29, 60, 98,  3,179,246,236, 69,
+ 70, 26, 40,150, 25,123,200, 83, 45,174,177,240, 31, 35,192,136, 69,  1,  5,107, 93, 27,104, 70,219,248,106,140,181,169,177, 31,
+  9,136, 29,202,121,201,217,198,132,253, 84, 69,212,131, 94,123, 18, 55,173,  7,142,173,236,222,183, 24,214,113,113,197, 21, 61,
+109,161,245, 15, 90,140, 47,237, 40, 84,220,197, 67, 93,185, 13,149,183,211, 33,114,  4, 54,120,177,205,180, 96, 80,135, 87,111,
+243,  5,193,187,178,224, 79,212,196,141,212, 16,192,244,173, 53, 56,157,156,141, 19, 17,222,135, 58,139,117, 38, 97,215,209,121,
+102,121, 86,226, 34, 88,138,121,135,207, 97,240, 26,116,111,217, 47,207, 31, 90,140,222,182,  5,100, 19,137,123,105,207,151,212,
+197, 93,182,228,  7, 65, 78,181,211,225,126,220,100,230,113,245,174,155,182, 72,241,  4,224,189,179, 12,167,214,132,141,170, 61,
+ 65,208, 26,128,119,212,246,239,217,171,206, 56,141,187,147,229,169,133, 42, 48, 41,216,239,237, 16,173,110,161,173, 87,115, 34,
+ 31,192, 54,241, 27,106,202, 58,203, 99,255,  0, 36,127,212, 54, 38, 13, 69,182,196, 39,133,213,145, 86,  9,115, 24, 99, 66,  0,
+159,160, 81,184,  0, 49, 27,145,240,212,198,253,137,  6,140,243, 82, 35,252,148,166,194, 29,189, 97, 14, 46,  8,205,243, 51,186,
+177,182,201, 68,140, 34,182,186, 34,214,155, 89,199, 50,152,192,169, 98, 56,183, 42,  1, 83, 64,191, 26,233, 27,176,  7, 45,185,
+145,108, 15, 14, 96,195,185,176, 65, 74, 22,193,206,114, 25,159,171, 45, 79,182,133, 89,216, 95, 69,249,126,140,145,191, 19,110,
+ 35,114,234, 89,  4, 32,254, 18,  8,175, 33, 94, 85, 30, 31, 29,245, 89, 57, 68, 19,148,131,222,133,189, 45,229, 88, 77,123, 20,
+139,249, 18,173,178, 49, 47, 19,209, 91,154,206, 22,170,212,106,243,172, 97,151,194,135, 65,153, 18,106,131,131,  1, 82, 23,217,
+ 46, 13,180,  2, 87,185, 85, 10,165,230, 41, 85, 66,122, 21, 52, 28,124,181,229, 82, 52, 76, 38,216,209, 56,229,122, 50,170,151,
+ 61,105, 44,137,245,119,118,207, 27, 55,169, 60,114,161,149,228,169,224, 17,197, 10,150, 32, 15,195,181, 62,122,101,221,101,160,
+ 50,200,130,213, 68, 29, 41,155,147, 74, 40, 54,189,191,237,236,211, 11,169,238,174,213,206,237,  5,169,104,  3, 72,212,  0, 84,
+ 68,244,  4,239,183, 77, 82, 92,179,166,153,115, 78,  1, 67, 45, 44, 65,162, 42,182,139,177,173,145,227,  2,246,226,  5,101,140,
+172,171,127, 59, 20, 65,200,110,244, 11,230,106,211,143,245,232,168,249, 17,139,126, 41, 91,  2, 50,197, 89,163,118, 42,219,196,
+179, 98, 93,221, 64, 78, 75, 97, 35,111,210,128,189,119,175, 80,119, 39,122,106,194,212,172,183,132,122,147,174,202,184,150, 79,
+ 92,103, 61,187,183, 87,149, 48,230,192, 32,104,228,150, 27,111,166, 11,200,  5, 60, 93, 26, 51,185,229,191, 94,154,181,183,169,
+177,108,  2,217,123,144,147,144, 17, 53,167, 98,169,186,238,252,109,213,179,142,223,181,201, 94, 75, 11,170, 15, 69,165,145, 60,
+ 13, 56,122,142,196,253,156,180,127,252,164, 35,108,136, 60,167,187, 47,167,171, 20,163,111, 60,203,131,229,253, 68,108, 80,236,
+148,100, 82, 91,155, 16,111,229,133,121, 73, 20, 48,171,100,224, 27,134,142,226,198,122,165,196, 94,109,202,249,215,194,154,162,
+158,178,119,100,101, 92,162,185,113,185, 31,204,241,149, 37, 19,250,106, 41,149, 91,220,181, 19,107, 97, 13, 73,140, 36,  7,133,
+247, 76,111,220,180, 12, 85,220, 23, 80, 71,111,  3, 91,201, 20,202, 90, 37,136, 53,187, 20, 20, 83,254, 30, 97, 93,141,  5, 35,
+ 98, 54,220, 13, 93,219,188, 12, 67, 26, 55,103,179,103,125, 86, 90,244, 95, 28, 21,205,145, 76,124,252,  0,225,108, 73, 73, 35,
+111, 32,101,114, 57,240,173, 64, 32,142, 92, 69,  6,223,132,117,208, 93, 79, 69, 14,161,164,185,167,153,255,  0, 32,103,220,118,
+ 30,226,155,211,181,247, 58,126,174,222,162, 56,192,250,198,209,222, 21,202, 69, 33, 39,202, 79, 18, 75, 74,189,120,127,104,248,
+125,154,249, 43, 81,166,185,166,186,109, 92,142, 89, 69,223,211,119, 21,245,166,147, 93,111, 83,106, 55, 45,145, 40,204,  2, 55,
+122,  5,103,  4,113,195, 71,149,152, 70, 63,  6,220,141, 90,148, 63,103,142,154, 34,  2, 83,145,149,  6, 42,234,222, 78, 44,142,
+206,171,203,204,165,119, 36,237,185,166,199,231,169,224,104,234,182,113,112,204,138,241,247,235, 37, 77,  2,177,217, 41,240,  7,
+192,106,214,204,149, 13,251, 44,138,241,247, 71,202,167,170,141,235,171, 43,115, 84, 23,237,162,203,  9,234, 22,167,195,125, 23,
+ 18,168, 47, 65, 16, 89,201,210,191,118,166,  5, 83,221,138,180, 13,229, 86,248, 50,255,  0, 94,160,212,255,  0,140,246,132,  9,
+ 21, 82,115,  9,201,162,111,138,157, 88,106, 67,177,224,161,210,150,116, 53,119, 13, 73,219,175,142,179, 55, 98,202,234,212,213,
+116,150,219,237, 70, 20,235,240,251,181, 89,112,  4,100,110, 40,146, 66,120,133, 27, 17, 90,181, 55,161,216,143,158,187,106, 65,
+ 15,118,181, 81,229,182, 90,249,107,199,192,159, 17,241,254, 58,183,181, 32,  2,173,148, 75,172, 27,247,109,127, 37,159,182,120,
+120,101,121, 30, 55,205, 69, 28, 86,177,128,121,113,134,121,120,  1,183,243,111,255,  0, 99, 70,  0,110, 16, 48,  1,214,151,237,
+155,240,177,122,228,229, 19, 39, 16, 96, 42, 73,204,226, 35,183, 47,114,241,149,221,203,194,193,174, 67, 92,231, 40,198, 27, 40,
+ 60,241,217,175, 18,221, 78,198, 86,  3,118, 63,112,213,231, 76,211,194, 83,173, 32, 43,250,164,123, 22,195,170,235, 46, 91,241,
+ 15, 55, 87, 92,182,227, 88,105,195, 18,239,135,154, 71,138, 88,254, 80, 54,254,139,123, 83,217,227,179, 61,183,237,142,221, 37,
+ 90,234,222,197, 39,191,116,112,234,215,151,196,221, 92, 50,186,236,203,234, 76,193, 72,216,141, 87,117, 61, 65,189,168,153,144,
+102, 45,234,193,121, 21,151, 49,  4,212,203,152,246,237, 70, 13,  3,  1, 74,110, 63,155,239,213,104, 53, 82,101, 92,250, 78,165,
+ 92, 40, 44,167,144, 12, 57, 46,219,238, 14,199, 68,194, 76, 84, 82,141, 86, 14,253,153,  6, 91,247, 51,115,122,209,200,246,216,
+188,109,166, 98, 98, 23,242,190,173,161, 72, 33, 86,106, 83,118, 30,160, 94,167,137,248, 29, 54,196, 78,121, 75,108,112,245,  5,
+189,185,212,188,190,131,110,216, 35, 52,158, 28,114,153, 73,255,  0,233, 11,117,142,214,220,164,162, 82,254,169,161,130,128,122,
+117,229, 70,231, 93,198,223,  1,162,243, 69,139,247, 47, 58,145, 33,155, 98,196,127,112,185,248,172,113,120,220, 20, 55,205, 97,
+146,181,105, 59,133,165, 73, 22, 15,202,178, 87,138,221,121,157,201,107,153,144,249,119, 11, 25, 62, 26,189,251,123,166, 92,215,
+235,  4, 32,114,180, 36,115,110,161, 15,199,149,248,111, 90,239,183,110, 90,177,107, 81,173,184,211,133,168,135,182,217,179,101,
+ 34,108,223, 72, 50, 17, 98, 88, 18,227,  0, 66,103,219,203, 91, 44,102, 11, 23,139,183,184,253,105, 45,173,131,150,198, 68, 47,
+ 73,147,211,  0,176, 88,215,210,226,133,234,239, 51, 22,160,232,  6,189,135, 73,111, 38,142,216, 18, 12,  0,136,148,142, 80,192,
+179, 59,190,204,160, 70,135,181,101,126,224,214,220,191,168,207,118, 25, 36, 97,107, 52,107, 38,151,149, 14,202, 31, 23,123,173,
+191,183, 45, 44,179, 54,109,105,152,179,184, 54, 14, 33,105,109,239, 81,120,183,164, 88,169, 59,154,136,216,  9, 89,152,154, 21,
+  2,190, 26,205,117, 18,109,201,227, 32,245,172,125, 54,225,222,179,182,195,184,150, 10,176,123, 99,113,219,150,241,197,219,217,
+105, 32,180, 10,205,105, 53,212, 62,186, 90,162, 14,146,250, 83,219,250,168,104, 40, 87,115,247,157,  7,115,168, 27,197,231, 16,
+251,120,167,139, 57,112, 40,115, 63, 97,238,222, 10,111, 91, 51,220,121, 92,182, 40,162,162,221, 98, 36,138, 56, 81,157,193, 67,
+ 36, 17, 67, 20,138,165, 27,204,195,144, 64, 58,248,233,250,113,166,159,210,  1,226,163,152,186, 54,165,140,177,143, 35,  8,146,
+ 92,158, 67, 34,165,202,129,115,127, 61,197, 84,238,  9,  2, 66,189, 58,127,175, 83, 93, 62, 89,192, 69, 64,196,208,171,229,181,
+180,178,182, 22,246,136,171,207,207, 41, 30, 45,240, 53,235,243,213, 22,179, 83,230, 81, 75, 24,  0,154,167,158,180,219, 85, 12,
+ 29,117,126, 75, 45, 74,  1,240,212, 39, 21,118, 94, 65,148,132,144,136, 74, 83,122,110,117, 25, 21,116,104,184,124,172,173, 85,
+194, 16,196,150,216,248, 84, 31, 13, 56,160, 68,128,216,158, 72,229,  8, 36, 96, 81, 80,  2, 15,218,106,  8, 30, 61,116,195, 32,
+234,104,102, 78,172,223, 79,112, 36,182,170,149,132,198, 57, 18, 25, 75, 45, 13,  8,165,122,157, 52,131, 33, 93,235,166, 85,120,
+141,140,166,203,121, 13,218, 72,211,132,134, 91,120, 22, 40, 22, 62, 76,174,202,203,248, 77,104,180,  0,158,159, 29, 65, 27, 70,
+ 24, 57,115, 84, 68,110,198,117, 52, 96, 23, 17,198,110, 37,138, 56,216,180,140,172, 74, 31, 47, 22,174,228,  6,218,164,124,180,
+233, 28,177, 36,224,232,187, 98, 55, 38, 43, 80, 23,196,  7,215,244, 30,158,140, 78, 72, 47, 69,168,165, 72, 98, 40, 78,157, 76,
+185,182,159, 74, 41, 97, 35,155, 46,234,255,  0, 20,245,205,204, 87,146,180,179, 70,177,245,  9, 12, 96, 42, 14,148,240,233,253,
+ 58,108, 44,202, 17,202, 43,181,246,169,142,174, 55,101,152,225,128,139, 15, 95, 98,118, 76, 76, 72,210,  9, 33,158, 17,233,169,
+139,154,149, 98,245,220, 31,128, 32, 26, 87, 80, 11,228,128,196, 26,251, 17, 39, 69, 14,103,140,133,  3,118,166,227,197, 69, 63,
+ 57, 17,222, 40, 17,191, 27,  0,193, 65, 59, 87, 78,149,243, 22,  7, 20,161,211,163, 55, 46, 98,  6,220, 84,180, 22,200,  4,115,
+ 70,133,214,191,152, 20, 10,129,242,223, 75, 36,140,115,  3,142,197,109, 13,101,136,197,167,  7, 33,249,132,119, 36, 34,179,149,
+130,164, 67,145, 59,169, 85, 39, 77, 50,144,170,158, 18,210,220,194, 62,184,175,177,219,219, 49,175, 21,242,158,133, 53, 36,102,
+219, 84,208,177,102, 85,  0, 83,130,233,225,183,102,161, 84,160,168, 53,  0,111,163, 93,225, 66,245, 77,149,171,102, 85,  2,129,
+ 52,208,194, 13, 21, 20,129, 65, 64,  7,244,104,160, 88,151,217,177,  7, 43, 80,163,  0,152,244, 99, 40, 24,198,171,214,187,111,
+ 74,237, 93,181, 97, 44,179, 17,202,  4, 78,214,127,138,173, 22,128, 14, 66,104, 67, 27,147,197, 71, 33,208,211,106,143, 13, 50,
+ 22,196,185, 69, 74,136,192, 18,236,184,104,227, 14, 21,148, 41, 44,  1,219,192,141, 35, 24,230,102, 98,163, 48, 15, 81,183,224,
+145,142, 32,196,240,  0,143,188,111,246,105,196,  0, 75,236, 76, 48,142, 44,203,225, 22,202, 64,226, 58,157,169,224,117, 56, 97,
+ 38, 45,139,123, 20, 68, 67,114,249, 91,127,194, 99, 83, 95,230,218,131,106,142,190, 58, 62, 58, 90,135,202, 65,221,177, 13, 43,
+182,206,197,193,123, 65,201, 68, 74,228, 16,120,128, 43, 66, 69,105,215,127,179, 76,149,129,249, 67,112, 98, 91,184,252, 16,230,
+245,166, 96, 28,149, 34, 27,  9,238,  9,104, 49,178, 58, 21, 28, 93, 98, 96,167,147, 80, 26,149,  2,130,180, 39, 81, 71, 77,153,
+200,129,110,194, 19, 37,  7,194, 42,221, 59, 71, 39,198, 35, 61,164, 54,113,220,255,  0,114,215, 18, 39,152,  1, 93,132, 65,216,
+245,219,203, 77, 74,122,108,168,193,184, 58,138, 54,179, 26,  5,105,  7,183,114, 92, 21, 73,242, 49,196,100, 37, 90, 56, 98,149,
+232, 23,241, 31, 51, 32, 20,218,181,209,144,233, 82,144,241,101, 79, 58, 86, 53, 33,183,171, 40,253,184,203,172, 96, 73,150,185,
+ 50, 40,  9,233,131,201,104,  1,165,  3,157,199, 77,169,242,209, 80,232,115,  0,181,210,205,185, 75, 19,148, 80,200,158,208,223,
+ 21, 22,124, 14,123, 30, 97, 41,147,149,228, 87, 17,198,146,192,172, 74,186,134, 12, 10,239,229,  7,117, 59,138, 29,118, 93, 30,
+224,167,154,223,210,161,149,203,152,131,155,130,187, 92, 15,127, 92, 74,222,132,182,243, 90,202, 80,135,145, 26, 49, 54,202,202,
+  2,  2, 73, 98, 41,225,247,141,  1, 61, 53,248, 82, 55, 65,238, 77,132,174,154,229, 29,232,202,211,178, 37,138,194, 88,179,153,
+ 39,184,184, 97,198, 75,104, 98,123, 88, 67,168,245, 67, 23,114,236, 74,238,188,135, 29,200,209,113,179, 56,142,105,147,234,244,
+245, 41,225,  1,112,243,196,119, 19,243, 82,238, 87,219,156, 34, 74,169, 37,148,193,  7,229, 37,212,159, 91,112,202,132, 80,145,
+ 41,152,  7, 39,241, 55, 17, 79,235,180,183,114,221,176,207,183,181, 71, 32, 94, 46,194, 45,181,  8,247, 61,198, 55,187, 47,173,
+111,109,237, 45,120,192,138,109,231,146,255,  0,244,201,218, 48,129,184,130, 80,  0, 70,252, 67, 22,218,157, 55, 26, 27, 93,122,
+222,164,196, 64, 68,183,234, 49, 39,213, 84, 69,155, 50,132,179,182,109,198, 39,103, 98, 36,196, 98,178, 55,119, 10,210, 37,236,
+255,  0, 68,171, 36,109,126,145,100,229,136, 50,213,125, 43,236,107,165,194, 17,199, 98, 81,135,203, 68,216,132,165, 82,  9,111,
+204,196,142,201,196,137,122,221,118,243,128,106,207,221,155,180, 97,223,138,144,109,239,173, 37,111,173,127, 86, 14,  6,224,165,
+238, 52,223,183,167, 43, 85,233,117,102,177, 48,173, 69,125,104,185, 10,125,250, 50, 89,198,210,219,112, 62,230, 84, 23, 65, 20,
+ 87, 86, 55,182, 87, 80,173,206, 49,210,102,140,126, 40, 93,228, 43, 26, 41, 33, 69,120,176,169,232, 27,239,212,144,184, 14, 40,
+ 41,196,108,  5, 95, 98,175,228,  5,109, 25, 25, 21,217,184,177,167, 17,202,172,202,197,202,128, 60,104,169,212,245,215,157,253,
+239,208, 99,173,176,117, 86,255,  0,201,108, 84,  1, 89, 71,135, 17,238, 91,223,178, 58,247,236,175, 13, 36,233,106,103,150,180,
+140,190, 71,222,175, 97,146, 85, 96,174,192,240,171,121,183, 20, 93,205, 70,188, 24,112, 43,223,193,  4, 43, 88,140, 48,133, 70,
+137,170,203,201, 89,186,209,205, 65,167,134,218, 42, 12,216, 33,165,154, 85,117,127,142,155,200,206,221, 42, 21,  8,240, 53,174,
+140,132,138,169,191, 10,178, 46,176,184, 46, 12,141, 78, 85, 27, 10, 13,128,235,243,213,149,185, 21,158,189,109,168,139, 44, 38,
+ 53,  0, 30, 64,138,215, 71,133, 65,122,  8,154,194, 94, 68,124,180, 68, 85, 37,232,178,187, 86, 30,151,240,254,189,115, 80,222,
+ 84,187, 21, 97, 21, 86,183,235,206, 40, 15,200,255,  0, 86,141,157,109,192,240, 64, 89, 44, 74,163,184,128,146,104, 58,107, 63,
+116, 43, 56, 77, 86,201,  8,  4,124, 63,155,237,213, 92,226, 17,177,154,143, 36,  1,148,  3,215,227,246,232,112, 88,174, 76,148,
+201,181,  4,211,175,195, 86, 86,228, 74, 14, 69,151,153,255,  0,121,194,234,223,179,187, 92, 33,142,218,196,228,238, 13,230, 69,
+197,100,183,165,181,  2,199, 95,230,144, 22, 31,118,173,244,231,155, 12,219,130,209,253,191, 44,166,236,179,139, 67,151, 53,194,
+220,144,105,185,136,252,231,194, 49,241, 96,188,189,137,179,203, 66, 45,111,123,114, 24,176, 54,172,204,177, 94, 95, 48,107,153,
+149,249,126, 99,137, 73, 11,200, 31, 26,235, 81,211,225,115,247, 17,156, 88, 28, 49, 12, 23,166, 90,209, 94,150,152,126,214,  3,
+ 77,106, 91,110, 86,236,193,250,164,231,148,203, 26,230, 61,152, 47,208,191,105,138,221,123,103,218,202, 36,105,154,203, 31,  6,
+ 58, 73, 93,163,144,188,182, 11,244,238,225,162, 98,188, 88,165, 86,159,200, 69,119,213, 15, 92,133,219, 90,185, 27,164, 25, 92,
+230, 36, 97, 95,138,241,141,118,147,246,154,155,150,106,114, 74, 85, 52,229, 53, 20,236, 40,212,218, 18,  6,213,  6,163, 84, 57,
+144, 89,130,225,173, 54, 32,141,135,142,167,132,139, 40, 37,112,  5, 24,219, 36,101,153, 80,  6,122,  6, 96, 40, 79, 26,210,164,
+117,165, 77, 43,241,209, 65,157,246,148, 33,184, 72, 98,112, 77,180, 64, 80,236,106, 43,176,165, 41,241,233,169,100, 84, 18,153,
+ 94, 55,253,223, 90,218, 77,222, 86, 54,119,136,243,172,189,190,167,232,213,196, 84,150, 28,160,164,156,216, 16,  0, 14,192,240,
+220,141, 31,161,132, 70,170, 57,225, 41,151,136,  2, 56,203, 48,144,  3,107,236,111,120, 94,155,209,237,207, 81,208,110, 89, 50,
+  2, 50,243,205, 88,  8,202, 19,211,180,223,  0, 33,152,230,118,205, 26, 62,237,115,  1,219,248,204, 45,156, 56, 55,195,126,155,
+132,129, 21,108,224,202, 50, 36,107, 25, 33,214,  4, 91,136,228,  2, 95, 81,130,215,212, 42, 63,181,175,124,129,201,106, 34,220,
+156,196, 55, 32,221, 71,229, 35,149,184, 57, 94, 91,212,238,231,189, 40, 62,111, 44, 70,222,103,124,254, 92, 68,  4,240, 30, 44,
+174, 54, 45, 79,  5,113,123, 91,181,198,216,149,200,206,208, 11,153,178,246,242, 90,216,  8,130, 49, 46,174,129,163,184,226, 69,
+ 66,192, 80, 22, 32, 51,107, 29,173,203, 35, 83, 72,191,134,167,219,135,123,170,251, 79,223,197, 10,102,187,155,185,123, 35, 55,
+  6, 93, 59,142, 14,228,192,119, 21,195, 91, 94, 25,150, 72,240,241,223, 69, 24, 87,134, 25, 12,211,152, 30, 69, 82, 71,164, 90,
+ 62, 92,135,  2,116, 24,133,153,197,155,203,144,194,181, 42, 87,152, 46, 14, 97,181,106,216,251,185,179, 24,123, 76,156, 22,211,
+216,214, 52,101,142, 86, 83, 52, 82, 32, 40, 85,204,108,235,208,124, 72, 58,  0,129, 25, 24,146,234,113, 80,234,163, 33,135,182,
+ 30,172,214, 80,199,111, 35,191, 41, 22, 53, 84, 89, 29,183,171, 83,196,252, 78,157,114,217,152,198,170, 54,  8,122, 85,101, 44,
+174,  8,117, 63,132,245, 26,171,144, 32,177, 80,146,153,225,230,234, 58, 84, 54,244,173, 42, 71, 78,186,118, 93,155, 83, 87,228,
+164, 70, 50, 42, 63,143,207, 64,201,214,130, 57, 78, 24,167, 80, 26,  1,177, 32,215,125, 48,162, 32,237,197,215,104,  6,245, 98,
+ 36, 90, 83,134,196,130,104, 64,211, 74,105, 30,181,208,105,131,186, 68,236,136,231,207,206,131,113,208, 53, 40, 62,205, 34,  3,
+ 57, 80,180,196,152,125, 73,235,232,161,139,211, 49,201,206,102, 94, 87, 40,135,146, 84,211,141, 54,219,231, 95, 29, 50,212,137,
+119, 20,216,159,126,220,109,144,197,203,115, 38, 84, 52,252,221, 99,242,168, 44,166,181, 60, 69, 22,159,118,158, 72,142,212,200,
+  7,216,172,225,128, 27,238, 50, 75,193,232,173,235,213,170,104, 54,161, 94,156,171, 77, 11, 57, 17, 12, 59,149,180, 24,201,228,
+ 92,239, 82, 46, 45,167,182, 37, 38,152, 27,121,208,191,144,137, 11,149, 32, 14,117,223,162,245,211, 44,220, 18, 46,  5, 70,250,
+ 34, 39,  9, 66, 50, 18,151, 44,163,178,181,112,185,130, 40, 98,180,121,148,  9, 39, 50,129, 27,  3,231,141, 18,181, 36,116,243,
+ 18, 55,209, 19,186,101, 49, 25, 80, 49,236, 36,168, 33,106, 54,160,100, 11,151, 13,188,  0,174,237,110, 38,158, 56,174, 39,145,
+231,145, 26,188,102,118,146,127, 73, 69, 64, 28,205, 40, 55, 53,  7, 85, 55,161, 24,200,136,128,  7, 10, 15, 98,208,105,167, 33,
+ 16,100,239,198,165,148,171, 59, 83, 59,183,171, 26,192, 97,111, 86, 96, 10,168,100,167, 37,216, 19,242,  3,195,125, 13,114,230,
+ 81, 66,239, 69,111,106,216, 36, 25,  6,108, 85, 75,133,184,188,121,150, 31, 74,218, 87, 44,170, 20,186,134, 32,158, 59, 82,180,
+248, 13, 90, 70, 89,109,182,103,144, 13,186,155,223,127,106,175,191,107,204,186,236,209,147,151,199,180, 30, 27,217, 55,  8,178,
+146, 83, 28,193,196,164, 21, 81, 29, 79, 57,  1,217,128,240,  4,109,191,198,163, 77,145,152, 14, 25,184,236,254, 31,130,130,220,
+ 45,210, 36, 99, 76, 77,123,183, 31, 98, 83, 43, 89,220, 21,227,232,186, 61, 66,  6,229,198,134,163,113, 90,234,120, 24,220,133,
+ 75,211,114, 42,237,163,106, 76, 34,220,195,110,206,205,203,237,221,196, 18, 49,152, 84, 23,171, 60,109,184, 81, 95, 46,231,173,
+126,205, 43, 58,123,128, 49,102, 24, 21, 61,219,209,115, 35,183,102,237,202, 28,185,  9,  2,164, 94,146,  4, 66,124,229, 65,169,
+ 99,227,241,249,104,168,105,142, 98,115, 99,199,114,175,185,172, 49, 97,150,156, 84, 41,101,145,229, 52,126, 60,135,225, 27,125,
+219,232,152, 19,128,115,197,213,117,217,200,207, 22,125,152, 40,207,113, 34, 26,137, 78,221, 55,233,162, 76,242,201,132,155,177,
+ 87, 78,249,136,114, 83, 73,115,112, 72, 17,  3, 43, 10,238,  5,105, 93, 75, 25, 78, 69,226,242,238, 65, 13, 84,240,136, 50, 83,
+ 33,199,101,110,  1, 78, 34, 62,155,200,220, 77, 60,104, 22,166,154,177,211,232, 47, 92,145,131,  8,200,183,136,252, 49, 68,198,
+198,174, 97,216,  0, 55,227,236, 83,163,193,  2, 71,173,119,234, 49,232,176,167, 16, 64, 28,182, 45,191,255,  0,131,171, 19,211,
+ 33,  1,147,205,205, 41, 23,139, 71, 30, 82, 81,182,180, 18,153, 18,153,245, 81, 89, 67,134,198,192,225,165,135,213,  8, 84, 23,
+153,153,235, 93,137, 20, 62,  7,229,171,168,116,253, 53,163,153,185, 98, 98,  9,169,124,222, 38,236,175,173, 31,107, 67,106, 39,
+154, 46,127, 81,117,104,145, 44, 32, 44, 10, 32, 44, 65, 81,  8, 88,205, 13, 35,102, 52,  2,187,130,126,  3, 87,114,177,146, 32,
+  0, 98,242,142, 13, 18,206, 35, 34,118, 84,198, 71,112, 12,167,183,108, 68, 16,  8,219,128,245,118,145,181, 72,181,150, 38,138,
+ 11,212,150, 91,105, 74,135,141,170,172,188,  0,226, 36,138,168,132,158, 74, 64, 95,249,245,217, 70, 55,173,  9,190, 67, 39, 97,
+153,226,119, 16, 64, 21, 59,176, 84, 17, 23, 48,  4, 78, 52,168,119,198,174,234,101,185,134,220, 51,131,197,101,127, 85, 35, 72,
+214, 52, 30,138,  4, 94, 10,180,169, 36, 81,168, 56,212, 55,203, 64, 78,206, 87, 50,147,146,221,204,195,180, 41,173, 90,156,165,
+148, 68,  1, 92,113, 86,241,221,199,235,137,170,198, 32,140,175,  0, 27,210, 82,203, 34,138,120,213,149,183, 39,250, 52, 93,171,
+ 99, 62,100,193,167, 38, 38,219, 40, 87,189,211, 42,127,131,157, 29,140, 33,131,149,137,195,191, 16, 10,157,218,129,105,253,122,
+154,230,184,219,142, 80, 30, 91,121, 75, 41, 14,134,209,184, 76,228,127,148, 10,168,195,185,238,139, 70,145,217,241,121, 25,153,
+100,154, 66,132,248, 10,132,  7, 84, 87,245, 51,148,171, 70,222, 83,132, 45,192, 53,168,177,226,172,162,238, 27,233, 41,113,113,
+144,135, 30,244, 31,157, 12,113,199,193,154,128,168, 50,179, 16, 41, 93,192,213, 44,245, 16,119,148,192,245, 21, 91,168,149,216,
+138,179, 42,251,188,230, 38,238,228,219,189,240,188,102,141,201, 23, 19,203,120,  9, 84, 70, 82,170,149,  7,113, 77,215,113, 90,
+244,212, 50,213,218,145,196,200,240,248,132, 36, 98,244,148,162, 31,137,247,124, 17, 26,246,167,113,254,156,217, 24, 45, 32, 91,
+ 16, 35, 13, 98,101,244,110,164,182,144,131,197, 85, 84,  5,242,183, 30, 78,203,202,180,213,157,185,220,148, 76,132, 64,224,113,
+ 81, 75, 76,  4,152,177,138,163, 72,123,110,204,165,190, 99, 15,123,109,234, 74,145,195, 52,217, 25,109,  4, 96,176,227,198,101,
+139,210,252, 37,170,121,120,111,176,213,112,185,  8,131,230, 91,148, 95,107,159, 98,158, 86,108, 91,159, 38, 39,137, 86, 88, 43,
+159,110,131,  9,237,173,243,118,243,  6, 53,184,179,189,142,105,154,106,133,  4, 24, 72,229, 83,203,117, 95,134,141,210,220,211,
+146,241,140,199,121,175,167, 21, 37,201, 19, 22,  4, 20,101, 20,182,147,200, 32,183,207,119,  7, 25,227, 43,  2,229,241,114,220,
+ 63,145,135, 16, 37, 17,198,237,199,109,214, 94,163, 86,241,185,244,137, 72, 62,255,  0, 79,138,174,184, 51, 96,190, 90, 75,222,
+ 86,150,231,215,182,177,189,130,112, 98,108,133,205,237,228, 36,214,181,111, 74,120,100,100,168,167,146,190, 83,240,211, 76,174,
+192,179, 69,187, 74, 12,150,161, 87, 22,243,228,125, 53,145, 86,221,247, 82, 36,132,151,133,104, 65, 37, 90,187,159,134,218, 50,
+221,199,197,187,144,198,219,148, 65,103,148,154, 70,140,220, 58,152, 84, 80,200, 20,187, 16, 43, 66,197,  9,  4,237,212,143,183,
+ 88, 62,183,246,102,155, 83, 25, 79, 75, 17,110,244,139,226,208, 59,251, 59,  5, 23,161,244, 47,187,181, 90, 82, 33,169, 62,101,
+144, 25,241,156,119, 14, 61,166,168,154, 39, 23, 52,153, 10, 44, 12,171, 73,  3,115, 31,150, 56,144,  8, 53,234, 55, 26,241,237,
+127, 76,213,104, 46,121,122,136,229,145,195,104, 35,120, 94,189,211,250,158,159, 91,107,204,177, 44,225,200,220,199,136, 87,214,
+ 47,192, 66,118, 33,197, 61, 48, 41, 79,227,161,227,128, 92,188, 29,209, 94, 57,135, 20,175, 64,  7, 10,110,  1, 95,142,172, 45,
+149, 65,124, 98,137,113,146, 55,150,191,242,241,209,246,202,165,212, 69, 22, 99,222,132, 31,150,139, 11, 63,124, 34, 36,106,194,
+223,101,117,219,181,182,123, 21, 65, 28,202,238, 97,202,214,  3,255,  0, 46,154, 42,215, 53,139,125,138,174, 20,153, 85,211, 32,
+ 32,255,  0, 94,171, 53, 54,217,232,140,137, 80,100,183,235,212,234,146,104,168,205, 49,232,109,176,251,126,205, 14,213, 82,231,
+ 77,181,191,137, 26, 54,208, 81, 76,133,151,254,225,251, 94, 30,225,246,147, 62, 36, 85, 51,226,163, 92,173,179,253, 40,186,145,
+100,181, 59,240, 94, 75, 70,101,102, 82,245,216, 19, 93, 88, 18,  0,117,109,246,253,239, 47, 93, 17, 24,230, 51, 12, 29,141,118,
+ 80,208,144,112, 27,240,170,240, 38, 17,251,  5, 37, 17,247,107, 94,231, 50, 47, 88,231, 72, 67,147, 11,201, 81, 84, 85, 33, 87,
+129, 53,  2,187,248,235, 83,211, 78,156,204,121,144, 36, 29,219,126, 37,122,141,216,104, 88,194,253,201,106,117, 52,204,226, 82,
+203, 92,  4, 71, 36,  7,101,118,175,101,126,210,251,151, 17,121,131,207,246, 22, 54, 57,109, 91,182,238,133,220, 22, 55, 49,152,
+103,138,222,246,188,195, 45, 42, 71,170,188,212,150,109,158,149,162,233,255,  0,114,104,108,217, 49, 54,193,132,129, 49,148,101,
+143,  9,  7,217,199,  5,230,191,116,217,211,195, 82, 39, 96,101,137, 25,101, 22, 35, 36,129,122,191,230,143,132,224, 88,182, 11,
+209,223, 79,196, 83,111,157, 62,126, 31,109,117,141,202, 10,198, 25, 40,243, 69,215,250, 78,165,140, 92,161,140,149,124,137, 94,
+181,219,111,143, 77, 18,  3,174, 40,207, 29, 88, 42,210,172, 66,138,236, 42,199,106,159, 13, 62, 48,204, 64, 77,149,  3,175, 39,
+251,159, 62, 19,188,125,223,176,186,203,118,158,111, 45,129,199, 69, 47,109,219, 93,193,  9, 22, 51, 95,125, 95, 23, 63,152, 21,
+ 36, 66, 93,138, 34,200, 26, 79, 79,110,180,214,191,237,205, 20,110, 94,140,238, 66,228,101,154,  6,221,  7,151,150, 57,229,158,
+ 82, 37,232,207, 65, 46, 33,216, 47, 85,177,110, 90, 30,148, 45, 66, 81,149,239, 47, 81,114,116, 50, 48,183, 33,103, 52, 12, 11,
+ 57,172, 14, 99,132, 68,178, 70, 71, 42,220,109,179,241, 88,227,163,244, 75, 94, 99,214,104,237, 93,226,130,238,225, 82, 89, 73,
+ 21,186,183,226,247, 22,202, 73,221,215,156,107,252,224, 13,122, 61,221, 54,105,215,150, 76,248,199, 15,211, 47, 12,251,242,150,
+168, 43,197,139, 10,  4, 70,150,137,113, 15,161,107,111,100,194,239,159, 37,150, 52,188,179, 50, 66,225,188,208, 70,209, 37,192,
+ 83, 94, 70, 63, 78, 85,165, 89, 14,168,117, 51, 35, 18,105,220, 91,189,204,123,243, 68,236,146,150,  1,103, 93,221,222,182, 49,
+164,190,211,123,217,217,214,120,126,196,203,218,155,104,242,248,201,185,225,222,  0,202, 99,150,220, 61, 29,  4, 18,113, 44, 66,
+135,129,168,229,125, 58,190,128,141,136,221,  6, 80, 38, 68,108,150, 62,158,244,239, 51, 41,203, 32,195,130,197,178,190,221,228,
+253,164,238, 21,179,197,228,175,123,113,231, 66,248,254,228,194,220, 61,189,157,226, 34,177, 82,225, 28, 70, 88,  2,156,226,152,
+ 48,  4,213,106,135, 86,246,227,103, 83, 23,106,140, 66, 14, 89,173,203,226,180,108, 23,188, 62,231,225, 33,118,238,203, 20,239,
+ 62,223,137, 64,155, 37, 97, 20, 88,236,204, 72, 88,249,164,140, 21,182,159,194,148, 17, 55,219,168,206,132,  9,114, 21, 39,158,
+ 64,173, 86,159,137,238,142,218,239,123,  6,204,224, 46,218,117,131,242,111,109,218, 38,130,238,222,102, 94, 72,147,193, 40, 87,
+ 67,191,216, 70,234, 78,169,245,218,115,  6, 50, 12,187, 25,137, 84, 39, 61,  9, 58,211,122,115,249,113,248,234,163, 42,122,252,
+146, 82,141,184,168, 20,167,222, 52,  9,117,162,  6, 56,133,243,212,163, 26,110, 55,  0,157, 38, 81,155,160, 18,190,  7,224, 65,
+ 90,  6, 27,131,212,237,174,179,166,202,109, 85, 51,234,110,174,  7,169, 44,162, 79, 76,243,100, 99, 71, 52, 20,  7,166,253,118,
+212, 57, 35, 26,  0,202, 88,221,157,202,159,164,186,248,168,243, 55, 20, 45, 24,112, 20,168,102, 33,193,235,185,235,241,215, 73,
+ 17, 11,158, 86, 99,197, 92, 93,  5, 23, 37, 33, 67, 45,180,133, 21,155,136, 78, 17,142,130,135,240,131,215,125,  5, 10,197,205,
+  8, 71,152, 52,134, 90,130,185,100,145,221, 98,183, 47, 26,133,226, 28,132,103, 42,162,148,228,180,216,158,159, 45,116, 72,  0,
+242,170,158,222,156, 76,180, 93,189, 61,235,139,121, 76, 18,200, 86,  5,245,  9,175, 25, 64, 40,170,163,196, 31,158,164,148, 68,
+128,  4,211,130,112,149,200,147,203,183,  7, 83,173, 76, 92,222, 72,168,178,  2, 17,196,135,210,132, 51,110, 55,169, 30, 21,208,
+215, 51, 16,  1,195, 26, 84,162,172,196,  2, 72,241, 28, 94,145, 61,234,108,240, 60, 15,234, 11,139, 25, 98, 33, 79,  5,113,112,
+203,181, 15,154,128,215,250,116, 52, 36,  8,102,152, 63,233, 86,162, 38, 50,169,143,253, 94,218, 38,210,226, 69, 96,246,200,176,
+173, 67, 22,161, 81,202,180,223,150,228,124,180,236,131,  9, 85, 89, 89,183,114, 81,160,200, 56,224,251,248,169, 48,222,220, 70,
+ 28,164,165,217,233,203,167,146, 69,110, 65,208,236, 65,220,141,188,  9,212, 70,212, 75, 56,254, 27,138,178,133,129,137, 57,136,
+221,128, 60, 63,  5, 90,226, 56,104, 91,135, 34,119, 36,  1, 65,240,251,180,100, 75,161,101,  8, 90, 21,103, 81,158,250,209, 11,
+ 85,195, 48, 20,  0,111,163, 34, 14, 42,182,230,182,204, 92, 25,  7,245,168,175,148,137,216,  2,140,228,138,  0,  6,251,124,181,
+ 52,132,230,104,171,143, 82,180,225,193, 43,136,236, 50,247,228,148,136,199, 22,212,105, 60,155,120,117,220,234,198,  2,102, 44,
+195,114, 14, 58, 61, 94,162, 78, 34, 64,253, 84,252, 85,138,118,226,178,153,111,238, 12,142,  0, 37, 35,  0,116,234,  3, 26,157,
+180,102,159, 65,  0, 51, 77,216, 85,134,221,227,185, 88,203,164,102,230,187, 55, 60,  7,197, 77,143, 15,141,129,121, 44, 10, 71,
+226,228,245,144,210,149, 29,117,125, 13,  5,140,134,152, 12,207,137,111, 70, 82,199, 67,102,213, 68, 71,125, 84,159, 77,  0,224,
+136,120,154, 80, 80, 15,159,135,207, 86, 38,230,158, 49, 30, 84, 36, 91, 16,118,252,148,162,204,156,130,204,119, 46, 28,178,241,
+119,224,155,154,177, 20,216,252,219,225,225,168,239, 93, 50, 99,150, 48,150,218, 57,175, 19,185, 51, 46, 90,147, 79, 87,189, 50,
+114, 22, 16,183, 57,110,225,228,  5, 88,  7,228, 79, 38,232,120, 13,233,166, 71, 81,106,220,196,201, 25,132,125,117,225,195,  1,
+ 86, 67,203, 85,102, 56,220,143,173,253,203,145,158,199, 32, 98,158,172,187,154, 44, 81,109,214,180,171, 21,165, 53, 60, 58,157,
+177,249,164, 11,225, 22, 24,190,214,193, 68,122,141,129,134, 99,217, 31,155, 46, 31,185, 55, 87,142,198, 71,173,  0,105,101, 85,
+254,111,128, 70,242,253,154,158, 61, 86, 82,150,113, 19, 54, 21,121, 53, 31,128, 52,166,194,135,185,213,  0,194,217,169,219, 33,
+238, 98,155,108,238, 97,219,140, 48, 67, 12,164, 85,120,135,146, 79, 34,146,127,152,120,117,219, 77,158,179, 81, 34,205,  8,146,
+ 70,243,133,112, 39,219,236, 67, 92,234, 87,207,211, 24,211,137, 62,244,219, 93,231,156, 72, 94,227,209,226,160, 57,142, 53,137,
+130,236,  0,228,203, 93,190, 21,174,134,187,119, 80, 65, 38, 77, 71,164, 64,221,191,188,111,126,213, 93, 43,247,201,124,205,225,
+195,245, 97,238, 81,174, 30,242,100,121, 46, 47,231,149,  3, 47, 42,200,220, 67, 50,154, 29,136, 30,  4,109,174, 74,  6, 33,231,
+114, 77, 77,167,104,224,131,153,148,141,100, 72, 77, 91,227, 36,200, 50, 12,124, 19, 92, 51,141,217,106,170,167,122,213,137,160,
+165,  9,243, 29, 58,122,104, 94, 32, 91,132,174,187,109,150, 53,219,128,239, 92,181,104, 73,204, 93, 88,199,216,243,164,180,191,
+148, 91,144, 91,148,  8,125, 89,155,141,127,  7,129,220, 50,212, 84,108,116,255,  0,255,  0,156, 18, 63,220,158, 67,184, 28,221,
+222,142,166,253,153,222,140,251,127,219,124, 92,237,  9,189,143,140, 78,104,125, 71,229, 51, 43,181, 67,114, 82,  2,241, 90, 87,
+ 98, 65, 59,235,135,167,105,109,210, 49,126,218,165, 46,154, 79,136,241,237, 69,182,135,180, 59, 90, 98,152,196, 88,174,225, 50,
+ 50, 45,160, 19,221,200,212,100,224,234,162, 78, 40,213,  6,140,212,223,125,  5, 40, 91,132,168, 27,179,  7, 79,136,181,102, 15,
+ 44,160,157,152,145,248,167, 50, 93,231,149,187, 37,172, 44,163,181,178,  6, 86, 17, 76,245,185,127, 80, 57,  6,136, 24,  2, 17,
+255,  0, 15, 45,248,131, 65, 77, 62,119, 39,140,113, 80, 79, 81,180, 10,  4, 59, 97,159,238,156,148,151, 51,217,216, 91, 27, 79,
+ 81, 90,230,245,162,129,173,193, 87, 12, 41, 36,177,200, 25,134,196,168,  7,175, 77,  5, 25,106,100, 88,143,107,124, 20, 95,189,
+204, 25,136, 40,155,234,253,198,134, 62,107,220,  9,142,198,  4, 45,235, 94,207, 29,146,  3,197,207, 49,198,216, 26,169, 44, 66,
+143,133, 14,218,148, 93,190,  7, 52,135,172,255,  0,237, 83,202, 50, 56,  2,  7, 22,248, 34, 28, 86, 30, 92,135,210, 73,113,221,
+125,193,220,147, 92,201,194, 33,143,105,236,108,  3,138,114,165,196,199,207, 78, 59,180, 78,180,223,225,163, 35, 57, 22,  6, 70,
+ 93,148, 80,198, 20, 37,212,120,123, 18,199, 21,152,150, 36,192,226,228,203,200,210,220,193,125,147,200,155,155,163,  3,176,101,
+145,224,146, 39, 97, 34,  2,  3, 55, 33,190,245, 21,212,112,183, 24, 23, 49,136,226,135,185, 19, 16,192,  1,218,138, 97,182,134,
+236, 47,169, 60, 23,204, 41,198,107, 95,241, 49, 19, 83, 81, 21, 25,193, 42, 71,246,222,157, 54,213,133,187,207,248,124, 83,  8,
+ 44, 94,190,155, 23,114,150,154, 66,166, 65, 36, 48, 23, 70, 67, 34,203, 79, 40,  5,124,190, 69,165,107, 64,221,124, 52,108, 46,
+ 96,244, 42, 14,105,197,128, 37,182,154,  1,234,197, 73,130,246,231, 24,  4,160, 26,178,186,172, 44,  5, 92, 18, 60,193,  1, 20,
+175, 30,173, 77,115, 85,163,211,235,108,155, 55,227,154, 20,237,245,226,137,210,106,238,233,117, 62,101,137, 25, 92, 27,188, 53,
+161,113,181, 25,226,175,237,174,163, 50, 33,244,149,152,199, 29,164,141, 89,192,252, 64,149, 29,  7, 90, 26,248,107,194, 58,231,
+219,215,250,124,223, 43,192,185, 12,231, 44, 71,230, 45, 69,237,221, 39,174,217,215,193,159,158, 12, 36,237, 23,147,108, 14,140,
+177,167,192,158, 76, 73, 85,255,  0, 94,218,160,182, 93, 19,168, 70,112,198,209,172, 77,208,  0,  1,240,213,188, 67, 44,220,228,
+228,132, 75,143,220,169, 58,158, 10,150,250, 33,141,191, 37,190, 52, 58,117,223,241,203,176,170,121, 14,100, 68,194,182,144,253,
+223,213,163,180,227,251, 16, 84,227,198, 84, 73, 82,189, 52,203,246,209, 17, 41,130,191, 17, 79,158,179,183,172,145, 85, 43,174,
+ 76, 74, 79, 35,179,104, 44,132, 96,150,118, 77,180, 32, 15,233, 31,102,139,181,  2,233,166,110,169, 59,180,102,226,237,124,220,
+189,182,203, 30,126, 43, 27,135,198,179,168,117, 23, 11, 25, 43,177,168, 39,109,190,122,177,140, 88, 18,138,233,241,179, 61, 85,
+184,222,255,  0, 25,144, 18,171, 98,125, 29,126,119,123,113,119,110, 61,107,220, 44, 24,251,155,249,174, 25,110,174, 51,  5,202,
+ 92,179, 86,175, 51,  5,105, 89, 88,143, 55, 14, 36,159, 16,119,214,155,165,106,101,110, 96,242,197,153,222, 92,205,194,133,125,
+ 17,107, 79, 98,125, 62,225,208,130, 36,115, 68, 73,136, 57,163, 76,231,  7,173,118,  9, 49,237, 90,191,105,247, 15,124, 73,221,
+ 39,182,110, 48,184,190,230,200, 90, 39,165,139,189,179,206,126,135,146,137, 61,  3,234,139, 43,196, 60,221,140, 77,230, 70, 30,
+ 82,158,127, 49,109,108,245,  6,237,201, 72, 92, 16,242,136,104,189,100, 65,169, 44,210,175, 17,147,249,153,121,215, 90,209,216,
+189,103,247, 16,137,112, 76,103, 44,184, 74, 50, 14,241, 98, 11, 72,150, 99, 22,230,137,149, 64, 30,170,236, 78,229,143, 45,  5,
+206, 15, 37,115,118, 59,191, 22, 89,242,120,220,181,180,118, 89, 40,109,231,145,141,187, 72,144,214, 25, 18,159,150, 46, 45,217,
+163,144,161, 34,134,160,121,255,  0, 80,233,254, 81,140,160, 57, 36, 55,187, 29,222,158,220, 87,152,106,227,  8,205,224, 35,149,
+163,225, 47, 92,161,205,107, 82,228,140,  1, 44, 17, 68,209,239, 66, 63,229,247,106,186, 54,149,116,141, 85,100,233, 66, 72,212,
+162,208, 56,166, 59, 44,247,221,220,230, 87,183, 59,  7, 45,150,194,201, 20, 57, 21, 54,246,209, 92, 92, 20, 72, 98, 23,119, 17,
+194,242, 51,200, 66,167, 20, 99, 70, 98,  0, 59,157, 18, 45, 78, 89, 97,110, 33,231, 33, 26,213,223,209,150,163,237,109, 62,159,
+ 81,212,237,139,255,  0,227,128,149,195, 95,201, 95, 80,198,149, 44, 22, 45,237,150, 11,223,188, 46, 59,252,171,222,214,124, 59,
+115, 11,127, 45,206, 49, 38,184,134,254,230,235, 25, 50, 72, 26,  3, 20,102, 84,150, 40, 28,199, 42,167, 53,153, 65,252,176,104,
+ 41,233,125, 54,  0, 78, 50,145,202, 34, 50,214, 85,118, 25, 92,129,188, 72,  2, 75, 51,  9, 22, 28,208,106,245,122,121,126,246,
+240,145,148,174,207, 45,185,  8,212, 12,230, 68,151,230, 17,185, 10,  6, 28,196, 17, 45,203, 87,199, 69,136,190,154,215, 48,151,
+ 79, 29,212,134, 54,195,221, 65, 58,161,121, 42,202, 99,134,119, 62,117, 63,203,  5,216,168,111,195,242,189,189, 43,176,  6,217,
+139,128,249,193, 27, 55,152,140, 56,202,222,204, 86, 32,  0, 72, 46,137,  2,219, 90, 93, 91, 14, 81,219, 93,100, 46,163,138,226,
+113,  4,137,107,119, 58,158, 70, 57,163, 66,190,133,231, 16, 26, 41, 42, 24,181, 63, 30,179, 55,238,153, 83, 96, 20,114,228, 15,
+211, 45,177,223, 31,114, 34, 62,158,155,208, 70,112,218,119, 70, 89, 59, 39,184, 46, 35,188,155,184, 44, 91, 37,216,189,225,  9,
+245, 49,151,230,  8,248,137,101,133, 92,122,119,240,171,178, 74,208,209, 39,137,183,167,247,106, 52, 38, 96,115, 68, 97, 73, 71,
+224, 63, 79,185, 63, 38, 97, 90,141,254,155,125,235,239, 96,246,156, 89,158,193,186,236,254,234,127,213, 49, 54,151, 13, 96,144,
+201,229,184,176,187,180, 28,158, 53, 39,205, 16,133,233,232, 43, 40,162,126, 30, 81, 50,106, 89, 95, 25,196,161, 66,154,109,134,
+ 49,119, 30,162,160, 65,237,206,119, 15, 16,179,139, 43,111, 37,188,180,142,105,217, 31,212,146,  8,129, 17,249, 72, 32, 61, 79,
+152, 84,252,142,139, 61, 82, 16, 45, 40, 23, 80, 13, 56,217, 47, 98, 37,199, 96, 49,216,185,  5,204,113, 71, 46, 81,226, 88, 94,
+237, 20,115,244,186,136,235,246,138,211,227,170,173, 94,167,206,160, 12, 23, 99,109,149,151,  6,173, 56,159,141, 60,107,215, 85,
+249, 42,201,204,191, 36, 33, 68,146, 49, 32,145, 81,182,170, 54,245, 63, 30,157, 53, 79, 34, 65,102, 90, 56,212, 56, 41,153, 79,
+ 41, 24,128,  0,173, 72, 29,  5,126, 26,144, 96,135,185, 89,166,235, 93,191,151,199,109,117, 70,106,159, 73, 57, 16, 72, 10,  5,
+ 77, 43,183,198,158, 58, 97, 10, 65, 39,197, 58, 37,112, 80, 43, 51, 45, 60,180, 39,236,216, 31,225,166,101, 10, 92,228,124, 20,
+171,115, 55,174,171, 17,172,191,205, 84, 15,248, 65,173, 70,224,237,241,212, 82,102,115,130, 38, 46, 72,  3, 22, 83,224,138,120,
+ 17,189,117, 75,136,198,209, 73, 27,147,193,128,169,160, 82, 63,213,161,165, 40,200,210,135,222,172,108, 56,241,  7, 27,198,196,
+212, 83, 72,239, 36,229, 68,138, 20,162, 43,169, 47, 26,184, 36, 63,133,105, 93,181, 54, 72,176, 14,200,111, 58, 65,206, 95, 77,
+234,209,178, 17,156,100, 81, 19, 20, 77,102,140,172,156,124,210,250,197,152,146,192, 10,178,214,130,190, 26, 15,200, 62, 97, 32,
+ 18, 37,236,101,101,103, 83,  1,109,164, 68, 76, 71,172,158, 42,186,108,204,124,232,142,206, 43, 80,204,121, 19,242, 63,118,136,
+142,152,181, 81,127,242,182,109,114,192,190,215,197,248, 38,142,117,249, 18,145,114, 99,176,231,211,229,182,157,251, 81,189, 54,
+ 95,113,200, 19,150,  6, 71,138,140,249,124,139, 31,196, 16,111, 64,162,131, 83, 11, 16,  8,  9,117,173,100,141, 72,143, 96, 80,
+228,150, 87, 60,157,249, 19,226,107,169,132, 64,193, 85,222,187,112,151, 50,119, 86,152,156, 44, 87, 81, 27,171,233, 26, 56, 15,
+247,106,  8, 82,195,226, 73,240,212,209, 14,244, 87, 93, 43,163,139,208,243,117, 18, 49,137,192, 96,252,123, 21,204, 19, 97, 44,
+  8, 91,115, 18, 63,139, 45,101,115,247,138,145,169,237,  9, 81,206, 80,180,182,238,104, 52,212,183,149,255,  0,212,126, 43,167,
+204, 70,127,185,134, 89, 15, 64,193,120,138, 15,155, 17,163, 99, 48, 60, 35, 31,130,100,250,156, 78, 17,148,187,155,222,163, 77,
+148,188,118,252,171,101,141, 73, 37, 76,175,203,250, 20,127,167, 82,139,219, 64,218, 72,115,130,  2,238,186,244,139,  8,  1,218,
+126, 65, 52,110,114,206, 13, 38,142, 37,167, 42,199, 29,122,124,219,125, 25, 11,183,100, 60, 64,  2,  1,195,119,110,226,131,149,
+221, 73,218,  7, 96,249,166, 95,234,228, 60,102,188,149,217,169, 69, 13,193, 88,253,212,212,194, 19,184, 68,115, 72,147,220, 27,
+211,106, 14,102,229,115, 92,150,205,173, 95, 77,138, 40,181,128,158, 78,172,205, 67, 94,117,114,  8, 61, 58,157, 15, 11,  6,113,
+145,103, 35,125, 93,177,102,199,185, 10,109, 91,112, 75,252,151,209, 12, 81,161, 33,  0, 32,143, 62,225, 74,214,135,167,135,207,
+ 71,198, 17,132,100, 68, 43, 22, 98, 94,160,210, 79, 95,  8,173,118, 40,178,  0,201,196, 40, 41, 17, 28, 75, 18,130,167,137,169,
+232,127,228,117, 29,161,144,136,204, 96,101,  9,111,  4,179, 30,239,130,155, 52, 77,  6,220, 19,113, 92,168,140, 22, 60,203, 41,
+ 50,208,242,216,125,250,237,171,204,199,197, 64, 59,253, 61,234, 33,116,  8,215,137, 43,166,185, 73, 34, 17,  4, 38, 93,214, 40,
+130,150,103,245, 60,132, 47, 19, 90,165,  3,142,181, 52,248,106,208,106,160, 98, 31,112,  2, 63,155,233, 57,120,198,147, 24,185,
+ 35, 98,  2,233, 50, 25, 99,226,217,190,191,193, 90,217, 96,239,242, 34, 34,236,182,176, 92, 51, 66,134,104,217,164,105, 85, 75,
+ 31, 78, 40,131, 53, 84,113,228,124,180,219, 78,185,158,114,118,202, 39,155,113, 36,243, 18, 64, 31, 80, 12, 37,184,134, 93, 22,
+ 46, 28,104,195,110,205,200,154,219,180,240,150,109, 10, 76, 26,230,241,100,138, 67,245, 60,104, 21, 24,  7, 79, 69,  8, 65, 83,
+201,185, 61,124,163,113,190,165,134,140, 90,136,126, 98,114,158,109,195,102, 92, 54,162,172,219,179, 41, 72, 26,181, 59,213,158,
+ 90,230,218,218,192,100,  4,130, 43, 81,203,243, 65,218, 27,168,138,199,197, 34, 95, 42,242,221,128, 27,112,229, 93,233, 75,121,
+235, 33,106, 25,205, 35,226,236, 35, 22,227,179,214,136, 50,200,121,177,192,182,208,112, 61,202,132,230, 93, 92, 75, 97,108,177,
+188,136, 41,115,116,234,165,149,143,242,208,214,128,141,181, 85,119,169, 27,146, 50, 97, 30,210, 61,216,163,127,117, 24,  0, 45,
+135, 59,206,212,204,189,196,147,150,184,203,101, 21,163,171, 22,182,137,248,167, 38,  0,109, 28, 84,233,227, 93, 82,220,215, 64,
+ 98,115, 42,173, 69,227, 33,207, 49,216,  8, 93,219,119, 43,228, 47, 19, 27,219, 56,233, 46,167,185,  1,100,181,140,122,104,197,
+104, 65, 52,221, 85, 88,  6,229,229,165, 52, 32,214, 74,239, 45,171,103, 21, 83,156,  9, 60,  3,246,173, 15,183,251, 62,121,174,
+ 14, 99,187, 76,108, 65,  4, 98,236,137,134,  3, 32, 60, 17,100,152, 49,121,127,151,161, 11,182,252,134,139,183,106,231,138,233,
+102,216, 17, 80,211,188,131,212,251,149,159,115,223, 89, 44,240, 99,237,115, 18,226,177,246,204, 67,197,142,142, 54, 75,117,106,
+203, 17, 72,184,135,230, 16,160,221,149, 73,174,231, 77,212, 24,  6,  4,151, 82,144,192,230, 44,221,142,133, 83,186,251, 59, 12,
+145,220,165,136,189,205, 21,117,155, 35,153,185, 55,178,187, 74,228,147, 29,180, 92,144, 29,205, 23,146,245,235, 81,160,133,232,
+ 67,123,246,186, 14,119, 96, 60, 60,199,122, 59,197,219,251,139,220,240, 53,230,103, 48,253,191,219,209,183, 54,  1, 90,222,226,
+ 85,148,250,129,132, 42,193,227, 86,103, 60,140,146, 53, 58,113,212,254, 97,149,106, 23, 90,119,  3,147,148, 38,114,248,223,107,
+ 18, 37,192,118,230, 20,247, 71,119, 92,143, 74, 28,132, 66, 75,214, 50, 26,160,118,119, 36, 53,  8,  4,250,105,192,  1,225,174,
+ 92,200,106,206,118, 33,204,163, 28, 57,138,109,187, 95,188,214, 75, 91, 95,113,178,121, 41,113,208, 66, 94, 30,221,195,195, 24,
+ 71,244,168,170,110,165,183, 48,196,145,149, 27, 43, 75,191,139, 46,250,136, 70, 64,229,156,137,224, 62,105,190, 92,137,204, 64,
+ 69, 88,147,123, 61,181,173,229,157,188, 88, 46,216, 85, 16, 89,173, 22, 91,151,105, 13, 19,116, 85,138, 10,212, 21, 17, 35,179,
+255,  0, 41,167,152,220, 90,186,193,133, 61, 61,171,178,  2, 76,103,134,  0,  5,108,182, 11,111, 27,203, 16,100,163,214,108,133,
+221, 21,121, 31, 40, 37, 92,179,115,  0,127, 49, 45,246,106,222,213,224, 42,185, 56,150,  2, 67, 15,166, 62,142,186, 91,149,197,
+131,125, 31,228, 76,165,150, 39, 35,149,196,242, 21,227,194, 53, 36,245,  4,249,136,219,248,232,153,136, 92,129,140,198,104,144,
+196, 29,160,169,109, 92,185,  9,196,195,199, 26,129,249, 78,242,119,173, 55,180,187,142, 59,169,227,131, 40,145, 88, 27,135, 81,
+ 10,146, 10, 23, 36,144,168,196,131, 95, 14,155,129, 93,121, 63, 86,251, 82, 26, 72, 27,182, 76,164, 51,120, 91,  0, 92,209,182,
+ 12, 23,162,233, 58,209,212,200,218,144,230,140,124, 89,169, 44,  1,167,181,106, 82,178, 45,176,  0,212,146, 56,211,113, 74,245,
+174,178,134,129, 73, 16, 76,149,174, 57,182, 30, 58,146,217, 64, 95,  8,142, 58,122, 77,243, 83,167,221,255,  0, 28,187, 10,166,
+150, 40,162,159,225, 98,251,181, 99,165, 31,217,130,163,250,202,142,227,115,162,110, 64, 16,164,  5, 48,202, 53, 87, 59, 32,169,
+129, 92, 19,191,195, 65,157, 38,228,210, 89,112,192, 31, 29,180,248, 88,108, 83, 29,215, 34,170,106, 55, 43,184,251,180, 68, 45,
+ 16,104,184, 89,151,231,231,185, 93,189,109,217, 62,244,102, 59, 97, 38, 19, 89,101, 39, 23,150, 22,151, 86,194, 43,120,173,174,
+149,100,141, 22, 88,148, 23, 94, 68,174,198,171,199,126,181,211,172, 89, 54,231,152, 71,149,242,255,  0,237,127,135,185,125, 25,
+246,191, 91, 58,155, 49,141,235,146,149,201,195, 48,139,  1,151, 39, 44,196, 79,212, 95,152,131, 81,152,111,  5, 65,204,225,237,
+ 46,108, 95, 41,123,237,218, 91,226, 48,210,164, 12, 99,149,173, 69,227,207, 48, 99, 44,207,103, 35,  8,212,126,  8,218,188,156,
+189, 88,236, 53,185,186, 33, 45, 52,238,220,182, 37,114,203,229,175,230, 96, 78, 81,226,108,126, 85, 66, 67, 76, 53, 18,185, 97,
+196, 33,112,143, 46, 50, 17, 18, 50, 25,179,200, 53, 90, 78, 24, 29,160,188, 64,147,173,247,219,191,112,187, 25,178,120,204, 63,
+180, 61,200,241, 92,197,232, 65,144,236, 94,242, 91,217,110,146,193,167, 70,189, 24,171,203,179,234,153,163,141, 75,122,  9, 60,
+208,177, 64, 85, 20,213,140, 68, 66,236,101,106,235,131, 38, 35, 17, 80, 41, 67,179,139, 83,  7, 17, 94, 55,212,116,154,139,102,
+113,187, 19, 35, 18,217,170, 15, 43,185,168,121, 10,248,139,179,  1,152,  5,233,107,136,168, 89,  1,173, 54,229,183,195, 99,247,
+245,214, 91,202,108, 86,104,128, 85, 93,210, 13,233,183,244,244,212,209,181, 92, 16,210, 32,  5,231, 63,220,254, 55,184,251,159,
+ 29,130,236, 62,215, 62,189,254,122, 60,172,159,164,155,136,173,126,181,237, 96,140,197, 24,245,157,  3,178,146,238, 18,181,241,
+166,218, 59, 73,165,156,181,118,166, 70,104, 90, 34, 83,139,179,196,201,189,155,118,128, 92, 45,255,  0,219, 23, 52,150, 58,126,
+190,245,242, 35, 60,158, 85,178, 67,156,211,183, 50,209,196,140,220,188, 41, 82, 20,255,  0,219,198, 43,189,109,189,189,199, 89,
+247,164,183,  7,184, 49,220,177,118,246,183, 49,241,154,218, 43, 41,100, 72,227, 14, 36,104,238, 10,  1,193,135,145,248,  0, 42,
+104, 53,178, 51,104,185,192,190,231,108, 57,136, 39, 22,204, 38, 40, 94,181,114,178,125, 78,220,108,217,177,106, 62, 57, 71,205,
+153,113,204,110, 86, 14, 49,120,192, 10, 18, 88, 75,  8,151, 11, 65,150,194, 91,179,147, 24,168,209,115,147,186,169,179,191, 87,
+ 56,219,213,183,  7,240,169,172,104,238,  9, 30,168,  0,214,130, 80, 24,  2,  8, 55,188,177,  3, 42,192, 12, 98, 70,120,191, 28,
+ 72, 31,151, 15,200, 89,103,241, 45,181, 65,142,238,231,184,113,151,243,118,135,162,249, 76,113, 91,105, 49,185,132,146, 57,225,
+191,181,164,233,143,201,198,227,154, 39,224,107,107,144,197,227, 37, 93, 57,167,247,149, 50,187, 19, 33,155,  3, 90, 54,223,168,
+ 54,  7,243, 69,171,185, 74,212,167,167,166,197,147,119,101,229,175,118, 98,111,114,184,140,125,206, 46,  7,187,105, 59,143, 20,
+233,199, 39,218,125,223, 20,102, 75,124,173,179, 70,173, 72, 46, 74, 52, 23, 82, 66, 56,185,252,192,  3,250,192,186,221,175, 46,
+224, 18, 98,222,169, 68,252, 66, 97,231, 25, 98, 11,157,131, 23,238, 65,217,126,248,238,219, 92,174, 27,221,156,  9,130,195,188,
+101,129, 48,189,237,132,148,133,177,205, 11,100,245,172,238, 26, 53, 32,131, 36, 65,208, 72,190,120, 94, 50,163,146,138, 49,118,
+244, 49,145,148, 35,142, 49, 59, 56,130,160, 55,170,253,197,111,189,135,238, 15,111,251,157,129,108,166, 19,157,173,245,163,172,
+ 89, 76, 61,199, 31,171,176,186, 35,144, 87,227,179,198,227,120,229, 95, 43,175,192,130,  5,125,251, 38,177,149,  8, 83,198,224,
+ 56, 43,153, 99,146, 53,  5,208,170,183, 46, 35, 98,118, 52,111,159, 81,227,170,177,  6,162,154,133, 49,192, 80, 31,229, 39,226,
+ 43,177,212,217, 84, 44,191, 32, 85,136,218,187,106,156,133,102,  9,118,116,232, 82,234, 41, 78,160, 55,199,125, 49,217, 60, 85,
+ 60, 98,242,154,149,  7,192,125,159,102,153,153, 17, 40,114,236, 77,162,  3,181,105,203,196,255,  0,167, 78, 37, 68,  0, 24,238,
+ 93,145,231, 52, 60,144, 26,171, 82,155, 13,129,167,134,185,177, 56,  7, 60, 21,157,165,255,  0,208,173,195,199, 90, 92,132, 64,
+194,160, 40, 93,206,194,149, 53,  3, 66, 78,215,152,192,236, 69,219,212,121,100,203,125, 20,139, 40,225, 49,128,226, 73,165,144,
+114,101,142,170, 65,110, 66,155,117,220,  3, 95,134,153,122, 68,157,129, 23, 96, 71, 40,196,230, 15, 78,245, 42,226,107,101,119,
+146, 50, 37,150,126, 44,232,164,143, 73,128,  0,174,192,  3, 81, 93, 50,204, 38,105,128,143,181, 59, 81,229,196,146,217,179, 55,
+114,137,234, 52,138,177,160, 11,233,254, 22,  3,204,107,225,203,106,141, 23,144,129,152,186,134, 51,  4,  8, 12, 66,224, 99,204,
+210,  0, 69,  9, 62,101, 20, 30, 21,173, 78,184,237, 18, 84,198, 17,148,196, 75,186,152,123,118, 22,148, 36, 18,177,143,138,191,
+ 39,  1, 72, 12,  7,154,135,249,119, 27,232, 63,221, 75, 43,145,233,243, 71,199,167, 91, 55,  0,  4,179, 62,199,237, 95, 95,183,
+109,253, 88,163, 23, 68,  7,  4,179,158, 37, 64, 21, 36,138,120,109,166,141, 92,152,156,184, 35,227,209, 45, 73,191,184, 75,246,
+ 40,215, 24, 59,120, 96,138, 79,169,111, 85,212,179, 33, 81,226,124,160, 83,229,185,212,246,245, 18,148,136,100, 45,206,145,  8,
+  0,115,159, 76, 20,139, 92,106,219,198,173, 51, 71, 63,169, 24,146, 49,200, 49, 81, 90, 83, 98,120,157,171, 67,169, 70,169,139,
+ 85,129, 98,139,211,104,227,106, 15, 54,157, 41,195,228,164,112,136,113,244,192, 12,122,208,116,167,129,219, 83,157, 92,  1,192,
+251, 17,241,128, 35,148, 49, 95, 93, 66,129,230,  2,189, 43,240,212,177,234, 17,118,140, 75, 46, 27, 79,181,151,207, 65,149, 84,
+ 18,  9, 32,145,185,241,251, 53,203,125, 70, 34, 35,148,150,125,173,138,124,180, 82,  0, 84, 85,125,250, 75,144, 43,199,130,  0,
+  9,145,171, 64,181,235,224, 63,167, 83,127,205, 68, 23, 17,216,204,234, 25,116,251,130, 56,176,222,161, 92,220,197, 10, 19,  3,
+253, 68,201, 90,209,124,170,126,100,154,127, 13, 19,107,172,220,  7,192,  0,216,228,154,109, 85, 58,152,198, 35,146, 89,229, 29,
+194,142,171, 36,187,184, 82,174, 21, 84,177, 36,210,167,113,225,168,255,  0,125,115,133, 48, 85, 23, 46, 78, 36, 22, 21,170,141,
+245,183, 38,161,152,116, 52, 20,240,235, 77, 76, 53,215,229, 76,219, 27,185, 86, 27,242,171,178, 81,203,119,113, 40,142, 30, 82,
+ 74,106, 16, 38,228, 15, 19, 65,242,212,145,185,168,187,113,161, 35, 34,119,109,166, 41,144,187,114,225,104,  7,220,174,236, 59,
+126,118, 28,242, 19,152,192,243, 44, 17, 16, 73, 32,131,230,109,194,142,157,  1,213,174,159,167, 76,137,121,178, 46,207,150, 39,
+118,243,244,236,171, 43,237, 47, 74,184, 88,221,155, 13,195,231,252, 81, 62, 54,214,210,205,  2, 89, 66,176,144, 67, 92, 74,164,
+ 61, 96,101, 84, 98,193,170, 73, 12,121,117,217, 75,109,182,181,186, 91, 54,173, 69,172, 69,179,120,176, 39, 44, 64, 18,169,195,
+153,143,100,142,229, 97,228, 11,  6,140, 34, 55, 98,231, 10,251, 49, 86, 81,202, 35,243,199, 71,189,112,144, 44,193,193, 88, 99,
+ 80, 26, 70,232, 66,250,191,140,178,208,146, 79,142,155, 55, 25,165, 22,206,114,128,123, 88,211,242,198, 78,242, 96, 73,170,175,
+158,155, 52,128, 15,148, 72,147,198,155,118, 22,110,  2,131,114,249,115,152,177,179,182, 72,175,102,226,143, 19,  8,203,213, 25,
+ 90, 85, 67, 39,  2,106,237, 66,238,190,101,229,229,  6,166,167, 85,215, 53,177,  6,167, 98,135,202,242, 71, 57, 17,239,244,170,
+161,190,238,233, 36,181, 54, 86,145,188,145, 23,245, 26,105,128, 64, 76,136, 81,170,  9, 37,133, 11, 13,233,182,133,253,225,144,
+203, 16,227,138, 22,231, 82,183,152,152, 68, 72,224,231,  4, 55, 43, 73, 44,139, 27, 36, 48,196,228,186,195,111, 26, 70,164,244,
+ 30, 97,185,220,208, 85,180,216,192, 65,196,128, 28,  0,  3,211,214,169,175, 94,149,195, 86,136,253, 33, 89,118,255,  0,104, 94,
+231,102, 73,238, 34, 54, 24,226,190,175,212, 58,147, 36,145,239,253,210, 53, 57, 84,138,114,233,246,244,213,109,189, 53,203,197,
+204,114,197, 23,165,208,155,181,145,104,173,111, 31,152,237,142,209, 22,216,220, 29,176,121, 81, 23,212,142, 15,204,154, 75,146,
+204, 11,220, 76,196, 14,148,226, 42,  7,203,195, 87, 80, 16,183, 16, 35,177, 88,222,179,103, 77, 18,  9,174,  1,177,252, 20, 27,
+236,230,107, 37,  4,247, 55, 19, 60, 22,130, 70,123,132,137,137,158,172,197,143, 57,138,129, 94,172, 56, 15,194, 52,243,  9,  8,
+102, 56,113,162,175,187,171,156,136,110, 88,237,108, 80,147,193,140,203,100,255,  0, 77,180, 91, 38,156, 41,107,203,153, 30,150,
+235, 16, 34,178, 25, 15, 46, 68,146, 41,229, 46, 42, 22,154,172,156,237, 76,179,230, 60, 16,144,129,184,114, 68,247,162,174,223,
+191,193,118, 91, 45,206, 14,201, 50, 57,209,234, 72, 51, 23, 49,177, 88,232,  9,255,  0, 15, 30,228,  0,  9,106,113, 21, 52,171,
+211, 81,121,113,140,152,  4, 76,133,171,  1,192,204,119,236, 68, 88,172, 63,119,119,196,201, 54, 82,226,238,207, 22, 61, 38,135,
+215,139,233,204,136, 15,  5,244, 97, 99,233,173, 91,146,137, 39,  6,157, 64, 99,166, 54, 98,197,219,211,189, 48, 66,119, 70, 99,
+ 65,193, 24, 67,222, 61,141,217,152,245,196,246,174, 60, 95,223,163, 68, 94,230, 41, 15, 22,120,153,157,150,230,241,232,103, 49,
+191,225, 10,164, 83,224, 52,131, 53, 61,105,178,156, 45, 84,  5, 30,210,211,191,189,231,150,225,110,114, 63, 67,219, 32,178, 93,
+222,198,139, 29,161,244,201,  6, 43, 88,249,114,184, 96,205, 70,145,219,210, 77,249,110, 56,233,178,204,104, 16,177,243, 46, 99,
+ 64,173,251,128,222,246, 77,253,170,152,198,115, 44,109, 98,179,197,220,230,111,222,238,229, 36, 86,224,209,155,116, 88,214, 37,
+146,169,249,145,201, 16, 59,114, 36,117, 80, 25, 41, 17,134,245, 33,  2, 27,113,244,162,153, 26,222, 90,205, 38, 62,237,155,185,
+187,204, 44,126,189,178,204, 18,198,198,119,  5,184, 75, 36, 96,164,  8,163,240,194,161,166,144,121,152,111, 93, 90,105,245,  4,
+224, 84,185,178,210, 53, 59,202,179,178,196,108,249,172,245,201,245,184,  4,188,153,151,211, 64,203, 86, 17, 67, 24,111, 34, 86,
+157, 42, 79, 74,177,174,173,237,222,205,138, 39, 52, 45,188, 99,137, 95,101,186,100,153,174,103, 95, 74,217, 73, 22, 73,112, 10,
+ 24,144,241, 12,238, 69, 64, 30,  7,109,186,104,161,206, 49, 79,183,253,160,208,241, 75,216, 62,104,255,  0, 23,220,249, 56,154,
+207, 29, 20,141,126,150,225, 86,101,144,149,225, 17,241,228, 43, 90, 87,202, 15, 80, 53,157,215,244, 61, 38,163, 52,200,203, 41,
+109, 31, 37,117,167,215, 92,182, 69,176,115,123,219,107,157,235, 83,237,236,148, 55, 80,242,168,142,101, 97, 25,140,144, 15,225,
+  4, 17,242, 53,240,215,159,235,250, 85,205, 25,139,156,194, 91, 85,137,191, 27,230, 89, 65,229,197, 25,192,220,161,249,210,154,
+168,191, 75, 82,236, 85,147, 13, 36, 93, 79,200,136,125,159,213,171, 93, 56,254,212, 59, 22,123,234, 41,151, 31,215,162, 38, 19,
+129, 77, 17,160,167, 21, 38,100,211,160,215,  5,  2, 78,154, 41, 78,154,232,170,226,250,170,165, 79,154,140, 40,  2,211,168,251,
+117, 46, 80,202, 50, 74,243, 31,238,211,181,114,147, 77,219, 61,213,135,130,  9,164, 86,147, 31,123, 28,170, 68,175,233,214,226,
+ 32,146, 41,228, 60,190,189, 87,139, 84, 10,208, 17,160,111,198, 25,162,100, 76, 93,195,236,124, 64, 32,126,108, 31, 98,245,127,
+177, 58,150,170,216,157,155, 38, 39, 44,132,204, 38, 72,205, 25,114, 75, 44,170, 35, 32,114,154,196,130,236,225,102,157,187,103,
+220,153,171,120, 33,195,103, 44, 49,184,155,216, 61, 12,245,189,220,114,250,243,209,212,250, 62,162, 70,232,168,206,171, 87, 42,
+ 24, 45, 41,215, 91, 46,137,168,  2, 81,153, 57,135,212, 27,254,146,248,133,187,235,176,184, 53, 48,205,  7,183,110, 66,224, 49,
+ 60,217,163, 88,128, 11,  1, 31,204,106,245, 12, 49,  6, 87, 89,126,226,136,247, 54, 43,221,127,107,110,253,201,192, 90,229, 46,
+ 35,131, 61,135,134,209,242,152,223,194,170,144, 44,126,148,161, 80, 15, 81, 38,133,213,145,171,191, 74, 58,237,187,226,115,148,
+188, 52,242,217,185,162,193,169,155, 48,246,151, 94,103,215,116,150, 26,196,244,115,108,240, 18,202,236,220,212,241, 23,204, 56,
+102, 52,216,206,182,207, 99,243, 56,172,239,109,228, 32,193,247, 85,215,116,227, 44,174,248,216,174, 88, 48,205, 99, 32, 49,162,
+182, 63, 32, 37,252,214,150, 25, 21,202,188,139, 86, 70, 93,218,156,136,154,217,139,178, 23, 50,  8, 59,114,135,220, 43, 95,205,
+138,243,251,246,101,109,132,131,254,172, 95,110, 59,235,133, 40,212, 71,151, 48,245, 52,168,254, 58, 16, 22,  8, 51, 21,224,191,
+221, 31,112,119, 13,247,186, 54,248,203, 12,183,209, 73,219,249,172,101,190, 10,226, 83,233,195, 99,118,246,112, 78,211,146,168,
+204, 20, 75, 40,118,106, 53,105,210,128,106,219,163,223, 34, 90,129, 90,229,  0, 83, 97,219,250,119,239,168, 43,208,174,116,251,
+ 87,126,221,210,194,208, 17,187,127, 80, 51,147,245, 25, 70,230, 95, 97,  0,110, 94,163,236,188, 78, 83,  3,103, 37,211,198,237,
+144,190,121,175, 50,216,180,153,101,177,186,185,145,185,189,197,140,128,126, 90, 59,114,145, 86,188,144, 26,127, 41, 81,160,150,
+ 83,110, 22,228, 67,196, 14, 97,153,226, 77,101, 25,  9, 23, 32, 72,176,216,219,168, 86, 27,171,234,161,168,213,206,118,137,149,
+176,209,142, 96,210, 16,128, 17,136,163,224,  3, 99, 92,120, 35,191, 94,215, 33,110,183, 17, 74, 86, 89,101, 49,193, 43, 21, 73,
+227,157,226,227,233,185, 33,145, 39,226,124,140,124,143,208,236,119,170,148, 37,  2, 98,216, 10,238, 33,241, 27, 76, 95, 17,140,
+123,149, 85, 37,130,204,251,179, 15,150,204,223, 92, 93,118,229,193,194,123,179,140,183,134, 56,242, 16,168, 75, 60,198, 44,202,
+125, 40,174,210, 90,171,160,145, 26, 46, 46,125, 75,105, 77,  3,122,114,  3, 35,236, 27,112,147,200,114, 31, 97,224,222,176,118,
+142,244,217,  2, 67, 12,125,235, 47,190,247,  2,198,219,184,240,190,241,164, 55, 56,177,234,158,212,247, 47, 29,  4, 66,101,182,
+185,135,206,143,117,  8,243, 52, 47, 31, 50,174, 71, 36, 49,133,252, 92,193,150,229,163, 31,236,182,104,158,104,203,211,211,216,
+144,156,114,231,124,178, 18,175, 17,243, 27, 61,235, 70,131,218,126,202,143,  1,144,196, 91,197,235,226,114,114, 44,246, 87, 66,
+ 65, 59,218,195, 43, 25,226,250, 89, 13,127, 42, 55, 33,227, 29, 56, 53, 55, 26,138,197,233, 91, 35, 46,196,235,178, 55, 73, 50,
+169, 59, 87,156,237,199,118,123,107,222, 55,121,108, 84, 42,123,139,183,185, 90,229, 49,237,249, 49,101, 49,174,229,204,108,106,
+ 64, 89,  7,230,192,253, 99,114, 58,142, 85,209, 93,177, 29, 68,  4,227,226,111, 64,171, 68,140, 75, 47, 80,224,187,155, 13,222,
+216, 11, 14,235,237,247,103,199,100, 16,213, 36, 94, 19,195, 52, 71,132,144, 76,159,203, 36,108, 56,176,248,138,244,214, 86,245,
+179, 11,133,209,209,147,213, 74,227,189, 41,191,195, 81,167, 47,199,240, 54,174,168,213,129,139,213, 57, 19, 80,211,240,239,212,
+ 10,145,246,105,178,  9,209,146,149, 12,126,175, 54,143,204,118,170,244, 99,255,  0, 47, 29, 67, 34,216,162,160, 51,  2,213, 76,
+ 74,165, 24,198, 40,204, 43, 80, 55, 31,196,124, 53, 36,107, 84, 52,141,104,148, 51,152,152, 26,  6, 61, 55,220,  1,165, 40,186,
+116,102,202,203,214,183,161, 10, 56,165, 64,104,249,114,140,183,197,126,239,142,133,203, 36,120,148,  1,124, 56, 41,  1, 25,163,
+  2,  2, 61, 23, 90, 63, 95, 39,  3,183, 83, 80,  9,223, 81, 56,122,226,167,106, 69,188, 50, 30,170,169,209, 61,191,212, 77,112,
+202, 30, 50,132, 16,254,118,118, 30, 90,169,226, 41,241,212, 18, 18,202,  2,177,132,196,137,204, 26,157,174,163,  9, 34, 51,131,
+195,138,  1,186,212,128, 15,221, 93, 20,115, 70, 24,168, 45,217,  6,124,209,236, 82, 18, 68,181, 88,231,120,249,200,164,137,  1,
+221, 73,222,132, 10, 13,169,168,  9,148,222, 46,193, 88, 27, 49,183,150,102, 14,112,199,248, 43, 57,242, 81,230,111,144, 61,180,
+118,208, 51, 40, 72,145, 79, 32,  9,227, 94, 78, 78,244, 61, 58, 86,154, 26, 54, 13,136, 22,145,145,219,239, 70,195, 80, 53, 51,
+ 60,128, 10, 17,223,248, 39,238, 32,138, 91,193, 12,117, 75,120,132,136, 26, 53, 34,129, 60, 84, 51, 86,164, 87, 98,105, 95, 13,
+ 65, 11,132, 71, 49,172,139, 26,252,125, 59,213,136,178,197,163,225, 15,134,206,192,153,150,196, 60,146,172,180, 12,  7, 30, 34,
+137, 64,  0,167,148,129, 77,142,164,141,226,  0,100, 84,116,240,184,238, 56,110, 97,222,184,176,182,134, 99, 49,145,132, 82, 33,
+ 85, 85,109,215,141, 79, 42,143,141,  5, 70,159,122,228,131, 53, 92, 40,237, 90,141, 95,151, 99,112,227,197, 76,185,179,138, 59,
+ 40, 39,154,112,194, 82,203, 20, 40, 40,225, 80,138,177,218,148, 62, 30, 58, 22, 23,  9,153,  0, 97,137, 82, 72,196, 12,123, 59,
+149,107,196, 45,228,154, 55,  1,229, 90,  5, 32,212,125,218, 55,204,204,196, 81, 71, 40, 27, 68,197,179, 31,154,230, 59,232,236,
+253, 80,144,199, 63,148,213,164, 90,149, 30, 35,174,199,231,169,127,109, 59,177, 37,200, 17, 81, 75, 83, 11, 36,134, 18,244,168,
+ 85, 55,121, 58,169,139,147, 50, 15, 58,198, 88,240, 90,239,211, 70,194, 16,203,225,230,124, 85,  6,171, 94, 28,135,125,173,185,
+ 70,146,116, 37,148, 49, 48, 16, 24,170,213, 71, 47,145,211, 64, 61,232,123,154,136,212,  2, 76,  8,122, 80, 58,139, 20, 87, 55,
+ 85,130,217, 12,164,157,248,130,105, 95,137,232, 52,100, 45, 74, 85,  0,170,120,139,183, 65,183,108,102, 62,238,211,177, 92,218,
+118,185, 45,206,253,249,109,253,220, 68,108,118,216,183,217,253,157,104,109,116,153, 91, 49, 55,249, 96,120,213,233, 70,199,106,
+179,211,244, 81, 55, 55, 14, 98, 54, 71, 14,249,124,145,  5,189,180, 22,168,177,193, 24,133, 20,141,148,  1,182,219,159, 19,215,
+ 90,251, 34, 22,140,136,142, 92,164,  7, 12, 41,197,177, 87,150,236, 70,220, 99, 24,176, 30,157,235,177,194,221, 36,154, 70,  9,
+ 13, 69,100,175, 21,161,165, 65,102,235, 90,244,208,182,239,121,121,164,192, 68, 17, 81,245, 59,102,224, 71,  3,142,220, 17,  6,
+ 17,128, 50, 37,134,243, 64, 63,168,239, 85,247, 29,197,107, 19,159,166, 86,186,113,183,229,213, 34,171,117, 28,142,231,238, 26,
+ 96,212,200,151,128, 61,248, 18,113,245,170,141, 71, 87,177, 18,114,255,  0,112,240,164,125,120,250,130,171,155, 41,149,184, 32,
+115, 22,177,181, 57, 44, 94, 82,194,180, 21, 98, 73,241,248,141, 54, 86,174, 72,129, 34,  0, 53,167,178,190,229,159,212,117, 29,
+ 77,200,150,228, 27,163, 71,239,199,106,101, 99,180,133,100,146,232, 74,247, 76,158,163, 57, 96,148, 13, 74, 49, 47,187,212,157,
+244, 60,173, 90,182, 11,226, 49,224, 55,170, 51,  1, 71, 86,248,220, 38, 87, 36,241,173,170, 11, 43, 59,182,244,197,220,209,178,
+163, 10, 87,156, 72,  1,114, 40,191,202, 40, 15,243,111,168,173,198, 82,108,180,124,  9,193, 79,  8, 74, 81,149, 24, 70,170,226,
+227, 17,140,237, 85,130,105,173,159, 33,124,102, 17, 73,234, 10, 56,135,130,200, 93,  0,228,136, 65,  4,120,154, 26,235,183,164,
+ 52,161,228, 51,201,217,248,111, 71, 90,179, 26, 74,  3, 48,103,126,243,177, 51,113,147,186,203, 23,133, 37,151,232,209,154,101,
+180,179,138, 66,161,152,215,139, 72,225, 43,197, 89,168, 11, 40,219, 72, 93, 55,139, 12,210,224, 17,147,212, 25,130, 98, 76, 41,
+244,133, 25,228,202, 89,197, 52, 22,214,177,195,111, 16, 39,149,196,169, 31, 70, 20, 33, 84,158,158, 95, 30,191, 29,116,157, 80,
+  4,129, 27,109,191, 21, 17,210,229,  4,196, 52,119,146, 35, 93,231,105, 92, 89,226,242,157,223,113, 29,149,172,242,100,238, 35,
+ 28,152,185,250, 91, 11,111, 84,212,150, 38,135,125,233, 64, 11,120, 87, 65, 66,212,245, 18, 99, 35,115,120,118,138,171,201,  9,
+ 72,136, 60,247,157,157,203, 96,237, 62,204,196,246,220, 82,150,179, 75,219,228,224, 39,158, 81, 17, 87,100,118,168,136, 18,125,
+ 56,136,171, 16,212,127, 40,169,220, 13, 92, 89,210, 70,200, 52, 14,219,153, 91,216,211, 68,  1, 24,248,164,113,238,244, 11,172,
+207,122, 98,113,151, 83,218,196, 99,153,173, 56,165,186, 77, 42,196,137, 16,144,144,  8, 21, 37,136, 82, 56,170,114, 93,171,215,
+ 67,106, 47,198, 20, 28,170, 43,147,181,  9, 49,241, 13,136, 67, 45,238, 21,254,105,140, 57, 25, 46,114,139, 26,173,108, 81, 26,
+222,200,  8,170, 80,184,161, 46,192, 49,  1,154,187,154,237,170,137, 93, 47,189, 84,234, 53, 66, 66,148, 14,174,123, 11,180, 47,
+ 59,202,107,108,223,117,137, 83,178,212,122, 86,216,251, 70,104,229,188,138, 18,106,156,216,114, 16, 15, 50,121, 77, 92,131,199,
+161,109, 50,220,101, 51,154, 84, 27,147,108,217,148,234, 71,226,181,156,239,185,248,220,112,142,199,180,108,160,151, 37,104,159,
+ 76,151,113, 47,163, 97,106,  5, 98,133, 97,137, 40, 25,149, 92,240, 85,242,175,243,104,150, 56,  5, 45,251,130,217,203, 26,148,
+ 43,218,189,149,148,247, 80,230,126,161,231,147, 11,194, 15,212,178,211,180,113,221, 93,221, 35,137,  5,149,187, 21,144,116,  7,
+212, 35,104,246, 29,106, 52,217, 12,220,168, 56, 68,200,188,170,181, 12,141,214, 19,176,176,214,159, 77,138,139, 29,103, 29,196,
+182,240,225, 45,229, 54,210,220, 66,170,225,103,135,212,138,130, 86, 10, 67,114, 95, 48, 60,129, 52,  7, 78, 18,202, 50,132,113,
+ 34,216,206,155,192,222, 92,247, 55,109, 69,222,217,223,166,199,219,220,250,179,225,108,173,191,241, 91,107, 84,103,142, 26, 72,
+222,105,174,238, 29, 79,199, 98,  0, 65,226, 93,171,210,  7,130,101,169,180,115, 28, 78, 10,229,210, 92, 61,146,139,155, 83, 14,
+ 98,240, 42, 60, 12,121, 56, 18,189, 17, 72,110,134,167,142,253, 94,180,216,106,214,221,224, 66, 35,204,203, 16,226,178,216,172,
+ 45,241,159,164,206, 61,105,164,151, 33, 50,134,200, 76,167,152,118,  2,129,232, 24,236,162,161, 71,195, 68,  9,  9,208, 41, 32,
+ 99,104,242,214,102,159,143,114, 37,198,184, 89,140,252,217, 87,241,197, 48,167, 53,165, 79, 48, 27,112, 79, 95,225,168,229,  1,
+ 35, 80, 11, 35,237,207,203,180, 68, 79, 52,253,203, 64,192,247,100,147, 92, 45,173,218, 52,172, 80, 73, 35, 70,180,244,232, 84,
+128,195,226,195,166,178, 61, 79,237,248, 78,212,165,104,229,145,222,104,172,231,111, 59,  8,140,  5, 79, 18,181, 27, 60,173,133,
+244, 48,122, 50,129, 35, 13,161,114, 22, 74,129,253,157, 83,126,206,229,152,136,145,225, 24,236, 89,169,217,156,  9, 56,141,227,
+  5, 37,214,135, 80, 21,  3,166,138,239,168,164, 40,186, 10,225,148,106, 22, 78,116,219, 46,144,  9,  2,155, 43,169, 34,156, 66,
+  0,247,179,  3,139,238, 47,108,115,120,252,172,109, 36, 99,233,230,181, 88,136, 73,254,173, 46, 35, 88, 68, 78,104, 22, 70,118,
+  8,164,178,138,157,200, 90,157, 43,146,148, 35,154, 56,143, 70, 60, 14,213,113,208,229,  8,235, 32, 46, 49,132,158, 37,248,142,
+209, 80, 88,134,171,225, 86, 94, 62,236,147,107,113,  5,206, 21,114, 57, 11, 75, 91, 74, 76,185, 27,114,144,221,196,242, 43, 41,
+ 86,138,230, 34,130,180,229, 73, 34,110, 39,110, 91,  6,215, 52,146,201, 51,110, 96,192,  0,  8,105, 22,237,125,162, 88,143, 86,
+ 33,123,229,194,117, 90, 40,202,213,227, 59,133,227, 44,226, 30, 96,174, 18, 25, 57,101, 28, 60, 33,217,219, 16,181, 12, 95,109,
+231,113,211,118,131,123, 97,221,174,189,199, 97, 37,237,208,179,205, 76,209, 90,202, 18, 17,111,235,100, 32,132,176,159,215, 37,
+211,215, 37, 93,155,117,111, 45,117,174,213,218,158,182,212,110, 70, 89, 69,172,160,146,242,206, 61, 99,  6, 27,232, 74,194,107,
+ 63,107, 27, 87, 52,218,136, 49,183,110, 57, 12, 94, 82, 46,106,230, 95,150, 68, 76,199, 97,221,152,169,153, 76,222, 98,239, 35,
+140,238,191,121, 59, 62, 46,213,202, 67,244,115,226, 61,228,236,169, 78, 71, 12,208,  9,150,238, 56,239,216,  6,149, 44,228,244,
+209, 76,147,114, 80, 24,249,163, 13,200,133, 41,  8,153, 66, 62, 18,  3,237, 52, 32,150,120,130, 42, 31,  6,226,113, 94,113,115,
+ 75,  8, 92,  0, 72, 19, 23,229, 47, 67, 88,200, 28,209,136, 18, 98,106, 98,195,100,156, 47, 74,219,102,112,189,195,110,247,184,
+ 43,251,123,251, 79, 39, 41,173, 37, 73,163, 83, 60, 43, 58,121,163, 44, 55, 71, 87,  4, 26, 80,232, 12,134,  5,165,220,170,174,
+218,185,  1,205, 18, 49,246, 80,250,136,101,249,223,238,150, 62,219,188,125,239,239, 12, 47,117, 73,115,141,197, 30,239,178,179,
+158,246, 21,141, 29, 45,175,146, 43,  5, 99,234,130,  8, 88,210, 41, 87,136, 62, 87, 59,110, 14,143,233, 54,231,156, 17,133,207,
+ 51, 48, 59,196,154, 32,109,121, 25, 68,112,  5,247, 21,190,156, 45,234,186,100,244,128,147,228, 29, 37,203,121,100, 57,231,118,
+200,142, 95,210,210, 19,174, 47, 76,180, 43,221,125,189,133,135, 11,128,199,246,237,197,197,196,178, 99,109,227,134, 11,217,138,
+181,208,244,192, 10,100, 49, 34,172,132,  5, 28,221, 87,122,114,165,119,213,181,219,143, 51, 56, 10, 29,142, 79,182, 68,203,253,
+ 68,158, 43,206,117,119,124,235,242,145, 46,100,115, 62, 14, 78,214,192,102,196,128,213, 38,137,185,172,102,139, 41, 43, 91, 18,
+183,178,196, 69,254, 58, 86, 13,109,125,  3,130,213, 74, 41,243,117, 43, 74, 13,216,173, 27,146,153, 60,224,109,  0,107, 23,229,
+150, 18,129,244,199,185,232,197,  8, 34,196,250, 58, 20,239,120,115,121, 43,123, 44,167,106, 74,210,247, 94,  1,101,201, 97,214,
+ 74,152,178,150,254,159,163,113, 99,119, 65,187, 72,  2, 70,196, 26,122,130, 41,  6,227, 81, 90, 16,137, 49,155, 52,169,252,191,
+168,112,248, 56, 93, 46, 89,150, 77,222,119,216,251,231,255,  0,120,184, 91,121,110,251,  3,186,241, 51,175,114,218,199,111,245,
+ 45,105,150,198, 48,153,100,157, 35, 86,101,154,  6,141,139, 85, 74,208, 72, 79,227,212,214,165,148,100,149, 37, 19, 78,194,163,
+152,  6,173, 66,133, 59,103,190,187,167,  1,217, 34, 62,216,184,143, 34,253,170,  6, 95, 13,100,239,202, 11,236,  3,203,232,222,
+ 99,139,  2,222, 88,185,199, 61,172,170,106,171,229, 30, 85,161, 42,238,156, 78,111, 28, 37,239, 80,121,153, 92,110, 90,109,238,
+ 55, 15,238,246, 27, 21,238, 63,101,220, 41, 55, 54,166, 11,139, 43,154, 35,191,166,199,148, 18,210,171, 29,196, 15, 85, 53,216,
+143,151, 29, 15,111, 93, 61, 46,204,209,126,102,199,180, 63,186,136,235, 54, 44,223,205, 25,207,203,147, 82, 76,241,236,151,212,
+223,168,  3,217, 84,247,182,157,159,157,236,233,115, 16,222, 47,167,138,202,180,119,143,110,236, 61, 68,200, 34,136,222, 69,165,
+ 71, 25, 99, 11,202,159,204,160,248,234, 46,161,169,181,127, 44,173,156,120, 51,118,241, 81,157, 44,236, 75, 44,136, 35,120, 46,
+ 15, 16,120,247, 29,225, 30,122,103,159, 29,171,246,237,252,117, 90,146,252,122, 90,241, 36,116, 27, 29, 82, 21, 99, 86, 43,160,
+224, 86,167,127,  3,215, 92,100,179,111, 93,173,196,170,232,241, 49,141,212,130,165,118, 32,143,133, 52,211,  0, 67, 20,241,116,
+187,198,133, 41,164, 50, 57,145,191,189,109,218,148,161, 63,118,187, 16,193,182, 40,200, 99,141, 83, 96,130,122,109,167, 46,  2,
+ 10,122, 38, 28,197,  3,115,  6,163,143, 95,150,153, 33, 69, 61,178,242,218,252, 20,235,121,138,200, 18, 89, 94, 30, 53,226, 91,
+175, 49,184,251, 43,161,231, 26, 56, 14,172, 45, 77,139, 72,152,211,218,166, 70,207, 28,156, 99,110,113,255,  0,120, 74,183, 18,
+192,254, 33,203,195, 80,208,138,227,130, 59, 36,162, 64,129, 13,143,111,122,158, 46, 96,121,153, 97,183,244,161, 12, 26, 10,144,
+206,145,177,241,226, 60,199,125, 65, 43,100, 68, 19, 39, 39, 30,208,143,133,206,115,203, 79,164,238,  7,101, 49,125,169,171,219,
+134, 83,233,199, 52,133,121, 50, 57,232,174, 20,145, 81, 90, 29,254, 99, 79,179, 17,137,  1,119, 87, 57, 24,180, 95, 22,244,219,
+235, 78,218, 90, 25,174,163,182, 91,168,209, 38,  3,132,143,191, 32, 14,195,167, 90,237,182,155,114,124,134, 89, 77, 55, 96, 19,
+244,246,154, 98, 25,196, 76,176,226,165,201,125,109,  4,194, 56, 36,245, 92, 53, 26,116, 83, 69, 45,215,128,111,197, 78,154,138,
+ 26, 91,147,142, 98, 24,113,224,172, 78,186,  2, 89, 65,114, 14,206, 59,189, 59, 20,203,168,229, 75,137, 17, 37, 73,153,120,147,
+ 41,109,155,152,249,248,212,232, 72, 16, 98,  9, 12,174,103, 35, 25, 24,130,231,111,102,238,212,233,178, 35,148,193,124,240,208,
+ 10,154,210, 78,155,255,  0, 13, 54, 55,136,160, 62, 47,114, 34,238,148, 77,136, 14, 70,250,215, 15, 79,106,135,112, 89,121,220,
+ 92,  0, 27,118, 40,163,167,216,  6,195,236,209,226, 67, 40,132,105,233,180,160,142,143,202,121,204,154,125, 33, 66,154,228,205,
+ 90,  2,188,169, 74,248,105, 64,101, 46, 20, 87,111,231, 12, 41,130,169,157,209, 88,188,210,143,133,  5, 24,159,245,104,176,231,
+  0,179,151,238, 66, 36,202,114, 30,245, 13, 11, 92, 74, 33,178,132,180,132,212,  0, 57, 31,183,224, 52, 72,129,218,169, 99,120,
+221,152,134,158,  6, 71,215,248,  5,123, 99,219,128,145, 54, 81,249,185,160,244, 20,208, 10,255,  0,105,191,213,171, 43, 86, 45,
+196,229,151,138,148, 52, 21,227,232,203, 69,165,232,102, 71,204,212, 28,223,164, 31,126,254,230, 87,113, 24, 33, 78, 16, 42,197,
+ 26,130,220, 16, 81, 65,175, 79,134,255,  0, 29, 94,217,185, 17,108, 69,176,105, 15,210, 65,105, 91,227,154, 53,206,212, 56, 98,
+174,163, 24, 66,144,  2, 33,141,  6, 28, 37,220,160,220,102,172,163,102, 13, 47,171, 39, 68,138, 32, 26,128,120, 84, 26, 15,227,
+169, 37,169,149,203,146,157, 75,176,  1,168,  6,192, 59,235,235, 85, 87,250,150,158,208,202,100,231,116,106,171,231,206, 95, 92,
+ 31,240,232,182,201,181, 93,191, 49,254,239,  1,252, 52, 97,185, 59,243,241,118,170, 43,221, 90,244,135,246,226, 45,141,230,167,
+187, 98,132,227,215,147,157,196,166,123,131,209,164,114, 69, 71,242,138,244,209, 39, 79,106,  0, 57, 18,185, 42, 70, 34, 91,127,
+ 87,229, 27,213, 76,165, 43,179,121,147, 34, 62,169, 31,100,120,240, 73,166,142, 48,202, 78,203,215,111,135,135,221,169,205,241,
+ 16, 71,229,244, 62,164,195, 40,138, 47,144,195,121,147,102,138,209,  1,141, 65,231, 43, 30, 40,  6,195,114,122,157,250, 13, 14,
+110,202,249, 49,182,205, 16,107,177,169,241, 52, 78,181, 98,237,243,150,  2,155,246,122,209,142, 11,183,172,108, 10, 53,233,245,
+230, 83,249,158,186, 43, 32,216,199, 69, 82,106,164, 49,165, 77, 79, 70,216, 13, 19,107, 69,146, 13, 51,152,184,196, 49, 24,138,
+238,227,194,170,231,254, 46,221,128,  9, 25,201,  7,155,113,224, 54,247,237, 70, 49,181,173,220,242,101, 36,164,117,118, 60, 89,
+139, 80, 77,196, 72,139,198,181,145, 12,164,143,134,235,252,154,126, 90,230,122, 32,238, 66, 94, 16,106,161, 92,102, 49,182,136,
+151, 87,142,227,137,121, 33, 85, 49,164, 22,229,157,214,137,193, 72,175, 17,192, 83,198,141,170,243,114, 48, 35, 57,115,143,103,
+240,193, 78, 45,101,  5,206, 81,188,150,118,225,196,161,124,191,125,173,204,133, 49,150,245,130, 45,160,105, 71,  8,145, 83,202,
+164, 70,180,102, 60,  0, 30,115,252,117, 15,239, 37, 47,  8,166,244, 13,222,165,110,212, 90,220, 65,151,230,192,119,  5, 31,  9,
+219,153, 14,246,200,198,111,238, 37, 22, 75, 33,142,121,149, 80, 40,104,199, 38,138, 20,  5, 83,151, 31, 55,148, 16,181, 21,235,
+191, 70,152,222,151, 57, 37,189, 65,  7,106,213,253,101,195, 59,134,128, 99,255,  0,164, 45, 86,202,247,181, 59, 66,202,222,222,
+217, 36,130, 41, 43, 50, 90, 63, 39,150, 89, 25, 69, 27,136,163, 59, 19, 81,202,157, 54,242,211, 86,241, 22,237,128, 35,138,189,
+189,166,183,106,199, 54, 88, 67,102,217, 19,193, 85, 95,101,243,153,101,245,220,254,151,143,146,140,203,110,252,102, 98, 65,225,
+234, 48, 98, 22,171, 95, 40, 34,180, 42, 89, 78,163,149,185, 74,178, 42,139, 85,174,185,112,121,112,  6, 16,246,247,156,123,135,
+173, 12,228, 50, 56,220, 45,192,179,242, 44,182,199,130,197,110, 12,140, 36, 66, 75,113, 42, 72,228,213,251, 54,174,250,169,191,
+170,181,104, 51,230,224, 42,171, 12,  0, 32,109,  1,119,218,248,175,215, 39,151, 57,154,173,159,104,216,201, 23, 43,105,  9,105,
+111, 38, 45, 85,128,129,191,  2,107,207,136,252, 62, 81,190,170,103, 41,206,178, 25, 99,239, 69,105,244,130, 69,229, 64,143,114,
+189,233,121,149,183, 24,236,116,  6,203, 17, 18, 44, 34,206,220, 44, 78, 84,129,234, 41,146, 50,  4, 48,239,203,136,109,183,171,
+ 82,163, 82, 69,182,224, 54, 34, 47, 94,156,131, 91,195,105, 67, 93,183,138,203,119,198,113,113,216,233, 87, 17,219, 86,104,235,
+150,203, 66,  8,245, 33,  4,162,172,101,170,136,243, 84, 36,124,127, 13, 75,116,160,211,102, 39, 63,210, 21,101,152, 70,115, 97,
+130,244,229,246,123,181,125,181,197,217,165,130,173,157,189,172, 75,103,142,193,219, 17,234,114,244,252,187,147,184,175, 34,229,
+191, 17, 60,139,110, 73,156,  7,160, 86,151,  4,109,  7, 56, 44,239,183,159, 55,238, 95,124,152,243,215, 15, 21,140, 17, 21,205,
+223, 26,175,211, 65, 49,242, 89,219,212,  0,146,202,  3,130,204,187, 39,155,106,166,162, 37,168,206,171, 96, 37,126, 68,203,  5,
+165,119, 69,173,175,183, 22,163, 43, 13,141,189,239,109,217, 53,185,139, 11,104,177,164,178,142, 94,146, 24, 23,162,180, 94,154,
+ 49,243, 47,169,198,149, 29,116,211,115, 46,  8,201,129, 17,152,224,171,123, 43, 57,125,221,153,238,228,206,102, 44, 90,199,  7,
+219,176,196, 49,209, 93, 77, 19, 94, 95, 95, 94, 22, 31, 85, 49,141,217, 96,134,  8,144,169, 69, 37, 16,150,171, 18, 40, 36,133,
+249, 25,  0,192,  2,163,131,230,206,113, 10,251,183, 50, 48,230,167,190,201, 71, 28,163, 27,107, 34,173,182, 65,144, 91,155,137,
+209, 86, 70,244,208,138,250, 67,146,170,154,238, 78,222, 90, 19,105,106,249,118, 68,216, 47, 35,112,133,125,121, 36, 81,250,178,
+205,198,104,160,  6,123,137,118,  8,140,203,201, 98, 82, 79,226,111,234,251,117, 99,106, 64,236, 69,218,144,206,110,203,233,168,
+237,216,138,187, 70, 26, 99,108,230,105, 90, 75,171,164,250,201,221, 79, 33,202, 66, 13,  8, 32,116, 20, 79,149, 52,219,243,126,
+204, 22,132,220, 54,172, 28,213,148,235,218,139,109,174, 66,179,206,187,  4,  1, 97,127,230,219,171,  1,246,157,  1, 56, 81,189,
+104, 25,196,196,  8, 12,101, 83,242,248,247,171,123, 62,227,200, 89,152,227, 86,250,175, 85,207, 53,152,150, 33, 84, 18,104,107,
+ 81,210,154,175,189,161,183,112, 84, 51,110, 80,223,211,219,153,148,155, 40,136,163, 34, 91, 62,225,197,223,184,133, 36, 49, 78,
+106, 10, 72,165, 64, 97,212,  6, 59, 29, 80,222,233,215,109,135,196, 42,187,186,105,219,  0,156, 14, 10,208,175,135, 95, 26,141,
+ 84,156, 80,225, 54,203,164,  2, 73,162, 53,208, 19,130,165,239, 12, 42,247, 23,104,231,176, 46,  7,253, 99,143,186,182, 66,122,
+172,143, 19,122,108, 13, 65,  5, 90,140,167,192,141,118,227,229, 45,139, 81, 25,162,184, 45,234, 45,202, 78,  6,104,187, 80,179,
+177,246, 58,240, 94, 95,187,174, 49,217,252, 79,116,102,108, 35, 75,172,133,180,146, 79,151,179, 79, 70,219, 41, 33,113,234,200,
+234,170, 85, 38,220,139,152, 21,184,243,252,193, 78,100, 24,111, 92,156,101, 11,144, 57,236,182,104,112, 38,183, 34,220, 54,130,
+213,230, 94,233,246,253,200, 90, 23,180, 90,188,182,239,219, 45, 41, 53, 50, 71,252,114, 18,199, 41, 14, 96,100,230,  0, 74,219,
+242,132,127,219,119,222,206, 38, 47, 47,143,244, 97,180,201,119, 88,107,112,182, 19,203, 44,183,215,146, 30, 54,182,241,219, 73,
+ 36,138,227,156,156, 61, 53, 10,136, 24,181, 80,107, 85,210, 53, 54, 46, 71, 43,  0, 38, 90,121,129, 17,202, 92, 22, 63, 78, 39,
+195,234, 84,186,247,209, 72, 95,183, 40,220,137, 32,177,203, 51, 40,225, 38, 62, 34, 50,190,241,195, 18,141,176,157,181,239, 79,
+108,180,157,185,237, 31,127,226, 59,131, 23,219,208, 69, 30, 75,177,187,150,200,162,219, 11,197, 45, 20, 43, 58, 68,178,162, 21,
+ 89, 61, 56,222, 80,161,105,252,164,104, 49,102,214,158, 38, 16, 50,204, 54,201,142,215,161,137, 13,216,210,110, 11, 19,214,231,
+106,253,255,  0, 62,118,124,184, 92,127, 14, 86, 57, 91,195,149,134, 24,227, 94,197,107,217, 29,243,237,239,182, 50,103,227,238,
+ 92, 28,158,219,119, 70, 89,108,164,188,237, 25, 76, 31,167, 92, 61,154,165,168,184,194, 75, 23, 24,110, 34, 40,203,234, 69, 27,
+135, 94, 27,198, 25,170,221,212, 64,220,123,178, 37,227, 23,148,185,141, 34,229,207, 96,196,128,217, 72,204,204,169, 97, 98,230,
+160,219,210,217, 98,243,150, 71,144,  7,159, 45, 55, 51,196,203,  1, 34,248, 86, 33,  0, 38, 51,252,245,251,171,238, 83,198,234,
+ 59, 94,220,188,142, 86,150,  7, 17,164, 51, 99,177,241, 91,164,146, 70,234, 86,117,153,157,163,100,219,148,109, 94, 94, 93,155,
+211,129, 23,165, 34, 62,146, 69, 79,136,207, 43,112, 38,  0,144,119,108,168, 91, 29, 78,170, 26,111,183,236,218, 50, 25,163, 48,
+  4,113, 18,140,173,202,114,161,252,190,120,230,141, 99,114, 54,247, 83,211, 43,113, 28, 83,219,218,180,190,153,145,189, 88, 99,
+ 18,143, 92,122, 37,104,  2,189,  9,  0,158, 53, 20,216,241, 52, 38,154,185, 49, 38, 38, 77,192,210,149,244,127,110, 11,201,131,
+174,242, 70, 57,225,253, 57,166, 88,238,168, 77,165,224,  4, 34,200, 40,244,  1, 79, 37,  6,155,129,186,145,201,119, 26, 24,  2,
+ 57,134, 27, 71,167,166,244,242,118, 44,183,187,115, 89, 91, 12,125,239,121,246,213,196,178,100, 59, 99, 33, 21,207,118,246,193,
+ 42,242,136,196, 62,157,210,198, 79,247,107, 36, 47, 29,218,  8,192, 89, 25, 82, 65,179, 21,212,218,124,147, 57, 36, 40, 95, 41,
+221,187,228,163,145, 32,102, 27, 49,  8, 66,203,187,176,125,147,222,217,123, 72, 71,173,217, 93,227,107, 23,117,216,220, 31, 45,
+184,250,146,169,116,219,208,  5,120, 88,200,233,252,190,151, 79, 62,139, 54,141,200, 69,241,139,196,168,165, 56,130,219, 13, 80,
+191,185,158,218, 93,246,141,148,153, 30,222, 91,116,237,116, 75,107, 43,139, 53,229, 27, 90,198,191,146,166, 62, 47,197,145,149,
+184, 58,176,220,144,116, 95, 75,144,137, 48,199,106,110,174,225,156,  6,102,229,166,102,171,110, 60, 56,227,179,  4, 37,237,127,
+125, 31,107,251,173,228,191,145, 33,236, 14,232,184,141,114,  0,179,  4,199, 93,186, 44,118,247,173, 95, 42,164,180,244,166,249,
+  5, 98,124,186, 63, 91,162, 18,  6, 67, 29,168, 75, 87, 24,177,193,122,182,230, 63, 78, 66,180,219,170,145,184, 35,229,172,123,
+ 49,101, 96,163,242,222,180, 28,171,242,227, 79,179, 78,100,215, 95,143, 13, 70, 60,128,226, 15, 64, 60,117, 70, 40,173,101,204,
+ 95,  0,184, 63, 13, 57, 48,165,191, 79,226,116,151,  8, 93,168, 32,131,240,211, 74, 81,198,137,200,194, 51,241,161, 45,184, 20,
+ 52,  3,110,186,105, 36,  5, 44, 99,152,174,162,103, 46, 23, 96,121, 81,143, 67, 79, 29,252,  6,185, 32, 25, 62,220,200, 52, 86,
+214,231, 21, 44,110, 94, 89, 33,101, 20,  1,129,115, 36,135,161,  0, 41,  0, 15,153,208,114, 23, 65,160,  7,224,173,109,221,178,
+ 98, 73,145,143,109, 95,185,118, 44,149,228,116,183,156,112,136, 36,128,176, 10,106,253, 69, 62, 71,195, 77, 55,  8, 21, 24,169,
+225, 16, 75, 68,211, 31, 90,126,202, 40, 81, 37, 23,114,188,113,176, 66,100, 68,228, 84,214,160, 54,226,128,211,166,163,186, 73,
+108,161,241, 70,216,140, 98, 14, 98, 91,208,213,124,133, 46, 46, 88, 73, 44,133,160, 70, 13,115, 37, 77, 17, 75, 83,122,  3,215,
+195, 78,145,140, 40,  5,118,118,167,127,118, 68, 73,222, 35,197,235,244, 33, 76,157,109,150,175, 18,143, 78, 58, 42,128,121,134,
+ 63,204,202,223,202,  5, 60, 60,116, 60, 51, 28,118,163,140,237,196,187,102, 24,126, 60,  7,197,113, 21,186,194, 86,121, 28,197,
+ 32, 33,226, 86, 66,  3, 10,236, 70,167, 55, 12,129,128, 14, 59,112, 74, 22, 33, 19,158, 82,203, 44, 69, 61, 94,245, 99, 29,205,
+165,156,237, 47, 38,121,131,  6, 86,151,118, 98, 55, 36,129,211,126,131, 64,202, 51,156, 64, 56,112, 87,182,124,171, 51, 50,145,
+230,227,137,223,248,110,101,209,189, 69,132,  2,194, 56,124,207, 82, 77, 77,122,146, 78,151,150, 94,130,170,208,106,109,219,182,
+  5, 33, 28, 85, 85,230,102,214, 20, 49,219,131, 45,105,189,118,248,239,163, 97,164,153, 46,104,179,122,238,187, 98,204,114,219,
+231,117, 75,115,146,185,184,252, 76, 17, 79,242,175,195, 70,194,196, 99,197,100, 53, 93, 86,253,243,142, 88,169,118, 29,191, 53,
+216, 89,174,152,195,  3,121,151,197,216, 31,128,240,251,244,118, 65,  6, 51,164, 73, 98,119, 81,209, 58, 14,131,119, 80, 51,221,
+ 44,  8,118,218,126, 93,234,251,158, 59, 15, 31, 17,198,221, 72,222,187,200,223,194,167, 93,150, 32, 91,230, 45,143,106,216, 70,
+ 90,109,  4, 42,214,198,239,171,217, 85, 89,115,157,119, 36, 90, 67, 64,118, 15, 46,219,124,148,127,175, 83,141, 60,205,100, 24,
+150, 84, 90,142,184, 79,248,163,223, 42,123, 63, 21, 91, 52,247,119,123,220,204,210, 14,165,  1,226,149,251,  6,173, 35,104, 98,
+106,125, 55, 44,221,237, 69,235,254, 57, 18, 55, 96, 19, 67,138, 82,155,  1,226, 62, 90, 54, 19,133,176,196,128, 15,177,  3,151,
+118,197,245, 38,244,227,252,221,247,160, 85, 20, 60,122,214,186,134, 61, 82,220, 96,197,137,223, 16,210,245,225,235, 82,  8, 24,
+128,100,118,225,237, 92,125, 93,196,210, 44, 80, 39, 38,232,170,  7, 34,119,233,183,134,133,183,212,102,224, 90,143, 54,243, 82,
+123, 83,101,118,119, 78, 80, 31,130,186,176,193,137, 88,207,148,102, 98,121, 49,182, 77,128,175,139, 17,212, 87,192,106,211, 69,
+ 96,223, 39,247,  4,182,237,143,250,154,164, 19,187,106,189,177,210, 71,142,245, 78, 57, 71,205, 16,  9,  5,186,170, 68,139, 10,
+ 31, 40, 85, 20, 88,201,  4,144, 41, 94,171,177,214,146,245,172,185, 99,102, 17,182, 73,  0,156,204, 45,206, 92,217, 64,169,240,
+182,126,214,197,149,237,187,162,  1,142, 27,  3, 81,189, 48, 93,207,144,138, 34,243,220,205,232,164,129,148,200,228,  6, 33,148,
+161,165, 55, 98,201, 78, 91,111,161,238,235, 45,206,100,152,248,169,143,  6,246,195, 40, 61,148, 92,152,183,106, 15,114, 66, 49,
+227,240, 24,157,236,171, 46, 59,186,114,204, 44, 16,135,122,250,183, 19, 18,220,139, 19,210, 58,208,211,195,147,125,163, 85,146,
+185,118,232,160, 96,106,179, 26,158,171, 10,139, 17,114, 62,169, 83,212, 62,126,165, 79, 32,158,121, 12,215,178, 60,147,168,222,
+149, 60, 84,  1,196,138, 14, 33, 86,180, 33,104, 70,155,111, 75, 16,121,129,151,167,169,103,111,202,229,201, 61,201,102, 42,126,
+ 43, 17,105,149,190, 83,117, 33,177,177, 83, 39, 41, 72, 36,240,134,156,192, 98, 64, 94, 36,138,213,139, 45, 65,220,105,166, 32,
+135, 39, 40,221,252, 63,138, 35, 77,167,243,166, 33,178, 56,224, 40,138,230,206,206,240, 71,105,219,118,190,140,113,198,182,246,
+242, 24,234, 18, 38,114,220, 35, 66,164,177, 36,175,230, 49, 21,235,185,223, 68, 68,200,142, 70,136,223,131,143,135,111,177,104,
+165,172,141,160, 33,100,102, 62,176,251,219,234, 59,246, 33,248,114,  1,239,140, 81,180,183,215,174, 72,145,  1,103,153,170,192,
+ 40,121, 15,149,105,240, 90,129,240,215, 45,223,180, 11, 64,231,144, 27, 43,235, 56, 42, 11,242,149,233,102,158,105,204,154,230,
+221,187,135,114, 41,178,195,101,238,173,196,249, 27,129,138,133,166,229, 61,156,  0,253, 80,105, 66,208,187,187, 81, 75,158, 62,
+113,181,  9, 99,224, 52, 97,177,122,228, 51, 93, 57,  6,216,140,123, 15,109, 61,106,107,122, 25,206, 89, 99,143,167,185, 49,141,
+194,217,102,243,131,  7,219,177, 44, 22, 72, 57,228,111, 65,245,133,172, 69,205,106,237, 78, 82, 55,149, 80, 26, 30, 95,136,241,
+168,213, 68, 99,104, 76,198,196, 70, 93,188, 63, 21, 36,237,195, 55,151, 30,105,138, 74, 91, 59,  6,254,223,126,205,154,223, 11,
+219,145,218, 89,189,229,138,182, 35, 26,209,199,101, 45,210,152, 82, 56,222,188,147,146,149, 45, 83,201,223,157, 77, 73,223,126,
+ 58,158, 86, 99,  6,125,169,209,183,155, 48,163, 68,109, 89,215,115,247, 53,231,118, 93, 46, 39, 13,110, 35,195,220, 76,177,216,
+ 88,219,160,130, 41, 36,136,250,106, 10, 70, 60,168,181,  5,246,243,117, 58, 18,112,106,144,170,111, 95,243,143,151,108, 52, 61,
+167,211, 98,209,224,110,215,246,231,181,236,241, 17,168,200,101, 31,148,215, 48, 90,143, 68,220,221, 42,134,102,154,187,250, 96,
+149,220, 55,225,  0, 13,245,  8,173, 54,171, 41, 66, 26,104,  7, 29,155,201, 64,121, 91,252,181,254, 85,152,  3,147,238, 60,145,
+134, 56, 32,141, 10,195, 16,189,149,163,244,135, 48, 56, 71, 90,  2,107,186,209,183,240,108,193,  2,138,162, 98, 87,139,146,239,
+135,  5,232, 62,202,159,182, 59, 87,219,235,104,111,228,152,195,111,234,201,125,146,184, 87,138,226,234,249, 75, 45,204,213,115,
+ 80, 11,175,  4,229,184, 64,171, 77, 51, 41, 59, 42,173,163,107, 44, 90,157,171, 47,238,124,222, 95,220,142,226,177,198,225,163,
+ 22,151, 57, 41,254,135,183,241,255,  0,128, 91,195, 66,205,113, 53, 40, 43, 20,104, 92,211,192,113,234,198,188, 35, 40,117, 83,
+ 57,155,211,104,248, 66,215, 46,189,175,246,251, 35, 61,174,113, 34,158,206,255,  0,182,237,162,182,144,200,236,254,180, 16,179,
+ 56,245,163,228, 21,217,156,179, 84,236, 88,238,189, 53, 12,163,205,152,226, 21,131, 12,  8, 84,182,158,235, 98, 63,221,205,189,
+215,109,200, 50,217,200, 84, 37,204, 22,214,242,180, 86,217, 43,169, 88, 72,247, 43, 32, 10, 85, 89,209, 96,141, 88,180,164,131,
+229, 65, 80,248, 95,206,120, 40,167, 46, 94, 92, 17, 47,186, 57,104,123,  7,179,166,151, 36,102,153, 35,227,109,232,194, 22, 75,
+171,219,185, 19,243,221, 78,195,140,108, 25,164,102,  1, 84,154, 87,166,172, 33,170,242,226,101,139,  5, 37,217,  0,209, 87,221,
+175,238,247,103,247,222,122,207,  3,217,242,207,115, 35,219, 93, 94, 79, 60,240,155, 21, 84,180, 48,194, 44,162, 89,120, 52,147,
+126,111, 55, 41,229, 94,128,154,234, 93, 62,174, 50, 44,112, 32, 17,243, 87, 54,117, 48,187,118,184, 68, 81, 28,227,178, 56,236,
+185,158, 12, 53,234,223, 91, 99,110, 91, 27, 44,208, 55, 52, 23,208, 71,234, 76,132,175,149,189, 42,239,198,163,145,227,225,162,
+161,118, 50,  6, 94,140,237,237, 68, 91,212,139,153,239,118,251,125, 27,185, 78,138,250,  9,103,146,245,100, 38,218,206, 54,  6,
+162,188,184,146, 25,134,219,141,168, 62, 58,124,173, 17, 17, 22,172,138,108,237, 24, 64, 67,108,235,221,177,215, 80, 77, 24,198,
+205, 37,192,101,158,102,225,200,  0, 64,105,  8,106, 16,124,  0, 35, 77,148, 79,152,  0,192,124, 20,151, 11, 93,136, 31,248,199,
+193,213,253,135,114,100, 44,212,180, 36,220, 91,170,242, 91, 89,185,  3,196,150,254,106, 18,180,166,170,239,232, 45, 93,241, 80,
+239,  8, 91,218, 72,  1, 16,104,118,148, 67,101,221,120,171,194,176,206,255,  0, 71,118,194,166, 57, 55,140, 87,109,164,  2,148,
+175,198,154,163,189,210,174,219,172,121,163,195, 31, 82,171,157,146,  1, 35,194, 21,184,101,149,  4,145, 48,146, 51,209,208,134,
+ 83,246, 17,182,170,165, 19, 18,198,133, 68,196, 80,209,117, 29,121, 10,117,211, 73,101,194,204,188,141,238, 87,110, 98,125,184,
+238,139,206,222, 71,177,191,237,142,239,150,107,203, 44,  5,203, 36,161,110, 66,130,240,188, 60,209,211,131, 81,162,158, 34,178,
+  5,242,242,168, 21,229,139,  6,196, 72, 32,229,153,163,130,196,157,135,101, 54,109,193,123,167, 74,215,218,235,122,123, 98,249,
+ 48,212, 89,  0,102,  4,194, 70, 35,235,132,170,231,243,192,188,118,144,206,173,125,180,236, 46,196,255,  0, 52,193,123,219, 88,
+225, 97,146, 36, 58,173,201, 23,124, 98,129,217,248, 71,113,204, 78,136, 84,  5,171, 35,115, 43,190,180,122,123, 54,244,224,202,
+ 48,  2,152,237,173, 62, 59,208,189,103, 81,126,198,156,155,153,101, 76,185,128,203, 38,147, 10,208,198, 85,169, 25,134,252, 81,
+ 71,115,246,119,188,157,177,222,217, 94,254,246,146,227,  3,146,135,185,237,163,151, 59,219,249,249,102,132, 72,214,136,177, 65,
+ 37,180,145,170, 16,104,239, 86,103, 65,231,226, 65,162,144,  0,211,143, 56,201,205,114,134,111,136,118,245, 75,127,  5,231,154,
+238,165, 27,218,107, 54, 60,178,246, 51, 71, 48, 56,185,204,205, 81,195,109,  0, 84, 89, 31,118,251,115,187, 34,188,246,167,247,
+ 11,218, 39,176,242,217,139,105,109,172, 34,200,202,183, 56,171,146,195,135,169,101,144,141, 84, 35,158, 66,173, 94, 35,111, 61,
+118,209, 48,147, 16,238,  1,161, 47,136, 63, 73, 35,221, 67,193,  5,107, 75, 27,192, 24,156,196, 26,198,153,189, 95, 83,112,173,
+105,192,159,  9,237,244,178,251,170,158,239,199,126,247, 24,252,166, 10, 28, 73,199,192,234,128, 94, 69, 28, 43, 39,174, 42,201,
+113,235, 32,242,187, 20,224,241,170,208,242,168, 63, 39,147,158,215, 28,192,215, 10,215,137,164,107,136,139,182, 37,  3,168,215,
+ 74,237,136,198,127, 76, 90, 35, 96,123,178,156,140, 71,211, 86, 27,104,239,177,180, 24, 98, 87,156,178, 92, 71,119,142,106,218,
+ 91, 60,180, 45,  4,138,125, 57,173, 68,148, 15, 66,209,142, 60,235,230, 82,172,121, 42,233, 92,159, 43, 49,140,177, 63,168,108,
+147, 97,183, 99, 80,184,161, 42,152, 97, 67, 69, 79,220, 83,194,184,233, 32,185,187,226,110,156,198,178, 52,166,222, 96,241,198,
+102,101, 89,201,162, 79, 17, 81,113, 25, 61, 66,154, 10,106, 48,115, 22, 20, 76,118, 89, 70, 31,184, 51,176,193,130,238, 14,246,
+179,142, 60,229,221,227,118, 39,125, 79, 19, 81, 31,213,145,150,202,126, 10,138, 40,147,202, 85,104,  0, 17, 92, 26, 22, 94, 58,
+ 43,200,139,203, 33,217,152,119, 38,153, 84, 63, 97, 89,214, 35,181,173, 59,171,182, 51,253,181, 35, 75,254, 96,246,230, 76,132,
+ 24,235, 88,137, 34,108, 77,248,149,133,164,136,205, 86, 10,209,205, 26,244,242,144, 60,117,116, 37, 24, 94, 18,110, 91,140,252,
+ 14,244, 25,  0,130, 54,197, 27,251, 87,222, 56,206,242,236,252,127,101,247,120,250,203,171,168,110,112,151, 13, 35,237,120,150,
+112, 36,177,146,192,130, 36,150,213,196,138, 87,126, 81,185, 29, 52, 62,191, 67,146, 82,203,189,195,108,254,  5, 79,165,212,202,
+220,227, 48,207, 29,225,193,222,  8, 56,130, 54, 32, 47,112,253,168,202,118,253,223,167,112, 63, 89,237,107,146,145,166, 74, 68,
+172,170,  0, 41, 28, 55,106,180, 85,170, 49,  2, 64,  2, 57,223,202,198,154,151,164,245,152,201,180,218,162,  4,240,140,142, 23,
+ 62, 82,224,104,118, 29,138,203, 87,210,225,169, 31,184,209,196,176, 15,114,215,138,112,108, 76, 42,247, 32, 77,118,206,216,241,
+ 60, 70,113,174,251, 75,123,127, 63, 99, 88,226, 50,206,100,202,224, 11, 97,238, 37,114, 93,229,138,216,  3,111, 41, 99,212,180,
+ 69,106,127,180, 14,171, 58,141,129,110,241,  1,240, 24,170, 75, 23,115, 65, 25,208,114,165, 71,252,212,175, 93,  3,150,136,135,
+170,252,120,  4,148, 69, 36,136,234,105, 93,233,172,246,213,110, 93,134,228,217,160,233,191,195, 78, 81,187, 36,199,205,182,219,
+ 15,234,210, 11,146, 41,192,213, 80,135,101, 31,205,227,211,166,154, 70,212,248,157,139,232, 98, 40,188,124,190, 32,120,253,167,
+ 92,100,225, 38,217, 69,246, 48,187,122,149,  8,118,168,232,  1,235, 79,179, 72,240, 92,139,  3, 84,227,112, 94,112,164,188,212,
+184, 10,224, 16,  8, 83,212, 87, 76, 15,139, 34, 92,  0, 64, 59,125,138,231, 31, 55,162,204,209,202, 66, 74, 27,212, 98,  1, 62,
+110,138, 43,241,166,228,104, 59,208,112, 28, 43,237, 33, 25, 92, 18,196,212,237, 59,132, 84,181,121, 93,253, 56, 24,  7,159,138,
+220,163, 40, 42,224, 16, 65,226, 58,208,138,157, 70,193,158, 91, 48, 68,220,148,163, 38,  6,178,241, 83,218,193, 63, 30, 57, 33,
+146,118,155,243, 45, 35,228, 25,161, 52,140,176,221,118,248, 19,252, 53, 20,175,146,  0, 20, 60,113,245,165, 11, 57, 65, 50, 47,
+ 30, 24,112,244,216,157,142, 11, 54,137,184,144,183,  6,131,233,220,148, 11, 81, 90,131,227, 79,133,116,211,118,224,147,236,223,
+138,154,205,187,120, 96,119, 97,252,123, 55,213, 49,153,184,244, 85,  3,220,188,243,130, 99,111, 47,148, 32, 53, 28,118,242,252,
+199,199, 78,211,195, 51,180, 88,124,120,169, 53,154,161,101,158, 68,147, 78,225,187,114,163, 55,178,215,242, 86,158, 33,219,118,
+209,226,208,218,169, 63,228, 38, 75, 64, 55, 19,138,111,243,174, 91,137,231, 41, 63,132,  0, 79,240,  3, 83,196,198, 27,148, 50,
+ 23, 47, 30, 99, 41, 63,171,212,164, 28,125,227,121, 61,  6, 12,105, 80,226,157,126,221, 35,168,182,206,238,137,142,142,227,101,
+ 17,100,252, 93,191,112,204,173, 43, 34,168, 96, 12,124,141, 90,158,  0,128, 70,133,150,178, 24,  0, 81,150,122, 21,201, 16, 73,
+ 12,245, 15, 83,193, 88, 93,140,163, 56,138, 67,244,197,148, 21,142, 42,150, 42,122,121,207,250, 53,105,165,150,154,236, 43, 58,
+ 13,244,254, 42,203, 85,115, 89, 41, 55,130,152, 70,165,184,203,103,114,134,113,237, 70, 96,140, 92, 31, 51,191,226, 45,243,174,
+250, 42,125, 71, 77, 26, 10,246, 42,145,211,231, 39,108,120,226,162,203, 16, 86, 52, 35,173, 15, 93,136,251,116,207,223, 85,225,
+ 16, 40,160,185,164,108, 78,213, 24,177, 86, 13, 93,133, 79, 79, 31,  1,168,101,170,184,216,179,161, 50,136,151,108, 19, 46,194,
+158, 99, 78,164,  1,191, 93, 12,110, 74, 92, 80,215, 37, 17,141, 55, 41,214, 56,139,155,226,166, 74,193,109,226,236, 42,196,127,
+178,167, 70,105,180,185,228, 51, 22,142,244, 93,142,159,168,190, 29,178,142, 63,  5,123, 21,173,190, 52,170,196,131,210, 97, 95,
+ 88, 84,187,  3,226,124,117,162,179,104, 88, 38,141, 10, 17, 45,178, 27,248,118, 43,232, 89,181,167,  0, 64,118,239,249,167,154,
+246, 27,111, 60,206,168,148,162,242,220,239,208,128, 55, 39, 86, 54,186,143,147,112,176, 24, 83,191,111,201, 58,244,225,  8,188,
+229,148, 42,185,179,146, 72,120, 89, 39, 20,173, 68,210, 13,201,232, 72, 94,131,239,212, 49,133,235,211, 13, 76,196,158, 36,237,
+ 63, 50,169,175,245,154,101,178, 41,249,165,240,142, 10,  4,193,229,145,222,226, 70,150,228, 83,119,241,233,210,186,179, 26, 72,
+ 89,151, 55,139,111,225,233,218,179,215, 46, 74,236,140,165, 35, 41,113, 93, 39, 95, 34,242,115, 87, 93,170,105,255,  0, 54,165,
+  0,198, 53,220,225,247, 38, 17, 19, 39, 24,149,195, 93,172,101,132,178, 49,133,193, 30,146, 48,118, 32,138,111,225, 90, 18, 42,
+218,160,212,245, 11, 49, 38, 39,153,112,218, 99,154, 69, 16, 97, 59,102,255,  0, 49,102,114, 97,254,134,201,139,186,200, 81,165,
+184,111, 77,  7, 39, 28, 66,170, 43, 55, 20, 83,248,153,136,  2,187,157,  5,110,197,235,237, 50,124,176,106, 24, 99,199,179,  1,
+240, 86,186,125, 38,120,146,  6, 81,188,226,120, 14, 30,155,209,157,231, 98,219,172,136, 50, 87,115,229,203,184,134, 54,145,254,
+158,  1, 43,130, 19,146,167, 42, 22,225,201, 58, 51,116, 97,203,109,104,191, 97,  2, 63,186, 77,210,252, 64,237, 97, 68,248, 88,
+144,164,134, 27, 49,175, 15,154,158,150, 86, 24, 88, 67,186,219,219,218, 79,110,151,111,108,209,160,142,  2,125, 67, 73, 84,241,
+118,160, 74,  2, 88, 50,177, 31,139,166,139, 19,134,158,160,  8,134, 20,  1,171,182,189,138,206,214,158, 50,230, 39, 36, 98, 73,
+ 37,182, 26,124,208, 94, 75,184,114, 29,199,126,184, 62,223, 50,200,247,147,172, 98,103,162, 60,174,225, 65, 32,159, 52,105,229,
+ 44, 79,246,124, 17, 69, 53, 79,168,212,220,190, 72, 20,  4,211,122,168,212,117,  9, 94, 34,197,138, 68,237,218,127,  5,180,118,
+246, 11,183,187, 43,183,214,218, 27,158,112,219, 15, 83, 41,120, 93, 66,220, 79, 74,200, 20,129, 81, 78, 52, 69, 93,184, 13,207,
+ 34,218,179,181, 98, 54,109,176,241,111, 86, 22, 52,185,  0,136,167,212, 79,  1,183,177,  9,230,115,151,125,197, 18,198,167,210,
+196, 68,138, 32,143,211,145,189,121, 23,143, 50,244,167, 21, 46,172,193, 73,169,109,206,184, 44,184,114,179,186,253, 95,156,226,
+221, 45,191,250,251,127, 74,133,219,151,183,109,222, 47,250, 62, 58, 60,166, 82, 43, 25,210, 36,141,148,172,  7,154, 37, 88,146,
+ 13, 72, 37,  0,252, 91,210,155,234,182,244,196,238,229,182, 95,243,112, 78,208, 66, 57,201,103, 32, 56,220,143,112,126,217,228,
+ 50,190,182, 83, 51,147, 22,178, 75, 25,158, 88, 97,  2, 91,167,  0, 49,244,234,124,145,129,198,129, 69,105,167,195, 72,196,189,
+ 81, 23,108, 92,189,207,112,185,150,206, 27,149,223,108, 88,224,237,242,151,183,150,128,218, 98, 48,222,173,165,145, 14, 98,229,
+114, 99,255,  0, 19,112,242,212,143, 83,137, 88,149,255,  0,233,232,105,229,148,169,244,163,173,105,227, 23,  3,189, 13,247,143,
+123, 73,221,119,102, 20,158, 88,240, 16, 63, 27, 24, 19,202,247, 19, 42,239, 59, 42,143,230,161, 40,128, 84,157,207,133, 57,147,
+105, 84,186,171,224,242, 70,177,219,196,252,149,255,  0,183, 56,155,236, 62,106,239,188, 47, 32,155,235, 35,143,244,220,117,185,
+ 79, 90, 72,218,235,243,110, 95,101,226,164, 70,170,  0,218,149,227, 82, 78,160,187,100,130, 78, 52,193, 63, 71,103, 43,146,137,
+189,222,247, 77,160,178,147,183, 44,135, 59,145,  8, 57,198,171, 48, 52,106, 71,111, 90, 14, 70, 66,170,135,237,219,174,161,242,
+220, 29,201,218,185, 74, 45,  0,121,165,238, 63, 20,111,219,190,219,222, 98,187, 34, 30,200,199,221, 69,143,180,186,181,111,212,
+239, 16, 81,237,175,110, 71,169, 61,194, 22, 96,204,232,219, 35, 51,121, 64, 90, 15, 45,116,204,163, 41, 24, 41,163,104,196,  8,
+170,190,197,193,127,156,243,249, 60,174,127, 38,115,208, 98, 45,206, 26, 43,172,140,113,172,183,124,195, 73, 53, 35, 10,177,250,
+ 64,122, 94, 80, 15, 47, 49, 98, 91,125, 79,104,100,139,111, 67,198, 57,166,101, 28, 35, 78,212,207,185,221,145,135,183,179,237,
+155,152, 33,250, 12,204, 10,246,248,251,107, 56,146,222,213, 22,241,132,  8,192,  0, 64,224,199,159,148,  2, 20,232,168,217,133,
+217,  1,128,142,229, 53,227,150,211,109,153,100,  3,119, 15,187, 94,218,226,187,190,199,179,175,150, 46,201, 13,245, 70,102,  9,
+206, 85,185, 48,195, 35, 90, 73, 24,231, 19,144,  2, 74, 54,227, 79, 46,250,134,237,139,214,115,202, 52,132,121,135, 30, 31, 39,
+ 68,233,224, 72, 22,237,159, 17,245,173,135, 29,239,151,110,247, 31,121,118,255,  0,108, 69,110,113, 24,172,175,212,205,125,119,
+115, 52, 81,172,119,150,113, 47,163,105, 18,161,104,200,115,230,169,106,147, 65,196,104,200,234, 37, 25,  0,  1, 46,  8,115,218,
+ 31,190,191,197, 79, 99, 95,230,221,205, 16,224, 82,187, 86,135,250,166, 63, 32,183,183, 56,235,149,200,216,216, 78,214,207, 44,
+ 47, 25, 67,144,133, 11, 92, 34,176, 36,126, 88, 20,111,157,116,117,153,137, 51, 80,251,134,196, 73,151,246,231, 47,205, 78,229,
+107, 33,245, 29,173, 35,226, 22,100,134, 24,163,169, 12,162, 72,253, 78, 92,134,204, 66,182,254, 29, 55,212, 81, 32, 12,199, 97,
+ 41,242, 57,240, 62, 16,163,221, 55,229,203,113, 52,166, 52,137, 17, 45, 81,212, 41, 34, 64,200,149, 44,119,228,235,178,233, 70,
+ 96, 22, 27, 84, 19, 36,219, 99, 92,216, 14,237,170,150, 92,181,230, 10,145, 69,117, 53,165,212, 79,202,100,138, 83, 28,  1, 21,
+ 25,106, 74,176,221, 89, 78,196, 29,180, 68,109, 66,247,138, 34, 64,239,197, 78,241,157,203,129,129,229,199,185,  7,123,129,238,
+127,184,217, 12, 61,214, 18,222, 73, 18, 55,153, 37,103, 91, 73,237,222, 75,102, 14, 35,182,146,226,222,132,  7,112,129,184,132,
+ 59,138,183, 18,117, 69,215,122, 69,155, 90, 97,119, 76,121,227, 40,188,115,  6,144,250,168, 88,250,164,180, 95,106,218,177,111,
+ 87,110,229,219, 82,144,148, 38,  1,203,152, 66,111,203, 35, 67, 22,200,236,224,182, 44,236,130,108,189,195,247, 15, 59,137,155,
+183, 59,219,219,249,179,125,163, 61,168, 55, 22, 23,120,224,242,171, 70,161,163,244,166, 86,182,149, 92, 49, 28, 31,147, 72,167,
+112,121, 10,234,158,212,181, 50, 31,220,182,227,  3,253,219,126,209, 45,157,190,181,164,234, 61, 55,165,107, 68,101, 19,114,213,
+207, 30, 97,152, 97,192,158, 89,110,202, 35,186,129, 71,237, 81,239,119, 99,229,173,115, 29,143,111,151,202,219,199, 52,208,201,
+132,238, 14,220,188,148,195,  4,188,228,172,119,227,138,206,177,  8,184,171,139,210,236,206,163,211,221,180,117,155, 16,240, 25,
+176, 53, 49,205, 22,  1,246, 75, 49,126,242, 88, 44,111, 84,234, 55, 46,222,253,175,152,110, 90, 17,172,205, 48,195,233,137, 36,
+237,124,221,236,224,163, 39,251,198,238,222,217,186,180,199,247,191,183, 45, 97, 60,138,100,129,237,111,229,198,202,  0,228,175,
+ 19, 67,146,181,142,132,209, 95,143, 50, 10,149, 34,186,231,237,140, 12,141, 76, 91,109,118,179,226,  3,247,172,188,132,173,179,
+152,200,203, 99,238,197,247, 16,136,241, 94,251,123, 27,239,125,159,249, 55, 61,  2,198,114,132, 65,250, 15,112,192, 45,189,105,
+ 93,127, 47,209,184, 14,208,243,  1,171, 27, 71, 50,204,187,113, 27,237,216,198, 19,139, 19,235,244,169,236,113,182,132, 58,150,
+ 23,109, 94, 57,101,143,180,118,113, 68,153,206,224,187,246,155,217,124,202,251,117,217,255,  0, 95,254, 89,186,130, 24,240, 73,
+ 52,146,199, 29,139, 24,228,123,159,205, 14,244,  8,164,129,231, 60,207, 35,203,125, 21,172,181, 40,220,132,135, 59,194,130,145,
+240,211, 45, 49,247,149,  5,201,202,122,129, 25, 71, 56,128, 17,  3,108,128,227,190,172,235, 58,236,223,221,230,  7,187, 59,171,
+ 13,219,237,133,154,194,207, 47, 43, 27,246,190,250,116,226,143, 28,178, 52,164,194,196,  1, 25,137, 73,115,197,221,138,209, 70,
+132,183,169,177,124, 17,  7,204, 24,  3,178,159,135,169, 31,168,208,219,153,141,187, 54,229,158, 97,198,106, 83,105,161,151,115,
+254, 43, 94,190,187, 78,243,192,231,238, 59,110,225,161,202, 90, 65, 24,196, 77,125,  1, 17,222,220, 91, 72,147,162, 75, 28,171,
+249,136, 88, 53,188,146, 71,255,  0,115,149,135, 93, 63, 46, 73, 68, 26,130,106,170,250,135, 77,187,164, 97,116,198,161,232, 95,
+215,199,224,178,190,249,200, 90,103,176, 25,107,156, 91, 50,218,247,183,110,220,102,173,224, 32,164,150,249,174,216,120, 95,137,
+ 59, 17, 58, 69, 72,216, 84,127,226,192,237,171, 61, 60, 50, 76,  9,125, 50,202,120,137,122,123, 85, 21,194,  8, 45,129, 30,229,
+247, 35,148,182,197,127,148,189,232,198,219, 37,188,121, 73,108,199,122, 45,169, 47,  5,213,142, 82, 26, 60,175,230,226,  5,188,
+236, 31,150,212, 28,171,163, 52,246,141,192,108,237,110, 94,  4, 40,231, 70,155, 87,210,171, 46,247, 51, 11,159,246,203, 53,245,
+ 56,  4,164, 48,100,127, 93,197, 79, 82,168,199, 28,236,241,175, 83, 82, 98,186, 48, 48, 31,137, 53,121,211,224, 53,118,140,102,
+121,128,111, 79, 82,110,178, 86,163, 33,228,131, 16, 64,120,253, 49, 32, 87, 41,198,166,163,212,189, 87,219, 61,199,141,239, 46,
+214,198,119, 62, 38,143,140,203,219, 36,233, 27, 81,184,135, 30,120,156,110, 42,140, 26, 54, 31,236,235,  7,212,116,153, 46, 24,
+ 72, 56,192,252, 62,104,139, 55,140, 72,156,  9,137, 27, 70, 42, 82,193,107,109,  8,130,206, 33, 20,  3,116,141,  7, 16, 11, 26,
+181, 71,219,166,131, 41, 30, 98,231,138,229,235,146,185, 51, 41, 98,123,147, 63,205, 77, 19,177, 12,229,126, 60,169,242,130,160,
+209, 84,130,107,226,117,148, 43, 64, 13, 40,184, 32,168,223,250, 55,211,130,132,130,190,  4, 52,173, 62,221, 39, 77, 73, 73,  7,
+144,234, 60,126,122, 69,116, 39, 80, 43, 21, 12,105,253, 61,116,194,166,141,113, 95, 88, 14,124, 99, 33,169, 94, 36, 14,163, 92,
+ 24, 85, 72,206, 88, 50,145, 20, 33, 19,212,170,150, 45, 69, 83, 80,192, 13,250,124, 14,152,100,244, 79,136,106,134, 37, 91, 42,
+196,225, 89, 85,106, 65,242, 46,195,231,215, 65, 18, 86,154,220,109, 72,  2,202,113, 82, 32,164,117,105,248,215, 98,127, 15, 66,
+ 62, 59,106, 16,121,171,130, 46,228,227,146, 77,226, 35,103,  4,211,122,193,125, 22, 74, 70, 15,154,139,191, 38, 21,  0,248,239,
+167, 81,221, 66,100, 37, 12,172,157,142, 82,176,167,170, 86, 84,118, 43, 44,100, 16,233,196,208, 22, 62, 21, 39, 99,247,107,179,
+128, 50, 44,225,131,142, 59,208,177,212, 72, 64,  9,243,  2, 88,141,161,176, 41,250,198,241, 75,206, 37,169, 87, 41,191, 26, 61,
+  9,174,212,240, 26, 28, 56, 33,138, 56, 78, 38, 46, 64, 32,251, 10,135,111,107,  0,  3,242,128,173, 24, 23,  0,  3, 95, 29, 17,
+ 57,147,181, 11,106, 54,237,212,128, 92,209,194,179,149,111, 45,226, 14, 17, 81, 89,138,115,136,138, 85,105,181,  1,240,240,219,
+ 80, 68, 90,153, 96,118, 61, 81,190,117,235,113,122, 49, 45,202,159, 87,153, 36, 18,110, 88,142, 46,100, 90,176,  7,106,239, 95,
+ 19,165, 56,194, 86,246, 83,  6,248,169,172,221,156, 46,209,216,248,179, 15, 83, 54,205,253,202, 64,141,204, 33,157, 20,172,114,
+122, 82,181, 65,226,241, 41,102, 95, 37,104, 62,  7,166,129, 36,  9, 83,115,142,195,129, 87,145, 49,200,103, 78, 86,204,220, 62,
+ 93,149, 81, 22,119, 28,228,223,155, 17,247,  0,106, 52, 80,181,153,134,196,235,110, 65, 50,126, 31,152,109, 85,247, 14,243, 72,
+101,174,238,119, 52,166,228,232,223, 40, 66,129,  7, 57, 25, 23, 10,182,237,161,140,254,115, 22,111, 10, 26,208,143,245,234,107,
+100,144,193, 82,107, 39,106,217,231, 53, 85,193,166,186,148, 69,108,133,156,244,  3,174,140,133,162,113, 89,147,126,230,162,121,
+ 45, 10,171,171, 12, 26, 91, 17, 45,229, 37,159,168, 95,229, 79,187,196,232,219,118,132, 71, 54,245,165,209,116,120,217,105, 92,
+230,151,187,230,166,221,222,199,107, 24,245, 15, 19,254,215, 83, 95, 21,  3,125, 90, 92,212,196,198, 49,136,168, 70,106, 47,198,
+192, 38,101,187,118,246,  5, 79,113,151,157,201, 75, 96, 81,  5,104,242,126, 45,255,  0,178, 60, 53, 61,171,119,110, 69,137,229,
+252, 86, 99, 81,213,201, 45,104, 55,234, 63, 13,202, 37, 25,143,168,252,164,149,191,157,183, 52,166,253,117, 96, 52,209,134, 14,
+ 73, 84,199, 52,201,148,203,158, 53, 79,202, 85, 84, 25, 60,  6,203,248, 77,  7,241,254,141, 90, 94,212,218,211, 14,106, 22,219,
+ 66, 61,253,180, 79,149,179, 32,  9,195,212,152,146,244,199, 24, 72,212, 20,168, 33,136,216,236, 43, 74,252, 53, 73,115,175,125,
+ 16,139,241, 63, 47,106,116,134, 80, 27, 12,120, 30,254, 10, 19,204,236,166,172,120, 17, 70, 29,  5, 42, 62, 26,207,234, 53, 55,
+ 47, 82,228,156, 12,  2, 23, 49, 24,109, 69,125,163,219, 81,222,200, 47,242, 49, 52,209, 71,198, 72,108,202,176, 73,145, 73,230,
+206, 87,192,  5, 60, 80,117, 61,118,235,105,211,186,108,174,  3,114, 67,  6, 96,125,167,141, 54,109,236, 86,250, 61, 16, 13, 59,
+180, 18,240,141,231,103,167,173,150,165,138,158, 73,163,181, 28,193, 60,209,191, 44, 68, 68,  1, 66,  1, 34, 43, 47, 16,141,199,
+132,139, 90,  5, 53, 30, 83,173,104, 34, 64, 16,121,101,233,240,217, 77,161, 91, 95, 24,140, 89,190, 62,231,237,216, 85, 93,247,
+118, 69,140,130, 18,142, 97,176,149, 17,164,183,129,143,171, 51,145,198,112, 13, 65,163,178,249,135,192, 45, 72,160, 58,  2,230,
+168, 68,114,189, 91,106,147, 81, 27,118, 32,103,120,183,229, 24, 18,219,190, 37,103,217, 28,173,254,109,228, 55, 50,122,118,193,
+140,191, 75,234, 51,  3, 45, 25,185,158, 71,206,198,167,118,233,225,215, 80,121,114,184, 76,166,121, 86, 59, 93,212,110,106, 88,
+120, 98, 48,136, 71, 94,223, 99,108,112,118, 13,221, 25,121,227,133,238,  0, 91, 54,149, 75,  8,173,219,153,103,120,212,242,229,
+ 48, 80, 23,253,131, 95, 26,105, 90,184, 32, 28,158, 82, 88,113,226,173,186, 94,152,219,123,155, 89,235,177, 87,229, 51,183,217,
+143, 74,216,158, 24,216,  9,101,141,135,166,101,112, 65, 18,202, 24,210,187,  2, 16,159,183,228, 84, 46, 83, 52,141, 16,253, 83,
+169, 29, 72,201,111,252,123,119,205,183,238,136,216, 61,168,115, 45,153,103, 65,232, 59,165,137,228, 23,145, 60,164,144,209, 95,
+210, 31,217, 61, 57, 29,233,243,213,126,167,168,102, 28,148,142, 15,180,240,111,138,174, 22,101,  8,  9, 76,120,176, 31,134,192,
+183, 15,109, 59,114,126,210,197,164,142,139, 22,114,244,139,172,155, 40, 42, 97, 82,188,163,182, 86, 97, 66, 99, 83,200,175,139,
+ 31,136,209,189, 59, 74,108,192,230,241, 73, 93,216,181,150,  0, 12,113, 61,170,247,190,251,225,240,182, 77,134,199, 20,255,  0,
+ 48, 93,198,162,246,234, 33,200, 36, 70,170, 69,105, 80, 15, 30,157,121,124,180, 84,160,100,227,  0,150,191, 82, 52,214,233,254,
+ 73,120, 71,229,227,242, 66, 62,220, 91, 31,112,108,211,  7, 44,191,165,225,241,177,180, 57, 43,136,232, 90,250,237,229, 51, 42,
+169,112, 70,245, 47, 37, 69,121, 17,241, 26,167,181,253,233,201,195,101, 62,180, 53,171,217,180,241,132,104,  8, 99,218, 49,110,
+221,171, 78,198,123,103, 99,143,187,158, 88,195, 78,158,148,174, 47,174, 23,156,139, 21,181,104,180, 80,129, 25,148, 83,146,254,
+ 42, 82,189,116,118, 65, 17, 68, 60, 52,192, 48, 24, 33,225,238, 77,246, 15,  7,  5,204, 34, 20,201,100, 36,250,197,244,135,149,
+ 92,178,186,  2, 90,167,138,167, 16,124,104, 54,213, 92,158, 71,181, 91,188, 52,240, 55, 39, 88,194,131,140,142, 31, 19,192, 14,
+ 33, 10,118,140,183, 61,207,221,184,203, 43,132, 75,168,103,187,250,252,197,252,231,144,118,180, 31, 84, 22,165,  8, 14,205, 24,
+ 10, 41,178,253,227, 69,206, 24, 48,162,160,209, 64,222,188, 73,169, 47, 34,118,122,  5,177,251,131,221,141,218,216,  9,241, 54,
+ 23, 82,201,127,154,146, 68,134, 35, 47,174, 82,213, 71, 41,165,146,162,170,206,213,242,211,175, 74, 13,116,105,220,240, 86,218,
+185,126,222,198,113,226,153,104,251,201,238, 21,227,130, 40,246,123,244,120,187,  3, 15,109,121,110,237,147,200, 91,201,144,146,
+225,121, 43,159,171,145,167, 80, 36,240, 33, 29, 84, 87,192,109,211, 81,121,103, 29,233,154,109, 60, 99,108,111,244,170,251,143,
+207,197,223,158,240,196,214, 99,234,176,152, 11, 41, 12,118, 96,  6, 89, 56,254, 66, 51, 49,  4, 30, 47, 41, 43,226, 74,157,246,
+211,196, 68,109,241, 37, 11,144, 92,213,101, 63,248,189,231, 31, 82,191,238,201,176,120,174,197,205,102,237, 97, 72, 30,236, 53,
+156,207, 41,227, 25, 30,168, 98,130, 54,173, 20,  5,161,160,249,237,163, 32,243,144,140,170, 20,179,107, 22,103, 56,226,197,187,
+100,178,105,125,141,143,187, 48,221,164,210,202,240, 91, 67, 15,173,144,183,182,128,122,156,111,156, 92, 75,201,152,  6,228, 57,
+117, 32,149,235, 77,169,169,175,233,161,123, 46, 98,194,  7,215,232,201,246, 52,241, 16,136,218,200, 59, 29, 63,184, 88, 27, 30,
+239,246,219,177, 47,227,178,237, 75, 89, 39, 89,131, 32, 51,188,151, 82,122,127, 79,111, 51,  5,226,242, 67,179, 26,248, 31,142,
+170,163,161,188, 77,200, 91,216,229,251, 75,183,112,246,168, 77,195, 59,147,  2,144, 20,110,234,251, 93, 74,196,247, 47,187,221,
+133,113, 22, 42,242,247, 47, 53,211, 88, 72,108,108,158,242,175,107,103,192,149, 17, 73, 86, 17, 73, 21, 57, 47, 58,215,136, 67,
+ 80,105,170,249,232,181, 89, 76,106, 65, 30,157,232, 91,198,228,  8,140, 77,114,215,176,224,153,196,251,215,238,230, 58,218,223,
+ 63,222,153, 91,156,149,182, 50,235,245, 28, 93,189,221,180, 92, 50,183,176,176,141,173,231,146, 36,141,196, 98, 39,149,209,232,
+202,167,127,229, 26,173,152,189,108, 68,200,152,196, 22,109,167,211,122, 55, 79,173,149,136,152,152,137,  9,196,135,221,216,180,
+108,119,191, 29,183,221, 88, 12,247,115,100,173, 36,237,216,  2,199,105,110,200, 77,248, 83,235,  9, 39,146, 85,137,  7, 62, 69,
+249, 39, 24,234,161,122,208,146, 46,180,125, 84,  9,131, 58, 64, 20,173,235, 68,229, 40,  1, 89,  6, 11, 32,196, 77,137,191,238,
+201,114, 57, 96,215, 22, 83, 77, 45,203,165,232,245, 12, 81,149,150, 81,205, 60,194,166, 53, 28,246,223,196,235, 19,163, 17,213,
+234,195,115, 11,151, 13, 14,199,145,102, 95, 71,230, 26, 30,149,115, 81,112,231,185,110,200, 53, 52, 25, 96, 75, 13,130,148,160,
+114,140,189,146,239, 27, 31,114,  6, 87,245,254,211,192,218,182, 62, 59, 70,182, 54,118,129, 76,141,118,101, 82,178,122,166, 67,
+183, 26,175, 10,124,245,166,209, 95,141,201, 72,101, 20,224,177,157, 35,170,107, 53,144,148,238, 73,141, 48,145, 52,230, 53,220,
+105,191,110, 11,103,237, 31,118,187, 94, 63,121, 45,125,132,126,207,182,178, 51,218,198,248,174,231,196, 92, 62, 58,101,150,124,
+ 98,100, 68, 79, 21,186,198,235, 95, 58,153, 35,152, 87,111, 47, 93, 45, 78,174, 66,230, 82, 75, 51, 49,230, 13,193,197,  6,237,
+197,121,207, 82,212,222,189,170,188, 37, 34, 68,  9,143, 49,205,134,192,254,238, 10,211,220, 44,127,114,  3,135,177,237,147,136,
+238, 98, 45,159, 31,117,103,220,185,153,237, 50,210,188,143,235,162,164,243, 44,176,220, 33,129,155,146,201, 31,168, 56,134,228,
+220,104, 46,180,250,139,150, 76,163,  8,102,134, 36,  1,129,108,105, 25, 17,238,246,172,247,156,210,203,199,222,176, 63,112, 61,
+159,196, 75,105,113, 45,231,108,103,123, 14,246,100,144,155,185,224,143, 57,219,210, 72,225,191,191,184,195, 27,149,137,  2,149,
+227, 33,133, 56,159, 49,218,186,142,245,235, 23,201,205, 28,146,225,183,250, 75,237,125,161, 41,146, 34, 70,197,184,251, 19,159,
+182,255,  0, 35, 98, 59, 55,180,242, 86, 93,201,221,182,232,237,146,189,182,184,151, 39,111, 25,138,225,190,150, 75,185, 87,128,
+ 75,120, 80,143,166,181,230,178, 78,227,141, 84, 44,178,106, 11,226, 98,179,150, 97,176,209,128, 56,129,250,142,  4,253, 35, 23,
+ 80,218,184,114,150,241,241, 65, 95,229,174,208,236,252,245,231,109, 51,165,254,107, 20, 90,214,230,244, 65,111,  5,186,250,171,
+235, 50, 66, 34,226,210, 16,100, 89, 31,155, 16,178, 10,127, 40,212,177, 32, 64, 27, 99, 44,  9,120,141,221,171,115,165,235, 34,
+243,136,  1, 25, 68,  0,100, 49,236, 27,135,  5,207,183,126,252,225,242, 30,231, 12, 10,  3, 61,140,176, 77,141,187,203, 52,201,
+ 39, 16,  7, 46, 16, 41,140, 43,250,114, 14, 68,236,  9,233,203, 85,179,214, 66,228,252,145,142, 40, 11,218, 35,172,183, 59,145,
+174, 95, 89, 82,115, 87,107,129,238, 63,211,178, 77, 29,164, 56, 94,245,181,189,100, 84, 95,167,147, 29,220,214,114, 90,206, 85,
+ 69,107, 20,151, 12, 92,215,160,146,135,161,213,229,177,152, 56,219, 31,108, 86, 30,227,  2,219, 31,222,158,199, 99,225,159, 21,
+238,135,180, 80,129, 20, 86, 83, 77,123,130,128,167, 37, 54, 57, 64,103, 72,145,118,162, 36,225,212, 83,160,109, 90,216,228,187,
+106,233,168, 56,251,189,200,121,212, 16,170,101,188,159,220, 47, 96,162,202, 94,197, 29,238,127,180,164,244,175,225,184,171, 44,
+233,100,203, 27,137, 41, 70,227, 36, 13, 27,183,141, 86,186,185,211, 64,105,250,134, 71,104, 92,248,212,122,138, 14,114, 51,181,
+152, 99, 21,243,246,193,221,115,227, 47,242, 94,214,223,191,169,109,114,143,154,237,230,  4,178,243,168,250,200, 16,248,175, 47,
+204, 79,251,115,227,166,125,215,211, 68, 99,231,199,191,231,233,191,130,147, 75,120,200,145, 44, 87,163,100, 95, 29,121,236, 17,
+ 14,152,161,231, 78, 38,191, 13,235,252, 53, 62,196,213,248,232,135,106, 86,156,142,227,195,239,214, 84,133,124,237,222,186,163,
+ 59, 18,163, 97,189, 53,204, 18, 36,226, 23,103,146, 85, 88, 82,180,174,185, 68,201, 25,  3, 85,194,168,230, 57,126, 19,215, 93,
+ 56, 37,  2, 29,116, 34,  6,164,111, 77,207,128,215,  9, 83,  6, 93,169, 17, 84, 33,  7,151, 82,  7,195,224,117,198,116,195, 49,
+ 19, 69, 40, 79, 24, 95,203, 20, 45, 80,205,208, 82,158, 31,110,161,202, 94,168,161,125,129,202, 42, 83,139, 36,158,146,214,164,
+  3,229, 39,122, 86,187,  1,164,195, 50, 34, 51,148,109, 10, 43,232, 25,133,147,220, 27,248,149,184,128,109,248,150,106, 58, 10,
+ 29,133, 13,124,119,216,232, 25,177,152,137,129,199, 20,124, 46,204, 91, 39,204, 24,120, 89, 65,142,230,229,149,160,142, 78, 38,
+130, 89, 42,105,188,125, 24, 55, 90,232,185, 91,128, 98, 66, 14, 55,174,108, 41,200,102,150, 64, 33,121, 25, 61, 89,  3, 74,229,
+184,130, 41,252,196,252, 72,234,117, 28,227, 24,212,  7, 96,157, 11,179,144,105, 28,101, 94, 41,199,151,148, 73,  8, 94,100,177,
+ 96, 90,135,204,118,233, 79,134,185,102,215, 54,105, 22,  8,139,151,222, 25,  0,121, 58,114,  5,184,154, 84,183,137,120,202,  7,
+  5,  6,160,150, 21,254,147, 90,105,183,124,184, 12,198,160,151,238, 83, 89, 55,174,114,120, 75, 50,149,  8,132, 72,240, 37,179,
+ 51, 14, 28,183,171,163,  1,197,128, 59,108, 78,135,184, 37,148, 72,200, 87,221,177, 90,105,185,102, 99,151, 13,188,112, 42,200,
+167,166, 61,104, 93, 29, 85, 64, 46,121, 43, 15,141,106,219,232, 75,109, 32, 98, 92, 19,134,229,116, 35, 35, 56, 24, 86, 63, 94,
+240, 55,142, 15,226,166, 10,  0, 88,144,180,104,196,169, 53,169, 63,194,191, 29, 88,139,114, 44,102,139,181,106,220, 78,243,191,
+211, 20,204,183,113, 91, 32, 55, 83,  4, 20,252, 52,228,228,252,134,187,146, 82,240,133,203,186,203,118, 34,247,103,151,218, 79,
+114,161,186,203,203, 48,244,224, 81, 20, 94, 39,171,183,219,162, 97,167,  0,188,141, 86, 43, 89,214,238,221,142, 91, 81, 16,143,
+180,168,248,251,  9,114, 87, 62,138,181, 40, 11, 59,181, 77, 23, 86, 90,123, 38,228,152, 80, 42,189, 46,134, 90,171,153, 94,184,
+146, 81, 92,112,227,112,214,224,  6,  8,196,110,237, 66,242, 19,242, 27,232,236,217,110, 74, 22,129,148,156, 55,  0,183,208,179,
+165,208, 89,137,145,202, 26,167,108,143,102, 62,165, 87,121,149,185,145, 79,210,160,134, 50, 40, 37,148, 86, 66, 62, 64, 84, 13,
+ 79, 30,157, 57,  0,102,107, 45,156, 86,127, 87,214,166, 95,201,142, 72,143,170, 94, 38,224, 48, 10,173, 97,121,164, 12, 57, 79,
+ 51, 82,167,118, 59,252,116,127,149, 27,  1,228,209,237, 89,200,219,149,249,209,238, 72,246,149,113,142,237,156,133,242,214, 68,
+ 75, 88,252, 36,152,211,231,178, 13,245, 85,170,235,218, 93, 52,136,139,220, 63,167, 14,243,242, 90, 77, 23,218,250,221, 68, 51,
+ 78, 62, 88,253, 88,255,  0,167,230,202, 22, 71,232, 35,255,  0,  3,141,118,186,116, 37,167,187,111, 44,126, 81,184, 64, 60, 54,
+220,157,  1,255,  0, 45,170,187, 30,102,183, 19,132, 70, 61,229, 11,172,211,233, 45,159, 39, 78,101,118, 66,179,184, 79, 32,108,
+ 68, 98, 54,126,172, 85, 57, 38,181, 99,230,  3,122,252, 60, 52, 49,145,145,115, 85, 66,204,107, 69,203,244, 21,165, 58,252,198,
+254, 58,123,236, 27, 16,247, 70,  7,120,193, 19,224, 59,111,140,145, 93,228, 99,228,196,242, 75, 67,196, 48, 21, 30,102,229, 81,
+227,248,124, 58,157,108,186, 79, 69,148,164, 46, 92, 15,148,214, 46,  1,139, 54, 47,185,235, 22,117,123,166,233,222, 84,115,221,
+ 28,196, 60, 98, 65, 52,222,120,238,221,143,  4, 79,  1,158,216,125, 76, 87, 21, 11, 44,130, 41, 36, 69, 50,180,104,180, 39,106,
+ 84,135, 96,180,167,142,174, 98,103,110, 39,155, 48, 23,103, 28,199, 28,145, 12, 70,207,172,176, 87, 49,140,165,112, 71,244, 68,
+247,191,180,196,142,245, 11, 53,220, 11,110,210,219, 90,159, 85,220, 21,  3,202,170,161,200,170,200,137, 65,225,248, 16, 13,247,
+219, 85,247,181,  6,228,165, 24, 10, 54,205,155, 16,218,237,124,116, 92,128,249,151, 78,195, 80, 63,155,139,161,137,101,119,127,
+172,186, 99, 35,200, 72, 18, 49,229,184, 21, 11, 77,192, 31, 47, 13,116, 89,141,174,105, 85, 97, 47, 95,187,168,153,185,112,230,
+ 42,211, 27,134,150,238,218,231, 55,118,128,227,224,117,134,222,  6,168, 23, 18, 49,227, 85,167,253,206, 50, 42,244,235,211,227,
+160, 47,221,145,  6, 64, 60, 99,234, 63,193, 25,165,210,202,228,115,200, 43,161,152,191,238,123,180,179,244,100,185,104,150, 51,
+111,106,128,  8,222, 84, 85,143,155, 53, 85, 71, 79,135,148,105,150,181,  2,228,156, 12,196, 96, 54, 14,244,118,160,220,148,124,
+191,163,111, 30,213, 23, 47, 20,120,176,100,201, 72, 46,220,242, 88,173, 99,228,182,225,133, 15,229,212,242,106, 15,196,199,167,
+207, 79,187, 50, 13, 75,240,216, 62,103,138, 83,179, 29, 60,124,203,149, 39,194, 61,207,193, 89,251, 87,218,173,221, 93,198,115,
+121,  0, 19, 25,140,112,241,196, 16,180,114, 92,211,156, 81, 42,177,252,  9, 64,204, 43,240,241, 58,130,197,145, 57,137, 29,136,
+109, 57,157,217,155,178,217,232,193,107,249,174,229, 61,183,139,145,239, 34, 47,149,187,103,135, 31,104,128, 73,234, 51,  0, 61,
+ 69,169,228,  1,175, 67,191, 93, 95, 27,185,168, 49,218,174, 37,114, 26,120,155,164,190,238, 39,114,199,243, 87, 87,156, 26,226,
+ 89,218, 92,172,242,  0,239,199,155,153,201,  8, 35, 81,208,128, 42, 40, 79, 93, 73, 57,139,113,197,101, 46,153,221,185,158,117,
+156,205,120,118, 45,251,219,204,125,151,108,224, 83,182,239, 35,  6,241, 91,215,201,241,  1,140,151,211, 16, 88, 50,174,235, 79,
+ 42,169, 31,202,  5, 60,117,  5,160, 68,120,202,170,247, 40,183,  1, 29,145,216,186,247, 35,190,226,237,140, 35, 96, 44,167,147,
+245, 73,199, 52,153,165, 15,244,209,144,107, 94,149, 10,166,137,254,209,175,129,211,115,  2,228,224, 16,250,235,223,182,180,195,
+197, 60, 20,111,106,123, 11,181,166,237,140, 52,253,197,102,111,242,210,197, 36,205, 13,212,210, 60,112,197, 52,134,104,161, 88,
+ 57,170, 72,  2,113,219,175, 83, 74,106, 13, 53,128,  3,151, 37, 19,110,211,219,140,103, 86,193, 92,123,154, 48, 29,175, 38, 54,
+238,216, 67,143,228,211, 22,183, 64,177,160,245, 99, 11, 31, 21,219,168,141,192, 93,168,126,209,162,111,206, 17,133, 78,  7,218,
+143,179,104, 66, 96,190, 92,244,  4,225,188,158,192, 49,245,109, 89,  6, 78,199,188,123,147, 23,145,238,  5,138, 85,179,  8,203,
+ 45,220,206, 85,163,133, 42,172,136, 86,173, 35, 47, 34, 24,174,193,142,228, 83, 83, 90,183, 47, 38, 71,105,193, 84,107,  4,181,
+250,129, 56, 69,173,128, 35,  0,113,200,255,  0, 87, 25, 98,119, 10,108, 91,174,119,191,241,216, 14,215,101,198,183,211,230, 76,
+ 75,142,181,128, 49, 62,157, 16, 39, 33, 90,147,194, 52,219,239,212, 98, 32,229,130,187,213, 74, 54, 44,206,240,160, 28,177,227,
+ 44, 41,198, 56,247, 42, 47, 98, 38,158,206,251,187, 51, 80,241,120,159,232,241, 81,134, 99, 89, 68, 11, 37,197, 75, 55, 74,243,
+ 12,192, 14,131,227,168,102,  1,155,143,166,138,147,166,129,229,153,126,111, 66,173,189,221,238,187,220,158, 75,  9,217, 19, 50,
+207, 18, 73,  0,188, 38,165, 94,107,199,  9,198,128, 15,194,140,218,125,128,192,201,115, 94,115,220,179,167,142,210, 36,126,  0,
+251, 79,169,104,217, 62,230,195,224,112,185,156,242, 92,201,111, 37,172,109,111,110,168,204,128, 75, 39,  5, 10,128,128,196,150,
+ 20,167,198,186, 38, 60,205, 21,107, 33, 24, 66,119, 54, 64, 30,206,206,242,133,253,177,178, 23, 29,187,111,115, 56,183,159, 33,
+147,185,186,121,166,153, 57, 30, 34, 79, 75,145, 33,135, 35, 64,  8,174,224,232,155,183,153,192, 85,154, 59,  6, 86, 34,255,  0,
+ 85, 95,180,174,113,183, 86, 57,222,235,238, 11,171,107,116,139, 29,101, 58,217,217,223,196, 11, 77, 20,105, 64,196,114,168, 33,
+189, 53,109,246,106,248,106,182, 87,  8, 32,147, 86, 81,143,238,221,157,193,194, 35,250, 84, 44,166, 51,182,114, 93,243, 23,106,
+247, 45,165,182, 90,211, 25,140,102,188,181,149, 64, 30,189,204,177, 49,148,157,216, 30, 33,124,149,165, 15,142,160,184, 35,112,
+115,  7, 10, 72,128,102, 33,249, 67,250,241,247, 44,187,221, 60,149,143,104,247,133,158, 99, 13,194, 25,226,183,138,227, 33,103,
+ 58,  3,101, 51,221,  6,130, 84,145, 63, 15,230,196,190,139,161, 93,215,112, 85,183, 35,107,108, 67, 44,174, 29,204,219, 13, 85,
+ 86,181,227, 55,141, 14, 87,239, 67, 29,176,175,123,159,154,216,139,133,179,145,166,181,148, 88, 72,134,104,146,230,217,160, 38,
+ 19, 45, 85,218, 53,125,131, 31, 48, 29, 65, 53,215,154,244,185,155,119,225,112,  3,203, 90, 99,133, 41,218, 93,125, 59,171,209,
+ 93,215,232, 47,233,161, 40,243,199, 47, 51,229, 15, 22,171, 87,122,210,189,177,236, 73,189,190, 57, 40, 99,200, 28,132,217, 21,
+183, 54, 23, 17,219, 53,172,136, 33, 18,164,170,201, 35, 72,  1, 83, 42, 16,220,216,116,214,195, 75,165, 22, 37,154, 46,115,112,
+102,239,168, 85,189, 31,165,222,210, 91,144,191,144,135,250,112,108, 70,192,127, 54, 37,217, 88,118,175,108,119, 21,151,238,151,
+ 25,238,  6, 70,198, 72, 59, 72,179, 61,174, 99,203, 44, 10,176,225, 77,151,165, 44,168,199,209,153, 36, 28, 30, 57, 66,186,181,
+121,117, 21,236,244, 87,239,234,  1,  0,176,  0,122,128,217,199,126,  7,102, 11,203, 53, 86,133,171,154,159, 48,180,179,206, 88,
+ 98, 38,104, 68,157,178,254, 92,177,102,198, 85,138,211, 50,198,215,184,237,179,241,100,236, 32,189,189,176, 78,222,184,145, 46,
+209, 30,161,226,200, 66, 81,234,140, 54, 34, 70, 31, 38, 39,173, 70,181,186,121,136,235,231,104,120,114,191, 10,144,126,  1,100,
+181,113,140,109,194,102, 60,217,200, 59,249, 99, 14, 83,216,229,  9,251,119,221,195, 47,156,205,224, 59, 96,102,123, 91, 51,218,
+179,220,219, 92,207,111, 49, 24,217, 61,  9, 22,216,162, 44,134, 88,  9, 50,173,120,170, 84,198,191,109,  1, 26,171, 55,174, 27,
+102, 59,232, 70, 44,113,246,251, 83,237,188,173,155,128, 82, 56,247,163,190,218,247,146,214,211, 33, 55,110,100,251,155,183,163,
+ 73,239,125, 11,153, 44, 45, 86,207, 47, 53,236,142,177, 52,111, 12, 50,149, 50,176,170,200,252, 57,133,175,225, 59,138,251,150,
+237,102,161,224,217,159,211,177,  7,157,201, 17,195,177, 14,103, 46,174,238,179,217,123,203,140, 98, 98,159, 17,124,248, 41,173,
+ 16, 51, 70,208, 89, 72, 13,148,133,205, 57,172,168,202,198,139,209,128,222,134,178, 90,187,230, 64,240, 40,155,  6, 90,123,128,
+150,105,133,231, 94,246,236,188,190, 51,220,129,147,194, 89,188,150, 25,217, 69,233, 85, 69, 84, 75,159, 80,122,233, 72,205, 64,
+ 14, 67,165,  5,119,214,119, 93,167,185, 27,209,156,  3,215,102,197,187,232, 22,110, 78,244,237,192, 12,160, 57,114,  0,  0,226,
+189, 21,152,237,169,251,203,218,188,158, 75, 37,106,246,125,245,133,198, 11, 11,149,148, 52,114, 27,123, 25, 62,162, 38, 33,135,
+ 58,143, 55,  3,247,107,107,163,185,150,112, 36, 82,126,252, 10,194,117,205, 44,108, 95,157,184,177, 24,196,227, 76,113, 67,247,
+125,211,195,184, 61,178,247, 78, 57,253,  5,238, 27, 17,130,238, 57, 56,146,  4,241, 56,137,217,192,166,233, 49, 86, 53,240, 93,
+ 95, 90,177,201,118,201, 15,144,184,236, 84, 68,130,210, 79, 65,154,179,246,195,191,167,237,172,130,250,157,187,220, 89, 81,111,
+145, 98, 71,  8, 99,191,137,224, 86,113,182,204, 90, 17, 83,183,149,181,101, 43,127,187,211,139,176,241,192, 15, 88, 47, 69, 28,
+237, 27, 50,  2, 76,210, 14, 26,187, 72,105, 54,  7,111,101, 80, 92,125,175,220,190,206,123,167,132,191,200, 63, 43, 76, 30, 70,
+ 41,163,186, 70, 33,101,196, 93,150,180,121, 84,177,173, 68,114, 81,133, 60,172,164,116,209,240,234, 54,250,223, 79,185, 18,  4,
+110, 91,124,208,198,172, 72, 63,203, 47, 16,236,108, 66,126,179,167,157, 20,225,122,  7, 61,171,190, 25, 54,  4, 54,104,203,100,
+103, 29,219, 98, 68,183,183,177,238, 23,131, 58, 83,240,146,  7,143, 77,181,228,182,203,213, 41, 81, 70,223,212,173,124,223, 26,
+255,  0,167, 68,108, 73,126, 57, 48, 94, 77,192,213,  1,160, 61, 43,247,107, 40, 56,171,249,128, 93,176, 10, 82,219, 75, 29,176,
+185,  8, 76, 64,128,101, 95, 50,130,221,  1,248, 29,181,  9,152, 50,203,181, 60,219,150, 76,196, 83,120, 92,250,138,172,195,241,
+142,129,171,227,241,167,142,156,201,162,237,112, 77, 29,143,217,167,168,  8, 35, 21,243,229, 95,183, 93, 93,114,203,233,  7,101,
+254, 20,215, 18,202,157, 70,101, 32, 15,  3, 90,143,142,152,106,159, 24,144, 83,158,161, 13,205, 77, 55,235,227, 95,179, 76,100,
+ 76,136,204,195,  5, 55,156,126,152,110,100,203,226,140, 40, 70,221,118,234,  8,215, 96, 75,177,102, 74,232,  5,139,151,193,147,
+162,229,217,  4, 98,139, 77,215,136,  1,141,127,174,191, 13, 50, 86,128,121, 34, 33,120,153,128, 69, 20,136, 45, 90, 83,196,212,
+186,143, 48,240,219,250,181,  9,158, 78,109,136,200, 64, 76, 24,181, 84,152,226,148, 32,153, 20,144, 28, 42, 48,240,175,253,141,
+ 50,119, 95,148,179, 51,162, 44, 88,136, 57,162,228,187, 87,222, 20,165,133, 30, 68, 18, 22, 85, 27,209,104, 57,159,141,126, 36,
+244,208,158,108,132,104,197, 89,141, 20, 76,241, 53,230,237, 35,138,149,  5,139, 26,219,152,  7,174,170,210,188,140,222,155,172,
+104,195,114,  8,161,173, 69, 41,166,121,237,204,244,193,153,195,148, 73,211, 26,128, 42,  1, 53, 44,123,247,250, 58,133,113,117,
+ 28,114,144,204,191,  4,142, 49,203,101,219, 96,191,214,117,115,165,180, 50,130,  1,145, 35,106, 36,223,133,128,  4,136, 15,176,
+ 84,159, 82,135,117,125,112,  1, 88,192,183, 77,184,255,  0, 52,164,143,159, 64, 52, 72,211,196, 86, 70,187,144,122,157,125,226,
+ 26, 31,218, 30,185,252,130,173, 91, 11,171,215,102,130, 55,149,233, 82,219,154,159,250, 71, 77,185,122, 16, 21, 34, 42,166, 29,
+ 62,246,166, 68,194, 38,114,244,218, 85,166, 63,179,178, 23,133, 76,178,199,108,135,122,147,205,191,128,219,250,117, 81,119,169,
+ 66,222,  0,201, 95,104,190,210,213, 95, 15, 41,198,216,245,159, 80, 87,209,246,159,233,240, 82,194,243,141,203,208, 73, 36,177,
+212,177,240,  9,198,161,126,211, 93, 69,167,234,255,  0,220,231,143, 33,217, 31,197,106,135,218,159,181,180,127,109,119,251,133,
+158, 82,133,123,155, 14,222, 98,163,199,219, 19,122,129,165,117, 89, 27,204, 93,223,212,114, 58, 86,191, 63,183, 90,147,247, 30,
+146,212, 71,151,  3, 45,225,154,188, 78, 42,146,223,218,183,167, 44,211,144,119, 53,115, 41, 83,211,122,176,147,183,240,240, 58,
+134,152,223, 53,  1,116, 53, 64, 58,109,177,223,248,234,139, 81,247, 30,174,248,164, 69,161,177,191, 21,121,107,237,173, 29,191,
+ 27,220,151, 19, 79, 99, 43, 81,232, 64,159,225,227, 22,182,240, 70, 22, 95, 76,170,254,  2, 72, 50, 21,  2,181,248,157,102, 37,
+ 57,220, 47, 50,101, 41, 29,181,245, 59,173, 61,139, 86,109, 70,130, 49,132, 71, 96,166,244, 15,220, 93,211, 38, 68,181,173,129,
+244,236,133, 85,230, 27, 60,159,105,248,106,247, 71,161, 22,249,165, 89,110,220,188,199,174,125,195,251,151,181,166,229,183, 87,
+144,198, 68,251,135,189, 13,197,234, 85,253, 49,179, 40,140,159,  0, 24,255,  0,205,171, 89, 16,253,238,177, 54, 68,158, 66, 56,
+ 17,148,247,174, 75, 16,125, 36, 30,163,189, 20,113,222,166,190,  3,231,167, 70, 38, 82,162,130,119, 50,188,  7, 52,141, 63,135,
+163,162,220, 23,109,  8, 36, 89,178, 59, 95, 48, 87,130,221,135,149, 43,191,154,164,  2,212,220, 10,208,107,117,211, 58, 61,145,
+116,219,191, 54,189,150, 36, 64,130,220,248, 68,154,115, 17, 81,179, 99,186,211,116,254,151, 43, 96, 94,184, 30, 91, 63, 75, 98,
+120,158, 10,221,213, 84,177,149,232,104,125,126, 36,  0,120,130, 15, 42,236,181, 29, 77,118,213,197,233, 67, 77,118, 82, 32, 23,
+199,121,149,118, 53, 14, 15,185,153, 91, 74,217,185,  6,145, 99,181,183,113, 39, 13,238,237,185, 82, 95,102,229,153,140, 54, 47,
+197, 75, 30,119, 37,184,146,104,127,  9, 32, 82,164,159, 49,234,117, 95,110,213,205, 69,124, 48,  4,145,223,241, 37,201, 59,217,
+102,122,143, 92, 34, 70,222,156,182,249,239, 97,132,119,118,226,171, 85,146,207,146,250,124,137, 64, 88, 57, 20, 14, 60,198,158,
+  4, 31,129,234, 53,108, 52,246,236,197,135,167, 21,146,129,  0,185, 21,100,230, 47, 28,217,123,211, 11, 73,254,  6, 32,178, 78,
+202, 40,236, 77,  7,  8,215,251, 77, 90,125,155,158,154,164,190,247,174, 27,118,203,199,234, 53,103,220,143,208,104,205,249, 87,
+  1,237,225,218,181, 11, 40,236,146,205,109,218, 20,134,222, 38, 85,130, 48,172,  0, 70,169,141, 74,154,242,220,239,243, 27,215,
+ 69, 70,204, 77,178, 14,205,139, 87, 33, 24, 72, 66, 35,102, 30,155, 83, 25,110,232,179,193, 91, 72,182,241, 70,183, 14,234, 35,
+ 72, 64,136, 60,137,248,222,136,  8, 21,219,204, 71,225,208, 55, 46,198, 52,128,  0,161,245, 70, 58, 88,230,185,142,200,239, 89,
+109,213,205,205,253,194,200,228,205,117, 37, 34,138, 53, 38,128,147, 69, 85, 90,124, 78,223,211,170,251,161,162,231,196, 86, 58,
+229,201,223,158,105, 23, 36,173,235, 22,214,189,147,219,150,150,151,141, 23, 40, 97,105,103, 43, 79, 81,174, 36,  1,155,136,254,
+ 98, 95,200,187,108, 23,109, 24, 14, 72, 69,241, 43, 79,167,179, 24, 91, 36,210, 49, 14, 79,189,103,153,110,226,147, 45, 61,198,
+103, 41, 41, 19, 48, 43,106,  7, 34,145,208,236, 14,244,223,196,253,154, 46, 60,145,205, 45,152,149,151,213,234,165,169,184,225,
+196, 99, 72,143,137,226,172,253,185,178,185,238,158,229,253,127, 40,166, 76,103,111,162,241, 46,163,211, 91,131,203,210,245,  1,
+162,142,  3,148,141,240,160,248,232, 43,119, 63,113,112,159,166, 40,157, 60, 14, 37,109, 48,228,172, 49, 88,230,238,251,133,144,
+ 88, 70,134,123,  6,149, 26, 25, 46, 36,149,104, 24,169, 64,219, 15,193,200,111, 93, 88,220,147,179, 98, 85,149,128,  4,101,114,
+230, 17, 21, 88,243, 71,115,222,249,188,125,149,212,205,113,113,153,184, 97,122, 20,  7,150, 27, 91, 83,206, 65, 93,232,125, 62,
+ 68,158, 63,136,252,245, 13,216,156,153, 70, 36,170, 72, 25,106,181, 30,100,199, 30,  0, 71,  0, 22,227,141,180,132,228,211, 53,
+148,  2,  4,182,143,210,182,137,201, 16, 65, 16, 33, 99, 87, 97,213,216,  5,  4,154,241,165, 53, 55,128, 45, 77,136,155,146,  1,
+182, 63,114,200,189,193,207,167,113,223,100, 51,114,196, 30,223,251,155, 59, 18,197,195,172, 96,  3, 37, 54,216,145,228,175, 93,
+ 17, 19, 24, 64,153,  7, 89,110,165,168, 58,187,196, 68,156,144,229,131,122,204,187,214,253,217,118,152, 75, 62,193,199,246, 55,
+212,125, 44,214,246,127, 67,113, 32,  0,198, 46, 38, 82,210,186,245, 96,193,157,141, 14,199, 74,192,203,111, 47,  5,173,140, 89,
+132, 78,  0, 44,235,184, 59, 22,250,126,227,178,194, 73,146,130,235, 49,122, 36,104,162,180, 86,117,183,183,132, 51,203, 33, 13,
+199,206,212, 62, 95,229,161,220,211, 93,179,101,140,165, 35,143,167,241, 66,117,102,185, 43, 54,170,254, 44,188, 49,148,143, 18,
+ 90, 35,244,142, 37, 79,236,204,188,254,222, 90,102,172, 76, 71,233,237,239,101,103,183, 40, 81,216,122, 81, 31, 49, 52, 37,141,
+ 64,169,235,170,219,196,198,103,138, 35, 69,106,220, 45,152,154,  8,188,143,242,138,170, 28,103,114, 91,220,247,230, 26,124,135,
+ 25,178, 55, 87, 82,100, 46, 97,220,178, 24,162,145,195, 18, 40, 40,173,196,  2,126, 27,106, 83,112,  1,  8,109, 39,220,168,180,
+119, 77,237,116,174, 72, 98,231,179,242,129,216, 21,231,185,125,227, 97,145,183,199,224,241,146,126, 69,185,123,252,143, 38,175,
+ 57, 78,234, 36, 34,158, 30, 98, 62,195,171, 29, 54, 89,188,134,196, 95, 94,187,228, 89,133,160,107, 46,115,252,152, 67,214,107,
+220,175,177, 93,211,105,128,246,234,214,231, 27,122, 83, 32, 44,163,142,221, 42,124,215,183,137,187,128,  0,162,160, 63,  3,241,
+208,147, 38,100, 13,245,238, 71, 56,211,105,140,198, 16,136,110, 46, 40, 59, 83,190,210, 94,199,138,194,221,103,165,156, 37,186,
+ 92,221, 93, 93, 75, 33, 59, 91, 91, 39,162,213, 93,201, 50, 21,216, 48,249,245,208, 23,103,154,168, 13,  4, 12,109,135,226, 74,
+ 27,236,220,228,249,158,250,189,203, 92,184,143, 43, 52, 13,122,133, 17, 65,133, 90, 85,133, 35, 74,208, 83,133, 35, 20, 95,179,
+ 77,207, 80, 16,250, 25,153,206,228,142,220, 22, 73,238,214, 92,229,251,151, 41,233, 33, 79, 82,245, 45,161, 84, 68,100,227,106,
+ 18, 16, 99,174,255,  0,200,124, 60, 79,199, 66,245, 59,217,116,213,218, 93, 65,114,217,189,172, 48,141,121,163, 17,238,248,168,
+120,204,129,190,238, 95,168,154,214, 57,237,103,185,148,196, 28,185,146, 49,200,148, 37,137, 37,182, 31,139, 94,107, 60,176, 14,
+213,  0, 47,162, 58, 30,166, 90,157,118, 75,144,140,161,154, 64, 29,161,157,187,124, 62,253,139, 92,192,119,207,108,226, 50,118,
+152,187,188,157,238,  6,112,209, 93,130, 89,174, 44, 89, 71,147,151,167,112,147, 68, 91,169,243, 40, 29, 55,219, 90,141, 21,216,
+192, 67, 56, 48,  6,174,238, 55,109,252, 22,135,170,107,180,159,185,150,156,204, 27,185, 48, 47, 30, 82,237,205, 65, 17, 76,113,
+ 62,181,234,124,183,118, 62,103, 15, 42, 97, 62,135, 41,109,117, 27,139,137,163,137,237,209,249, 57,105, 62,166,  0, 37,170,  0,
+213,119,  5, 91,127, 42,183,135,160,232,244,226, 36, 74, 68,240,171,236,163, 26,122,155,181,120,111, 82,209, 78,214,104, 73,221,
+152,  9, 28,205, 70,196,  1,142,230,193, 86, 46, 46,203,252,169,155,204, 35, 74,215,185,  5,182,199,223,135, 30,170,205,111,138,
+158, 99,108,201, 27,  2, 67,129, 43,215,122,126, 15,179, 81,206,220, 97,172,243,  7,212, 62, 31,138,192, 95,189, 41,130, 30,130,
+114, 61,244, 31,250, 86,105,148,206,247, 23, 97,222,247, 13,239,107, 96,135,116,228, 50,142, 13,205,156,215, 28, 30,  8,136, 75,
+159, 87,144, 82,254,169,  6,137,198,188,184,171, 83,170,234,155, 91,158, 83,132,161, 92,142, 14,202, 31,224,139,183,124, 91,177,
+ 43,117,230,  3,214, 31, 31, 90, 29,201,199,217,153, 12,173,246, 86, 56,113, 24, 79,119,242,151, 22,121,120, 48,237, 47,212, 93,
+ 37,242,129,112,208, 25, 56, 70,165,165, 28,168,120,169, 37,169,189, 55,  7, 81,110, 50,135, 43, 70,120,251, 83, 52, 90,129,102,
+254,121, 12,209, 99, 78,228,102,100,203, 95,123,129,134,176,203,192,233,150,239,108, 84, 80, 95,218,219, 61, 68, 23,120,216,217,
+146, 49,200,183, 54,  9,248,156, 16, 91,141, 40, 40,117, 36, 36, 45,220,115,132,241, 68, 66, 62,126,154, 67,109,178,253,199,103,
+106,118,199, 49,121,219,183,147, 45,176, 84,201,197, 91,121,121,162, 51,130,122,  5,  4, 16,160, 82,149, 31, 13, 90,100,245, 20,
+111, 79,186, 46, 68, 18, 78,101, 59,183,123,178,206, 30,226,108, 95,114, 93,113,255,  0, 51,134,198,136,164,127,205,150,121,252,
+177,240, 21,169,234,126,205, 89,144,  5,160, 92,  3, 19, 79,146, 27,170,219,148,238,  6, 27, 14, 27, 34, 22,  7,159,183,188,131,
+181, 47,187, 90,226, 87,102,193,119, 21,202, 70,  1,  4,160,185,182, 96, 88, 17, 74, 85,224, 47,246,239,173,102,142,112, 55, 65,
+ 52, 51,135,173,182,122,150, 62, 81,145,129, 45,203,108,243, 29,207, 65,235, 52,237, 68, 94,239, 68,221,221,237,239,101,123,128,
+ 36, 11, 53,237,153,196,230,238, 16,134, 86,149, 35, 15, 31, 33, 77,138,200,178, 21, 97,230,  7, 97,215, 71,116, 72,  1,168,185,
+101,200,218, 59,241,245, 46, 95,184,217,100,189,  9,237,229,222, 31,221,159,109, 59, 99,184,123,138,210, 43,236,130,219,189,165,
+233,144,121,140,246,204,109,238, 21,169,185, 73, 74,114,100, 63, 29,121,215, 83,183, 61, 14,190,102,223, 41, 32,142,227, 86,254,
+147,130,182,177,172,187,251,121, 90, 63,227,184, 65, 49, 53,  0,196,150,148,127, 44,152,179,143,164,145,129, 90, 17, 80,170, 20,
+116,  2,131,236,240,213, 60, 74, 18,101,212,122, 30, 94, 31,199, 83, 53, 23, 23,227,144, 30, 74,240,216, 29,216,124,245,150,218,
+175,182, 96,165,135,103,180,250,116, 62, 85,252,198,  4,211,205,211,239,212, 44,211,114,158,100,240, 96,104,152,  4, 33,  4,117,
+ 27, 13, 73,138,128, 22, 75,126, 53, 36, 19, 90, 83,175,223,174, 39, 25, 22, 75,126,134,159, 42,105,203,142, 64,100,129,240,173,
+ 41,227,174, 50,104, 44,157,142, 41,164,144, 44,106, 75, 31,194, 41,214,186,140,200,  1, 84, 68, 68,201,118, 93, 44, 50,250,165,
+ 56, 21,145, 77, 15, 34,  5, 15,206,189, 53,195, 32,206,234, 65,  6,150,  8,131, 15,  7,  9,140,249, 24,185, 90,133, 10,120,186,
+115, 83, 32,217,212, 84,114,233,254,189, 87,234, 36,241,104, 26,191, 31, 82,185,210,190,103,159,133,189, 10,179, 92,111,233,121,
+100,150,226, 17,121,106,220,223,147, 55,166,132, 46,204,106,132,149,  3,237,212, 62,112,189, 96,128, 76,101,216,234, 89, 91, 54,
+ 53,  0,144, 37, 19,220,165,203, 98,179, 49,188,182, 31,225,109, 66,180,146,134,242,163, 57, 37, 84, 87,114,  7,143, 35,161, 35,
+116,199,150, 88,203, 98,179,201, 25,  3, 40,150, 17, 14,251,170,170,236,163, 79,171,142, 75,144,239,104,143,206,111, 76,241, 62,
+157,119,165,118, 21,213,141,203,173,108,136,176,145, 12, 29, 11,111, 79,154, 96,206,177,119,113, 79, 78,212,250,153,101, 16,170,
+239, 40, 98, 40,118,106,147, 81, 83,176,233,182,133, 32, 69,223,  6, 86, 16, 55, 39,148,134,  4, 56,174, 42, 69,188, 85,187,244,
+231,114, 34,144,129, 41,216, 18,164,215,115,226,107,225, 93, 47, 55, 36, 30, 35,155, 17,220,139,133,145, 41,115,205,131, 16, 64,
+169,170,149,119,133,197,194,228, 36,200,140,  2,151,137, 35,104,231, 73, 24,208,198,192,131, 90,120, 26,145, 77, 71,167,215, 95,
+112,207,218, 75,134,222,141,185,167,210,198, 25,128,  3,123,  6, 35,231,185,119,105,132,179,150, 90,188, 43, 18,150, 99,202,126,
+ 77, 64,  1,165,  8,248, 83,248,235,186,189,101,215,115, 60,228,129,225,244,244,  9,218, 27, 54,110,  9, 17, 12,172,126,188,  7,
+110,214,220,173,241,214,120,161, 28,209, 77, 43, 75, 58,168,244, 22, 49,197, 89,171,211,231,252, 53, 93,168,187,122,132, 12,177,
+218,181, 29, 62,221,152, 69,137,115, 81,186,167,134,229, 34,217, 35, 40,142,171,177, 98,128,  3,230, 28,119, 38,154, 22,225, 47,
+ 85,161,181,118, 18,217, 76,167,182,152, 39,237,185,121,157,128,144, 10, 34,198,223,204,210,108, 53, 20,219, 12, 63,  4,126,119,
+  4, 63,168,175,177,195,  4, 85,134, 80,188, 22,180,150,128,158,125,  8,241,241,211,167, 57, 75,154,174, 84, 70,196,106, 99,134,
+ 20,227,138,175,201,139,108,117,103,145,205,186,143,204, 94,106,167,146,110,  9, 28,106,  1,219,166,137,176,103,118,130,187, 21,
+ 70,166,236, 44,192,153, 28,153,113,116, 13,157,205,221,101, 65, 75,106,193,102, 15, 37,137,205, 89,197, 41,202, 67,243,248,106,
+251, 77,166,141,147,205, 89,122, 96,188,215,171,245, 75,218,200,181,174, 72, 98,199, 25,113,151,106,164, 91,117, 40, 36, 62, 69,
+165, 92,248, 13, 30,103, 86, 89,168,233, 99,147, 55,132, 98, 84,105, 36, 82, 66, 91,173, 63,218,222,167,238,209, 80,182, 89,228,
+170, 47,234, 99,225,180, 59,247,162,206,223,194, 11, 53, 91,203,148,173,225, 21, 69,241,136, 17,183,203,145,214,139, 69,166,200,
+ 94, 81, 38, 71, 96,216, 54,149,175,232,253, 36,105,199,155, 63, 31,253, 59,191,168,251, 21,205,229,228, 49, 64,210, 92,113, 84,
+175,149,232,121, 18, 58, 42, 47,143,245,107, 71,173,234, 18,212,219,254,230, 89,207, 55, 46,220,160, 80, 66, 63,161,177,137,218,
+173, 47, 92,181,165,137,156,206, 72,111,252,199, 26, 15,170, 92,112,108, 80,166, 75, 39, 62, 65,138,154,199,108,191,221,194,166,
+187,141,249, 57,241, 59,255,  0,171, 82,218,209,202,228,243,223, 47, 47,143, 29,235,206,122,159, 87,185,170,228,128,201,104,125,
+ 63,251,184,240,192, 40,142, 96,161,221,252,202, 79,155, 99, 81, 95, 45, 42,106, 54, 26,176,187, 61, 62,158,  6, 83,147, 71, 10,
+208,190,230, 24,170,161, 19, 42, 68,113,238, 77, 90, 65,115,148,187, 91,123, 80, 64, 80,204,242,168, 36,172, 67,241, 53,  6,255,
+  0,119,142,178, 82,214, 93,215, 92, 22,172,140,163,127,212,222,155,145,118,116,210,189, 34,  6, 17, 14, 78,225,189,105, 24, 27,
+104,109, 68, 22,214,241,122, 54,113, 39,230,  2, 41, 41,118, 32,122,164,147,252,195,192,116,251, 53,164,209,217,133,191,237, 64,
+101, 17,241,102,196,159,204,182,147,177,228,217, 97,129, 28,160, 10,247,149, 31, 51,153,253, 50, 37, 16,206,101,154, 68, 88,163,
+ 66,121, 55,  5, 98, 77, 77, 60,170, 27,225,170,189, 77,227, 34,  4, 43, 35,138,118,162,245,190,159,108, 78,231, 52,235,150, 59,
+118, 32,251,167,157,199,215, 95, 31, 86,103,242,  5, 34,131, 99, 64,162,155,  0, 58,211, 72, 89,201, 23,197,121,221,251,247, 53,
+ 19, 51,153,170,178,236,168,109,219,184, 45, 50, 89, 17,233,219,196, 94, 75, 86, 96,190,153,158, 53, 36, 49,  3,106, 41, 31,199,
+ 85, 49,107,151,196,137,229, 86,154, 45, 44,164,115, 16,231,233, 27,255,  0,134, 40,155, 61,146,147, 43,120, 46,100,170,217, 64,
+ 22, 59, 75,117, 82,207, 34,138,  0, 85,119,220,157,199,195, 86,153, 50, 72,220,149,107, 65,193, 77,170,185, 43,178, 22,109,214,
+ 15, 95,212,119,246,126, 94, 21,218,132,243,198, 75, 66, 35,156,143, 93, 90,176, 90,169,230, 20, 17, 67, 35,158,133,171,229,  3,
+254, 70,171, 83, 57, 25, 19, 46,232,140, 59,212, 55,116,195, 75, 28,166,183, 37,179,242,133,184,118, 70, 45,176, 61,187,109,130,
+143,154, 79, 58,137,242,252,143,164,254,180,180,103, 35,146,145, 32, 65,196,125,218,184,211,105, 77,187, 65,197,113, 42,202,221,
+147, 25, 70, 17,169,162,163,238,254,232,135, 47,155,130, 52,159,254,167,198,145,197, 76,101,214,105, 20,  6, 62, 64,181,161, 96,
+ 71,253,141, 88, 90,176,100,115,236,192, 42, 94,179,171,136,151,237,226, 28, 66, 92,220,101,180,127, 74,143,237,109,212,107,221,
+ 57,124,229,216,250,123, 91, 85, 48,219,209,131, 44,111,122,225,223,117,  0, 87,138, 83,239,213, 97,150,107,228,109,138,155,165,
+218,145,140,166, 71,138,136,231,190,187,209,238,236, 35,192, 90,203,206,105,137,123,233,212,238,177, 38,193,118, 38,160,130,104,
+ 78,165,128,207, 58,236, 86,189, 78,239,237,236,100, 20,157,208,195,132,  6, 39,188,242,142,212, 11,219,246,159,230, 14,246,196,
+225,210, 26,219,180,233,113,113, 41, 94, 99,209,178, 83, 41,  4, 18, 22,132,170,174,149,249,144,  4, 61,107, 55,160,136,157,209,
+151,232, 94,135,180,187,131,  2,183, 87,147,219,180, 54,182, 17,155,139,171,153,213,189,  5,150, 71,242, 34,150, 36,189, 75, 51,
+ 19,184, 80,187,117,212,166,224, 24, 45,118,150,220,115, 23, 44,  7, 49,236,218,179,255,  0,111,251,134,198,235,191,242, 29,219,
+151,102,113, 34, 53,167,166,136,243,170, 73,145,148, 36, 40,203, 67,179, 42, 62,255,  0, 51,169,165, 33, 19, 17,184, 57, 84,250,
+ 75,163, 85,168,187,124,208, 62, 88,127, 40, 90, 79,115,118,239,103,102,162,189,238, 12,188,114, 11,139, 75,118,121, 30,  9, 94,
+ 36,152,196, 21, 97,230, 26,160,241, 29, 58,147,168,111, 66, 36,131,197, 89,229, 18,140,132,199, 38, 50,227, 24,215, 29,219,247,
+172,123,  5,219,109,220, 61,201,123,148,195,199, 29,165,245,164,  6, 65, 19, 47, 20,118,154, 66,129,120,146, 41, 68,140,141,118,
+237,151, 17, 49,196, 96,168,250, 81, 50,148,238, 99, 81,237, 87,115,123, 98,184,124, 14,111,184,187,158,230, 41,242,141, 19, 45,
+165,172, 27,198,179,205, 82, 37,147,152, 28,138,130,180, 90, 81, 71,199, 70, 89,183,150, 30, 88,103, 56, 54,245, 99,169,176, 63,
+189,171,187, 90, 52, 70,192,236, 32, 59,  2,  8,236,229,202,247,140,182,152,185,173, 62,128,225, 68, 86,247,179,202,202, 35,169,
+ 82,187, 26,242, 12,209,199, 74, 82,128,154,244,213, 69,136,207, 52,162,220,208, 10, 25, 76,235,109, 91,137,164, 99, 46,110, 37,
+169,234, 10,215, 57, 53,215,108,216, 46,  7,232,238, 68,178, 60,179,125, 48, 38, 95, 94, 24,166, 46,  9,122,  5,220,178,146,122,
+ 13,181, 94, 67, 92, 33,176,247,167,107, 63,177,167, 16, 24,205,199,171, 31,130, 33,255,  0, 43, 92, 97,213,114, 40,166, 91,200,
+236,158, 75,187,152,195,134,  9,234, 73, 40,103, 96,  0,242, 80, 34, 83,174,187,122, 18,161,  3, 21, 54,138,207,147, 33, 38,216,
+231,212,177,219,187, 27,171,172,253,165,244, 81, 87,136,250,184,163,111,239, 35, 17,159, 84, 60,149,229,230,102, 21, 37,170, 55,
+166,170, 58,227,198,220,118, 31,  8, 29,180, 65,125,183,100,234,122,132,  9, 28,176, 50,187, 50,237,224,137,151,193, 75,237,188,
+117,237,254, 70, 56, 97,188,142,202,226, 72,201, 91,153, 64,  8,160,138, 48, 60, 99,111,197,184,175, 30,154,200, 70,220,111, 93,
+141,179, 33, 22,229,171,179,141,133,170,189,227,162,105,239,177,157,169,102,152,  2,124,166, 56, 54, 86,  0,242,230, 44,229,192,
+ 28, 93,149,166,127,  5,153,179,186,191,143, 51, 37,172,153, 26, 11,119,107,102, 73, 98, 68,141,182, 43, 36, 77, 34, 55, 51, 37,
+118, 52,240, 52,213,167, 86,133,236,182,227,116,198, 38,220, 77, 35,182, 38,177, 47,250,183, 98, 25, 88,116,203, 31,186,142,167,
+ 82, 14,105,106,  8,137, 50, 13,144,195,144,192, 10,156,195, 18,  8,202, 73, 96, 91, 11, 31,117,178,215,216,172, 94, 22, 44, 53,
+212,150, 25, 35,115, 37,223,213, 88,187,218,205, 24,178,139,132,101, 76,103,144, 10,211, 10,  1,181,  6,212,214,251, 82, 76,116,
+246,224,  9, 24, 96,126,145, 23, 62,240,188,183,239, 13, 77,200,234, 36, 34, 72,  0,206, 93,160,145,148,119,  0, 17,111,110,251,
+201,220,214,254,196,230,114,121,108,133,190, 99,184, 45,102,128,217, 92, 73, 20,145,201,234,221, 94,152, 37,180,191, 12,145,172,
+159,150, 76,190,165,188,156,188,192, 62,227, 85, 54,186,141,249, 66, 83,157,124,178, 34,254,158,157,235,206,181, 26,113,  8,219,
+145, 46,111,  9, 75,212,119,237,  6,187,182,236,101,176,118,  7,124, 90,251,139,217,184,252,150,126, 27,104,243,137, 13,205,178,
+ 91, 41, 18,125, 52,176,214,143, 12,160,135, 88,219,138,191, 18,197,104,197, 72, 58,110,159, 80, 47,199, 56,161,122,169,117, 54,
+ 77,172,162, 88,178, 11,239, 28, 53,254, 79, 53, 97,119,137,185,180, 23, 30,173,164,183, 73,113, 51, 90,220,196,214,206,133,167,
+ 48,172, 14,146,  0,138, 10,181,118,254,109,118,253,185, 72,114,138,161, 52,243,140, 47,  9, 73,204,118,128,180,126,224,238,153,
+123, 79,190, 59, 55,184,192,183, 22, 89, 36,158,210, 84,142, 38, 89,132, 23, 64, 63, 48,239, 64, 19,156, 62,126,  4,211,150,163,
+212, 99,  3,244,187, 30,241, 79,106,182,208,152,202,221,219,123,101, 28,227,250, 75,159, 98,197,178,221,203,148,155,191, 59,234,
+222, 43,134,189,181,151, 48,242,218,220, 93, 81,164,142, 59,152,150, 69,136,108, 23,138,129,197, 71,134,172,116, 82,151,153, 40,
+ 72,210, 36,123,147,109, 52,108, 91,156,113,145,147,252, 19, 93,149,141,244,176,253,225,223,185, 11, 63, 95,184,177,119,159,245,
+ 94, 70,117,115, 34, 71, 17,137,235,  9,147,100, 84,161, 21, 79, 18,119, 58,183,177,167, 19,185, 41,200, 57,  6,156,  2,176,209,
+102,255,  0,141,191,114, 98,166, 51,105,118,168, 61,225, 23,249,131,186,251,181,144,125, 49,198, 92, 67,149,100,136,158, 19,218,
+221, 23,171,186,255,  0, 49, 65, 45, 42, 60, 27, 87,150,244,242,159,148,  9, 98, 15, 44,184,140,  7,207,122,203,233,245,145,179,
+120,220, 22,222,217,142, 75,150,255,  0, 60,100,217,187, 15,213, 31,202, 67,171,239,110,227,185,239, 78,217,238,191,103, 74, 39,
+173, 37,162,103,251, 85, 92,178,180,151, 86,179,135,150, 32,207,253,174, 64, 47,200,253,186,190,234,151, 79, 79,185, 13, 99, 56,
+ 15, 25,  1,249, 72,199,215,237, 64,104,180,246,245, 87, 60,169,204, 91, 25,178,102, 46,114,226,210, 45, 86,192, 22,226, 66,211,
+127,107, 23, 51,219,118,215,112,246,229,202, 60, 95,167,228,146,246,214, 25,128, 18,172, 55,209, 81,149,148, 19, 74, 75,  3,131,
+243,168,214, 95,238,239, 46,229,235,119,237,144, 99,122, 57,131,110, 44, 65,239,127, 82,124,108, 93,177, 41, 89,187, 19, 25,219,
+ 36, 72, 29,252, 56, 51, 49,194, 65,164, 49, 91,171, 84,154,120,248, 13, 98,226,154,113, 81,185, 55, 58,125,223,211,162, 30,137,
+ 47,199, 26, 40,220,157,143, 74,111,252,117,150, 87,140,  1, 79, 51,212, 40,  0, 14, 59,114,233, 81, 95, 29, 48, 69, 52,201,215,
+198, 60,186,110, 71,245,105,  0,157, 57, 62,215, 72, 39, 82, 63, 15,141,126,122,235,165, 24, 61, 87,213, 74,191,  1,212,252,233,
+190,147,209,210, 34,172,146, 47, 34, 40, 54,173,  9, 61, 54,215, 10, 66, 53, 82,221,218,220,136, 56,163, 22, 34, 68,148,  6, 87,
+232, 64,161, 59,211, 80,128, 37, 90,169,100, 76,105, 68,150, 34,176,150,105, 69,  9,224,145,174,229,207,142,224,248,124, 78,185,
+154,184, 41, 68, 90, 57,137, 86, 98,198,116, 88, 99,130,147,202, 20, 52,209, 71,230, 43,209,133,105,183,143,129,174,134,141,232,
+185, 38,131, 99,162,205,146, 35,201,142, 37, 75,150, 89,167,  2, 51, 59,136,195,113, 84,149,194,133,  4,238, 41, 90,120,105,214,
+178,198,166, 32,246,  4,175,102,152,108,196, 30, 37, 72,146, 91,152,157,237, 12, 65,165,175,159,202,106, 72,232, 65, 27, 82,148,
+251,181,203,118,237, 92, 25,137,109,203,183, 47,221,178,114, 63,106,251, 23,248,134,245, 36, 96,131,152,141,163,233, 18, 43, 26,
+  2,126, 63, 19, 93, 64, 72,135, 44, 71,126,213,115,228,202,113, 18,148,216,141,155,  6,229, 37, 97,102,137,149,145, 12,113,154,
+172,188,192, 37, 41, 80, 21,107, 90,158,186,132,152,  9,  2,229,206,198,248,162,173, 74,252,249, 50,128, 54,156,216,247, 41,113,
+136, 33,182,101, 34,178, 45, 29,130, 18, 13, 62,116,219,106,237,161,174, 74,115,155,149,109,106, 49,179, 12,177,  4,  1,199, 31,
+212, 70,253,137,249, 46, 37,227, 55,170, 40, 92, 16,230, 90,201, 41, 36,237,200,239, 66,117, 28, 97, 16, 70, 83,134,234, 14,228,
+140,238, 16, 94, 32,  3,142,103, 62,176, 54,241, 86, 80, 52, 69,152, 72,174, 33, 96, 66, 42,130,225, 77, 54,  1,106, 13, 43, 93,
+ 48,219,184,106,  8,205,198,135,181,247,169,163,173,179,111,150,166, 38,155,251,190, 41,134, 71, 95,205,140, 50,128,164, 22, 59,
+ 30, 53,165,  6,227,227,167,144, 48, 50,  6,190,212, 71,238,200,  0,  8, 17,222,187,183, 51, 76, 86, 22, 99, 19,  0,  0,  2,160,
+157,233,230, 61,  1,166,133,155, 70,162,170,242,214,180,128, 28, 96,112, 82,160,186, 11, 42,203, 10,154, 70,220,200, 39,204, 71,
+ 67, 77, 67, 40, 80,131,181, 95,195, 82, 60,176, 48,171,241,174,206,212,221,230, 78, 40, 44,238,155,138, 70,145,150,220,213,129,
+ 28,170, 56,233,214,236, 19, 56,237,116,175,107,163, 13, 60,228, 75,101,198,166,189,136, 35, 41,154,185,200,165,188, 83, 55,248,
+ 40,  3, 36, 17,  0,  3,  0,198,164,252,106,117,127,103, 79, 24, 18, 71,136,212,175, 52,215,245, 25,106, 25,252, 24,  1,183,181,
+ 86, 52,176,194, 31,234, 11,  2,  5, 34,135,197,169,184, 58, 46, 48,148,136,202,169,238, 94,181,102, 50, 55, 73, 20,164,119,170,
+201,238,100,157,141, 71, 24,252, 16,120,125,191, 29, 91, 90,177, 11, 96, 25,109, 89,109, 86,178, 87,205,105, 29,131,211, 20, 75,
+129,194,173,186,174, 66,245, 43, 41, 35,208,132,142,149,254, 99,243,248, 15, 13,104,116,122, 76,146,243, 38, 26,133,129,217,184,
+173, 55, 73,233,130,220, 69,219,129,229,244,141,223,143,185, 88,223,228,162,179,  6, 33,249,151, 39,254,228,118,165,124, 92,142,
+159,214,116,200,139,154,153,229,180, 78, 80,107, 60, 59, 91,143, 30,229,121,174,234, 54,180,113,203, 38,149,194, 41, 13,223,207,
+184,112,196,161,249,103,150,226, 95, 90,237,203,201, 77,250,208,  0, 78,192,116,  0,107, 99,162,233,182,244,196, 24,243, 29,167,
+185,121,174,171, 87,119, 83,119,204,191, 34, 72,192,108,143,  0, 61, 56,168,101,128, 37, 99,163, 48,169, 45,213, 66,131,212,159,
+150,169,117,253,110,205,129,150,208,207, 60, 63, 79, 14,223,119, 20,203, 90, 35,116,151, 45,242,218,123, 20,116, 73,239,238, 22,
+222,221, 90, 73, 36, 60, 80,117, 44,127,208, 53,145,  6,254,178,232,  5,231, 51,130,154, 54,204,230, 45, 90, 24,173,  3, 13,140,
+131, 17,  1, 72,227, 89,153,128, 51,187,130, 11,117,228, 65,218,138, 15,207, 91,237,  6,150,231, 77,168,142,103, 96,237, 94, 45,
+192, 45,254,151,167,217,183,103, 32, 53,196,158, 63, 36,178, 25, 81, 97,107, 10, 51,153,103,142, 52,138, 26, 30,162, 49, 68, 39,
+253,145,190,134,189,114, 92,182,237,151,144, 25, 73, 31,167, 15,197, 65,169,214, 91,208,218,121,180,207,209, 29,252, 79,  4, 61,
+234,122, 87,  6,230,253, 67, 76,245,113,201,  4,177,200,  7,242,142, 44, 41,227,246,105, 90,181, 27,  0,210,165,121,174,163, 81,
+115, 81,112,220,184, 92,159, 70, 76, 89, 64,115,121,  8,172, 82,145,198, 72,105,103, 74,129, 20, 66,139,201,134,253, 58,  1, 94,
+167, 85,154,155,254,117,193,110,  3,180,240,226,138,210,105,188,233,136,138, 13,168,190,110,222,185,146,104, 22,196,163,227, 98,
+ 49, 91,213,128, 42,136,197,149, 15, 21,  7,144, 62, 63, 51,165,119, 67, 49, 56,202,220,185, 48, 90,219,214,163,205, 22,160, 20,
+224,  0, 78, 94,199, 97,219,182,108, 84,139,156,133,193, 80,175, 86, 27, 20, 82,  5, 24,114, 10, 11,121,169,240,249,234,113, 17,
+ 25, 48, 25,143,195,119,126,213, 37,223, 43,166,218,243,110,  0,102,105,  8,239, 35,111, 96, 67,221,177, 96,249,110,232,183, 55,
+ 42,102,134,221,154,242,232, 17,200,178,192, 65, 81, 79,155, 21, 90,105,159,182, 19,189, 11,100, 55,212,126, 31, 37,149,208, 74,
+119,239, 74,244,206, 99, 17,152,190,252,  7,181,150,137,220,189,211,120,139,250,117,172,165,110,238,215,148,226,132, 50, 70,223,
+136, 16,119,228,221, 22,154,211,139, 38,236,242, 68,224,106, 85,214,183, 89,251, 13, 55,153,141,235,222, 13,240, 24, 25,247,225,
+ 30,249,110, 66,  5,138, 33,144, 85, 33,138,158,185, 82, 86,162,155, 45, 71,141, 52,205,125,241,110, 57, 33, 82,235, 49,210,250,
+ 81,212,189,219,188,182, 99, 82,118, 22,197, 95,118, 77,253,173,175,107,221,221,  7,227, 43, 93, 72,210,198,140,106, 26,138,176,
+167, 19, 74,147, 78, 74,117,155,211,127,138, 77, 89,202, 68,133,173,208,206,220,227,230, 62, 75,112,204, 78,232,141,221,167,  1,
+218,163,201,117, 60,119, 18,201,116, 73,191,184, 32,136,129,220,174,212,218,135,200,155,104,153, 17,102,216,139,188,138,203,106,
+ 77,205,117,249, 72,242,230,192,126, 80,204, 35,220, 40,120,163,207,108,192,198,229,175,238,216, 51,181,141,183, 25, 66,249, 31,
+213,186,126, 68,128,118,169,  8,  0, 26, 22,115, 38,227,112, 86,154, 27, 17,183,152,246,  4, 69,238, 39,122,173,245,140, 29,185,
+103, 43,173,179, 17, 53,240,  7,141,  5, 56,172,109,191,137,173,117, 61,147,154,127,202,165,234,247, 69,157, 63,150,252,215,113,
+254, 72,215,253,198,138,187,218,187, 57, 50, 86, 23,249, 73,225,105, 45,151, 34,176,197,229, 98,169,244,208, 26,158, 66,132, 16,
+211,154,121,135, 77,169,162,140,249,202, 31,165, 91,205, 99, 49,150, 87, 46, 17,159,184, 57,131,111,219,182, 56, 82,229, 46, 47,
+164, 55, 23, 72, 73,228,177, 26,238,104, 91,193,106, 64,248,233,145, 60,238, 17, 61, 70,236,163,163,111,170,225,203,218,  5, 79,
+175,  4, 57,217,120,135,153, 50, 11, 53,200,137,103,185,132, 55, 15, 86,141,109,102,130, 80,165,151,204,  2,187,242,109,233, 77,
+188,117, 43,147, 38, 42, 62,159, 99, 45,188,209,115,152,146,221,202,255,  0,220,220,133,195,199,143,192,164,137, 72, 97,253, 70,
+241,121,154,  1,252,149,241, 60, 65,228,189,122,104,235, 15,152,200,108,193, 46,181, 33,228, 91,178, 15,249, 14,105,127, 40, 52,
+246,186,131,216, 49, 88,164,185, 88,175,237,197,204, 83, 79, 20, 70, 70,  2,135,242, 85, 84,161, 38,189, 27, 67,234, 47, 28,230,
+184,  1,243, 82,244,141, 56,158,156,199, 28,211, 32,113,192, 46,243,210,174,123, 62,151,101,107,105,109, 61,189,172,  8,171, 64,
+ 45,163,149, 87,165,119,  7,115, 67,214,154,172,184,222, 81,150,244, 38,170, 98,238,188, 91,141, 68,  8,128,238,169, 71, 93,207,
+ 61,167,232,147, 91, 65, 26, 61,222, 70, 95, 78, 99, 10,170,159, 74, 33,200,146,191,237, 13,186,107,130, 89,164, 34,172,117,231,
+200,210, 78, 91,103, 47, 44,118, 99, 47,101, 59,213, 76,190,196,247,126, 79,218,249, 61,194,237,251,136, 99,188,146, 73,230,158,
+213,253, 85,154, 76, 85,175,229,175,160, 56,149,243,191,169, 35,134,165, 80, 40, 29, 55,198,117,203,145,149,215, 35, 52, 45,138,
+  1, 66, 59, 20,191,108,234,111,217,145,177,166,148, 44,221,191, 32, 60,217, 71, 53,  0,164, 91,116,165,239,193,100, 56,187,140,
+101,157,192,185,188,137, 32,154,100,104,165,120,195,  5,  5,  8, 12, 93,  5, 85, 11,215,203,199,239,213,  5,187,226,119,132,228,
+  0,  1,158, 67,107,224,252, 87,208,157, 30,118, 45,194, 81, 32, 91,187, 49,204,222,  7,225,249, 92,243, 49,245,171, 60,143,105,
+100, 49, 61,205,104,147, 66,207, 99,125,112,185, 43, 43,235,126, 19, 65, 53,187,185,145, 94, 54, 64,202,120, 20,227,192,154,252,
+126, 26,212,245, 29, 25,185,168,140,241,133,207, 46, 34, 91,  3,101,204, 56, 16,222,162,234,167,160, 92,148, 52,151, 45,202, 38,
+ 50,179,118,244,231, 76, 92,202,228, 15,123,199,220,135,123,199, 29, 47,118,251,155,133,236,184,214, 87, 99,105,233,220,  0,207,
+ 11, 33,147,213,185, 47,231,142, 78, 33, 17, 42, 73,143,248,108,117,107,214,117,190, 65,137, 32,203,151,  0, 91,196,114,187,247,
+ 58,242,109,102,150, 61, 71,170,249, 50,158, 88,176,137, 34,164, 48, 51,195,  2,230,157,164, 43,190,240,236,223, 71,219,203,110,
+214,236, 33,117,146,180,182,200,197,113,115,142,187,244,126,186, 68,140, 74,210, 58, 71,  1, 81, 42,130, 80,144,132,183,243, 80,
+120, 50,254,132,233,244,178,140, 43,152,137, 75,181,135,187, 14,229,131,187,170,142,166,236,  0, 25, 97,108,100,143, 16, 39, 35,
+159,250,132,156,162,190,213,176,187,237,142,207, 92,125,227,253, 53,245,156,119, 19,221, 68, 92, 25, 34,154, 78,109,192,178,185,
+ 94, 74, 56,163, 10,208, 31,158,133,209, 89,149,187, 17, 18,197, 79,213,110, 66, 87,142, 76, 24,123,  2,177,236,222,229,204,100,
+  6, 88,220, 94, 76,209, 69, 52,113, 91,167, 41, 34,225, 26,161,168, 39, 98,204, 77, 13, 90,191,195, 78,181, 35, 43,178,  4,248,
+ 91,214,134, 47,251,104,113, 36,247, 42, 94,241,154, 70,206,246,229,188,210, 51, 27,137,153,199, 32,231,172,139,203,113,185,  7,
+141, 14,250,125,248,146, 96,223,154, 62,245, 63, 78, 60,215, 78,251, 83,246,174, 59,130,219, 31,142,206,100,239, 33, 30,173,246,
+ 66, 79,170,188,114,120, 36, 40,177,164, 75, 26,215,122,249, 57, 22,249,211,195, 87,250, 61, 40,132,165, 48,107, 34,134,150,180,
+ 74,221,187, 98, 62, 17,239, 80, 62,183,214,154,206, 12,142, 66, 69,193, 22, 16, 63,169, 51, 52, 80, 71, 37, 21,200, 74,241, 33,
+121, 19, 67,173, 61,168, 28,164,238, 93,212,221, 55, 45,136,185, 49,125,167, 15,193, 67,195, 99, 46,175,125,218,255,  0,119,247,
+ 89,  0,211,100,154,251,181,206, 77,148,183,148, 68,203,  4,172,  7,251,113,198,221,122,104,142,161,118,118,180,126,109,166, 23,
+ 35,205, 23,193,241,175,169,149, 95, 77,149,147,169, 30,115,202,211,243,  8,226,106,212, 60, 42, 79,169, 67,193,102,178, 61,129,
+238,103,111, 95, 93,196,246,121, 12, 38, 89,109, 50, 54,204, 77, 35,130, 73, 13,173,204, 68,248,254, 54,249,108, 62, 90,210, 70,
+245,158,169,210,188,216, 97, 56,208, 98, 65, 59, 63,166, 88,246, 40, 53, 90, 89,244,253, 85,203, 55,  8,145,128,196, 83, 48,241,
+ 66, 64,110,185,  6,152,224,119,175,125, 12,125,141,141,197,212,214,182,209, 65, 61,204,133,238, 37,137, 21, 94, 86, 59,242,118,
+  2,167,114,117,225,206,114,136, 63, 44, 29,134,234,213,184, 43, 43,247,167,118,121,230, 76,164,192, 63,  8,134, 30,161, 68,164,
+ 34,131,229,169, 98,130, 41,138,249,171,203,122,116,166,223, 10,127, 15, 29, 77,177, 39, 95,141,171,215,230,122,107, 50, 85,219,
+ 41, 33, 58,  6, 27, 29,193,233,168,221, 75,229,144,106, 49, 72, 70, 14,212,227,183, 82,104, 54,215, 51, 46, 11,123, 48, 41, 21,
+160,169,232,118,173,105,164,235,166, 12, 49, 93, 44, 40,196, 43, 72, 20,154, 80,157,215,127,137,  4,233, 25,144, 48, 74, 54,243,
+ 28, 87,217, 65,228, 21, 28, 53,  5,  1, 82,105, 67,246,211, 92,137,162,116,226, 77,  5, 87, 44,210, 85,125, 70, 62, 81, 69,174,
+251, 14,148,211,131,108, 80, 16, 70, 43,234,  5,161,228,252, 72,221, 77, 42,191,121,211, 73, 82,134,106,148,248,184,145, 21, 17,
+106, 20, 10,152,235,181,127,163,174,153,144, 19, 85, 40,156,152,  0,123,182, 20, 73,101, 37, 37,250,107,248,209,213,194, 60, 75,
+ 15,167, 45,  1, 21,226,220,106, 72,227, 90,138,234,178,231,230,182, 72,237,112,175,160,  6, 92,183,  0, 32,183,134,165,114,242,
+186,113,183,142,111,203, 94, 72,133,188,163,139,154, 29,254,  4, 13, 17, 12,166,166, 53, 67, 79,204,  4,  8,205,225,220,164,192,
+170,211, 19, 19, 84,170,177,101, 13, 66,245,160,162,133, 31,195, 80,220, 39, 45, 67,113, 68,233,204, 69, 95, 55,  5,108,144,243,
+142, 13,132, 98, 19, 73, 57,144,  9, 86,233, 80,219, 87,175,207, 85,228,243, 17,137, 42,227, 61,  1,118,  3,126,229, 22, 40,154,
+102,148, 68, 87,233, 99, 96, 24,179,113, 45, 83,224, 52, 85,200,  8,128, 43,156,251, 23, 52,218,153, 78, 68,150,200, 61,170, 80,
+179, 18,188,108,107,233, 17,205,138,169,  4, 45,126, 39,169, 31,102,155, 25,  1, 19,176,241, 41,211,148,141,216, 19, 34,206,197,
+131, 55,175, 21,111,105,232, 66,146,219, 80,188,146, 81, 35,117,235, 90, 87,171,111,242,208, 55,173,202, 68, 77,251, 81,254,113,
+ 28,164, 99,216,156,191,181,185,137, 17,239, 80,  2,203,198, 62, 68,242,141, 87,106, 16,119,  3,225,200,105,186, 99,110, 82,107,
+103,217,138,229,219,179,140,121,198, 27, 93, 87, 79,113,244,254,172,170, 42,101, 42,  4, 76,196,129, 95,230,167,217,210,186,159,
+202,137,148, 65, 60,187,211,163,170,150, 73, 24,142,109,191, 63, 82,106, 91,244,134,220, 77,200, 68,109,193, 50,111,230, 20, 52,
+166,161, 22, 73,147, 98,234,235,254, 74, 44,228,176,  1,205,106, 14,196, 29,145,201,203,124,252,  3,179, 64,  9,226,135,106,138,
+214,173,243,213,245,173, 56,182, 48,170,199,234,245,211,189, 71, 38, 47,135,196,170,246,186,244,  9, 17,209,229, 31,205,212, 47,
+250,244, 76, 44,231,198,129, 84, 79, 93,228,210, 60,210,223,185, 66,118,121, 24,188,140, 89,143, 82,122,157, 89,194, 49,128,162,
+162,185, 41,206, 89,166, 92,149,125,132,194, 92,151,143, 35,119,  5, 45,119, 49,115,219,147,129,177,161,240, 29,106,116, 70,131,
+ 81, 96,234, 50, 72,137,101,137,151,224,181, 29, 55,162,223, 32,106, 46, 71,145,218, 47, 71, 59,219,119, 18,172,111, 50, 82, 76,
+158,141,153,242, 83,139,220,117,251, 66,127,249, 95,195, 90,113,162,185,172,184,101,113,227,106,109,203,245, 77,182,157,221,148,
+ 68,234,250,169,140,  5,187, 30, 32, 24,207, 96,222, 35,191,249,253, 74,165,138, 70,220, 41,206, 79,129, 62, 39,196,157, 21,172,
+234,218, 93, 21,191, 46, 28,196,125, 49,192,118,149,155,181,164,156,229, 92, 78,211,183,137, 81,213,222, 86,117,157,130, 70,163,
+243, 13, 43, 65, 90,236,126, 39, 88,142,161,213,239,234,142,224,126,145, 65,223,191,189, 31,167,211, 70, 47,156,176,  2,164,246,
+189, 62, 74,  4,242,243, 60, 99,175,164, 54, 21,234, 64,232, 77, 52, 37,187, 76, 28,170,141, 78,167,204, 57, 99,225, 20,226,123,
+ 81,159,110,226, 91, 31,  0,186,152, 21,187,184, 80,213, 35,251,180, 52, 33,126,211,212,235,113,210,244, 70,193, 19,147,130, 64,
+151, 96,197,187,194,217,116,157,  7,237,237,102,151,142,126,193,176,124,212,252,157,252,118,112,149,235, 52,181, 41, 25,216, 21,
+219,115,226,  5,116, 85,237, 92,239,189,171, 68,243, 23, 39, 96,224,140,234,122,219,122, 27,121,230, 30,114,240,199,105,226,119,
+  4, 39, 60,242, 77, 33,154, 87, 44,230,133,159,199,111,135,195,111,134,138,179,166,141,152, 54,209,181,121, 94,163, 83,119, 81,
+120,220,184, 94, 71,209,135,193, 66,186,188,150,119, 68,137,127, 49,182, 52,171, 51, 22,216,  1,243,166,219,107, 45,212, 58,159,
+152,114, 90, 61,255,  0, 36,248,217, 32,180,170, 86,153,219,184, 75,110,222,197,172, 25, 49, 36, 57, 27,169, 61, 91,150, 80, 83,
+146,170,144, 33,231,215,106,154,128, 58,234,195, 67,167, 22,109, 28,222, 41, 99,242, 43, 87, 98,200,178, 50,128,242, 56,254, 31,
+ 21,113,121,145,180,195, 91, 60,177,195,233, 72,106,138,173,248,131, 50,213, 43,230, 36, 54,245,  3,167,142,166,185,119, 32,242,
+227,183,216,173, 76,161,  8, 75, 81,120,242, 71,103,230, 59,135,105,246, 58,  4,119,184,200, 92, 77,119,122,206,172,209,178, 91,
+ 18,121, 32,168,170,160, 59,157,170, 42,105,243,209, 54, 44,101, 18,  6,164,133,128,214,234,231,173,187, 43,179, 45,184,110, 76,
+246,158,101,113,247,153,  4,144,113,105,163, 20,100,  4,185,120,155,101, 36, 86,138,213,223,236,213, 70,151, 90, 35,126, 64,227,
+ 32,192,238, 86,125, 58, 81,136,231,240,142,106, 99, 47,209,253, 88, 43,139, 72, 46,243, 87,146, 72,206, 68, 76,193,178, 25,  2,
+  9, 88,198,224,170, 18, 55,106, 15, 46,219, 13,245,164, 26,177,144, 91,177, 39,163,206,103,  1,195,183,220,157, 14,157,168,234,
+ 26,163,118,237, 31,  1,176,  1,225,  3,112, 30, 21,243, 59, 44, 74,151, 22, 86, 31,248,141,157, 57,144,220,192,144, 14, 53,111,
+ 41,174,254, 63, 19,242,208, 98,  2, 81,157,204, 98,  5, 55,146, 54,158, 59, 81,223,112,234,242,129,162,181,224,129,254,227,126,
+109,145,254,157,191,130, 26,196, 12,164,185,  8,172,113, 47, 44,126,175,  3, 50, 68, 88,121, 83,110,102,128,236, 43,248,143,199,
+ 89,121, 92,159,154, 60,186, 19,185, 83,232,225, 59,159,219, 15,148,144, 72,216,227,  2, 86,199,133,237,184,225,137,164, 18,203,
+245,148, 81,121, 61,197, 86,237,218,129,184,168, 83, 81, 21,  1, 59,120,117,214,138, 54,128, 14,121,143,212, 85,224,211,100, 44,
+221,139,174,215,238, 12,101,163,247, 13,165, 86, 91,139,107,175, 91,131,  2, 30, 75,116, 28, 35, 32,142,167,149,121, 15,179, 84,
+150, 47,  9,220,157, 88,146,195,177, 73,  8, 67, 62, 75,135, 40,135, 52,248,  1, 95, 89,192,113, 40,119, 57,123, 42,242,121, 31,
+212,203, 93,250,142,177,239,200, 32, 94, 71,145, 20,160, 80, 40,163,199, 86, 82,148,108, 71, 32,169, 62,142, 86, 94,249,158,178,
+228,175, 16,217,152,129,249, 64,194, 63,  3,235, 90,143,181,183,177,217,118, 93,146, 40, 11, 45,195,221, 74,102, 67,196, 59, 73,
+ 43, 39, 35,198,132,236,  6,231, 75, 79, 55,182,231,181,104,116,182,154,212, 98, 49, 34,131,137, 85,125,193,153,108,198, 72,221,
+ 63,225,183, 31, 79,  9, 95,195,233,198,107, 85,106,120,110,186, 55, 76, 57, 51, 30,213, 85,215, 47,198, 90,179,  8, 30, 91, 60,
+163,183,234,246,162,255,  0,108,175,237, 45,112, 66,121, 57, 64,247,151, 55,114, 39, 39,160, 85, 50,144, 11,  2, 10,211,130,237,
+181, 53, 21,155,185,129,145,222,125,138,235,165,218,148,173,194, 35,197, 39,246,186,160,206,231,225,187,202,228,251,134,236,159,
+163,243,  8,153, 63, 23,164,128,168, 85, 90, 29,154,189, 62,122,184,181, 49,103, 78,103, 45,128,149,156,234, 87, 70,167, 93, 60,
+132,152, 82, 49,236,136,111,105,114,171,187, 87,186, 33, 75, 89,224,185, 87,138,123,151, 46, 38,141,  3,  0,210,121, 10,154,110,
+ 72, 29, 14,177,150,122,132,110, 72,196,131,205, 82,118, 14, 30,165,172,183, 56,244,251, 17, 50, 57, 36,211,242,162,213,148,191,
+ 54,224, 34,106,251,194,190,178,158,222, 91,139,105, 25, 36, 22,112, 60,115, 68,  7,148,200,209, 16,192, 29,137,  4,211,248,104,
+ 45,118,190, 36,183,211, 18, 41,222,132,233, 61, 58, 66,118,231, 26,200,102, 60, 27, 41,205, 35,192,  7, 43, 87,236,206,217,155,
+220,222,229,143, 23,140,121, 45,237, 21, 18,108,157,217,140,169,180,181, 36,115, 42, 78,222,164,134,171, 21, 60,124,219,133, 58,
+150,122,225,  8,200,135,205, 47, 98,  3,168,223,134,163,202,140, 43, 24, 69,251,100, 75,153,123,163,220,189,133,105,140,199,227,
+241,214,248,123, 43,116,135, 25,109, 10,218,193,104,163,242,214, 20, 94,  1, 40,122,138,109,172,246, 56,161, 34, 76, 75,140, 66,
+252,211,247, 11, 15,137,179,239, 78,225,199,226, 89,155, 17,109,147,186,130,214, 82, 55, 17, 67, 43, 41,161,234, 40, 65, 31,102,
+179,162,238, 75,114, 27, 29,189, 69,125, 67,211,180, 63,242,  2,205,251,148,156,160, 12,153,191, 40,125,248,201,201,125,189,136,
+ 50,211,185, 51,152, 88, 77,157,173,207,169,143, 70,102,250, 43,175,204,180,103,234,124,167,251,179,182,206,187,215,175,199, 86,
+186,125,109,221, 52,162, 69, 65,122,108,238,220,171,231, 25,140,241,132,179,  8, 52,121,183,129,152,188,171,148, 84, 54,204,206,
+100, 54,137, 29,165,155,183, 78,253,201,247,205,212,208, 36,183, 56,233,172,172,160, 91,138, 92, 89,222, 93,197, 29,152, 87,141,
+153, 29,128, 67, 39,  6,143,156,108, 89, 65,165,118,216,221,177, 46,161,118,205,232, 24, 74, 50,156,  4,162, 36,198, 33,170,239,
+176,213,184,246,175, 21,133,239,219,223,214, 78,227,192,139, 87, 12,115, 51,153,184, 49,  3, 31,168,  1,252,188,192,163, 57,233,
+ 54,110, 64, 74,108, 23,211,223,151, 22, 44,121, 85,104,181,216,128, 42,122, 83, 90,139,152, 56, 59, 74,243, 75, 99, 45,  2,166,
+198,247, 30, 98,  4,201,207,153,158, 39,237,107, 22,123,104,224,130,193, 90,225,196,179,250, 80,195, 19, 41,169,228,105,230,225,
+202,159,  0, 53,152,149,233,102,150,108,  1,197, 29,150,131,122,168,182,247, 55, 51,135,201,228,108, 48, 88,  1,119,103,123,115,
+234, 70,215, 40,108,166,245, 82, 53,141,253, 70,101, 33,185,112,174,236,  8,213,124,117, 13, 57, 24,135, 18, 82,102, 38, 17,137,
+250,126, 42,193,175,115,158,225, 88,228,255,  0, 85,180,124, 70, 71,  4,208, 92, 45,221,164,193, 35, 88,174,219,115, 27,130,220,
+149, 84, 86,188,183,223,166,167, 51,243, 99, 40,225, 40,169,108, 90,150,120, 72, 30, 89,156,157,202,206,238, 59, 76, 69,149,173,
+184,115,  4,  2, 20, 17,202,206,205, 43,200,198,132,120,242,114,119,  0,238,117,177,210,210,  0,147,179,218,130,186, 50,223,144,
+  2,128,145,220, 40,132,178,157,203,109, 46, 14,238,248, 57,100,255,  0, 25,101,111,100, 11, 25, 36,158, 24,129, 44,205,208, 40,
+ 50,164,132,  3,241, 26,182,177,116, 17, 48, 42, 99,234, 79,212, 93, 18,  0,  2,222,246,222,181,251,158,196,201,246,247,187, 94,
+222,231,241,235, 53,230, 51, 63,119,135,206, 69,117,193,231,116, 55,106,145,222, 70,204,128,213, 99,103,231,200,236, 21,197,117,
+ 85,163,234, 62,102,135, 81,102,233,254,229,162,225,217,204,101,225,239,141, 68,155,130, 59, 89,167,137, 22,181, 86,224, 35, 25,
+140,179, 17,194, 23, 32,  5, 91, 22,184, 26, 79,182, 66,104,159,247, 55,237, 68,185, 25,143,122, 96, 96, 30,174, 66, 63,164,202,
+198, 60,170,151, 96,  1,  5,201,235,248,194,250, 77,183,226, 10,218, 51,236,142,168, 52,247,101,164,184, 90, 23,158,112,225,113,
+185,199,245,  6,150,238, 82,  5, 74,151, 89, 15,221,233, 35,112,  7,189,164,  0, 29,243,176, 79,180,218,151,251, 36, 92,129,  0,
+183,222,210,203, 46,119,180, 48, 57,165, 96,223,168,227,173, 46, 57, 86,167,147,194,165,171, 79, 26,214,186,203,245, 11, 94, 94,
+170,228, 63, 44,143,189, 83, 18,227, 12, 85,163,138,143,186,187,104, 56,150, 80,149, 27,126, 67,113, 67, 81,212,120, 83,195,239,
+209, 59, 23, 89,126, 89,118, 47, 98, 89,247, 30, 14,124,173,205,150,107, 33,114, 50, 86,216,187,120,112,118,235,114,209,155,152,
+228,127, 81,209,135,158,133,104,168, 29, 43,211,144,214, 92,171,225, 68,174,125,168,238, 59,123,153,165,245, 45,175, 49, 48,220,
+200,139,119,111,115,  3, 77, 61,140, 23,198,193,239, 97,183, 47,234,188, 30,168, 42, 28, 37, 58,158,138,196, 52, 54,  9, 72, 75,
+ 18,157,205,123, 79,220,150, 25,171,171, 27,102,178,151, 25,111, 61,244,127,171, 28,133,145,180,142, 44,124,209, 69, 39,212, 76,
+178,152,226,145, 61,120, 57, 70,199,149,100, 80,  1, 44, 53,198, 98,164, 50,204,  1,219,181, 63,130,246, 79,189, 50,119,130, 12,
+138,218,225,172,222,107,219, 68,187,189,189,177,140, 73,115,143,128,207, 34, 66, 36,185,140, 72,  0, 40, 75,163, 20, 10,234,213,
+ 32,138,246,138, 32,232, 99,183,123,122, 28,198, 90,227, 23, 53,193,141,237,177,249,123,217, 26, 18,146, 40,124, 86, 62,226,237,
+ 20, 58,150, 86, 87,104, 66,150, 83,208,212,105,161,222,171,166,162,138,103,183,248,126,218,238, 28,207,232,253,194, 47, 99,245,
+ 34,150, 91,121,172, 30, 37,161,183,134, 73,223,154,202,173, 90,132,  1,105, 74,105,201,161,176,101, 98,158,221, 95,231,197,157,
+239,108, 90,201,111,137,187,183, 89,109,174, 51,119,214, 54,194, 71,154,242,234,210, 24,146, 70,120,215,156,143,108,234,168, 64,
+106,171, 53, 56,121,180,197, 32,  2, 92, 25, 66,131,219,142,235,184,130,214,176,219, 69,123,125, 33, 88, 44, 39,189,181,130,247,
+130,200,240,153, 30,  9, 37, 87, 72,131, 71, 39, 41, 25, 64, 80,188,154,138, 67, 20,203,177,172, 91,  2,168, 51, 56,123,156, 37,
+235, 88,221,201,111, 51,  5, 71, 73,172,231,134,242,  7, 89, 20, 50,149,146,  7,117,220, 31,194, 79, 37,232,192, 26,141,116, 20,
+167,226,170,126, 43,171, 97, 18,  8, 45,126,158,238, 42,126,100, 78,206,142,  8,222,160,147,185,  7,195, 66, 27,114, 39,154, 79,
+ 30, 59, 17,126,108, 64,228,139, 72,110,218,164, 69,107, 60,175,202,139, 31, 37,230, 16,212, 40, 65,181,126, 26, 82,187, 24,140,
+ 14,228, 85,189, 52,174, 22,118,112,234,124, 87, 38,212, 44,168,235, 28,137,212,195,181, 69, 41,198,180,235,166, 54,103, 12, 76,
+120,251,211,137, 17,  1,219, 48,192,199,106,123,214,185,149,203,245,127,230,226, 73, 53,235,191,221,167,196,217,128,  0,132,204,
+186,155,178,204, 57,183,169,118,160,  6, 89, 34, 52,115, 86, 85, 93,184,117,173, 43,212, 83, 67,204,146,114,159,  8,218,172,225,
+110, 34, 25,135,140,224, 54, 14,229,111,106,146,178, 22,250,142, 50,145,180,117, 33,184,174,230,181,249,117,208,147,203,157,196,
+121,119,171, 72, 25,100,  2, 82,121,226,164, 72, 17,161, 98,242, 86, 84, 82,197,200,227, 86,174,212, 35,114,119,174,134,183,102,
+ 66,224,  3,  3,238,227,185, 79,115, 81, 19,  2, 77, 91,135,163,174, 25,239, 26, 47, 74, 86,113, 10,  0, 71,168, 72, 90,120, 85,
+ 77,105,169,243, 89,183,205,  6, 39,130,143,201,187,127,146, 71, 40,227, 79,121, 81,157,204,174, 11,142, 69,  1, 42,131,166,194,
+155,235,166, 63,219, 97, 67, 34,152, 39, 59, 87,206, 94,113, 17,179,  6,111,106, 17,207,200,191, 90,209,163, 82, 13,155,136,233,
+ 86, 21,223,165, 78,172, 52,145, 57, 43,142,  8, 45,109,252,199,112,199,208, 42, 70,121, 72, 33,124,170,118,160,252, 68,124, 53,
+102, 45,134,115, 82,168,174,222,156,131, 10, 15,127,224,167,227,187,115, 35,126,162, 64,134, 40,  9,217,220, 29,255,  0,232,138,
+111,161, 47,235,237, 91, 45,138, 63, 67,209,111, 94,136, 39,146, 62,155, 17,238, 15,182,112,216,200,227,185,185,181,105,238, 84,
+249,222, 94,135,106,138, 46,244, 63,  3, 77,102,117,125, 66,253,231,136,147, 14, 11,209,250,111, 69,210,233, 72,148, 99,154,120,
+ 60,190,  3,103,106,179,186,141, 50,190,133,157,234,196, 97, 64, 40,164,149, 85, 94,190, 98,180, 38,131, 67,216,187, 45, 60,141,
+203,100,137, 45,117,253, 53,189, 68,114, 94,142,104,158,222,111, 83,119,160,108,245,230, 58,222, 87,183,198,160,229, 90, 51,128,
+105,247,  2,122,107,107,107,169,107,238, 64, 11,183, 37,217, 79,120, 94,103,214, 37,161,179, 51, 29, 60,  6, 99,142,225,216,234,
+133, 26,165,140,242,113,141,122,176, 29,107,224, 43,212,232,115, 92,  3,149,156,141,193, 83,114, 77, 24,237,248, 14, 42, 21,197,
+199,172, 66,168,227,  2,254, 20,255,  0, 73, 62, 39, 71,217,179,150,166,164,172,254,175, 88,111, 22,143, 44,  6,  3,226,119,149,
+121,218,216,149,186,152,223,220,173,109,225,254,233, 90,148,119, 31,111,130,255,  0, 94,180,189, 51, 66, 47, 75, 60,135,246,227,
+179,108,142,239,154,186,232,122, 28,242,243,103,132,124, 59,137,223,221,239, 68,153, 60,156,118, 20, 85, 30,165,195,121,146, 38,
+ 30, 90,127,109,252,105,242,241,251, 53,107,114,245,221, 85,195,102,200, 44, 60, 82,216, 63, 72, 59, 74,213,117, 13,125,189,  4,
+ 68,143, 53,201, 86, 48,255,  0,215, 61,162, 62,254,196, 37, 60,239, 43, 60,215, 14, 90, 71, 53,103,127, 18,126, 95,234,213,248,
+183, 99, 65,101,203, 68, 13,251,123, 23,149,106, 47, 94,212, 93, 55, 39, 35, 41, 75, 18,125, 40, 20, 91,155,158,190, 36,238,155,
+239,240,171,125,222, 26,243,190,163,213, 78,168,229,128,201,108,123, 81, 81,177, 11,  1,205,100, 69, 56,113, 68,189,141,219,173,
+112,205,157,187,141,205,164, 92,214,  2,138, 88,137,  0,167,171,208,208, 41, 62, 86,167, 95,179, 82,116,237, 38,111,238, 72, 83,
+103,106,183,233,218,103,254,228,177,250, 81,237,196,246,214,150,205,144, 14, 90, 39, 17,205, 40,116,242, 22, 94,140,234,231,241,
+ 50,245,227,215, 87,147,186, 35,108,200,  7, 39,248, 45, 12,109,131,112,146, 88, 68,115, 75, 96, 30,148, 65,215,151,243,228, 46,
+ 26,250,234,190,129, 32,194,164,108,242, 87,171,109, 74,154,126, 29,232, 54,215,108, 91,144,231,157, 73, 88, 62,169,212, 63,119,
+ 54,128,203,106, 20,136,248,246,159,224,171,179, 25, 75, 24, 33,157, 45,213,189, 75,136,224,250, 84, 96, 16,196,  8, 38, 70, 60,
+ 73,  6,167,250,250,106, 45,102,180, 89,137,  3, 25,138,112, 42,186,212,  4,170,151,107,224,166,186,131,215,153,253,  8,238, 10,
+178, 78, 77, 91,136, 39,117, 81, 74,248,245, 58,205,233,108, 78,227,151,202,251, 86,219,166,216,140,109,137,157,168,171, 35,121,
+  6, 46, 33,140,199,150, 28,153,194,150,222, 66,212,226,242, 53, 71, 90, 15, 48,233,190,180, 20, 36, 88,143,132,120,184,171, 45,
+110,191,246, 26,115,118, 63,228,159, 44, 56,111,151,118,  3,245, 42, 86,150, 27,104, 38,123,137,  0,137, 34, 36,241, 37,106, 73,
+ 20,169,220,121,170, 54,  3, 87,179,189,110,221,179,178, 33,121,132, 73,153,106,215, 31,197, 16,251, 99,102,150,150,211,229,218,
+ 14,114, 95, 76,176,198,134,142,241, 65,  3,  6, 52, 80, 84,212,183, 93,103,116,  0, 76,202,236, 67,102, 37,191,149,111,186,102,
+156, 90,180,242,241, 73, 25,247, 38,106,219, 23,108,215, 22,168, 61,123,132, 40, 82,190,153,  5,216, 30, 32,113, 12,  9, 98, 88,
+237,176,174,141,191,112,200,139,112,241, 21,102,241,210,233,238,106,174, 86, 48,108,163,124,206,  0,123,202,197,164,177,185,200,
+ 93, 36, 80,134,155, 41,123, 43, 39,147,171, 72,238,121, 26,237, 74,245,167,128,213,  4,237,101, 36,  1, 87,162,194,217,243, 53,
+ 23,106, 92,220, 46, 79,167, 21,164, 73,219,144, 89,118,244,210,253, 72,148,210, 55, 42,140,171,203,141,  7,155,151, 38,226,181,
+106,141,139,106,242,118, 69,173, 60,140,177,109,171, 81, 62,159, 40,242,198,187, 17, 54, 22,246,210, 62,209,178, 91, 85,141, 90,
+ 52, 54,168, 35, 94, 76,146,187, 18,200, 73, 53,218,187,106, 29, 56,243, 44, 70, 48, 53,159,241,247, 35, 33,116,105,196,245,  4,
+ 83, 79, 26, 13,243, 60,177,245, 75, 17,192,170, 91,247,104,208,227,173,159,141, 17, 13,225, 83,248, 21,188,161, 55,  7,118,254,
+ 99,169,245, 58,129,  0, 97, 15,160, 84,172,102,155,166,202,100,202, 69,205,123,246,147,233,181, 23,246,229,252, 23,157,177,  5,
+149,155,175,173, 17,123, 70, 90, 47,168,132,177,228,124,213,219,141, 41,242, 58, 19, 67,114, 55,109,129, 29,229,251, 63, 21,176,
+ 18,253,189,153,207,  9, 90,140, 97, 31,231,144,111,246,115, 19,216,134,178, 87,177, 94, 93,201,141,132, 17, 97,108,166, 48,232,
+ 54,121,129, 10, 73, 21,175, 21, 30, 85, 35,237,212, 93, 99,169,188, 12, 33,225,102,125,153,142, 30,173,171, 61,208,180,246, 37,
+124, 91,187, 60,142,124, 95,164, 86,125,228, 82, 59, 30,133,157, 92, 99, 49,177,195, 28,107,  2,  7,152, 10,242, 21,101, 83,241,
+ 31, 58,109,170, 59,119, 99,102, 30, 92,106, 89,228,120,252,190,  8,254,180, 46,106,132,181, 50,229,137,144,133,168,190,192,  9,
+140, 59, 32, 57,164, 71,212,120,173,139,177,125,182,206,247,228,176, 12,  5,167,253, 89,104, 99,181,189,190,152,172,112,195, 43,
+ 40,102,229,230,228,219, 26,209,  1, 59,142,149,208, 38,102,228,193,152,164, 71,250,142,244,117,253,117,152,232,165,110,196,158,
+ 87,233, 32,105,146, 12, 30, 60, 76,141, 28, 80,136,191,212,189,119,216,157,139,134,246,251, 11,250, 70, 39,148,178,202,194,107,
+235,217,  7,230,220, 76, 20, 47, 35,253,149,  0, 81, 84,108,  7,206,167, 92,148,204,139,149,152, 97,177, 77,238,220,234,118,215,
+108,102, 59,133,233, 76,101,148,247, 74,173,208,188, 72, 74, 46,223, 22,160,208,247,174,100,129,150,224,172,250, 94,136,235, 53,
+118,172, 15,252,147,140,123,137,175,177,126,113,100,109,222, 36,153,229, 98,211, 48,244,221,216,130, 89,230,222, 70, 52,233,189,
+122,107, 58, 67, 67, 47,167,122,251, 38,204, 98,112,193,189,136, 38,230,204,201, 28,198, 36, 60, 17, 12,146,250,117, 35,141, 73,
+175,196,252, 73,213,231,145, 43,151,114, 70,185,  6,205,195,106,201,106, 33, 11,118, 76,143, 40,149,123,228, 73,  1,  7, 94,246,
+211,223,210, 72,233, 28,156,135, 18,213,  0,  2, 54, 96,212, 62,  0,182,218,187,142,151,147, 60, 57,100, 25,189,  2,241,110,181,
+211, 99,118,225,137, 21, 34,156, 63,143,  5,173,118,  8,207,222,227, 18,251, 51,108, 26,239,211,105,210,225,228,140, 71, 56,142,
+160, 72,212,221, 63,187, 42,203, 77,206,250,216,216,191, 59,150,  4,166, 24,251,215,147,234,116, 82,210,220, 49, 59, 22,131,143,
+194, 65,127,101,107,143,185,188, 91, 27, 81,244,242,139,239,163,107,232,227,117, 43,199,157,186,203, 20,143,202,132,126, 81,242,
+157,250,121, 77, 85,226, 67,144,152, 56,161,187,254,192,237, 67,117,118,217,191,114,177, 24,184,210, 99,198,210,207, 27,125,121,
+ 35, 49, 60, 89, 79,175, 45,170,199,231, 37, 87,115, 90,125,160, 86, 15, 48,151, 41,226, 17,106,148, 77,113, 97,129,196, 97,111,
+ 83, 14,183,183,118,194,212, 77,119,125,113, 24,130,234,241,  3, 41, 64, 33,140,250,113,162,169, 38, 53, 12,124,205, 90,157, 23,
+ 24,196,  9, 75,108,133, 81,182,111,230,157,171, 96, 52, 97, 42,119,149, 95,154,246, 91, 49,238, 87,183,135, 37,219,176,188,249,
+172, 61,188,215,115,122,167,105, 35,182,136,200,144, 34, 46,254,188,164,184, 95,143,141, 54,212,250,237, 68,236,139, 82,143,135,
+104,222, 25, 21,162,181,102,237,251,176,152,230,155,136, 75, 96,158,106,  3, 81,203, 42,137, 29,152,170, 47,101,253,145,185,247,
+ 71,218,252,146, 99, 47, 45,236,175,172, 51,211,192,151,119, 69,152,125, 45,230, 62, 19, 45,  4, 96,213,145,248, 50,141,171,184,
+ 39,109, 23,111, 95,251, 61, 92,103, 89, 91,156,101,152,111, 18,143, 33, 29,146,255,  0,105, 66, 91,242,174,105,110, 90,187, 28,
+179,  6, 50,132,132, 26, 66, 99,150,118,230, 77,114, 24,236,252,241,118, 94,225,198, 88,254,147,138,199,226,189, 64,227, 31,107,
+  5,159,168,  7, 16,222,132, 75, 31, 32, 42,104, 15, 26,210,186,163, 21, 57,142, 37, 64,100,  0, 34, 56, 46,110,237, 45,111, 96,
+150,202,246, 20,185,180,155,105, 33,145, 67, 43,  0,106, 54, 63, 49,162, 35, 73,  9, 10, 24,151,  7,113,  9,176,191, 59, 39, 60,
+ 11, 18,  8,222,  8,149,  8, 61,161,113,111,103,107,142,183,134,206,202,217, 45,108,160, 80,182,246,177,160,142, 37,143,192, 42,
+168,  0, 15,133, 53, 52,174, 74,114, 50,145,114, 77, 74,  3,  5,211,160,244, 76,162,101,245, 67,  4, 16,239,207,137,  4,242, 30,
+ 20, 29, 52,162, 73, 44,212, 92, 33, 69,168,229,215,106,104,134, 81,175,203,190,195,238,126,240,195, 98,236,199,109, 97, 47,178,
+ 70,203, 47,  6, 74, 89,109,163,154, 75, 73,163,182,130, 81, 37,164,209,197, 25, 12,146, 70,100, 50, 85,191,  7, 45,169,190,178,
+113, 21, 44,180,179,144, 49, 14,173, 44, 59,195,209,183,179,123, 30,210,200, 54,122, 28,100,182, 56,198,245,158, 75,115,135,123,
+199,159,214,104,133,176,103,117,137,158,219,212, 86, 17,154,  7,227,200, 16,202,142,184,242,203, 92, 17, 62, 11,189,115,215, 55,
+185,203, 62,194,236,238,232,180,183,201,203,146,151,184, 31, 15,113, 60,185, 59,107,139,171,171, 41,153, 99,158,222,209, 61, 52,
+183,146,  8,145,149,227,228,226, 66,172, 69, 86,138,169,128,134, 67,249, 30,233,238, 11,126,232,197, 54,111,182,115,132,216, 93,
+101,203,193,147,150,121,242,119,  9,121,110,145,204,175, 44,246,234, 90,104, 99,  1,157,204,127, 15, 42,174,146,118,194, 16,143,
+101,101,240,184,137,114,146,197,133,200,100,243, 47,103,146,134,207,233,238, 84, 66,150, 55,118, 51,219,220,153,227, 91,105, 25,
+140, 80, 73, 36,165,213,213, 71, 26,176,226, 14,156,234, 48,  8, 44,161,118,254, 85, 49,253,216,114,120, 60, 92,247, 48,210,240,
+ 88,226,213,204,211,172, 19,193, 42,  0,210, 44, 67,153,137, 27,147, 48,140,114,227, 90, 47,135,  3,164, 74,211, 59,  3,185,251,
+249,251,114,207,  9,132,237,174,236,151, 19,109,107,102, 37,200,118,148,215, 86,151, 51,180, 25, 28,188,240,179, 77, 13,180,160,
+ 69, 33,187,185,131,142,254,120,121,  2, 74,178,107,161, 49,206,213,  6,199,185,242,150,120,204, 70, 54,243,181,251,146,235, 35,
+123,124,227, 15, 33,187,144, 75, 29,236,119,205, 36,210, 98,102,107, 71,184,138,232,201,249, 82, 42, 72,233,207,147, 58, 51,176,
+225,213,196, 13,223, 89,168,179,125,199, 53,226, 99,100,199, 60, 81, 69,109,117, 21,210,198,151, 50,220, 66,188,100,154,225, 96,
+138,  4, 18, 59, 84,154, 70, 63,218, 44,220,153,153, 37, 60,113,174,229, 71,103,203,213,226,140, 86,224,  3,233, 50,  2,196,183,
+135, 74,237,168, 46, 97, 92, 17, 22,193,122, 98,172,249, 94,177, 69,117,115, 33,140,214,190, 80, 35,234,104, 77, 63,229,243,211,
+ 97, 43, 96, 22, 27,123, 84,254, 92,203,  9, 26,250,147,139, 83, 34, 68,149, 54,206,191,222, 54,193,119,222,181,241,212, 36,150,
+ 36,248,149,148,  4, 98, 68, 69, 96, 70, 42,124, 28,221,224, 16,111, 59, 55, 25,148,143, 76, 13,186,150,109,135,250,180, 20,232,
+ 14,108, 21,165,147, 81,148,118,169,118, 34,104,253, 20, 90,153, 89,185, 65, 36,103,155,  6,  6,128, 14, 59,255,  0, 70,159, 41,
+ 57, 39, 99, 85,232,185, 24,  2,217,143, 54,207,224,173,172,254,161,103,173, 11, 93,158, 64, 16,104, 85,136,220,145,226,160, 87,
+150,187, 33,108,219,  2, 52,138,108, 60,207, 53,238, 54,102, 52,224,166,169,143,214, 89, 46, 35, 95,166, 65, 78,  5,141, 72, 63,
+134,155,239,170,249,  1,144,228, 60,199, 20,116,101, 60,192, 76,  6, 24, 39,111,  3, 65,  9, 12,237, 61,209,224, 72,140, 82, 36,
+ 52, 38,133,136, 21,106,124,169, 79, 29, 65,105,167,135, 44, 70,221,167,185,240, 92,212, 76,193,140,134,105, 28,  6,207, 93, 20,
+ 23,104,208,254,122,  6,147,140,106,106, 65,242,150, 21, 41, 79,151, 93, 60,137, 83, 41, 45, 95, 90, 62,193, 18,143, 56,106,108,
+195,185, 84,229,236, 59,126,107,249,100,150, 85,143,159, 16,160, 78,  3, 34,143, 40,242,158,160,129, 94,154, 59, 73,123, 83, 27,
+109, 16,248,253, 42,171, 87,103, 77, 59,132,204,129, 35,250,152,175,182,120,252, 37,184,111,167,186,138, 78, 74, 69, 76,136,242,
+149,  7,195,251, 63,110,157,119, 81,126, 96, 12,164, 30,  0,178, 47, 71,165,210,192,185,152, 33,176, 36, 58,177,142, 58, 37, 17,
+174, 57, 18,105,193,170,131, 99,179, 80, 83,255,  0, 98,116, 32,147,200,210, 29,244,245, 43,145, 30, 92, 72, 31,166,167,176,238,
+237,170,179,138, 89,205,188, 72, 22, 74,212,  8,201,  0, 32, 90, 15, 26, 87,248,157,  5, 43, 80, 19, 46, 67,112,173, 85,230,154,
+236,229,151, 40,171,250,134,207, 98,173,238, 91,155,216, 35, 16, 91, 70,210,206,195,143,171, 28,108, 66,173,122,212,117, 58, 51,
+166,219,140,137,147,179,108,125,170,110,167,169,191,106,198, 75,113,148,165, 42,102, 17, 52,226,179,154,121,153,231, 38,138,104,
+227,249,219,236, 26,210, 73,201,109,190,197,228, 44,  1, 50,184, 77, 49, 31, 81,236,248,149, 22,230, 71,148,134,117, 41, 29, 41,
+ 26,144,105,196,127, 94,172, 52,246,225, 17,136, 39,181, 84,106,238, 78,225,  6, 67, 40,250, 71, 15,137, 83, 48,248,203, 91,217,
+ 75, 94,222,195,103,108,  1, 36,187,175, 54,216,236, 20,157,190,211,168,181,154,169, 66,150,161, 41, 75,128, 52, 70,116,190,155,
+103, 81, 39,189,118, 54,225,198, 67, 49,238,127,106, 45, 19, 71,107, 99,  2, 88, 71,235, 41, 28,109,253, 53,230,128, 10,213,139,
+ 13,190,237,111,173,255,  0,126, 22,237, 91,228,183,146,178,195,249,128, 59, 75,226,118, 45, 85,203,195, 75,101,236,199,204,150,
+ 16,  2,177,167,212, 72,247, 99, 46,196, 61,114,210,198,205,245,  1,222,235,145, 46, 88,111,200,129,248,190,238,131, 86,135, 85,
+111, 69,103, 37,136, 27,199,102, 64,101, 30,217, 72,109,248,172, 46,162, 19,157,227, 43,228,139,142,242,205,226,195,115,250,184,
+ 40, 14,229,  7,171, 48,231, 49,  5, 99, 74, 83,227,185, 30, 20,215,155,245, 27,154,187,215, 30,248,148,127,152, 16, 59,157, 23,
+107,202,183, 19, 58, 72,181,  7,254,237,201,155, 88, 22,234,238, 56,166,149, 97, 87,111,205,146, 66, 16, 42,141,201,223,199,225,
+166, 88,128,148,132, 92,  1,191,130,  6,197,191, 54,246, 91,135, 43,154,147,248,173, 95, 30,207, 29,178, 71,101, 27,189,165, 63,
+ 32,192,196,168, 74, 30,140,155, 17,190,250,220, 64,198,221,151,133, 64,221, 95, 82,223, 92,179,106,115, 25, 76, 64,106, 84, 97,
+177, 15,101,174, 47, 37,184,147,214,142, 65, 18, 72,167,243, 85,147,155,111,253,160,  0,167,242,237,160,237,219, 18,152,157,194,
+  1,216, 31, 14,229,147,235,218,139,178,135,147,110, 50,242, 34,121,166,196,  9, 75,181,188, 47, 65,191, 21, 10,254,234,123,107,
+ 56,156, 68,243,  6,114, 32,140,163, 52, 92,170,164,147, 74, 83,160,167,243,104,141, 85,211,106, 60,163, 49,216,223, 31,146,200,
+192,102,224, 16,159,165, 36,247, 41, 21,195,240,150, 87, 85,119,148,240, 10,  9,165, 73, 98,  0, 26,197, 76,204,204,230,241, 29,
+234,206,204, 99, 41,  0,224, 13,235, 80, 44,150,246,  8,150, 30,107, 24,148,122, 77, 16,105, 89,145, 69,  7, 65, 66, 79,151,166,
+175, 38, 69,187, 96, 67,155,177,109,109,194,217,173,194, 50, 68, 86,187,  7,229,252,206,168, 98, 89,228,185,103,184, 44,146,183,
+153, 85,171,201, 80,126, 16, 43,190,212, 62, 27,252,244, 86,134,220, 45, 91, 53,205, 45,187, 86, 55,169,221,189,168,212,230,184,
+ 12,  9, 28,145,144,202,  0, 24, 99,239,222,234,139, 41,113,113,115, 39, 35, 11,197,105, 25,164, 42,224,167, 57, 13, 56,150, 44,
+  6,223, 10,248,106,159,169, 95,187,113,134, 89, 70, 28, 67, 40,180,144, 17, 46,224,201,253,171, 75,194,172,246,152,219, 59,107,
+ 82, 38,130,  8,128,121, 35, 33,213,229, 36,153, 60,203, 80,106,196,138,248,106,219, 76, 99,110,204,114,215,149,233,191,117, 23,
+160,105,109, 25,  1, 12,193,220,  7, 52, 13,189,246, 87,215,220,170,114,247, 55,151, 23, 30,166, 66, 39,142,  4, 36, 68,178,171,
+ 34,183, 74,212, 53, 62,237,186,104,222,151,  2, 78,121,144, 39, 42,182,208, 55, 55,103,169,103, 62,232,213, 93,189, 56,194, 49,
+148,116,246,222, 48, 36, 16, 39, 47,174, 96,181, 95, 13,173, 30,212,215,111,139, 89, 59,157,120,250,107, 61,172, 39,129,114,  7,
+171, 60,131,136,226, 54,228, 85, 73, 59,105,151,165,110, 90,129, 16, 24, 68, 18,251,228,248,  5, 15,219,118, 96,110, 25, 78, 91,
+ 57, 69, 30,189,251, 43,236, 70, 29,195,119, 39,233,114,219,199, 21,100, 96,138,211,112, 33,130,242,168, 47, 85,252, 35,250, 78,
+218,131, 95,154,228,124,163,202,  9,115, 47,164, 13,207,129,125,187,184,173,229,219,131, 77, 98,119,224, 60,203,167,146,220,  5,
+ 78, 99,140,228,  3,242, 71,179,152,209, 11, 98, 45,114, 17,198, 91, 15, 60,173,  9,145, 17,210,  6, 36,122,219,  5, 45, 74,208,
+239,191,142,130,184, 97,108, 74, 86,171, 38,192, 87,212, 23,151, 91, 23,228,208,184,254, 89,185, 82,104, 51,154, 19, 34,105, 74,
+154,236,245,162, 83,141,179,182,182, 48, 11,180,158,232,200, 62,161,249,169,144, 73,183, 46,109, 83, 83,170,253, 85,179,228,136,
+ 63,136,140,231,100,123, 79,177,122, 13,131,106,197,185,221,139,220,242,188, 17,141,124,201,146,208,166, 57,  1,230,153,171,  6,
+ 21, 36,  4,252, 80, 88, 70,161, 32,146, 51, 54,220,153, 24, 48,167,243, 86,158, 58, 34,100,  8,129,111,  6,217,233, 85,231,147,
+181,115, 60,141,217, 19, 44,220,239, 78,106,227,184,226,173,113, 17, 88,169, 10,142,133, 56,169,110,  5, 79,150,180,243, 26,244,
+ 53,223, 84, 26,139,210,250,129,203,152,108, 37,110,250, 46,146,200,148,178,206, 25,140, 38, 60, 66,128, 69,220,227, 74,  1,196,
+176, 90, 23,106,225,173, 50,217, 43, 92,122, 95,217,217, 53,243, 16,215,119,147, 36, 86,214,209,141,203,200,204,202,180, 80, 63,
+ 13,106,199, 97,167, 88, 34,  2, 68,  7,185, 35,134,225,252, 20,127,112, 78, 34,112,183, 30,107, 86,222, 48,147, 52,101, 32,222,
+100,163,188, 25, 54, 31, 72,130,247, 71, 96,227, 59, 87, 11,218,246,184,174,207,186,130,251, 17,108, 89, 30,246,218, 84,156, 77,
+115,177,149,221,227, 36,115, 39,114, 60, 58,116,212,  4,151,170,200,134,100, 73,164,186,179,143,125, 67, 15,107,179,243,122,194,
+ 40,173,214, 27,139,133,104,204,222,172,113, 78,140, 97,227,255,  0,132, 32, 45, 78,218,  3, 92,222, 81,124, 28, 63, 99,173,143,
+217,134, 35,171, 90,  4, 59,230,  2,172,207, 19,205,221,138,240,101,228,147,207, 25,142, 97,192, 59, 26,188,139,193,  3, 50,211,
+122,210,155,111,190,131,211,228,157,248, 68,208, 25,  7, 38,131,211,220,190,172,186,  4,108,204,194,167, 41, 96,232,110,242, 71,
+134,212,220, 64,143, 61,200,171, 71,  4, 96,  7,169,160, 10, 55,254,200,175,217,171,222,147,104,207, 87, 34,249,102,  1,106,238,
+220, 54,186,205,117,237, 87,237,180,  6,230, 67,115,244,129,189,133,113, 96,  5,100, 90,145,115,130,141,218,175,142,206, 95,186,
+100,217, 48,247, 41,231, 63, 88,172, 45, 37,145, 79, 78, 74,188, 86,163,168, 35,238,241,214,207, 68,109, 93,153, 23,121, 36, 55,
+120, 36,120,238, 62,140,188,107, 81,118,119, 97, 41, 66, 50,136, 98,226,110, 50,241,129, 62, 33,183, 41,102, 11, 73,182, 22,246,
+184,123,146,133,103,158, 43,121, 13, 19,140,129,238,  0,114, 85, 10,240,219,145, 96, 89, 84,215, 86,147,  2, 22, 28, 84,  0, 77,
+ 43,180,211,138,242,222,176,247, 53,134, 33,131,228,141,105, 28, 60, 78,118, 62,245, 27, 28,222,234,226,236,109,175, 46,198, 15,
+ 39,140,153,237,146, 72,113, 70,111,212, 97,142,225,121, 35,180,111, 26,242, 84,170, 43,  4, 53, 83, 77,168,  9, 25,105, 92,186,
+ 64, 44, 43,187, 30,245, 95,118,199,151, 35, 28,192,145,184,130, 15, 97, 90,247, 98, 95,119, 20, 93,169,106, 44,204,135, 37,232,
+ 47,234,137,109,111,109, 36,222,177, 99,192, 74,201, 15, 50,224, 17,191, 93,191,139, 45,214, 32,203, 21, 62,163,150, 77, 28,  0,
+ 24, 32, 15,120, 48,242,205,146, 61,195,221,153, 11,245,238,107, 43, 40,146,199, 17,148,149,227,142, 84,110,106,198, 88,166,171,
+200,197, 30,168,209,149,225,196,236,117, 48,140, 90, 70, 39,  0,112, 74,192,  2,229,178,107, 35, 33,220,199,226,183, 63,219,  6,
+ 98,246,239,  9,149,197, 71,101,119, 22, 42,198, 59, 25,173,239,110, 33,146, 40,165,158,224, 75,202, 56,157,212,  7, 49,198,145,
+243,222,181, 97,169, 58,129, 13,  1,179, 42,224, 15, 57,159,212,125,235, 85,176, 56, 70,176, 95,242,239,210, 12,103, 55, 17,254,
+158, 34, 22,252,249, 30,116,244,188,181,229, 94, 95, 61, 87, 91,  1,134,230,246, 41, 53,  6,231,153, 47, 49,243,185,204,248,230,
+218,252, 95, 21,242, 74,238, 91,169,234,191, 10,104,144,130, 43,134,245, 21, 36, 85, 60,163, 60,121,144, 54,249, 86,163, 79, 80,
+147, 68,212,205, 41,224, 38, 13,248, 87,211, 45, 95,238,199, 78, 53,240,211,194,134, 79,181, 51,113, 32, 42, 61, 52, 10,161, 66,
+191, 26,249,152, 30,167,149,104,126,205, 77,  0,155, 42,168,156,135, 47,192,107,240,169,248, 82,191,199,125, 76,184,191,255,217,
 };
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index 5372bb292db7f624594c944f25a1ac9837643db8..88ad8ae4e3e0e667e5fbb2c0a50c5e1275705ced 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -1359,6 +1359,19 @@ int do_clever_numbuts(char *name, int tot, int winevent)
 	int a, sizex, sizey, x1, y2;
 	short mval[2], event;
 	
+	/* Clear all events so tooltips work, this is not ideal and
+	only needed because calls from the menu still have some events
+	left over when do_clever_numbuts is called.
+	Calls from keyshortcuts do not have this problem.*/
+	ScrArea *sa;
+	BWinEvent temp_bevt;
+	for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+		while( bwin_qread( sa->win, &temp_bevt ) ) {}
+		while( bwin_qread( sa->headwin, &temp_bevt ) ) {}
+	}
+	/* Done clearing events */
+	
+	
 	if(tot<=0 || tot>MAXNUMBUTS) return 0;
 
 	getmouseco_sc(mval);
@@ -1383,6 +1396,9 @@ int do_clever_numbuts(char *name, int tot, int winevent)
 	
 	/* WATCH IT: TEX BUTTON EXCEPTION */
 	/* WARNING: ONLY A SINGLE BIT-BUTTON POSSIBLE: WE WORK AT COPIED DATA! */
+	
+	BIF_ThemeColor(TH_MENU_TEXT); /* makes text readable on dark theme */
+	
 	uiDefBut(block, LABEL, 0, name,	(short)(x1+15), (short)(y2-35), (short)(sizex-60), 19, 0, 1.0, 0.0, 0, 0, ""); 
 	
 	/*
@@ -1394,12 +1410,22 @@ int do_clever_numbuts(char *name, int tot, int winevent)
 	uiBlockBeginAlign(block);
 	varstr= &numbuts[0];
 	for(a=0; a<tot; a++, varstr++) {
+		
 		if(varstr->type==TEX) {
 			uiDefBut(block, TEX, 0,	varstr->name,(short)(x1+15),(short)(y2-55-20*a),(short)(sizex-60), 19, numbpoin[a], varstr->min, varstr->max, 0, 0, varstr->tip);
 		}
 		else  {
+			
+			if(varstr->type==LABEL) /* dont include the label when rounding the buttons */
+				uiBlockEndAlign(block);
+			
 			uiDefBut(block, varstr->type, 0, varstr->name,(short)(x1+15),(short)(y2-55-20*a), (short)(sizex-60), 19, &(numbdata[a]), varstr->min, varstr->max, 100, 0, varstr->tip);
+			
+			if(varstr->type==LABEL)
+				uiBlockBeginAlign(block);
 		}
+
+		
 	}
 	uiBlockEndAlign(block);
 
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index cfd7223c1c1ca3e56fc5d6855818f557f03aaa0a..71ccfd4acea91b7043d74bf9516d3b8c7075ce23 100755
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -761,7 +761,10 @@ void calculateCenter(TransInfo *t)
 			projectIntView(t, axis, t->center2d);
 			
 			/* rotate only needs correct 2d center, grab needs initgrabz() value */
-			if(t->mode==TFM_TRANSLATION) VECCOPY(t->center, axis);
+			if(t->mode==TFM_TRANSLATION) {
+				VECCOPY(t->center, axis);
+				VECCOPY(t->con.center, t->center);
+			}
 		}
 	}	
 
diff --git a/source/blender/src/view.c b/source/blender/src/view.c
index b2999c65d2bff76c6203b2896a8983b8a7ee8be8..38703ef322f540942659e307d40a8be299e34b60 100644
--- a/source/blender/src/view.c
+++ b/source/blender/src/view.c
@@ -536,7 +536,14 @@ void viewmove(int mode)
 	short use_sel = 0;
 	short preview3d_event= 1;
 	
+	/* 3D window may not be defined */
+	if( !G.vd ) {
+		fprintf( stderr, "G.vd == NULL in viewmove()\n" );
+		return;
+	}
+
 	/* sometimes this routine is called from headerbuttons */
+
 	areawinset(curarea->win);
 	
 	initgrabz(-G.vd->ofs[0], -G.vd->ofs[1], -G.vd->ofs[2]);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 028dcbe46012f2e786f62ba08f0f909b5d7bde75..4dbddaf2d62aa4f3bb4bb9e0c346b19f65d6b10a 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -42,6 +42,10 @@
 #pragma warning (disable:4786)
 #endif
 
+#ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
+#endif 
+
 #include "KX_BlenderGL.h"
 #include "KX_BlenderCanvas.h"
 #include "KX_BlenderKeyboardDevice.h"
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
index a100c3aaa0a1f36c75d8917035b572c9a81dd112..8f93ad1a0aa318efcfcb896ebc7b0e41213ae6e9 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
@@ -36,6 +36,7 @@
 #include <windows.h>
 #endif //WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #else
 #include <GL/gl.h>
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index 113556f0b11cbe642432a1fe97da92cb5eebc518..ee47f86157e06e660c471ef8c78171ff44e6a5d9 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -168,16 +168,16 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
 	// maybe there are events for us in the queue !
 	if (frame)
 	{
-		for (vector<CValue*>::iterator i=m_events.end(); !(i==m_events.begin());)
+		for (vector<CValue*>::iterator i=m_events.begin(); !(i==m_events.end());i++)
 		{
-			i--;
 			if ((*i)->GetNumber() == 0.0f)
 				bNegativeEvent = true;
 			else
 				bPositiveEvent= true;
 			(*i)->Release();
-			m_events.pop_back();
+		
 		}
+		m_events.clear();
 		
 		if (bPositiveEvent)
 			m_flag |= ACT_FLAG_ACTIVE;
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index a2801db7069cb67ddfd48840d26f62e04a037793..10d5e65ed9f4d8762489e0455f9fed53f0374b5d 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -352,7 +352,7 @@ BL_Material* ConvertMaterial(  Mesh* mesh, Material *mat, TFace* tface,  MFace*
 					material->flag[i] |= ( tface->transp  &TF_ADD	)?CALCALPHA:0;
 					material->ras_mode|= ( tface->transp  &(TF_ADD | TF_ALPHA))?TRANSP:0;
 					material->mapping[i].mapping |= ( (material->img[i]->flag & IMA_REFLECT)!=0 )?USEREFL:0;
-					material->blend_mode[i] = BLEND_MUL;
+					//material->blend_mode[i] = BLEND_MUL;
 					i++;// skip to the next image
 					valid_index++;
 				}
@@ -371,12 +371,13 @@ BL_Material* ConvertMaterial(  Mesh* mesh, Material *mat, TFace* tface,  MFace*
 							// -----------------------
 							if( mttmp->tex->imaflag &TEX_USEALPHA ) {
 								material->flag[i]	|= USEALPHA;
-								material->ras_mode	|= TRANSP;
 							}
 							// -----------------------
 							else if( mttmp->tex->imaflag &TEX_CALCALPHA ) {
 								material->flag[i]	|= CALCALPHA;
-								material->ras_mode	|= TRANSP;
+							}
+							else if(mttmp->tex->flag &TEX_NEGALPHA) {
+								material->flag[i]	|= USENEGALPHA;
 							}
 
 							material->color_blend[i] = mttmp->colfac;
@@ -845,8 +846,10 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
 
 	// -----------------------------------
 	// pre calculate texture generation
-	for(int matid=0; matid<meshobj->NumMaterials(); matid++)
-		meshobj->GetMaterialBucket(matid)->GetPolyMaterial()->OnConstruction();
+	for(RAS_MaterialBucket::Set::iterator mit = meshobj->GetFirstMaterial();
+		mit != meshobj->GetLastMaterial(); ++ mit) {
+		(*mit)->GetPolyMaterial()->OnConstruction();
+	}
 	// -----------------------------------
 
 
diff --git a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp
index dc714fb5fb6dec5a1935471ddea9b1a20ad02ea0..9cad9fcf93240314d4447b834bb687d2f419af36 100644
--- a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp
@@ -38,6 +38,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
index 3d81046e8e9ce770901ee77ceafa2cb96eb95c45..9bc01e1408e63cf2b3c30672fc16f75b02ed635c 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
@@ -38,6 +38,7 @@
 #endif 
 
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #else
 #include <GL/gl.h>
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index c5324776edba7a0f744c91809f578d1196e95abc..2ab98750881f0d241b85041ac2baa4838aa44d4f 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -41,6 +41,7 @@
 #endif
 
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
diff --git a/source/gameengine/Ketsji/BL_Material.h b/source/gameengine/Ketsji/BL_Material.h
index 0b8856690d48217b87c8bf46f725d6048a263e1e..cf7534142454b1979fd1a45540f31ff8f6dd7734 100644
--- a/source/gameengine/Ketsji/BL_Material.h
+++ b/source/gameengine/Ketsji/BL_Material.h
@@ -112,7 +112,8 @@ enum BL_flag
 	USEALPHA=4,		// use actual alpha channel
 	TEXALPHA=8,		// use alpha combiner functions
 	TEXNEG=16,		// negate blending
-	HASIPO=32
+	HASIPO=32,
+	USENEGALPHA=64
 };
 
 // BL_Material::ras_mode
diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp
index 7e0b6df3a3aac3566168c3bb3165e3e8d62788c7..4c41101b462a3d7ca520cfd9c4b64c1ab8a08e28 100644
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@ -3,6 +3,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
@@ -31,7 +32,7 @@ const bool BL_Shader::Ok()const
 	return (mShader !=0 && mOk && mUse);
 }
 
-BL_Shader::BL_Shader(int n, PyTypeObject *T)
+BL_Shader::BL_Shader(PyTypeObject *T)
 :	PyObjectPlus(T),
 	mShader(0),
 	mVert(0),
@@ -40,19 +41,14 @@ BL_Shader::BL_Shader(int n, PyTypeObject *T)
 	mOk(0),
 	mUse(0),
 	vertProg(""),
-	fragProg("")
+	fragProg(""),
+	mError(0),
+	mLog(0)
+
 {
 	// if !RAS_EXT_support._ARB_shader_objects this class will not be used
 
-	mBlending.src	= -1;
-	mBlending.dest	= -1;
-	mBlending.const_color[0] = 0.0;
-	mBlending.const_color[1] = 0.0;
-	mBlending.const_color[2] = 0.0;
-	mBlending.const_color[3] = 1.0;
-
-	for (int i=0; i<MAXTEX; i++)
-	{
+	for (int i=0; i<MAXTEX; i++) {
 		mSampler[i].type = 0;
 		mSampler[i].pass = 0;
 		mSampler[i].unit = -1;
@@ -66,16 +62,20 @@ using namespace bgl;
 BL_Shader::~BL_Shader()
 {
 #ifdef GL_ARB_shader_objects
+	if(mLog) {
+		MEM_freeN(mLog);
+		mLog=0;
+	}
 	if( mShader ) {
-		glDeleteObjectARB(mShader);
+		bgl::blDeleteObjectARB(mShader);
 		mShader = 0;
 	}
 	if( mFrag ) {
-		glDeleteObjectARB(mFrag);
+		bgl::blDeleteObjectARB(mFrag);
 		mFrag = 0;
 	}
 	if( mVert ) {
-		glDeleteObjectARB(mVert);
+		bgl::blDeleteObjectARB(mVert);
 		mVert		= 0;
 	}
 
@@ -83,7 +83,7 @@ BL_Shader::~BL_Shader()
 	fragProg	= 0;
 	mOk			= 0;
 
-	glUseProgramObjectARB(0);
+	bgl::blUseProgramObjectARB(0);
 #endif//GL_ARB_shader_objects
 }
 
@@ -91,68 +91,74 @@ BL_Shader::~BL_Shader()
 bool BL_Shader::LinkProgram()
 {
 #ifdef GL_ARB_shader_objects
-	int numchars=0;
-	char* log=0;
+
 	int vertlen = 0, fraglen=0, proglen=0;
+	int vertstatus=0, fragstatus=0, progstatus=0;
+	unsigned int tmpVert=0, tmpFrag=0, tmpProg=0;
+	int char_len=0;
+
+	if(mError)
+		goto programError;
 
 	if(!vertProg || !fragProg){
 		spit("Invalid GLSL sources");
 		return false;
 	}
-	
-	// create our objects
-	unsigned int tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
-	unsigned int tmpFrag = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
-	unsigned int tmpProg = glCreateProgramObjectARB();
-
-	if(!tmpVert || !tmpFrag || !tmpProg){
-		glDeleteObjectARB(tmpVert);
-		glDeleteObjectARB(tmpFrag);
-		glDeleteObjectARB(tmpProg);
+	if( !RAS_EXT_support._ARB_fragment_shader) {
+		spit("Fragment shaders not supported");
 		return false;
 	}
-	// set/compile vertex shader
-	glShaderSourceARB(tmpVert, 1, (const char**)&vertProg, 0);
-	glCompileShaderARB(tmpVert);
-	glGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &vertlen);
-
-	if( vertlen > 0 && !PrintInfo(vertlen,tmpVert, "Vertex Shader") ){
-		spit("Vertex shader failed");
-		glDeleteObjectARB(tmpVert);
-		glDeleteObjectARB(tmpFrag);
-		glDeleteObjectARB(tmpProg);
-		mOk	= 0;
+	if( !RAS_EXT_support._ARB_vertex_shader) {
+		spit("Vertex shaders not supported");
 		return false;
 	}
-	// set/compile fragment shader
-	glShaderSourceARB(tmpFrag, 1,(const char**)&fragProg, 0);
-	glCompileShaderARB(tmpFrag);
-	glGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, &fraglen);
-	if(fraglen >0 && !PrintInfo(fraglen,tmpFrag, "Fragment Shader") ){
-		spit("Fragment shader failed");
-		glDeleteObjectARB(tmpVert);
-		glDeleteObjectARB(tmpFrag);
-		glDeleteObjectARB(tmpProg);
-		mOk	= 0;
-		return false;
+	
+	// -- vertex shader ------------------
+	tmpVert = bgl::blCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
+	bgl::blShaderSourceARB(tmpVert, 1, (const char**)&vertProg, 0);
+	bgl::blCompileShaderARB(tmpVert);
+	bgl::blGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, &vertlen);
+	// print info if any
+	if( vertlen > 1){
+		PrintInfo(vertlen,tmpVert, &char_len);
+		goto programError;
 	}
-
-	// set compiled vert/frag shader & link
-	glAttachObjectARB(tmpProg, tmpVert);
-	glAttachObjectARB(tmpProg, tmpFrag);
-	glLinkProgramARB(tmpProg);
-
-	glGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, &proglen);
-	if(proglen > 0){
-		PrintInfo(proglen,tmpProg, "GLSL Shader");
+	// check for compile errors
+	bgl::blGetObjectParameterivARB(tmpVert, GL_OBJECT_COMPILE_STATUS_ARB, &vertstatus);
+	if(!vertstatus)
+		goto programError;
+
+	// -- fragment shader ----------------
+	tmpFrag = bgl::blCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
+	bgl::blShaderSourceARB(tmpFrag, 1,(const char**)&fragProg, 0);
+	bgl::blCompileShaderARB(tmpFrag);
+	bgl::blGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, &fraglen);
+	if(fraglen >1 ){
+		PrintInfo(fraglen,tmpFrag, &char_len);
+		goto programError;
 	}
-	else{
-		spit("Program failed");
-		glDeleteObjectARB(tmpVert);
-		glDeleteObjectARB(tmpFrag);
-		glDeleteObjectARB(tmpProg);
-		mOk	= 0;
-		return false;
+	bgl::blGetObjectParameterivARB(tmpFrag, GL_OBJECT_COMPILE_STATUS_ARB, &fragstatus);
+	if(!fragstatus)
+		goto programError;
+
+	
+	// -- program ------------------------
+	//  set compiled vert/frag shader & link
+	tmpProg = bgl::blCreateProgramObjectARB();
+	bgl::blAttachObjectARB(tmpProg, tmpVert);
+	bgl::blAttachObjectARB(tmpProg, tmpFrag);
+	bgl::blLinkProgramARB(tmpProg);
+	bgl::blGetObjectParameterivARB(tmpProg, GL_OBJECT_INFO_LOG_LENGTH_ARB, &proglen);
+	bgl::blGetObjectParameterivARB(tmpProg, GL_OBJECT_LINK_STATUS_ARB, &progstatus);
+	if(!progstatus)
+		goto programError;
+
+	if(proglen > 0) {
+		// print success
+		PrintInfo(proglen,tmpProg, &char_len);
+		if(char_len >0)
+			spit(mLog);
+		mError = 0;
 	}
 
 	// set
@@ -161,34 +167,42 @@ bool BL_Shader::LinkProgram()
 	mFrag	= tmpFrag;
 	mOk		= 1;
 	return true;
+
+programError:
+	if(tmpVert) {
+		bgl::blDeleteObjectARB(tmpVert);
+		tmpVert=0;
+	}
+	if(tmpFrag) {
+		bgl::blDeleteObjectARB(tmpFrag);
+		tmpFrag=0;
+	}
+
+	if(tmpProg) {
+		bgl::blDeleteObjectARB(tmpProg);
+		tmpProg=0;
+	}
+
+	mOk	= 0;
+	mUse=0;
+	mError = 1;
+	spit("----------");
+	spit("GLSL Error ");
+	if(mLog)
+		spit(mLog);
+	spit("--------------------");
+	return false;
 #else
 	return false;
 #endif//GL_ARB_shader_objects
 }
 
-bool BL_Shader::PrintInfo(int len, unsigned int handle, const char *type)
+void BL_Shader::PrintInfo(int len, unsigned int handle, int* num)
 {
 #ifdef GL_ARB_shader_objects
-	int numchars=0;
-	char *log = (char*)MEM_mallocN(sizeof(char)*len, "print_log");
-	if(!log) {
-		spit("BL_Shader::PrintInfo() MEM_mallocN failed");
-		return false;
-	}
-	glGetInfoLogARB(handle, len, &numchars, log);
-	
-	if(numchars >0){
-		spit(type);
-		spit(log);
-		MEM_freeN(log);
-		log=0;
-		return false;
-	}
-	MEM_freeN(log);
-	log=0;
-	return true;
-#else
-	return false
+	mLog = (char*)MEM_mallocN(sizeof(char)*len, "print_log");
+	//MT_assert(mLog, "Failed to create memory");
+	bgl::blGetInfoLogARB(handle, len, num, mLog);
 #endif//GL_ARB_shader_objects
 }
 
@@ -234,13 +248,6 @@ const uSampler* BL_Shader::getSampler(int i)
 	return &mSampler[i];
 }
 
-const uBlending *BL_Shader::getBlending( int pass )
-{
-	return &mBlending;
-}
-
-
-
 void BL_Shader::InitializeSampler(
 	int type,
 	int unit,
@@ -287,7 +294,6 @@ PyMethodDef BL_Shader::Methods[] =
 	KX_PYMETHODTABLE( BL_Shader, setSampler  ),
 	KX_PYMETHODTABLE( BL_Shader, setUniformMatrix4 ),
 	KX_PYMETHODTABLE( BL_Shader, setUniformMatrix3 ),
-	// KX_PYMETHODTABLE( BL_Shader, setBlending ),
 
 	{NULL,NULL} //Sentinel
 };
@@ -332,15 +338,14 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProg
 		vertProg = v;
 		fragProg = f;
 		if( LinkProgram() ) {
-			glUseProgramObjectARB( mShader );
+			bgl::blUseProgramObjectARB( mShader );
 			mUse = apply!=0;
 			Py_Return;
 		}
 		vertProg = 0;
 		fragProg = 0;
 		mUse = 0;
-		glUseProgramObjectARB( 0 );
-		PyErr_Format(PyExc_ValueError, "GLSL Error");
+		Py_Return;
 	}
 	return NULL;
 #else
@@ -352,9 +357,9 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProg
 KX_PYMETHODDEF_DOC( BL_Shader, delSource, "delSource( )" )
 {
 #ifdef GL_ARB_shader_objects
-	glDeleteObjectARB(mShader);
-	glDeleteObjectARB(mFrag);
-	glDeleteObjectARB(mVert);
+	bgl::blDeleteObjectARB(mShader);
+	bgl::blDeleteObjectARB(mFrag);
+	bgl::blDeleteObjectARB(mVert);
 	mShader		= 0;
 	mFrag		= 0;
 	mVert		= 0;
@@ -362,13 +367,12 @@ KX_PYMETHODDEF_DOC( BL_Shader, delSource, "delSource( )" )
 	fragProg	= 0;
 	mOk			= 0;
 	mUse		= 0;
-	glUseProgramObjectARB(0);
+	bgl::blUseProgramObjectARB(0);
 #endif
 	Py_Return;
 
 }
 
-
 KX_PYMETHODDEF_DOC( BL_Shader, isValid, "isValid()" )
 {
 	return PyInt_FromLong( ( mShader !=0 &&  mOk ) );
@@ -384,21 +388,22 @@ KX_PYMETHODDEF_DOC( BL_Shader, getFragmentProg ,"getFragmentProg( )" )
 	return PyString_FromString(fragProg?fragProg:"");
 }
 
-
 KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()")
 {
 #ifdef GL_ARB_shader_objects
-	if(mShader==0)
-	{
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+
+	if(mShader==0) {
 		PyErr_Format(PyExc_TypeError, "invalid shader object");
 		return NULL;
 	}
-
 	int stat = 0;
-	glValidateProgramARB(mShader);
-	glGetObjectParameterivARB(mShader, GL_OBJECT_VALIDATE_STATUS_ARB, &stat);
-
-	return PyInt_FromLong((stat!=0));
+	bgl::blValidateProgramARB(mShader);
+	bgl::blGetObjectParameterivARB(mShader, GL_OBJECT_VALIDATE_STATUS_ARB, &stat);
+	return PyInt_FromLong(0);
 #else
 	Py_Return;
 #endif//GL_ARB_shader_objects
@@ -408,6 +413,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()")
 KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+
 	char *uniform="";
 	int index=-1;
 	if(PyArg_ParseTuple(args, "si", &uniform, &index)) 
@@ -417,7 +427,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader, uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader, uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
@@ -446,7 +456,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setNumberOfPasses, "setNumberOfPasses( max-pass )
 	if(!PyArg_ParseTuple(args, "i", &pass))
 		return NULL;
 
-	mPass = pass;
+	mPass = 1;
 	Py_Return;
 }
 
@@ -454,6 +464,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setNumberOfPasses, "setNumberOfPasses( max-pass )
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+
 	char *uniform="";
 	float value=0;
 	if(PyArg_ParseTuple(args, "sf", &uniform, &value ))
@@ -463,15 +478,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader, uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader, uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB( mShader );
-			glUniform1fARB( loc, value );
+			bgl::blUseProgramObjectARB( mShader );
+			bgl::blUniform1fARB( loc, value );
 			Py_Return;
 		}
 
@@ -486,6 +501,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	float array[2]={ 0,0 };
 	if(PyArg_ParseTuple(args, "sff", &uniform, &array[0],&array[1] ))
@@ -495,15 +514,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)")
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB( mShader );
-			glUniform2fARB(loc, array[0],array[1] );
+			bgl::blUseProgramObjectARB( mShader );
+			bgl::blUniform2fARB(loc, array[0],array[1] );
 			Py_Return;
 		}
 
@@ -518,6 +537,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)")
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	float array[3]={0,0,0};
 	if(PyArg_ParseTuple(args, "sfff", &uniform, &array[0],&array[1],&array[2]))
@@ -527,15 +550,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB(mShader);
-			glUniform3fARB(loc, array[0],array[1],array[2]);
+			bgl::blUseProgramObjectARB(mShader);
+			bgl::blUniform3fARB(loc, array[0],array[1],array[2]);
 			Py_Return;
 		}
 
@@ -550,6 +573,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) ")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	float array[4]={0,0,0,0};
 	if(PyArg_ParseTuple(args, "sffff", &uniform, &array[0],&array[1],&array[2], &array[3]))
@@ -559,15 +586,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) "
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB(mShader);
-			glUniform4fARB(loc, array[0],array[1],array[2], array[3]);
+			bgl::blUseProgramObjectARB(mShader);
+			bgl::blUniform4fARB(loc, array[0],array[1],array[2], array[3]);
 			Py_Return;
 		}
 	}
@@ -581,6 +608,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) "
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	int value=0;
 	if(PyArg_ParseTuple(args, "si", &uniform, &value ))
@@ -590,15 +621,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader, uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader, uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB( mShader );
-			glUniform1iARB( loc, value );
+			bgl::blUseProgramObjectARB( mShader );
+			bgl::blUniform1iARB( loc, value );
 			Py_Return;
 		}
 	}
@@ -612,6 +643,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	int array[2]={ 0,0 };
 	if(PyArg_ParseTuple(args, "sii", &uniform, &array[0],&array[1] ))
@@ -621,15 +656,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)")
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB( mShader );
-			glUniform2iARB(loc, array[0],array[1] );
+			bgl::blUseProgramObjectARB( mShader );
+			bgl::blUniform2iARB(loc, array[0],array[1] );
 			Py_Return;
 		}
 	}
@@ -643,6 +678,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)")
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	int array[3]={0,0,0};
 	if(PyArg_ParseTuple(args, "siii", &uniform, &array[0],&array[1],&array[2]))
@@ -652,15 +691,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB(mShader);
-			glUniform3iARB(loc, array[0],array[1],array[2]);
+			bgl::blUseProgramObjectARB(mShader);
+			bgl::blUniform3iARB(loc, array[0],array[1],array[2]);
 			Py_Return;
 		}
 	}
@@ -673,6 +712,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
 KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) ")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char *uniform="";
 	int array[4]={0,0,0, 0};
 	if(PyArg_ParseTuple(args, "siiii", &uniform, &array[0],&array[1],&array[2], &array[3] ))
@@ -682,15 +725,15 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) "
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
 			Py_Return;
 		}else
 		{
-			glUseProgramObjectARB(mShader);
-			glUniform4iARB(loc, array[0],array[1],array[2], array[3]);
+			bgl::blUseProgramObjectARB(mShader);
+			bgl::blUniform4iARB(loc, array[0],array[1],array[2], array[3]);
 			Py_Return;
 		}
 	}
@@ -703,6 +746,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) "
 KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or list3 or list4) )")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char*uniform = "";
 	PyObject *listPtr =0;
 	float array_data[4] = {0.f,0.f,0.f,0.f};
@@ -714,7 +761,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
@@ -735,20 +782,20 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
 				{
 				case 2:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform2fARB(loc, array_data[0],array_data[1]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform2fARB(loc, array_data[0],array_data[1]);
 						Py_Return;
 					} break;
 				case 3:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform3fARB(loc, array_data[0],array_data[1], array_data[2]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform3fARB(loc, array_data[0],array_data[1], array_data[2]);
 						Py_Return;
 					}break;
 				case 4:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform4fARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform4fARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]);
 						Py_Return;
 					}break;
 				default:
@@ -770,6 +817,10 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
 KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3 or list4) )")
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
 	char*uniform = "";
 	PyObject *listPtr =0;
 	int array_data[4] = {0,0,0,0};
@@ -781,7 +832,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
@@ -802,20 +853,20 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3
 				{
 				case 2:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform2iARB(loc, array_data[0],array_data[1]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform2iARB(loc, array_data[0],array_data[1]);
 						Py_Return;
 					} break;
 				case 3:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform3iARB(loc, array_data[0],array_data[1], array_data[2]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform3iARB(loc, array_data[0],array_data[1], array_data[2]);
 						Py_Return;
 					}break;
 				case 4:
 					{
-						glUseProgramObjectARB(mShader);
-						glUniform4iARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]);
+						bgl::blUseProgramObjectARB(mShader);
+						bgl::blUniform4iARB(loc, array_data[0],array_data[1], array_data[2], array_data[3]);
 						Py_Return;
 					}break;
 				default:
@@ -838,6 +889,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
 "setUniformMatrix4(uniform-name, mat-4x4, transpose(row-major=true, col-major=false)" )
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+
 	float matr[16] = {
 		1,0,0,0,
 		0,1,0,0,
@@ -855,7 +911,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
@@ -868,8 +924,8 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
 				if (PyMatTo(matrix, mat))
 				{
 					mat.getValue(matr);
-					glUseProgramObjectARB(mShader);
-					glUniformMatrix4fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr);
+					bgl::blUseProgramObjectARB(mShader);
+					bgl::blUniformMatrix4fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr);
 					Py_Return;
 				}
 			}
@@ -886,6 +942,11 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
 "setUniformMatrix3(uniform-name, list[3x3], transpose(row-major=true, col-major=false)" )
 {
 #ifdef GL_ARB_shader_objects
+	if(mError) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+
 	float matr[9] = {
 		1,0,0,
 		0,1,0,
@@ -902,7 +963,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
 			PyErr_Format(PyExc_ValueError, "invalid shader object");
 			return NULL;
 		}
-		int loc= glGetUniformLocationARB(mShader , uniform);
+		int loc= bgl::blGetUniformLocationARB(mShader , uniform);
 		if( loc==-1 )
 		{
 			spit("Invalid uniform value: " << uniform << ".");
@@ -915,8 +976,8 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
 				if (PyMatTo(matrix, mat))
 				{
 					mat.getValue(matr);
-					glUseProgramObjectARB(mShader);
-					glUniformMatrix3fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr);
+					bgl::blUseProgramObjectARB(mShader);
+					bgl::blUniformMatrix3fvARB(loc, 1, (transp!=0)?GL_TRUE:GL_FALSE, matr);
 					Py_Return;
 				}
 			}
@@ -927,16 +988,3 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
 	Py_Return;
 #endif//GL_ARB_shader_objects
 }
-
-
-KX_PYMETHODDEF_DOC( BL_Shader, setBlending, "setBlending(src, dest)" )
-{
-	int src, dest;
-	if(PyArg_ParseTuple(args, "ii", &src, &dest))
-	{
-		mBlending.src = src;
-		mBlending.dest = dest;
-		Py_Return;
-	}
-	return NULL;
-}
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h
index 2e08eeb0d70d00551908636dd8a53b9474a25b49..25db6a0b9f4ac0e9304c59a6766a18eb800b9272 100644
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@ -18,17 +18,6 @@ typedef struct uSampler
 #define SAMP_2D		1
 #define SAMP_CUBE	2
 
-
-// -----------------------------------
-typedef struct uBlending
-{
-	unsigned int pass;
-	int src;	// GL_ blend func values
-	int dest;
-	float const_color[4];
-}uBlending;
-// -----------------------------------
-
 // ----------------
 class BL_Shader : public PyObjectPlus
 {
@@ -41,14 +30,15 @@ private:
 	bool			mOk;
 	bool			mUse;
 	uSampler		mSampler[MAXTEX];
-	uBlending		mBlending;
 	char*			vertProg;
 	char*			fragProg;
-	bool			LinkProgram();
-	bool			PrintInfo(int len, unsigned int handle, const char *type);
+	bool			mError;
+	char*			mLog;
 
+	bool			LinkProgram();
+	void			PrintInfo( int len, unsigned int handle,int *num);
 public:
-	BL_Shader(int n, PyTypeObject *T=&Type);
+	BL_Shader(PyTypeObject *T=&Type);
 	virtual ~BL_Shader();
 
 	char*		GetVertPtr();
@@ -59,11 +49,10 @@ public:
 	// ---
 	int getNumPass()	{return mPass;}
 	bool use()			{return mUse;}
-
+	bool GetError()		{return mError;}
 	// ---
 	// access
 	const uSampler*		getSampler(int i);
-	const uBlending*	getBlending( int pass );
 	const bool			Ok()const;
 
 	unsigned int		GetProg();
@@ -108,8 +97,6 @@ public:
 	// these come from within the material buttons
 	// sampler2d/samplerCube work
 	KX_PYMETHOD_DOC( BL_Shader, setSampler);
-	// user blending funcs
-	KX_PYMETHOD_DOC( BL_Shader, setBlending );
 };
 
 
diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp
index 0ed7a9c33cf0161e2a1f715e54e2500d7c74f6cc..2b01d3df5601071741d11f6706dca6c47e57512e 100644
--- a/source/gameengine/Ketsji/BL_Texture.cpp
+++ b/source/gameengine/Ketsji/BL_Texture.cpp
@@ -3,6 +3,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
@@ -20,7 +21,6 @@
 #include "DNA_image_types.h"
 #include "IMB_imbuf_types.h"
 #include "BKE_image.h"
-//#include "IMB_imbuf.h"
 #include "BLI_blenlib.h"
 
 #include "RAS_GLExtensionManager.h"
@@ -35,6 +35,7 @@ using namespace bgl;
 extern "C" {
 	// envmaps
 	#include "IMB_imbuf.h"
+	
 	void my_envmap_split_ima(EnvMap *env);
 	void my_free_envmapdata(EnvMap *env);
 }
@@ -345,18 +346,18 @@ void my_envmap_split_ima(EnvMap *env)
 			ima->ok= 1;
 			env->cube[part]= ima;
 		}
-		IMB_rectcpy(env->cube[0]->ibuf, env->ima->ibuf, 
-			0, 0, 0, 0, dx, dx);
-		IMB_rectcpy(env->cube[1]->ibuf, env->ima->ibuf, 
-			0, 0, dx, 0, dx, dx);
-		IMB_rectcpy(env->cube[2]->ibuf, env->ima->ibuf, 
-			0, 0, 2*dx, 0, dx, dx);
-		IMB_rectcpy(env->cube[3]->ibuf, env->ima->ibuf, 
-			0, 0, 0, dx, dx, dx);
-		IMB_rectcpy(env->cube[4]->ibuf, env->ima->ibuf, 
-			0, 0, dx, dx, dx, dx);
-		IMB_rectcpy(env->cube[5]->ibuf, env->ima->ibuf, 
-			0, 0, 2*dx, dx, dx, dx);
+		IMB_rectop(env->cube[0]->ibuf, env->ima->ibuf, 
+			0, 0, 0, 0, dx, dx, IMB_rectcpy, 0);
+		IMB_rectop(env->cube[1]->ibuf, env->ima->ibuf, 
+			0, 0, dx, 0, dx, dx, IMB_rectcpy, 0);
+		IMB_rectop(env->cube[2]->ibuf, env->ima->ibuf, 
+			0, 0, 2*dx, 0, dx, dx, IMB_rectcpy, 0);
+		IMB_rectop(env->cube[3]->ibuf, env->ima->ibuf, 
+			0, 0, 0, dx, dx, dx, IMB_rectcpy, 0);
+		IMB_rectop(env->cube[4]->ibuf, env->ima->ibuf, 
+			0, 0, dx, dx, dx, dx, IMB_rectcpy, 0);
+		IMB_rectop(env->cube[5]->ibuf, env->ima->ibuf, 
+			0, 0, 2*dx, dx, dx, dx, IMB_rectcpy, 0);
 		env->ok= 2;
 	}
 }
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index ebf040d3c5d3c8e46820982dbb13aa0bd02e851e..429a9ea7a6576b53b2021798dd53a3c49157180f 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -10,6 +10,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
@@ -22,6 +23,7 @@
 #include "KX_Scene.h"
 #include "KX_Light.h"
 #include "KX_GameObject.h"
+#include "KX_MeshProxy.h"
 
 #include "MT_Vector3.h"
 #include "MT_Vector4.h"
@@ -75,7 +77,10 @@ KX_BlenderMaterial::KX_BlenderMaterial(
 	mMaterial(data),
 	mShader(0),
 	mScene(scene),
+	mUserDefBlend(0),
+	mModified(0),
 	mPass(0)
+
 {
 	///RAS_EXT_support._ARB_multitexture == true if were here
 
@@ -101,8 +106,8 @@ KX_BlenderMaterial::KX_BlenderMaterial(
 	// prevent material bleeding
 	for(int i=0; i<mMaterial->num_enabled; i++) {
 		m_multimode	+=
-			(mMaterial->flag[i]	+
-			 mMaterial->blend_mode[i]
+			( mMaterial->flag[i]	+
+			  mMaterial->blend_mode[i]
 			 );
 	}
 	m_multimode += mMaterial->IdMode+mMaterial->ras_mode;
@@ -132,14 +137,9 @@ void KX_BlenderMaterial::OnConstruction()
 	if(!gTextureDict)
 		gTextureDict = PyDict_New();
 */
-	#ifdef GL_ARB_shader_objects
-	if( RAS_EXT_support._ARB_shader_objects )
-		mShader = new BL_Shader( mMaterial->num_enabled );
-	#endif
-
 	int i;
 	for(i=0; i<mMaterial->num_enabled; i++) {
-	glActiveTextureARB(GL_TEXTURE0_ARB+i);
+	bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i);
 		#ifdef GL_ARB_texture_cube_map
 		if( mMaterial->mapping[i].mapping & USEENV ) {
 			if(!RAS_EXT_support._ARB_texture_cube_map) {
@@ -149,9 +149,6 @@ void KX_BlenderMaterial::OnConstruction()
 			if(!mTextures[i].InitCubeMap( mMaterial->cubemap[i] ) )
 				spit("unable to initialize image("<<i<<") in "<< 
 						mMaterial->matname<< ", image will not be available");
-
-			if( RAS_EXT_support._ARB_shader_objects )
-				mShader->InitializeSampler(SAMP_CUBE, i, 0, mTextures[i]);
 		} 
 	
 		else {
@@ -160,9 +157,6 @@ void KX_BlenderMaterial::OnConstruction()
 				if( ! mTextures[i].InitFromImage(mMaterial->img[i], (mMaterial->flag[i] &MIPMAP)!=0 ))
 					spit("unable to initialize image("<<i<<") in "<< 
 						 mMaterial->matname<< ", image will not be available");
-			
-				if( RAS_EXT_support._ARB_shader_objects )
-					mShader->InitializeSampler(SAMP_2D, i, 0, mTextures[i]);
 			}
 		#ifdef GL_ARB_texture_cube_map
 		}
@@ -170,24 +164,27 @@ void KX_BlenderMaterial::OnConstruction()
 		/*PyDict_SetItemString(gTextureDict, mTextures[i].GetName().Ptr(), PyInt_FromLong(mTextures[i]));*/
 	}
 	#endif//GL_ARB_multitexture
+
+	mBlendFunc[0] =0;
+	mBlendFunc[1] =0;
 }
 
 void KX_BlenderMaterial::OnExit()
 {
 	#ifdef GL_ARB_multitexture
-
+	
 	#ifdef GL_ARB_shader_objects
 	if( RAS_EXT_support._ARB_shader_objects && mShader ) {
 		 //note, the shader here is allocated, per unique material
 		 //and this function is called per face
-		glUseProgramObjectARB(0);
+		bgl::blUseProgramObjectARB(0);
 		delete mShader;
 		mShader = 0;
 	}
 	#endif //GL_ARB_shader_objects
 
 	for(int i=0; i<mMaterial->num_enabled; i++) {
-		glActiveTextureARB(GL_TEXTURE0_ARB+i);
+		bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i);
 
 		mTextures[i].DeleteTex();
 
@@ -213,7 +210,7 @@ void KX_BlenderMaterial::OnExit()
 		gTextureDict = 0;
 	}*/
 
-	glActiveTextureARB(GL_TEXTURE0_ARB);
+	bgl::blActiveTextureARB(GL_TEXTURE0_ARB);
 
 	#ifdef GL_ARB_texture_cube_map
 	if(RAS_EXT_support._ARB_texture_cube_map)
@@ -238,7 +235,7 @@ void KX_BlenderMaterial::DisableTexData()
 	#ifdef GL_ARB_multitexture
 	int i=(MAXTEX>=bgl::max_texture_units?bgl::max_texture_units:MAXTEX)-1;
 	for(; i>=0; i--) {
-		glActiveTextureARB(GL_TEXTURE0_ARB+i);
+		bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i);
 		glMatrixMode(GL_TEXTURE);
 		glLoadIdentity();
 		glMatrixMode(GL_MODELVIEW);
@@ -268,13 +265,13 @@ void KX_BlenderMaterial::setShaderData( bool enable )
 	int i;
 	if( !enable || !mShader->Ok() ) {
 		// frame cleanup.
-		glUseProgramObjectARB( 0 );
+		bgl::blUseProgramObjectARB( 0 );
 		DisableTexData();
 		return;
 	}
 
 	DisableTexData();
-	glUseProgramObjectARB( mShader->GetProg() );
+	bgl::blUseProgramObjectARB( mShader->GetProg() );
 	
 	// for each enabled unit
 	for(i=0; i<mMaterial->num_enabled; i++) {
@@ -282,7 +279,7 @@ void KX_BlenderMaterial::setShaderData( bool enable )
 		const uSampler *samp = mShader->getSampler(i);
 		if( samp->loc == -1 || samp->glTexture == 0 ) continue;
 
-		glActiveTextureARB(GL_TEXTURE0_ARB+i);
+		bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i);
 
 		#ifdef GL_ARB_texture_cube_map
 		if( mMaterial->mapping[i].mapping &USEENV ) {
@@ -297,9 +294,17 @@ void KX_BlenderMaterial::setShaderData( bool enable )
 		}
 		#endif//GL_ARB_texture_cube_map
 		// use a sampler
-		glUniform1iARB(samp->loc, i );
+		bgl::blUniform1iARB(samp->loc, i );
+	}
+
+	if(!mUserDefBlend) {
+		setDefaultBlending();
+	}else
+	{
+		glEnable(GL_BLEND);
+		// tested to be valid enums
+		glBlendFunc(mBlendFunc[0], mBlendFunc[1]);
 	}
-	glDisable(GL_BLEND);
 
 	#endif//GL_ARB_shader_objects
 	#endif//GL_ARB_multitexture
@@ -314,7 +319,7 @@ void KX_BlenderMaterial::setTexData( bool enable )
 	#ifdef GL_ARB_shader_objects
 	if(RAS_EXT_support._ARB_shader_objects) {
 		// switch back to fixed func
-		glUseProgramObjectARB( 0 );
+		bgl::blUseProgramObjectARB( 0 );
 	}
 	#endif//GL_ARB_shader_objects
 
@@ -336,7 +341,7 @@ void KX_BlenderMaterial::setTexData( bool enable )
 		// no material connected to the object
 		if( mTextures[0] ) {
 			if( !mTextures[0].Ok() ) return;
-			glActiveTextureARB(GL_TEXTURE0_ARB);
+			bgl::blActiveTextureARB(GL_TEXTURE0_ARB);
 			glBindTexture( GL_TEXTURE_2D, mTextures[0] );	
 			glEnable(GL_TEXTURE_2D);
 			setTextureEnvironment( -1 ); // modulate
@@ -352,7 +357,7 @@ void KX_BlenderMaterial::setTexData( bool enable )
 	for(i=0; (i<mMaterial->num_enabled); i++) {
 		if( !mTextures[i].Ok() ) continue;
 
-		glActiveTextureARB(GL_TEXTURE0_ARB+i);
+		bgl::blActiveTextureARB(GL_TEXTURE0_ARB+i);
 
 		#ifdef GL_ARB_texture_cube_map
 		// use environment maps
@@ -388,15 +393,16 @@ void KX_BlenderMaterial::setTexData( bool enable )
 		#ifdef GL_ARB_texture_cube_map
 		}
 		#endif//GL_ARB_texture_cube_map
-
-		// if either unit has set blending
-		// and its the last pass
-		lastblend += setBlending( i ); // dry run
-		if(lastblend >0 && i==mMaterial->num_enabled-1)
-			setBlending( i, true );
-		else if(lastblend == 0 && i==mMaterial->num_enabled-1)
-			glDisable(GL_BLEND);
 	}
+	if(!mUserDefBlend) {
+		setDefaultBlending();
+	}else
+	{
+		glEnable(GL_BLEND);
+		// tested to be valid enums
+		glBlendFunc(mBlendFunc[0], mBlendFunc[1]);
+	}
+
 	#endif//GL_ARB_multitexture
 }
 
@@ -548,7 +554,7 @@ KX_BlenderMaterial::Activate(
 			return dopass;
 		}
 		else {
-			glUseProgramObjectARB( 0 );
+			bgl::blUseProgramObjectARB( 0 );
 			mPass = 0;
 			dopass = false;
 			return dopass;
@@ -587,9 +593,8 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
 
 	GLfloat blend_operand		= GL_SRC_COLOR;
-	GLfloat blend_operand_prev	= GL_SRC_COLOR;
+	GLfloat blend_operand_prev  = GL_SRC_COLOR;
 
-	// all sources here are RGB by default
 	GLenum combiner = GL_COMBINE_RGB_ARB;
 	GLenum source0 = GL_SOURCE0_RGB_ARB;
 	GLenum source1 = GL_SOURCE1_RGB_ARB;
@@ -597,6 +602,7 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 	GLenum op0 = GL_OPERAND0_RGB_ARB;
 	GLenum op1 = GL_OPERAND1_RGB_ARB;
 	GLenum op2 = GL_OPERAND2_RGB_ARB;
+	GLfloat alphaOp = GL_SRC_ALPHA;
 
 	// switch to alpha combiners
 	if( (mMaterial->flag[textureIndex] &TEXALPHA) ) {
@@ -608,7 +614,6 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 		op1 = GL_OPERAND1_ALPHA_ARB;
 		op2 = GL_OPERAND2_ALPHA_ARB;
 		blend_operand = GL_SRC_ALPHA;
-		blend_operand_prev = GL_SRC_ALPHA;
 		
 		// invert
 		if(mMaterial->flag[textureIndex] &TEXNEG) {
@@ -618,27 +623,42 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 	}
 	else {
 		if(mMaterial->flag[textureIndex] &TEXNEG) {
-			blend_operand_prev = GL_ONE_MINUS_SRC_COLOR;
+			blend_operand_prev=GL_ONE_MINUS_SRC_COLOR;
 			blend_operand = GL_ONE_MINUS_SRC_COLOR;
 		}
 	}
-	// on Texture0 GL_PREVIOUS_ARB is the primary color
-	// on Texture1 GL_PREVIOUS_ARB is Texture0 env
+	bool using_alpha = false;
+
+	if(mMaterial->flag[textureIndex] &USEALPHA){
+		alphaOp = GL_ONE_MINUS_SRC_ALPHA;
+		using_alpha=true;
+	}
+	else if(mMaterial->flag[textureIndex] &USENEGALPHA){
+		alphaOp = GL_SRC_ALPHA;
+		using_alpha = true;
+	}
+
 	switch( mMaterial->blend_mode[textureIndex] ) {
 		case BLEND_MIX:
 			{
 				// ------------------------------
-				GLfloat base_col[4];
-				base_col[0]	 = base_col[1]  = base_col[2]  = 0.f;
-				base_col[3]	 = 1.f-mMaterial->color_blend[textureIndex];
-				glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,base_col );
+				if(!using_alpha) {
+					GLfloat base_col[4];
+					base_col[0]	 = base_col[1]  = base_col[2]  = 0.f;
+					base_col[3]	 = 1.f-mMaterial->color_blend[textureIndex];
+					glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR,base_col );
+				}
 				glTexEnvf(	GL_TEXTURE_ENV, combiner,	GL_INTERPOLATE_ARB);
 				glTexEnvf(	GL_TEXTURE_ENV, source0,	GL_PREVIOUS_ARB);
 				glTexEnvf(	GL_TEXTURE_ENV, op0,		blend_operand_prev );
 				glTexEnvf(	GL_TEXTURE_ENV, source1,	GL_TEXTURE );
 				glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
-				glTexEnvf(	GL_TEXTURE_ENV, source2,	GL_CONSTANT_ARB );
-				glTexEnvf(	GL_TEXTURE_ENV, op2,		GL_SRC_ALPHA);
+				if(!using_alpha)
+					glTexEnvf(	GL_TEXTURE_ENV, source2,	GL_CONSTANT_ARB );
+				else
+					glTexEnvf(	GL_TEXTURE_ENV, source2,	GL_TEXTURE );
+
+				glTexEnvf(	GL_TEXTURE_ENV, op2,		alphaOp);
 			}break;
 		case BLEND_MUL: 
 			{
@@ -647,7 +667,10 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 				glTexEnvf(	GL_TEXTURE_ENV, source0,	GL_PREVIOUS_ARB);
 				glTexEnvf(	GL_TEXTURE_ENV, op0,		blend_operand_prev);
 				glTexEnvf(	GL_TEXTURE_ENV, source1,	GL_TEXTURE );
-				glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
+				if(using_alpha)
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		alphaOp);
+				else
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
 			}break;
 		case BLEND_ADD: 
 			{
@@ -656,7 +679,10 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 				glTexEnvf(	GL_TEXTURE_ENV, source0,	GL_PREVIOUS_ARB );
 				glTexEnvf(	GL_TEXTURE_ENV, op0,		blend_operand_prev );
 				glTexEnvf(	GL_TEXTURE_ENV, source1,	GL_TEXTURE );
-				glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand );
+				if(using_alpha)
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		alphaOp);
+				else
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
 			}break;
 		case BLEND_SUB: 
 			{
@@ -674,37 +700,16 @@ void KX_BlenderMaterial::setTextureEnvironment( int textureIndex )
 				glTexEnvf(	GL_TEXTURE_ENV, source0,	GL_PREVIOUS_ARB );
 				glTexEnvf(	GL_TEXTURE_ENV, op0,		blend_operand_prev );
 				glTexEnvf(	GL_TEXTURE_ENV, source1,	GL_TEXTURE );
-				glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
+				if(using_alpha)
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		alphaOp);
+				else
+					glTexEnvf(	GL_TEXTURE_ENV, op1,		blend_operand);
 			} break;
 	}
+	glTexEnvf(	GL_TEXTURE_ENV, GL_RGB_SCALE_ARB,	1.0);
 #endif //!GL_ARB_texture_env_combine
 }
 
-bool KX_BlenderMaterial::setBlending( int ind, bool enable) 
-{
-	if(!enable) {
-		if(mMaterial->flag[ind] &CALCALPHA )	return true;
-		else if(mMaterial->flag[ind] &USEALPHA )	return true;
-		return false;
-	}
-	else {
-		// additive
-		if(mMaterial->flag[ind] &CALCALPHA ) {
-			glEnable(GL_BLEND);
-			glBlendFunc(GL_ONE, GL_ONE);
-			return true;
-		}
-
-		// use alpha channel
-		else if(mMaterial->flag[ind] &USEALPHA ) {
-			glEnable(GL_BLEND);
-			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-			return true;
-		}
-	}
-	return false;
-}
-
 bool KX_BlenderMaterial::setDefaultBlending()
 {
 	if( mMaterial->transp &TF_ADD) {
@@ -873,6 +878,7 @@ PyMethodDef KX_BlenderMaterial::Methods[] =
 {
 	KX_PYMETHODTABLE( KX_BlenderMaterial, getShader ),
 	KX_PYMETHODTABLE( KX_BlenderMaterial, getMaterialIndex ),
+	KX_PYMETHODTABLE( KX_BlenderMaterial, setBlending ),
 //	KX_PYMETHODTABLE( KX_BlenderMaterial, getTexture ),
 //	KX_PYMETHODTABLE( KX_BlenderMaterial, setTexture ),
 
@@ -914,20 +920,78 @@ int KX_BlenderMaterial::_setattr(const STR_String& attr, PyObject *pyvalue)
 	return PyObjectPlus::_setattr(attr, pyvalue);
 }
 
+
 KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
 {
-	#ifdef GL_ARB_shader_objects
-	if(!RAS_EXT_support._ARB_shader_objects) {
-		PyErr_Format(PyExc_SystemError, "GLSL not supported");
-		return NULL;
+#ifdef GL_ARB_fragment_shader
+	if( !RAS_EXT_support._ARB_fragment_shader) {
+		if(!mModified)
+			spit("Fragment shaders not supported");
+	
+		mModified = true;
+		Py_Return;
+	}
+#endif
+
+#ifdef GL_ARB_vertex_shader
+	if( !RAS_EXT_support._ARB_vertex_shader) {
+		if(!mModified)
+			spit("Vertex shaders not supported");
+
+		mModified = true;
+		Py_Return;
+	}
+#endif
+
+#ifdef GL_ARB_shader_objects
+	if(!RAS_EXT_support._ARB_shader_objects)  {
+		if(!mModified)
+			spit("GLSL not supported");
+		mModified = true;
+		Py_Return;
 	}
 	else {
-		Py_INCREF(mShader);
-		return mShader;
+		// returns Py_None on error
+		// the calling script will need to check
+
+		if(!mShader && !mModified) {
+			mShader = new BL_Shader();
+			for(int i= 0; i<mMaterial->num_enabled; i++) {
+				if(mMaterial->mapping[i].mapping & USEENV )
+					mShader->InitializeSampler(SAMP_CUBE, i, 0, mTextures[i]);
+				else
+					mShader->InitializeSampler(SAMP_2D, i, 0, mTextures[i]);
+			}
+			mModified = true;
+		}
+
+		if(mShader && !mShader->GetError()) {
+			Py_INCREF(mShader);
+			return mShader;
+		}else
+		{
+			// decref all references to the object
+			// then delete it!
+			// We will then go back to fixed functionality
+			// for this material
+			if(mShader) {
+				if(mShader->ob_refcnt > 1) {
+					Py_DECREF(mShader);
+				}
+				else {
+					delete mShader;
+					mShader=0;
+				}
+			}
+		}
+		Py_Return;
 	}
-	#else
+	PyErr_Format(PyExc_ValueError, "GLSL Error");
+	return NULL;
+
+#else
 	Py_Return;
-	#endif//GL_ARB_shader_objects
+#endif//GL_ARB_shader_objects
 }
 
 KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getMaterialIndex, "getMaterialIndex()")
@@ -947,3 +1011,45 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setTexture , "setTexture( index, tex)")
 	return NULL;
 }
 
+static unsigned int GL_array[11] = {
+	GL_ZERO,
+	GL_ONE,
+	GL_SRC_COLOR,
+	GL_ONE_MINUS_SRC_COLOR,
+	GL_DST_COLOR,
+	GL_ONE_MINUS_DST_COLOR,
+	GL_SRC_ALPHA,
+	GL_ONE_MINUS_SRC_ALPHA,
+	GL_DST_ALPHA,
+	GL_ONE_MINUS_DST_ALPHA,
+	GL_SRC_ALPHA_SATURATE
+};
+
+KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.src, GameLogic.dest)")
+{
+	unsigned int b[2];
+	if(PyArg_ParseTuple(args, "ii", &b[0], &b[1]))
+	{
+		bool value_found[2] = {false, false};
+		for(int i=0; i<11; i++)
+		{
+			if(b[0] == GL_array[i]) {
+				value_found[0] = true;
+				mBlendFunc[0] = b[0];
+			}
+			if(b[1] == GL_array[i]) {
+				value_found[1] = true;
+				mBlendFunc[1] = b[1];
+			}
+			if(value_found[0] && value_found[1]) break;
+		}
+		if(!value_found[0] || !value_found[1]) {
+			PyErr_Format(PyExc_ValueError, "invalid enum.");
+			return NULL;
+		}
+		mUserDefBlend = true;
+		Py_Return;
+	}
+	return NULL;
+}
+
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 573481448908a495a6af5cc14d8eccf8736980f7..a250dcf81c4de11aa8adc942f4c8470666cd21e1 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -72,6 +72,7 @@ public:
 	KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture );
 	KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture );
 
+	KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending );
 	// --------------------------------
 	// pre calculate to avoid pops/lag at startup
 	virtual void OnConstruction( );
@@ -82,6 +83,10 @@ private:
 	KX_Scene*		mScene;
 	BL_Texture		mTextures[MAXTEX];		// texture array
 	
+	bool			mUserDefBlend;
+	unsigned int	mBlendFunc[2];
+	bool			mModified;
+
 	// message centers
 	void	setTexData( bool enable );
 	void	setShaderData( bool enable );
@@ -90,7 +95,6 @@ private:
 	void	setEnvMap( bool val, bool cube=false);
 	void	setTexMatrixData(int i);
 	bool	setDefaultBlending();
-	bool	setBlending( int ind, bool enable=false );
 	void	setObjectMatrixData(int i);
 
 	// cleanup stuff
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 022c5d0c3ee1af4cb561ef131a1ea09964f93aa4..41bece58e84971285709dcc81d7c92d954fedc45 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -127,8 +127,10 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
 	
 	m_firstframe(true),
 	
-	m_previoustime(0.0),
-	m_deltatime(0.0),
+	m_frameTime(0.f),
+	m_clockTime(0.f),
+	m_previousClockTime(0.f),
+
 
 	m_exitcode(KX_EXIT_REQUEST_NO_REQUEST),
 	m_exitstring(""),
@@ -258,13 +260,19 @@ void KX_KetsjiEngine::SetSceneConverter(KX_ISceneConverter* sceneconverter)
  */
 void KX_KetsjiEngine::StartEngine()
 {
-	m_previoustime = m_kxsystem->GetTimeInSeconds();
+	m_clockTime = m_kxsystem->GetTimeInSeconds();
+	m_frameTime = m_kxsystem->GetTimeInSeconds();
+	m_previousClockTime = m_kxsystem->GetTimeInSeconds();
+
 	m_firstframe = true;
 	m_bInitialized = true;
 	m_ticrate = DEFAULT_LOGIC_TIC_RATE;
 	m_currentFrame = 0;
 
-	m_sceneconverter->ResetPhysicsObjectsAnimationIpo();
+	if (m_game2ipo)
+	{
+		m_sceneconverter->ResetPhysicsObjectsAnimationIpo();
+	}
 
 }
 
@@ -317,33 +325,32 @@ void KX_KetsjiEngine::EndFrame()
 
 }
 
-
+#include "PIL_time.h"
 
 void KX_KetsjiEngine::NextFrame()
 {
 	m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true);
-
-	double curtime;
+	
 	if (m_bFixedTime)
-		curtime = m_previoustime + 1.0/m_ticrate;
+		m_clockTime += 1.0/m_ticrate;
 	else
-		curtime = m_kxsystem->GetTimeInSeconds();
-	m_deltatime += curtime - m_previoustime;
-	float	realDeltaTime = curtime - m_previoustime;
-
+		m_clockTime = m_kxsystem->GetTimeInSeconds();
 	
-	double localtime = curtime - m_deltatime;
+	double deltatime = m_clockTime - m_frameTime;
 
 	// Compute the number of logic frames to do each update (fixed tic bricks)
-	int frames = (int) (m_deltatime*m_ticrate);
-	m_deltatime -= double(frames)/m_ticrate;
+	int frames =int(deltatime*m_ticrate);
+	
+//	if (!frames)
+//		PIL_sleep_ms(4);
 	
 	KX_SceneList::iterator sceneit;
 	
 	while (frames)
 	{
 
-		localtime += 1.0/m_ticrate;
+		m_frameTime += 1.0/m_ticrate;
+		
 		for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit)
 		// for each scene, call the proceed functions
 		{
@@ -361,15 +368,15 @@ void KX_KetsjiEngine::NextFrame()
 				// if the scene was suspended recalcutlate the delta tu "curtime"
 				m_suspendedtime = scene->getSuspendedTime();
 				if (scene->getSuspendedTime()!=0.0)
-					scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime());
+					scene->setSuspendedDelta(scene->getSuspendedDelta()+m_clockTime-scene->getSuspendedTime());
 				m_suspendeddelta = scene->getSuspendedDelta();
 
 				
 				m_logger->StartLog(tc_network, m_kxsystem->GetTimeInSeconds(), true);
-				scene->GetNetworkScene()->proceed(localtime);
+				scene->GetNetworkScene()->proceed(m_frameTime);
 	
 				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-				scene->UpdateParents(localtime);
+				scene->UpdateParents(m_frameTime);
 				
 				m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
 				// set Python hooks for each scene
@@ -381,36 +388,39 @@ void KX_KetsjiEngine::NextFrame()
 				// Update scenegraph after physics step. This maps physics calculations
 				// into node positions.		
 				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-				scene->UpdateParents(localtime);
+				scene->UpdateParents(m_frameTime);
 				
 				// Process sensors, and controllers
 				m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
-				scene->LogicBeginFrame(localtime);
+				scene->LogicBeginFrame(m_frameTime);
 	
 				// Scenegraph needs to be updated again, because Logic Controllers 
 				// can affect the local matrices.
 				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-				scene->UpdateParents(localtime);
+				scene->UpdateParents(m_frameTime);
 	
 				// Process actuators
 	
 				// Do some cleanup work for this logic frame
 				m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
-				scene->LogicUpdateFrame(localtime, true);
+				scene->LogicUpdateFrame(m_frameTime, true);
 				scene->LogicEndFrame();
 	
 				// Actuators can affect the scenegraph
 				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-				scene->UpdateParents(localtime);
+				scene->UpdateParents(m_frameTime);
 				
 				m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
 				scene->GetPhysicsEnvironment()->beginFrame();
 		
 				// Perform physics calculations on the scene. This can involve 
 				// many iterations of the physics solver.
-				scene->GetPhysicsEnvironment()->proceedDeltaTime(localtime,realDeltaTime);
-				m_previoustime = curtime;
+				scene->GetPhysicsEnvironment()->proceedDeltaTime(m_frameTime,1.0/m_ticrate);//m_deltatimerealDeltaTime);
 
+				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+				scene->UpdateParents(m_frameTime);
+			
+			
 				if (m_game2ipo)
 				{
 					m_sceneconverter->WritePhysicsObjectToAnimationIpo(m_currentFrame++);
@@ -420,7 +430,7 @@ void KX_KetsjiEngine::NextFrame()
 			} // suspended
 			else
 				if(scene->getSuspendedTime()==0.0)
-					scene->setSuspendedTime(curtime);
+					scene->setSuspendedTime(m_clockTime);
 	
 			DoSound(scene);
 	
@@ -447,55 +457,63 @@ void KX_KetsjiEngine::NextFrame()
 		frames--;
 	}
 
-	// Logic update sub frame: this will let some logic bricks run at the
-	// full frame rate.
-	for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit)
-	// for each scene, call the proceed functions
-	{
-		KX_Scene* scene = *sceneit;
+	bool bUseAsyncLogicBricks= false;
 
-		if (!scene->IsSuspended())
+	if (bUseAsyncLogicBricks)
+	{	
+		// Logic update sub frame: this will let some logic bricks run at the
+		// full frame rate.
+		for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); ++sceneit)
+		// for each scene, call the proceed functions
 		{
-			// if the scene was suspended recalcutlate the delta tu "curtime"
-			m_suspendedtime = scene->getSuspendedTime();
-			if (scene->getSuspendedTime()!=0.0)
-				scene->setSuspendedDelta(scene->getSuspendedDelta()+curtime-scene->getSuspendedTime());
-			m_suspendeddelta = scene->getSuspendedDelta();
-			
-			// set Python hooks for each scene
-			PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment());
-			PHY_SetActiveScene(scene);
-			
-			m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-			scene->UpdateParents(curtime);
-
-			// Perform physics calculations on the scene. This can involve 
-			// many iterations of the physics solver.
-			m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
-			scene->GetPhysicsEnvironment()->proceedDeltaTime(curtime,0.f);
-			// Update scenegraph after physics step. This maps physics calculations
-			// into node positions.		
-			m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-			scene->UpdateParents(curtime);
-			
-			// Do some cleanup work for this logic frame
-			m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
-			scene->LogicUpdateFrame(curtime, false);
+			KX_Scene* scene = *sceneit;
+
+			if (!scene->IsSuspended())
+			{
+				// if the scene was suspended recalcutlate the delta tu "curtime"
+				m_suspendedtime = scene->getSuspendedTime();
+				if (scene->getSuspendedTime()!=0.0)
+					scene->setSuspendedDelta(scene->getSuspendedDelta()+m_clockTime-scene->getSuspendedTime());
+				m_suspendeddelta = scene->getSuspendedDelta();
+				
+				// set Python hooks for each scene
+				PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment());
+				PHY_SetActiveScene(scene);
+				
+				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+				scene->UpdateParents(m_clockTime);
 
-			// Actuators can affect the scenegraph
-			m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
-			scene->UpdateParents(curtime);
-			 
- 			scene->setSuspendedTime(0.0);
-		} // suspended
- 		else
- 			if(scene->getSuspendedTime()==0.0)
- 				scene->setSuspendedTime(curtime);
+				// Perform physics calculations on the scene. This can involve 
+				// many iterations of the physics solver.
+				m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
+				scene->GetPhysicsEnvironment()->proceedDeltaTime(m_clockTime,0.f);
+				// Update scenegraph after physics step. This maps physics calculations
+				// into node positions.		
+				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+				scene->UpdateParents(m_clockTime);
+				
+				// Do some cleanup work for this logic frame
+				m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
+				scene->LogicUpdateFrame(m_clockTime, false);
 
-		DoSound(scene);
+				// Actuators can affect the scenegraph
+				m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+				scene->UpdateParents(m_clockTime);
+				 
+ 				scene->setSuspendedTime(0.0);
+			} // suspended
+ 			else
+ 				if(scene->getSuspendedTime()==0.0)
+ 					scene->setSuspendedTime(m_clockTime);
 
-		m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true);
+			DoSound(scene);
+
+			m_logger->StartLog(tc_services, m_kxsystem->GetTimeInSeconds(), true);
+		}
 	}
+
+
+	m_previousClockTime = m_clockTime;
 	
 	// Start logging time spend outside main loop
 	m_logger->StartLog(tc_outside, m_kxsystem->GetTimeInSeconds(), true);
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index bea558e442767602ec8a91070985de76dad3ba25..c476cdb58946f606685f84982898ac3fc8ea2659 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -99,8 +99,10 @@ private:
 	bool				m_firstframe;
 	int					m_currentFrame;
 
-	double				m_previoustime;
-	double				m_deltatime;
+	double				m_frameTime;//discrete timestamp of the 'game logic frame'
+	double				m_clockTime;//current time
+	double				m_previousClockTime;//previous clock time
+
 	static double			m_ticrate;
 
 	static double			m_suspendedtime;
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index 2317f9c3a9cae89e4c34624cff2b3e22fb3e321b..0e7ebc6442e4e8b91e39fb89640b0f4dfc367b32 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -362,7 +362,7 @@ static PyObject* gPyRemoveConstraint(PyObject* self,
 	{
 		if (PHY_GetActiveEnvironment())
 		{
-			PHY_GetActiveEnvironment()->removeConstraint((void *)constraintid);
+			PHY_GetActiveEnvironment()->removeConstraint(constraintid);
 		}
 	}
 	Py_INCREF(Py_None); return Py_None;
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index e2a11c0035eeaa75e1edcceabbbc6ad61e99cadd..6f7b73ee4fac079331c2fa3ec144aed9308fd7c5 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -39,6 +39,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
@@ -277,39 +278,74 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
 #define pprint(x) std::cout << x << std::endl;
 	bgl::BL_EXTInfo ext = bgl::RAS_EXT_support;
 	bool count=0;
+	bool support=0;
 	pprint("Supported Extensions...");
-	#ifdef GL_ARB_shader_objects
-	pprint(" GL_ARB_shader_objects supported?       "<< (ext._ARB_shader_objects?		"yes.":"no."));
+#ifdef GL_ARB_shader_objects
+	pprint(" GL_ARB_shader_objects supported?       "<< (ext._ARB_shader_objects?"yes.":"no."));
 	count = 1;
-	#endif
-	#ifdef GL_ARB_vertex_shader
-	pprint(" GL_ARB_vertex_shader supported?        "<< (ext._ARB_vertex_shader?		"yes.":"no."));
-	count = 1;
-	#endif
-	#ifdef GL_ARB_fragment_shader
-	pprint(" GL_ARB_fragment_shader supported?      "<< (ext._ARB_fragment_shader?		"yes.":"no."));
-	count = 1;
-	#endif
-	#ifdef GL_ARB_texture_cube_map
-	pprint(" GL_ARB_texture_cube_map supported?     "<< (ext._ARB_texture_cube_map?		"yes.":"no."));
+#endif
+
+#ifdef GL_ARB_vertex_shader
+	support= ext._ARB_vertex_shader;
+	pprint(" GL_ARB_vertex_shader supported?        "<< (support?"yes.":"no."));
 	count = 1;
-	#endif
-	#ifdef GL_EXT_texture3D
-	pprint(" GL_EXT_texture3D supported?            "<< (ext._EXT_texture3D?			"yes.":"no."));
+	if(support){
+		pprint(" ----------Details----------");
+		int max=0;
+		glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, (GLint*)&max);
+		pprint("  Max uniform components." << max);
+
+		glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, (GLint*)&max);
+		pprint("  Max varying floats." << max);
+
+		glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, (GLint*)&max);
+		pprint("  Max vertex texture units." << max);
+	
+		glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, (GLint*)&max);
+		pprint("  Max combined texture units." << max);
+		pprint("");
+	}
+#endif
+#ifdef GL_ARB_fragment_shader
+	support=ext._ARB_fragment_shader;
+	pprint(" GL_ARB_fragment_shader supported?      "<< (support?"yes.":"no."));
 	count = 1;
-	#endif
-	#ifdef GL_EXT_blend_color
-	pprint(" GL_EXT_blend_color supported?          "<< (ext._EXT_blend_color?			"yes.":"no."));
+	if(support){
+		pprint(" ----------Details----------");
+		int max=0;
+		glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, (GLint*)&max);
+		pprint("  Max uniform components." << max);
+		pprint("");
+	}
+#endif
+#ifdef GL_ARB_texture_cube_map
+	support = ext._ARB_texture_cube_map;
+	pprint(" GL_ARB_texture_cube_map supported?     "<< (support?"yes.":"no."));
 	count = 1;
-	#endif
-	#ifdef GL_ARB_multitexture
-	pprint(" GL_ARB_multitexture supported?         "<< (ext._ARB_multitexture?			"yes.":"no."));
+	if(support){
+		pprint(" ----------Details----------");
+		int size=0;
+		glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, (GLint*)&size);
+		pprint("  Max cubemap size." << size);
+		pprint("");
+	}
+#endif
+#ifdef GL_ARB_multitexture
+	support = ext._ARB_multitexture;
 	count = 1;
-	#endif
-	#ifdef GL_ARB_texture_env_combine
-	pprint(" GL_ARB_texture_env_combine supported?  "<< (ext._ARB_texture_env_combine?	"yes.":"no."));
+	pprint(" GL_ARB_multitexture supported?         "<< (support?"yes.":"no."));
+	if(support){
+		pprint(" ----------Details----------");
+		int units=0;
+		glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, (GLint*)&units);
+		pprint("  Max texture units available.  " << units);
+		pprint("");
+	}
+#endif
+#ifdef GL_ARB_texture_env_combine
+	pprint(" GL_ARB_texture_env_combine supported?  "<< (ext._ARB_texture_env_combine?"yes.":"no."));
 	count = 1;
-	#endif
+#endif
 	if(!count)
 		pprint("No extenstions are used in this build");
 
@@ -707,6 +743,19 @@ PyObject* initGameLogic(KX_Scene* scene) // quick hack to get gravity hook
 	KX_MACRO_addTypesToDict(d, KX_ACTIONACT_LOOPEND,     BL_ActionActuator::KX_ACT_ACTION_LOOPEND);
 	KX_MACRO_addTypesToDict(d, KX_ACTIONACT_PROPERTY,     BL_ActionActuator::KX_ACT_ACTION_PROPERTY);
 	
+	/*8. GL_BlendFunc */
+	KX_MACRO_addTypesToDict(d, BL_ZERO, GL_ZERO);
+	KX_MACRO_addTypesToDict(d, BL_ONE, GL_ONE);
+	KX_MACRO_addTypesToDict(d, BL_SRC_COLOR, GL_SRC_COLOR);
+	KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
+	KX_MACRO_addTypesToDict(d, BL_DST_COLOR, GL_DST_COLOR);
+	KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_DST_COLOR);
+	KX_MACRO_addTypesToDict(d, BL_SRC_ALPHA, GL_SRC_ALPHA);
+	KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	KX_MACRO_addTypesToDict(d, BL_DST_ALPHA, GL_DST_ALPHA);
+	KX_MACRO_addTypesToDict(d, BL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
+	KX_MACRO_addTypesToDict(d, BL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA_SATURATE);
+
 	// Check for errors
 	if (PyErr_Occurred())
     {
diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile
index 963031d968616faadda834725e3e6d52830ebde1..ee0b1e42f225457ebf7a6dcb667d5bf3405043d9 100644
--- a/source/gameengine/Ketsji/Makefile
+++ b/source/gameengine/Ketsji/Makefile
@@ -39,6 +39,7 @@ include nan_compile.mk
 CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
 
 CPPFLAGS += $(OGL_CPPFLAGS)
+CPPFLAGS += -I$(OPENGL_HEADERS)
 CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) -I../../blender/python
 CPPFLAGS += -I$(NAN_STRING)/include    
 CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include    
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 0a0b4939ea5d9ee24ea6bea29aad1757e9581bed..cdf617f1722125b24e3b286942890d873ff11cde 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -192,7 +192,7 @@ void	CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr
 			if  ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() ||
 				(&p2p->GetRigidBodyB() == ctrl->GetRigidBody())))
 			{
-				 removeConstraint(p2p);
+				 removeConstraint(p2p->GetConstraintId());
 				//only 1 constraint per constroller
 				break;
 			}
@@ -209,7 +209,7 @@ void	CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr
 			if  ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() ||
 				(&p2p->GetRigidBodyB() == ctrl->GetRigidBody())))
 			{
-				removeConstraint(p2p);
+				removeConstraint(p2p->GetConstraintId());
 				//only 1 constraint per constroller
 				break;
 			}
@@ -301,14 +301,28 @@ void	CcdPhysicsEnvironment::beginFrame()
 
 }
 
-/// Perform an integration step of duration 'timeStep'.
 bool	CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
 {
+
+	if (!SimdFuzzyZero(timeStep))
+	{
+		//Blender runs 30hertz, so subdivide so we get 60 hertz
+		proceedDeltaTimeOneStep(0.5f*timeStep);
+		proceedDeltaTimeOneStep(0.5f*timeStep);
+	} else
+	{
+		//todo: interpolate
+	}
+	return true;
+}
+/// Perform an integration step of duration 'timeStep'.
+bool	CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
+{
 	
 	
 //	printf("CcdPhysicsEnvironment::proceedDeltaTime\n");
 	
-	if (timeStep == 0.f)
+	if (SimdFuzzyZero(timeStep))
 		return true;
 
 	if (m_debugDrawer)
@@ -318,9 +332,6 @@ bool	CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
 
 
 
-	//clamp hardcoded for now
-	if (timeStep > 0.02)
-		timeStep = 0.02;
 	
 	//this is needed because scaling is not known in advance, and scaling has to propagate to the shape
 	if (!m_scalingPropagated)
@@ -758,7 +769,9 @@ int			CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
 			}
 			
 			m_p2pConstraints.push_back(p2p);
-			return 0;
+			
+			//64 bit systems can't cast pointer to int. could use size_t instead.
+			return p2p->GetConstraintId();
 			
 			break;
 		}
@@ -773,17 +786,24 @@ int			CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
 	
 }
 
-void		CcdPhysicsEnvironment::removeConstraint(void* p2p)
+void		CcdPhysicsEnvironment::removeConstraint(int	constraintId)
 {
-	std::vector<Point2PointConstraint*>::iterator i =
-		std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), 
-				(Point2PointConstraint *)p2p);
+	std::vector<Point2PointConstraint*>::iterator i;
+		
+		//std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), 
+		//		(Point2PointConstraint *)p2p);
 	
-	if (!(i == m_p2pConstraints.end()) )
-	{
-		std::swap(*i, m_p2pConstraints.back());
-		m_p2pConstraints.pop_back();
-	}
+		for (i=m_p2pConstraints.begin();
+		!(i==m_p2pConstraints.end()); i++)
+		{
+			Point2PointConstraint* p2p = (*i);
+			if (p2p->GetConstraintId() == constraintId)
+			{
+				std::swap(*i, m_p2pConstraints.back());
+				m_p2pConstraints.pop_back();
+				break;
+			}
+		}
 	
 }
 PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
index 6050af2f3c8d5cc9162689d8e5ae9b7e74ec8c23..1b2527aa5bbc3cd414e6af73cf73a8dbbe29a744 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
@@ -63,6 +63,8 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment
 		virtual void		endFrame() {};
 		/// Perform an integration step of duration 'timeStep'.
 		virtual	bool		proceedDeltaTime(double curTime,float timeStep);
+		bool				proceedDeltaTimeOneStep(float timeStep);
+
 		virtual	void		setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep){};
 		//returns 0.f if no fixed timestep is used
 
@@ -75,7 +77,7 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment
 		virtual int			createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
 			float pivotX,float pivotY,float pivotZ,
 			float axisX,float axisY,float axisZ);
-	    virtual void		removeConstraint(void* constraintid);
+	    virtual void		removeConstraint(int	constraintid);
 
 
 		virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
index 0b6f8a4ded4c09d7ef5488cbf4a104e344ad8932..0532a9a8cf75251ccf36cef0863d6fdf22c1b79b 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp
@@ -101,7 +101,7 @@ int			DummyPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ct
 
 }
 
-void		DummyPhysicsEnvironment::removeConstraint(void * constraintid)
+void		DummyPhysicsEnvironment::removeConstraint(int	constraintid)
 {
 	if (constraintid)
 	{
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
index 0a359feea6d4a9bdab0f28b38c4a4eb39d93119d..a400459afe68e49d7f245c226b8d9d1d7776ac5d 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
@@ -61,7 +61,7 @@ public:
 			float pivotX,float pivotY,float pivotZ,
 			float axisX,float axisY,float axisZ);
 
-	virtual void		removeConstraint(void * constraintid);
+	virtual void		removeConstraint(int	constraintid);
 	virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
 									float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
 
diff --git a/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp b/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp
index 081a2fb979463e91823a9f75ccca905e2cb61a1a..656051be4f55c60ed6fde552ff44816651205796 100644
--- a/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp
+++ b/source/gameengine/Physics/Sumo/Fuzzics/src/SM_Scene.cpp
@@ -183,7 +183,7 @@ bool SM_Scene::proceed(MT_Scalar curtime, MT_Scalar ticrate)
 	if (!m_frames)
 	{
 		if (ticrate > 0.)
-			m_frames = (unsigned int)(curtime*ticrate + 1.0);
+			m_frames = (unsigned int)(curtime*ticrate) + 1.0;
 		else
 			m_frames = (unsigned int)(curtime*65536.0);
 	}
@@ -275,7 +275,11 @@ bool SM_Scene::proceed(MT_Scalar curtime, MT_Scalar ticrate)
 		for (i = m_objectList.begin(); i != m_objectList.end(); ++i) 
 			(*i)->interpolate(curtime);
 	
-		m_frames = (unsigned int)(curtime*ticrate + 1.0);
+	//only update the m_frames after an actual physics timestep
+		if (num_samples)
+		{
+			m_frames = (unsigned int)(curtime*ticrate) + 1.0;
+		}
 	}
 	else
 	{
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
index 8d03fd4b0f4b86b6ffb7acdbd70a5d8171cb065f..ead6dcc010671b190d7310bb5803d766b318533d 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
@@ -117,7 +117,7 @@ int SumoPhysicsEnvironment::createConstraint(
 	return constraintid;
 }
 
-void SumoPhysicsEnvironment::removeConstraint(void * constraintid)
+void SumoPhysicsEnvironment::removeConstraint(int	constraintid)
 {
 	if (constraintid)
 	{
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
index c93e34825b922e8b6c697d561bdde8bb189004f8..e164140716639161145d93456a20ccfe95801694 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
@@ -66,7 +66,7 @@ public:
 			float pivotX,float pivotY,float pivotZ,
 			float axisX,float axisY,float axisZ);
 
-	virtual void		removeConstraint(void * constraintid);
+	virtual void		removeConstraint(int	constraintid);
 	virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
 									float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
 
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
index 1158563527abc31073be40b50509aca2c32ce929..078f84d4de27cce0fb092706c84e2e5b98f4c23a 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
@@ -83,7 +83,7 @@ class PHY_IPhysicsEnvironment
 		virtual int			createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
 			float pivotX,float pivotY,float pivotZ,
 			float axisX,float axisY,float axisZ)=0;
-		virtual void		removeConstraint(void * constraintid)=0;
+		virtual void		removeConstraint(int	constraintid)=0;
 
 		virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
 										float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)=0;
diff --git a/source/gameengine/Rasterizer/Makefile b/source/gameengine/Rasterizer/Makefile
index 6a1421ae90bc13f780d3e7000612f6986c8caa5c..5f8eace8adb1fc789642fa915962630b929b9f4a 100644
--- a/source/gameengine/Rasterizer/Makefile
+++ b/source/gameengine/Rasterizer/Makefile
@@ -42,7 +42,9 @@ CPPFLAGS += -I$(OPENGL_HEADERS)
 CPPFLAGS += -I$(NAN_STRING)/include    
 CPPFLAGS += -I$(NAN_MOTO)/include
 CPPFLAGS += -I../../kernel/gen_system
-
+ifeq ($(OS),darwin)
+	CPPFLAGS += -fpascal-strings
+endif
 ###############
 
 SOURCEDIR = source/gameengine/Rasterizer
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
index c03aab3422e044d6073d4d63841f566972916ec2..40f3fc500058ce8f1339b35f9fc2693fe51d081d 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
@@ -44,4 +44,6 @@ CPPFLAGS += -I$(NAN_STRING)/include
 CPPFLAGS += -I$(NAN_MOTO)/include
 CPPFLAGS += -I../../../kernel/gen_system
 CPPFLAGS += -I..
-
+ifeq ($(OS),darwin)
+	CPPFLAGS += -fpascal-strings
+endif
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp
index 344fdbbf16425cb13d5cd73d012d31587e7ec0bd..af3a9bca03e86e271236bac03ecd020ed75da43b 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.cpp
@@ -47,7 +47,7 @@
 
 #elif defined(__APPLE__)
 #  include <Carbon/Carbon.h>
-
+#  define GL_GLEXT_LEGACY 1
 #  include <OpenGL/gl.h>
 
 #else /* UNIX */
@@ -322,88 +322,88 @@ BL_EXTInfo RAS_EXT_support;
 
 #ifdef GL_ARB_multitexture
 int max_texture_units = 2;
-PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
-PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
-PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1dARB;
-PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dvARB;
-PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB;
-PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB;
-PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1iARB;
-PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1ivARB;
-PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1sARB;
-PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1svARB;
-PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB;
-PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dvARB;
-PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
-PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB;
-PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB;
-PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2ivARB;
-PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2sARB;
-PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2svARB;
-PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3dARB;
-PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dvARB;
-PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB;
-PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB;
-PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3iARB;
-PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3ivARB;
-PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3sARB;
-PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3svARB;
-PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4dARB;
-PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dvARB;
-PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB;
-PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
-PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4iARB;
-PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4ivARB;
-PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4sARB;
-PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4svARB;
+ PFNGLACTIVETEXTUREARBPROC blActiveTextureARB;
+ PFNGLCLIENTACTIVETEXTUREARBPROC blClientActiveTextureARB;
+ PFNGLMULTITEXCOORD1DARBPROC blMultiTexCoord1dARB;
+ PFNGLMULTITEXCOORD1DVARBPROC blMultiTexCoord1dvARB;
+ PFNGLMULTITEXCOORD1FARBPROC blMultiTexCoord1fARB;
+ PFNGLMULTITEXCOORD1FVARBPROC blMultiTexCoord1fvARB;
+ PFNGLMULTITEXCOORD1IARBPROC blMultiTexCoord1iARB;
+ PFNGLMULTITEXCOORD1IVARBPROC blMultiTexCoord1ivARB;
+ PFNGLMULTITEXCOORD1SARBPROC blMultiTexCoord1sARB;
+ PFNGLMULTITEXCOORD1SVARBPROC blMultiTexCoord1svARB;
+ PFNGLMULTITEXCOORD2DARBPROC blMultiTexCoord2dARB;
+ PFNGLMULTITEXCOORD2DVARBPROC blMultiTexCoord2dvARB;
+ PFNGLMULTITEXCOORD2FARBPROC blMultiTexCoord2fARB;
+ PFNGLMULTITEXCOORD2FVARBPROC blMultiTexCoord2fvARB;
+ PFNGLMULTITEXCOORD2IARBPROC blMultiTexCoord2iARB;
+ PFNGLMULTITEXCOORD2IVARBPROC blMultiTexCoord2ivARB;
+ PFNGLMULTITEXCOORD2SARBPROC blMultiTexCoord2sARB;
+ PFNGLMULTITEXCOORD2SVARBPROC blMultiTexCoord2svARB;
+ PFNGLMULTITEXCOORD3DARBPROC blMultiTexCoord3dARB;
+ PFNGLMULTITEXCOORD3DVARBPROC blMultiTexCoord3dvARB;
+ PFNGLMULTITEXCOORD3FARBPROC blMultiTexCoord3fARB;
+ PFNGLMULTITEXCOORD3FVARBPROC blMultiTexCoord3fvARB;
+ PFNGLMULTITEXCOORD3IARBPROC blMultiTexCoord3iARB;
+ PFNGLMULTITEXCOORD3IVARBPROC blMultiTexCoord3ivARB;
+ PFNGLMULTITEXCOORD3SARBPROC blMultiTexCoord3sARB;
+ PFNGLMULTITEXCOORD3SVARBPROC blMultiTexCoord3svARB;
+ PFNGLMULTITEXCOORD4DARBPROC blMultiTexCoord4dARB;
+ PFNGLMULTITEXCOORD4DVARBPROC blMultiTexCoord4dvARB;
+ PFNGLMULTITEXCOORD4FARBPROC blMultiTexCoord4fARB;
+ PFNGLMULTITEXCOORD4FVARBPROC blMultiTexCoord4fvARB;
+ PFNGLMULTITEXCOORD4IARBPROC blMultiTexCoord4iARB;
+ PFNGLMULTITEXCOORD4IVARBPROC blMultiTexCoord4ivARB;
+ PFNGLMULTITEXCOORD4SARBPROC blMultiTexCoord4sARB;
+ PFNGLMULTITEXCOORD4SVARBPROC blMultiTexCoord4svARB;
 #endif
 
 #ifdef GL_ARB_shader_objects
-PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
-PFNGLGETHANDLEARBPROC glGetHandleARB;
-PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
-PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
-PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
-PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
-PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
-PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
-PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
-PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
-PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB;
-PFNGLUNIFORM1FARBPROC glUniform1fARB;
-PFNGLUNIFORM2FARBPROC glUniform2fARB;
-PFNGLUNIFORM3FARBPROC glUniform3fARB;
-PFNGLUNIFORM4FARBPROC glUniform4fARB;
-PFNGLUNIFORM1IARBPROC glUniform1iARB;
-PFNGLUNIFORM2IARBPROC glUniform2iARB;
-PFNGLUNIFORM3IARBPROC glUniform3iARB;
-PFNGLUNIFORM4IARBPROC glUniform4iARB;
-PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
-PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
-PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
-PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
-PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
-PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
-PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
-PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
-PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
-PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
-PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
-PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
-PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
-PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
-PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB;
-PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
-PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB;
-PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
-PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
-PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
+ PFNGLDELETEOBJECTARBPROC blDeleteObjectARB;
+ PFNGLGETHANDLEARBPROC blGetHandleARB;
+ PFNGLDETACHOBJECTARBPROC blDetachObjectARB;
+ PFNGLCREATESHADEROBJECTARBPROC blCreateShaderObjectARB;
+ PFNGLSHADERSOURCEARBPROC blShaderSourceARB;
+ PFNGLCOMPILESHADERARBPROC blCompileShaderARB;
+ PFNGLCREATEPROGRAMOBJECTARBPROC blCreateProgramObjectARB;
+ PFNGLATTACHOBJECTARBPROC blAttachObjectARB;
+ PFNGLLINKPROGRAMARBPROC blLinkProgramARB;
+ PFNGLUSEPROGRAMOBJECTARBPROC blUseProgramObjectARB;
+ PFNGLVALIDATEPROGRAMARBPROC blValidateProgramARB;
+ PFNGLUNIFORM1FARBPROC blUniform1fARB;
+ PFNGLUNIFORM2FARBPROC blUniform2fARB;
+ PFNGLUNIFORM3FARBPROC blUniform3fARB;
+ PFNGLUNIFORM4FARBPROC blUniform4fARB;
+ PFNGLUNIFORM1IARBPROC blUniform1iARB;
+ PFNGLUNIFORM2IARBPROC blUniform2iARB;
+ PFNGLUNIFORM3IARBPROC blUniform3iARB;
+ PFNGLUNIFORM4IARBPROC blUniform4iARB;
+ PFNGLUNIFORM1FVARBPROC blUniform1fvARB;
+ PFNGLUNIFORM2FVARBPROC blUniform2fvARB;
+ PFNGLUNIFORM3FVARBPROC blUniform3fvARB;
+ PFNGLUNIFORM4FVARBPROC blUniform4fvARB;
+ PFNGLUNIFORM1IVARBPROC blUniform1ivARB;
+ PFNGLUNIFORM2IVARBPROC blUniform2ivARB;
+ PFNGLUNIFORM3IVARBPROC blUniform3ivARB;
+ PFNGLUNIFORM4IVARBPROC blUniform4ivARB;
+ PFNGLUNIFORMMATRIX2FVARBPROC blUniformMatrix2fvARB;
+ PFNGLUNIFORMMATRIX3FVARBPROC blUniformMatrix3fvARB;
+ PFNGLUNIFORMMATRIX4FVARBPROC blUniformMatrix4fvARB;
+ PFNGLGETOBJECTPARAMETERFVARBPROC blGetObjectParameterfvARB;
+ PFNGLGETOBJECTPARAMETERIVARBPROC blGetObjectParameterivARB;
+ PFNGLGETINFOLOGARBPROC blGetInfoLogARB;
+ PFNGLGETATTACHEDOBJECTSARBPROC blGetAttachedObjectsARB;
+ PFNGLGETUNIFORMLOCATIONARBPROC blGetUniformLocationARB;
+ PFNGLGETACTIVEUNIFORMARBPROC blGetActiveUniformARB;
+ PFNGLGETUNIFORMFVARBPROC blGetUniformfvARB;
+ PFNGLGETUNIFORMIVARBPROC blGetUniformivARB;
+ PFNGLGETSHADERSOURCEARBPROC blGetShaderSourceARB;
 #endif
 
 #ifdef GL_ARB_vertex_shader
-PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
-PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
-PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
+PFNGLBINDATTRIBLOCATIONARBPROC blBindAttribLocationARB;
+PFNGLGETACTIVEATTRIBARBPROC blGetActiveAttribARB;
+PFNGLGETATTRIBLOCATIONARBPROC blGetAttribLocationARB;
 #endif
 
 } // namespace bgl
@@ -464,41 +464,41 @@ static void LinkExtensions()
 #ifdef GL_ARB_multitexture
 	if (QueryExtension("GL_ARB_multitexture"))
 	{
-		bgl::glActiveTextureARB = reinterpret_cast<PFNGLACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glActiveTextureARB"));
-		bgl::glClientActiveTextureARB = reinterpret_cast<PFNGLCLIENTACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glClientActiveTextureARB"));
-		bgl::glMultiTexCoord1dARB = reinterpret_cast<PFNGLMULTITEXCOORD1DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dARB"));
-		bgl::glMultiTexCoord1dvARB = reinterpret_cast<PFNGLMULTITEXCOORD1DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dvARB"));
-		bgl::glMultiTexCoord1fARB = reinterpret_cast<PFNGLMULTITEXCOORD1FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fARB"));
-		bgl::glMultiTexCoord1fvARB = reinterpret_cast<PFNGLMULTITEXCOORD1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fvARB"));
-		bgl::glMultiTexCoord1iARB = reinterpret_cast<PFNGLMULTITEXCOORD1IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1iARB"));
-		bgl::glMultiTexCoord1ivARB = reinterpret_cast<PFNGLMULTITEXCOORD1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1ivARB"));
-		bgl::glMultiTexCoord1sARB = reinterpret_cast<PFNGLMULTITEXCOORD1SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1sARB"));
-		bgl::glMultiTexCoord1svARB = reinterpret_cast<PFNGLMULTITEXCOORD1SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1svARB"));
-		bgl::glMultiTexCoord2dARB = reinterpret_cast<PFNGLMULTITEXCOORD2DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dARB"));
-		bgl::glMultiTexCoord2dvARB = reinterpret_cast<PFNGLMULTITEXCOORD2DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dvARB"));
-		bgl::glMultiTexCoord2fARB = reinterpret_cast<PFNGLMULTITEXCOORD2FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fARB"));
-		bgl::glMultiTexCoord2fvARB = reinterpret_cast<PFNGLMULTITEXCOORD2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fvARB"));
-		bgl::glMultiTexCoord2iARB = reinterpret_cast<PFNGLMULTITEXCOORD2IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2iARB"));
-		bgl::glMultiTexCoord2ivARB = reinterpret_cast<PFNGLMULTITEXCOORD2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2ivARB"));
-		bgl::glMultiTexCoord2sARB = reinterpret_cast<PFNGLMULTITEXCOORD2SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2sARB"));
-		bgl::glMultiTexCoord2svARB = reinterpret_cast<PFNGLMULTITEXCOORD2SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2svARB"));
-		bgl::glMultiTexCoord3dARB = reinterpret_cast<PFNGLMULTITEXCOORD3DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dARB"));
-		bgl::glMultiTexCoord3dvARB = reinterpret_cast<PFNGLMULTITEXCOORD3DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dvARB"));
-		bgl::glMultiTexCoord3fARB = reinterpret_cast<PFNGLMULTITEXCOORD3FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fARB"));
-		bgl::glMultiTexCoord3fvARB = reinterpret_cast<PFNGLMULTITEXCOORD3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fvARB"));
-		bgl::glMultiTexCoord3iARB = reinterpret_cast<PFNGLMULTITEXCOORD3IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3iARB"));
-		bgl::glMultiTexCoord3ivARB = reinterpret_cast<PFNGLMULTITEXCOORD3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3ivARB"));
-		bgl::glMultiTexCoord3sARB = reinterpret_cast<PFNGLMULTITEXCOORD3SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3sARB"));
-		bgl::glMultiTexCoord3svARB = reinterpret_cast<PFNGLMULTITEXCOORD3SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3svARB"));
-		bgl::glMultiTexCoord4dARB = reinterpret_cast<PFNGLMULTITEXCOORD4DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dARB"));
-		bgl::glMultiTexCoord4dvARB = reinterpret_cast<PFNGLMULTITEXCOORD4DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dvARB"));
-		bgl::glMultiTexCoord4fARB = reinterpret_cast<PFNGLMULTITEXCOORD4FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fARB"));
-		bgl::glMultiTexCoord4fvARB = reinterpret_cast<PFNGLMULTITEXCOORD4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fvARB"));
-		bgl::glMultiTexCoord4iARB = reinterpret_cast<PFNGLMULTITEXCOORD4IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4iARB"));
-		bgl::glMultiTexCoord4ivARB = reinterpret_cast<PFNGLMULTITEXCOORD4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4ivARB"));
-		bgl::glMultiTexCoord4sARB = reinterpret_cast<PFNGLMULTITEXCOORD4SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4sARB"));
-		bgl::glMultiTexCoord4svARB = reinterpret_cast<PFNGLMULTITEXCOORD4SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4svARB"));
-		if (bgl::glActiveTextureARB && bgl::glClientActiveTextureARB && bgl::glMultiTexCoord1dARB && bgl::glMultiTexCoord1dvARB && bgl::glMultiTexCoord1fARB && bgl::glMultiTexCoord1fvARB && bgl::glMultiTexCoord1iARB && bgl::glMultiTexCoord1ivARB && bgl::glMultiTexCoord1sARB && bgl::glMultiTexCoord1svARB && bgl::glMultiTexCoord2dARB && bgl::glMultiTexCoord2dvARB && bgl::glMultiTexCoord2fARB && bgl::glMultiTexCoord2fvARB && bgl::glMultiTexCoord2iARB && bgl::glMultiTexCoord2ivARB && bgl::glMultiTexCoord2sARB && bgl::glMultiTexCoord2svARB && bgl::glMultiTexCoord3dARB && bgl::glMultiTexCoord3dvARB && bgl::glMultiTexCoord3fARB && bgl::glMultiTexCoord3fvARB && bgl::glMultiTexCoord3iARB && bgl::glMultiTexCoord3ivARB && bgl::glMultiTexCoord3sARB && bgl::glMultiTexCoord3svARB && bgl::glMultiTexCoord4dARB && bgl::glMultiTexCoord4dvARB && bgl::glMultiTexCoord4fARB && bgl::glMultiTexCoord4fvARB && bgl::glMultiTexCoord4iARB && bgl::glMultiTexCoord4ivARB && bgl::glMultiTexCoord4sARB && bgl::glMultiTexCoord4svARB) {
+		bgl::blActiveTextureARB = reinterpret_cast<PFNGLACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glActiveTextureARB"));
+		bgl::blClientActiveTextureARB = reinterpret_cast<PFNGLCLIENTACTIVETEXTUREARBPROC>(bglGetProcAddress((const GLubyte *) "glClientActiveTextureARB"));
+		bgl::blMultiTexCoord1dARB = reinterpret_cast<PFNGLMULTITEXCOORD1DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dARB"));
+		bgl::blMultiTexCoord1dvARB = reinterpret_cast<PFNGLMULTITEXCOORD1DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1dvARB"));
+		bgl::blMultiTexCoord1fARB = reinterpret_cast<PFNGLMULTITEXCOORD1FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fARB"));
+		bgl::blMultiTexCoord1fvARB = reinterpret_cast<PFNGLMULTITEXCOORD1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1fvARB"));
+		bgl::blMultiTexCoord1iARB = reinterpret_cast<PFNGLMULTITEXCOORD1IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1iARB"));
+		bgl::blMultiTexCoord1ivARB = reinterpret_cast<PFNGLMULTITEXCOORD1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1ivARB"));
+		bgl::blMultiTexCoord1sARB = reinterpret_cast<PFNGLMULTITEXCOORD1SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1sARB"));
+		bgl::blMultiTexCoord1svARB = reinterpret_cast<PFNGLMULTITEXCOORD1SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord1svARB"));
+		bgl::blMultiTexCoord2dARB = reinterpret_cast<PFNGLMULTITEXCOORD2DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dARB"));
+		bgl::blMultiTexCoord2dvARB = reinterpret_cast<PFNGLMULTITEXCOORD2DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2dvARB"));
+		bgl::blMultiTexCoord2fARB = reinterpret_cast<PFNGLMULTITEXCOORD2FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fARB"));
+		bgl::blMultiTexCoord2fvARB = reinterpret_cast<PFNGLMULTITEXCOORD2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2fvARB"));
+		bgl::blMultiTexCoord2iARB = reinterpret_cast<PFNGLMULTITEXCOORD2IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2iARB"));
+		bgl::blMultiTexCoord2ivARB = reinterpret_cast<PFNGLMULTITEXCOORD2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2ivARB"));
+		bgl::blMultiTexCoord2sARB = reinterpret_cast<PFNGLMULTITEXCOORD2SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2sARB"));
+		bgl::blMultiTexCoord2svARB = reinterpret_cast<PFNGLMULTITEXCOORD2SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord2svARB"));
+		bgl::blMultiTexCoord3dARB = reinterpret_cast<PFNGLMULTITEXCOORD3DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dARB"));
+		bgl::blMultiTexCoord3dvARB = reinterpret_cast<PFNGLMULTITEXCOORD3DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3dvARB"));
+		bgl::blMultiTexCoord3fARB = reinterpret_cast<PFNGLMULTITEXCOORD3FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fARB"));
+		bgl::blMultiTexCoord3fvARB = reinterpret_cast<PFNGLMULTITEXCOORD3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3fvARB"));
+		bgl::blMultiTexCoord3iARB = reinterpret_cast<PFNGLMULTITEXCOORD3IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3iARB"));
+		bgl::blMultiTexCoord3ivARB = reinterpret_cast<PFNGLMULTITEXCOORD3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3ivARB"));
+		bgl::blMultiTexCoord3sARB = reinterpret_cast<PFNGLMULTITEXCOORD3SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3sARB"));
+		bgl::blMultiTexCoord3svARB = reinterpret_cast<PFNGLMULTITEXCOORD3SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord3svARB"));
+		bgl::blMultiTexCoord4dARB = reinterpret_cast<PFNGLMULTITEXCOORD4DARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dARB"));
+		bgl::blMultiTexCoord4dvARB = reinterpret_cast<PFNGLMULTITEXCOORD4DVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4dvARB"));
+		bgl::blMultiTexCoord4fARB = reinterpret_cast<PFNGLMULTITEXCOORD4FARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fARB"));
+		bgl::blMultiTexCoord4fvARB = reinterpret_cast<PFNGLMULTITEXCOORD4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4fvARB"));
+		bgl::blMultiTexCoord4iARB = reinterpret_cast<PFNGLMULTITEXCOORD4IARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4iARB"));
+		bgl::blMultiTexCoord4ivARB = reinterpret_cast<PFNGLMULTITEXCOORD4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4ivARB"));
+		bgl::blMultiTexCoord4sARB = reinterpret_cast<PFNGLMULTITEXCOORD4SARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4sARB"));
+		bgl::blMultiTexCoord4svARB = reinterpret_cast<PFNGLMULTITEXCOORD4SVARBPROC>(bglGetProcAddress((const GLubyte *) "glMultiTexCoord4svARB"));
+		if (bgl::blActiveTextureARB && bgl::blClientActiveTextureARB && bgl::blMultiTexCoord1dARB && bgl::blMultiTexCoord1dvARB && bgl::blMultiTexCoord1fARB && bgl::blMultiTexCoord1fvARB && bgl::blMultiTexCoord1iARB && bgl::blMultiTexCoord1ivARB && bgl::blMultiTexCoord1sARB && bgl::blMultiTexCoord1svARB && bgl::blMultiTexCoord2dARB && bgl::blMultiTexCoord2dvARB && bgl::blMultiTexCoord2fARB && bgl::blMultiTexCoord2fvARB && bgl::blMultiTexCoord2iARB && bgl::blMultiTexCoord2ivARB && bgl::blMultiTexCoord2sARB && bgl::blMultiTexCoord2svARB && bgl::blMultiTexCoord3dARB && bgl::blMultiTexCoord3dvARB && bgl::blMultiTexCoord3fARB && bgl::blMultiTexCoord3fvARB && bgl::blMultiTexCoord3iARB && bgl::blMultiTexCoord3ivARB && bgl::blMultiTexCoord3sARB && bgl::blMultiTexCoord3svARB && bgl::blMultiTexCoord4dARB && bgl::blMultiTexCoord4dvARB && bgl::blMultiTexCoord4fARB && bgl::blMultiTexCoord4fvARB && bgl::blMultiTexCoord4iARB && bgl::blMultiTexCoord4ivARB && bgl::blMultiTexCoord4sARB && bgl::blMultiTexCoord4svARB) {
 			EnableExtension(_GL_ARB_multitexture);
 			RAS_EXT_support._ARB_multitexture = 1;
 			if (doDebugMessages)
@@ -509,49 +509,49 @@ static void LinkExtensions()
 	}
 #endif
 
-#ifdef GL_ARB_shader_objects
+#if GL_ARB_shader_objects
 	if (QueryExtension("GL_ARB_shader_objects"))
 	{
-		glDeleteObjectARB = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDeleteObjectARB"));
-		glGetHandleARB = reinterpret_cast<PFNGLGETHANDLEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetHandleARB"));
-		glDetachObjectARB = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDetachObjectARB"));
-		glCreateShaderObjectARB = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateShaderObjectARB"));
-		glShaderSourceARB = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glShaderSourceARB"));
-		glCompileShaderARB = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(bglGetProcAddress((const GLubyte *) "glCompileShaderARB"));
-		glCreateProgramObjectARB = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateProgramObjectARB"));
-		glAttachObjectARB = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glAttachObjectARB"));
-		glLinkProgramARB = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glLinkProgramARB"));
-		glUseProgramObjectARB = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glUseProgramObjectARB"));
-		glValidateProgramARB = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glValidateProgramARB"));
-		glUniform1fARB = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fARB"));
-		glUniform2fARB = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fARB"));
-		glUniform3fARB = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fARB"));
-		glUniform4fARB = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fARB"));
-		glUniform1iARB = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1iARB"));
-		glUniform2iARB = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2iARB"));
-		glUniform3iARB = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3iARB"));
-		glUniform4iARB = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4iARB"));
-		glUniform1fvARB = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fvARB"));
-		glUniform2fvARB = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fvARB"));
-		glUniform3fvARB = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fvARB"));
-		glUniform4fvARB = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fvARB"));
-		glUniform1ivARB = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1ivARB"));
-		glUniform2ivARB = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2ivARB"));
-		glUniform3ivARB = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3ivARB"));
-		glUniform4ivARB = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4ivARB"));
-		glUniformMatrix2fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix2fvARB"));
-		glUniformMatrix3fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix3fvARB"));
-		glUniformMatrix4fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix4fvARB"));
-		glGetObjectParameterfvARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterfvARB"));
-		glGetObjectParameterivARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterivARB"));
-		glGetInfoLogARB = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(bglGetProcAddress((const GLubyte *) "glGetInfoLogARB"));
-		glGetAttachedObjectsARB = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttachedObjectsARB"));
-		glGetUniformLocationARB = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformLocationARB"));
-		glGetActiveUniformARB = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveUniformARB"));
-		glGetUniformfvARB = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformfvARB"));
-		glGetUniformivARB = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformivARB"));
-		glGetShaderSourceARB = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetShaderSourceARB"));
-		if (glDeleteObjectARB && glGetHandleARB && glDetachObjectARB && glCreateShaderObjectARB && glShaderSourceARB && glCompileShaderARB && glCreateProgramObjectARB && glAttachObjectARB && glLinkProgramARB && glUseProgramObjectARB && glValidateProgramARB && glUniform1fARB && glUniform2fARB && glUniform3fARB && glUniform4fARB && glUniform1iARB && glUniform2iARB && glUniform3iARB && glUniform4iARB && glUniform1fvARB && glUniform2fvARB && glUniform3fvARB && glUniform4fvARB && glUniform1ivARB && glUniform2ivARB && glUniform3ivARB && glUniform4ivARB && glUniformMatrix2fvARB && glUniformMatrix3fvARB && glUniformMatrix4fvARB && glGetObjectParameterfvARB && glGetObjectParameterivARB && glGetInfoLogARB && glGetAttachedObjectsARB && glGetUniformLocationARB && glGetActiveUniformARB && glGetUniformfvARB && glGetUniformivARB && glGetShaderSourceARB) {
+		bgl::blDeleteObjectARB = reinterpret_cast<PFNGLDELETEOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDeleteObjectARB"));
+		bgl::blGetHandleARB = reinterpret_cast<PFNGLGETHANDLEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetHandleARB"));
+		bgl::blDetachObjectARB = reinterpret_cast<PFNGLDETACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glDetachObjectARB"));
+		bgl::blCreateShaderObjectARB = reinterpret_cast<PFNGLCREATESHADEROBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateShaderObjectARB"));
+		bgl::blShaderSourceARB = reinterpret_cast<PFNGLSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glShaderSourceARB"));
+		bgl::blCompileShaderARB = reinterpret_cast<PFNGLCOMPILESHADERARBPROC>(bglGetProcAddress((const GLubyte *) "glCompileShaderARB"));
+		bgl::blCreateProgramObjectARB = reinterpret_cast<PFNGLCREATEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glCreateProgramObjectARB"));
+		bgl::blAttachObjectARB = reinterpret_cast<PFNGLATTACHOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glAttachObjectARB"));
+		bgl::blLinkProgramARB = reinterpret_cast<PFNGLLINKPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glLinkProgramARB"));
+		bgl::blUseProgramObjectARB = reinterpret_cast<PFNGLUSEPROGRAMOBJECTARBPROC>(bglGetProcAddress((const GLubyte *) "glUseProgramObjectARB"));
+		bgl::blValidateProgramARB = reinterpret_cast<PFNGLVALIDATEPROGRAMARBPROC>(bglGetProcAddress((const GLubyte *) "glValidateProgramARB"));
+		bgl::blUniform1fARB = reinterpret_cast<PFNGLUNIFORM1FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fARB"));
+		bgl::blUniform2fARB = reinterpret_cast<PFNGLUNIFORM2FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fARB"));
+		bgl::blUniform3fARB = reinterpret_cast<PFNGLUNIFORM3FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fARB"));
+		bgl::blUniform4fARB = reinterpret_cast<PFNGLUNIFORM4FARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fARB"));
+		bgl::blUniform1iARB = reinterpret_cast<PFNGLUNIFORM1IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1iARB"));
+		bgl::blUniform2iARB = reinterpret_cast<PFNGLUNIFORM2IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2iARB"));
+		bgl::blUniform3iARB = reinterpret_cast<PFNGLUNIFORM3IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3iARB"));
+		bgl::blUniform4iARB = reinterpret_cast<PFNGLUNIFORM4IARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4iARB"));
+		bgl::blUniform1fvARB = reinterpret_cast<PFNGLUNIFORM1FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1fvARB"));
+		bgl::blUniform2fvARB = reinterpret_cast<PFNGLUNIFORM2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2fvARB"));
+		bgl::blUniform3fvARB = reinterpret_cast<PFNGLUNIFORM3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3fvARB"));
+		bgl::blUniform4fvARB = reinterpret_cast<PFNGLUNIFORM4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4fvARB"));
+		bgl::blUniform1ivARB = reinterpret_cast<PFNGLUNIFORM1IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform1ivARB"));
+		bgl::blUniform2ivARB = reinterpret_cast<PFNGLUNIFORM2IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform2ivARB"));
+		bgl::blUniform3ivARB = reinterpret_cast<PFNGLUNIFORM3IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform3ivARB"));
+		bgl::blUniform4ivARB = reinterpret_cast<PFNGLUNIFORM4IVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniform4ivARB"));
+		bgl::blUniformMatrix2fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX2FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix2fvARB"));
+		bgl::blUniformMatrix3fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX3FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix3fvARB"));
+		bgl::blUniformMatrix4fvARB = reinterpret_cast<PFNGLUNIFORMMATRIX4FVARBPROC>(bglGetProcAddress((const GLubyte *) "glUniformMatrix4fvARB"));
+		bgl::blGetObjectParameterfvARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterfvARB"));
+		bgl::blGetObjectParameterivARB = reinterpret_cast<PFNGLGETOBJECTPARAMETERIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetObjectParameterivARB"));
+		bgl::blGetInfoLogARB = reinterpret_cast<PFNGLGETINFOLOGARBPROC>(bglGetProcAddress((const GLubyte *) "glGetInfoLogARB"));
+		bgl::blGetAttachedObjectsARB = reinterpret_cast<PFNGLGETATTACHEDOBJECTSARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttachedObjectsARB"));
+		bgl::blGetUniformLocationARB = reinterpret_cast<PFNGLGETUNIFORMLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformLocationARB"));
+		bgl::blGetActiveUniformARB = reinterpret_cast<PFNGLGETACTIVEUNIFORMARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveUniformARB"));
+		bgl::blGetUniformfvARB = reinterpret_cast<PFNGLGETUNIFORMFVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformfvARB"));
+		bgl::blGetUniformivARB = reinterpret_cast<PFNGLGETUNIFORMIVARBPROC>(bglGetProcAddress((const GLubyte *) "glGetUniformivARB"));
+		bgl::blGetShaderSourceARB = reinterpret_cast<PFNGLGETSHADERSOURCEARBPROC>(bglGetProcAddress((const GLubyte *) "glGetShaderSourceARB"));
+		if (bgl::blDeleteObjectARB && bgl::blGetHandleARB && bgl::blDetachObjectARB && bgl::blCreateShaderObjectARB && bgl::blShaderSourceARB && bgl::blCompileShaderARB && bgl::blCreateProgramObjectARB && bgl::blAttachObjectARB && bgl::blLinkProgramARB && bgl::blUseProgramObjectARB && bgl::blValidateProgramARB && bgl::blUniform1fARB && bgl::blUniform2fARB && bgl::blUniform3fARB && bgl::blUniform4fARB && bgl::blUniform1iARB && bgl::blUniform2iARB && bgl::blUniform3iARB && bgl::blUniform4iARB && bgl::blUniform1fvARB && bgl::blUniform2fvARB && bgl::blUniform3fvARB && bgl::blUniform4fvARB && bgl::blUniform1ivARB && bgl::blUniform2ivARB && bgl::blUniform3ivARB && bgl::blUniform4ivARB && bgl::blUniformMatrix2fvARB && bgl::blUniformMatrix3fvARB && bgl::blUniformMatrix4fvARB && bgl::blGetObjectParameterfvARB && bgl::blGetObjectParameterivARB && bgl::blGetInfoLogARB && bgl::blGetAttachedObjectsARB && bgl::blGetUniformLocationARB && bgl::blGetActiveUniformARB && bgl::blGetUniformfvARB && bgl::blGetUniformivARB && bgl::blGetShaderSourceARB) {
 			EnableExtension(_GL_ARB_shader_objects);
 			RAS_EXT_support._ARB_shader_objects =1;
 			if (doDebugMessages)
@@ -562,13 +562,13 @@ static void LinkExtensions()
 	}
 #endif
 
-#ifdef GL_ARB_vertex_shader
+#if GL_ARB_vertex_shader
 	if (QueryExtension("GL_ARB_vertex_shader"))
 	{
-		glBindAttribLocationARB = reinterpret_cast<PFNGLBINDATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glBindAttribLocationARB"));
-		glGetActiveAttribARB = reinterpret_cast<PFNGLGETACTIVEATTRIBARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveAttribARB"));
-		glGetAttribLocationARB = reinterpret_cast<PFNGLGETATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttribLocationARB"));
-		if (glBindAttribLocationARB && glGetActiveAttribARB && glGetAttribLocationARB) {
+		bgl::blBindAttribLocationARB = reinterpret_cast<PFNGLBINDATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glBindAttribLocationARB"));
+		bgl::blGetActiveAttribARB = reinterpret_cast<PFNGLGETACTIVEATTRIBARBPROC>(bglGetProcAddress((const GLubyte *) "glGetActiveAttribARB"));
+		bgl::blGetAttribLocationARB = reinterpret_cast<PFNGLGETATTRIBLOCATIONARBPROC>(bglGetProcAddress((const GLubyte *) "glGetAttribLocationARB"));
+		if (bgl::blBindAttribLocationARB && bgl::blGetActiveAttribARB && bgl::blGetAttribLocationARB) {
 			EnableExtension(_GL_ARB_vertex_shader);
 			RAS_EXT_support._ARB_vertex_shader = 1;
 			if (doDebugMessages)
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h
index 2d862ea3853d6dd90564826fd900ca5f8bc19b63..a5dad19222bc74ba8fd247fe3ed84c8b13a1b80f 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_GLExtensionManager.h
@@ -39,6 +39,7 @@
 
 #elif defined(__APPLE__)
 #  define __glext_h_
+#  define GL_GLEXT_LEGACY 1
 #  include <OpenGL/gl.h>
 #  include <OpenGL/glu.h>
 #  undef __glext_h_
@@ -52,6 +53,7 @@
 #endif
 
 #include "glext.h"
+
 #include "EXT_separate_specular_color.h"
 #include "ARB_multitexture.h"
 namespace bgl
@@ -379,8 +381,8 @@ namespace bgl
 	void InitExtensions(int debug);
 
 #if defined(PFNGLPNTRIANGLESIATIPROC)
-extern PFNGLPNTRIANGLESIATIPROC glPNTrianglesiATI;
-extern PFNGLPNTRIANGLESFATIPROC glPNTrianglesfATI;
+extern PFNGLPNTRIANGLESIATIPROC blPNTrianglesiATI;
+extern PFNGLPNTRIANGLESFATIPROC blPNTrianglesfATI;
 #endif
 
 
@@ -413,89 +415,89 @@ extern BL_EXTInfo RAS_EXT_support;
 
 #ifdef GL_ARB_multitexture // defined in glext.h now...
 extern int max_texture_units;
-extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
-extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
-extern PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1dARB;
-extern PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dvARB;
-extern PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB;
-extern PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB;
-extern PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1iARB;
-extern PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1ivARB;
-extern PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1sARB;
-extern PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1svARB;
-extern PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB;
-extern PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dvARB;
-extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
-extern PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB;
-extern PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB;
-extern PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2ivARB;
-extern PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2sARB;
-extern PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2svARB;
-extern PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3dARB;
-extern PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dvARB;
-extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB;
-extern PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB;
-extern PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3iARB;
-extern PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3ivARB;
-extern PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3sARB;
-extern PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3svARB;
-extern PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4dARB;
-extern PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dvARB;
-extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB;
-extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
-extern PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4iARB;
-extern PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4ivARB;
-extern PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4sARB;
-extern PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4svARB;
+extern PFNGLACTIVETEXTUREARBPROC blActiveTextureARB;
+extern PFNGLCLIENTACTIVETEXTUREARBPROC blClientActiveTextureARB;
+extern PFNGLMULTITEXCOORD1DARBPROC blMultiTexCoord1dARB;
+extern PFNGLMULTITEXCOORD1DVARBPROC blMultiTexCoord1dvARB;
+extern PFNGLMULTITEXCOORD1FARBPROC blMultiTexCoord1fARB;
+extern PFNGLMULTITEXCOORD1FVARBPROC blMultiTexCoord1fvARB;
+extern PFNGLMULTITEXCOORD1IARBPROC blMultiTexCoord1iARB;
+extern PFNGLMULTITEXCOORD1IVARBPROC blMultiTexCoord1ivARB;
+extern PFNGLMULTITEXCOORD1SARBPROC blMultiTexCoord1sARB;
+extern PFNGLMULTITEXCOORD1SVARBPROC blMultiTexCoord1svARB;
+extern PFNGLMULTITEXCOORD2DARBPROC blMultiTexCoord2dARB;
+extern PFNGLMULTITEXCOORD2DVARBPROC blMultiTexCoord2dvARB;
+extern PFNGLMULTITEXCOORD2FARBPROC blMultiTexCoord2fARB;
+extern PFNGLMULTITEXCOORD2FVARBPROC blMultiTexCoord2fvARB;
+extern PFNGLMULTITEXCOORD2IARBPROC blMultiTexCoord2iARB;
+extern PFNGLMULTITEXCOORD2IVARBPROC blMultiTexCoord2ivARB;
+extern PFNGLMULTITEXCOORD2SARBPROC blMultiTexCoord2sARB;
+extern PFNGLMULTITEXCOORD2SVARBPROC blMultiTexCoord2svARB;
+extern PFNGLMULTITEXCOORD3DARBPROC blMultiTexCoord3dARB;
+extern PFNGLMULTITEXCOORD3DVARBPROC blMultiTexCoord3dvARB;
+extern PFNGLMULTITEXCOORD3FARBPROC blMultiTexCoord3fARB;
+extern PFNGLMULTITEXCOORD3FVARBPROC blMultiTexCoord3fvARB;
+extern PFNGLMULTITEXCOORD3IARBPROC blMultiTexCoord3iARB;
+extern PFNGLMULTITEXCOORD3IVARBPROC blMultiTexCoord3ivARB;
+extern PFNGLMULTITEXCOORD3SARBPROC blMultiTexCoord3sARB;
+extern PFNGLMULTITEXCOORD3SVARBPROC blMultiTexCoord3svARB;
+extern PFNGLMULTITEXCOORD4DARBPROC blMultiTexCoord4dARB;
+extern PFNGLMULTITEXCOORD4DVARBPROC blMultiTexCoord4dvARB;
+extern PFNGLMULTITEXCOORD4FARBPROC blMultiTexCoord4fARB;
+extern PFNGLMULTITEXCOORD4FVARBPROC blMultiTexCoord4fvARB;
+extern PFNGLMULTITEXCOORD4IARBPROC blMultiTexCoord4iARB;
+extern PFNGLMULTITEXCOORD4IVARBPROC blMultiTexCoord4ivARB;
+extern PFNGLMULTITEXCOORD4SARBPROC blMultiTexCoord4sARB;
+extern PFNGLMULTITEXCOORD4SVARBPROC blMultiTexCoord4svARB;
 #endif
 
 
 #ifdef GL_ARB_shader_objects
-extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
-extern PFNGLGETHANDLEARBPROC glGetHandleARB;
-extern PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
-extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
-extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
-extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
-extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
-extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
-extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
-extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
-extern PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB;
-extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
-extern PFNGLUNIFORM2FARBPROC glUniform2fARB;
-extern PFNGLUNIFORM3FARBPROC glUniform3fARB;
-extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
-extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
-extern PFNGLUNIFORM2IARBPROC glUniform2iARB;
-extern PFNGLUNIFORM3IARBPROC glUniform3iARB;
-extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
-extern PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
-extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
-extern PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
-extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
-extern PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
-extern PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
-extern PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
-extern PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
-extern PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
-extern PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
-extern PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
-extern PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
-extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
-extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
-extern PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB;
-extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
-extern PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB;
-extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
-extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
-extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
+extern PFNGLDELETEOBJECTARBPROC blDeleteObjectARB;
+extern PFNGLGETHANDLEARBPROC blGetHandleARB;
+extern PFNGLDETACHOBJECTARBPROC blDetachObjectARB;
+extern PFNGLCREATESHADEROBJECTARBPROC blCreateShaderObjectARB;
+extern PFNGLSHADERSOURCEARBPROC blShaderSourceARB;
+extern PFNGLCOMPILESHADERARBPROC blCompileShaderARB;
+extern PFNGLCREATEPROGRAMOBJECTARBPROC blCreateProgramObjectARB;
+extern PFNGLATTACHOBJECTARBPROC blAttachObjectARB;
+extern PFNGLLINKPROGRAMARBPROC blLinkProgramARB;
+extern PFNGLUSEPROGRAMOBJECTARBPROC blUseProgramObjectARB;
+extern PFNGLVALIDATEPROGRAMARBPROC blValidateProgramARB;
+extern PFNGLUNIFORM1FARBPROC blUniform1fARB;
+extern PFNGLUNIFORM2FARBPROC blUniform2fARB;
+extern PFNGLUNIFORM3FARBPROC blUniform3fARB;
+extern PFNGLUNIFORM4FARBPROC blUniform4fARB;
+extern PFNGLUNIFORM1IARBPROC blUniform1iARB;
+extern PFNGLUNIFORM2IARBPROC blUniform2iARB;
+extern PFNGLUNIFORM3IARBPROC blUniform3iARB;
+extern PFNGLUNIFORM4IARBPROC blUniform4iARB;
+extern PFNGLUNIFORM1FVARBPROC blUniform1fvARB;
+extern PFNGLUNIFORM2FVARBPROC blUniform2fvARB;
+extern PFNGLUNIFORM3FVARBPROC blUniform3fvARB;
+extern PFNGLUNIFORM4FVARBPROC blUniform4fvARB;
+extern PFNGLUNIFORM1IVARBPROC blUniform1ivARB;
+extern PFNGLUNIFORM2IVARBPROC blUniform2ivARB;
+extern PFNGLUNIFORM3IVARBPROC blUniform3ivARB;
+extern PFNGLUNIFORM4IVARBPROC blUniform4ivARB;
+extern PFNGLUNIFORMMATRIX2FVARBPROC blUniformMatrix2fvARB;
+extern PFNGLUNIFORMMATRIX3FVARBPROC blUniformMatrix3fvARB;
+extern PFNGLUNIFORMMATRIX4FVARBPROC blUniformMatrix4fvARB;
+extern PFNGLGETOBJECTPARAMETERFVARBPROC blGetObjectParameterfvARB;
+extern PFNGLGETOBJECTPARAMETERIVARBPROC blGetObjectParameterivARB;
+extern PFNGLGETINFOLOGARBPROC blGetInfoLogARB;
+extern PFNGLGETATTACHEDOBJECTSARBPROC blGetAttachedObjectsARB;
+extern PFNGLGETUNIFORMLOCATIONARBPROC blGetUniformLocationARB;
+extern PFNGLGETACTIVEUNIFORMARBPROC blGetActiveUniformARB;
+extern PFNGLGETUNIFORMFVARBPROC blGetUniformfvARB;
+extern PFNGLGETUNIFORMIVARBPROC blGetUniformivARB;
+extern PFNGLGETSHADERSOURCEARBPROC blGetShaderSourceARB;
 #endif
 
 #ifdef GL_ARB_vertex_shader
-extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
-extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
-extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
+extern PFNGLBINDATTRIBLOCATIONARBPROC blBindAttribLocationARB;
+extern PFNGLGETACTIVEATTRIBARBPROC blGetActiveAttribARB;
+extern PFNGLGETATTRIBLOCATIONARBPROC blGetAttribLocationARB;
 #endif
 
 } /* namespace bgl */
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 7a140fd0f7e1855dc181150b6eb196d95878e447..38dfb7836b2efd5be2e288cb8d4aba484f95fb64 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -41,6 +41,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #include <OpenGL/glu.h>
 #else
@@ -1265,10 +1266,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1281,10 +1282,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1296,10 +1297,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1311,10 +1312,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1336,10 +1337,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1352,10 +1353,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1368,10 +1369,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1385,10 +1386,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1416,10 +1417,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1432,10 +1433,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1448,10 +1449,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1471,10 +1472,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 
@@ -1488,10 +1489,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1504,10 +1505,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti(
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1620,10 +1621,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1638,10 +1639,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1656,10 +1657,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1674,10 +1675,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1721,10 +1722,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1740,10 +1741,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1759,10 +1760,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						
@@ -1777,10 +1778,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1824,10 +1825,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1840,10 +1841,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1856,10 +1857,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1896,10 +1897,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1913,10 +1914,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
@@ -1930,10 +1931,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesMulti_Ex(const vecVertexArray & vertex
 							if( vertexarray[(indexarray[vindex])].getFlag() & TV_2NDUV &&
 								vertexarray[(indexarray[vindex])].getUnit() == unit ) 
 							{
-								bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
+								bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV2());
 								continue;
 							}
-							bgl::glMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
+							bgl::blMultiTexCoord2fvARB(GL_TEXTURE0_ARB+unit, vertexarray[(indexarray[vindex])].getUV1());
 						}
 						// ------------------------------
 						glVertex3fv(vertexarray[(indexarray[vindex])].getLocalXYZ());
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
index 77beed5ead12aabdc3b2711541bd254738d7a528..b6d8e74c2d5f8bf0b13c6a64e96632587980819a 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
@@ -38,6 +38,7 @@
 #include <windows.h>
 #endif // WIN32
 #ifdef __APPLE__
+#define GL_GLEXT_LEGACY 1
 #include <OpenGL/gl.h>
 #else
 #include <GL/gl.h>
diff --git a/source/nan_compile.mk b/source/nan_compile.mk
index 5bee16b5dfdacb75e707df4d28b20a58cd9df706..241d1946738892b34808b20b724115e1a5369eed 100644
--- a/source/nan_compile.mk
+++ b/source/nan_compile.mk
@@ -80,7 +80,7 @@ endif
 ifeq ($(OS),darwin)
     CC	= gcc
     CCC	= g++
-    CFLAGS	+= -pipe -fPIC -ffast-math -mcpu=7450 -mtune=7450
+    CFLAGS	+= -pipe -fPIC -ffast-math -mcpu=7450 -mtune=G5
     CCFLAGS	+= -pipe -fPIC 
 #    REL_CFLAGS	+= -O2
 #   REL_CCFLAGS	+= -O2
diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk
index 6f6d9c337662e163ac4e63fc16150f3d1de8ed4a..c7822683521d7ded6607b90a6c898a45341dce49 100644
--- a/source/nan_definitions.mk
+++ b/source/nan_definitions.mk
@@ -46,9 +46,6 @@ all debug::
 
   # First generic defaults for all platforms which should be constant.
   # Note: ?= lets these defaults be overruled by environment variables,
-    export NAN_NO_KETSJI=true
-    export NAN_JUST_BLENDERDYNAMIC=true
-    export NAN_NO_OPENAL=true
     export SRCHOME ?= $(NANBLENDERHOME)/source
     export CONFIG_GUESS := $(shell ${SRCHOME}/tools/guess/guessconfig)
     export OS := $(shell echo ${CONFIG_GUESS} | sed -e 's/-.*//')
@@ -189,6 +186,9 @@ endif
     export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include
     export NAN_SDLLIBS ?= $(NAN_SDL)/lib/libSDL.a -framework Cocoa -framework IOKit
 
+    export NAN_NO_KETSJI=false
+
+
     # Uncomment the following line to use Mozilla inplace of netscape
     # CPPFLAGS +=-DMOZ_NOT_NET
     # Location of MOZILLA/Netscape header files...